| Both sides previous revision Previous revision Next revision | Previous revision Next revisionBoth sides next revision |
| docs:guide-user:network:wifi:mesh:batman [2021/07/30 00:10] – wiki link vgaetera | docs:guide-user:network:wifi:mesh:batman [2022/01/02 15:10] – [Installation] plural lastedit |
|---|
| opkg install batctl | opkg install batctl |
| </code> | </code> |
| To enable use of 802.11s mesh | :!: if ''batctl'' isn't available, install ''batctl-default''. \\ \\ |
| | To enable use of 802.11s mesh: |
| <code> | <code> |
| | # Remove |
| opkg remove wpad-basic | opkg remove wpad-basic |
| | opkg remove wpad-basic-wolfssl |
| | |
| | # Install |
| opkg install wpad-mesh-openssl # or wpad-mesh-wolfssl | opkg install wpad-mesh-openssl # or wpad-mesh-wolfssl |
| </code> | </code> |
| |
| If building/assembling your own image, you will need to remove the default ''wpad-basic'' as it conflicts with ''wpad-mesh=*''. | If building/assembling your own image, you will need to remove the default ''wpad-basic'' as it conflicts with ''wpad-mesh-*''. |
| | |
| | [[https://github.com/openwrt/openwrt/commit/49cc712b44c76e99bfb716c06700817692975e05|As of September 2019]], ''wpad-openssl'' or ''wpad-wolfssl'' are //**also**// sufficient for 802.11s use and are the **full version** of ''wpad''. |
| | |
| | **Notes:** |
| | - ''wpad-mesh-openssl'' and ''wpad-mesh-wolfssl'' are ''wpad-basic'' (trimmed ''wpad'') with support for ''802.11s'' (mesh). |
| | - ''wpad-openssl'' and ''wpad-wolfssl'' are the **full version** of ''wpad'', they support ''802.11k'', ''802.11v'' and ''802.11s'' (mesh). |
| | - The **full version** of ''wpad'' means that nothing was trimmed and ''wpad-basic'' is the trimmed version of ''wpad'', it was trimmed to reduce its size and can be installed on routers with **low memory**. |
| |
| ''wpad'' (full) is //**not**// sufficient for 802.11s use. | |
| |
| ===== Configuration ===== | ===== Configuration ===== |
| </code> | </code> |
| |
| | ==== Bridging with DSA ==== |
| | Since OpenWrt version 21.02.0, DSA architecture is used for the switch instead of ''swconfig''. |
| | \\ |
| | For any of the above examples to work, you must first make the Bridge and VLANs in ''/etc/config/network'' and bridge the Batman VLANs. |
| | \\ |
| | |
| | <WRAP round info 60%> |
| | You can change what's bridged, you can refer to [[playground:richb:dsa-mini-tutorial|DSA Mini-Tutorial]] AND [[docs:guide-user:network:dsa:converting-to-dsa|Converting to DSA]] |
| | </WRAP> |
| | |
| | === Bridging all LAN ports and Batman VLAN interfaces (later to be separated by VLANs) === |
| | <code> |
| | config device |
| | option name 'br-lan' |
| | option type 'bridge' |
| | list ports 'lan1' |
| | list ports 'lan2' |
| | list ports 'lan3' |
| | list ports 'lan4' |
| | list ports 'bat0.1' # Batman VLAN 1 |
| | list ports 'bat0.2' # Batman VLAN 2 |
| | option stp '1' |
| | option igmp_snooping '1' |
| | option ipv6 '0' |
| | option mtu '2304' |
| | </code> |
| | |
| | === Driver-level VLANs === |
| | <code> |
| | # VLAN 1, br-lan.1, the VLAN with all ports bridged together (you can change what to bridge) |
| | config bridge-vlan |
| | option device 'br-lan' |
| | option vlan '1' |
| | list ports 'lan1' |
| | list ports 'lan2' |
| | list ports 'lan3' |
| | list ports 'lan4' |
| | list ports 'bat0.1' |
| | |
| | # VLAN 2, br-lan.2, using only Batman's 2nd VLAN, separated from the rest |
| | config bridge-vlan |
| | option device 'br-lan' |
| | option vlan '2' |
| | list ports 'bat0.2' |
| | </code> |
| | |
| | === Network interfaces === |
| | <code> |
| | # LAN with VLAN 1, and bridged(as stated above) with Batman VLAN 1 and all 4 Ethernet ports |
| | config interface 'lan' |
| | option device 'br-lan.1' # VLAN number 1 |
| | option proto 'static' |
| | option ipaddr '192.168.1.254' |
| | option netmask '255.255.255.0' |
| | option force_link 'yes' |
| | |
| | # Guest network in VLAN 2, and bridged(as stated above) with Batman VLAN 2 |
| | config interface 'guest' |
| | option device 'br-lan.2' |
| | option proto 'static' |
| | option ipaddr '192.168.2.254' |
| | option netmask '255.255.255.0' |
| | option force_link 'yes' |
| | </code> |
| | |
| | The 2nd node should disable DHCP and sport a similar setup, the only difference is to use different IPs for the networks (lan: ''192.168.1.254'' and guest: ''192.168.2.254'' should use another IP in that subnet) |
| | |
| | <code> |
| | # LAN with VLAN 1, and bridged(as stated above) with Batman VLAN 1 and all 4 Ethernet ports |
| | config interface 'lan' |
| | option device 'br-lan.1' # VLAN number 1 |
| | option proto 'static' |
| | option ipaddr '192.168.1.100' |
| | option netmask '255.255.255.0' |
| | option force_link 'yes' |
| | |
| | # Guest network in VLAN 2, and bridged(as stated above) with Batman VLAN 2 |
| | config interface 'guest' |
| | option device 'br-lan.2' |
| | option proto 'static' |
| | option ipaddr '192.168.2.100' |
| | option netmask '255.255.255.0' |
| | option force_link 'yes' |
| | </code> |
| ==== (Optional) /etc/bat-hosts ==== | ==== (Optional) /etc/bat-hosts ==== |
| |
| c6:e9:84:ee:ee:ee devel.5g | c6:e9:84:ee:ee:ee devel.5g |
| </code> | </code> |
| | |
| | ==== batman-adv Options for bat0 (the main mesh interface) ==== |
| | |
| | These are options for the main network interface in ''/etc/config/network'' for batman-adv. |
| | |
| | <WRAP round important 60%> |
| | **This section was written using the official batman-adv docs as reference and is subject to change, please read the official documentation if something doesn't work as expected** |
| | </WRAP> |
| | |
| | |
| | ^ Name ^ Type ^ Default ^ Range ^ Description ^ |
| | | ''aggregated_ogms'' | boolean | ''1'' | ''0'', ''1'' | **OGMs** AKA **Originator Messages** are messages used to determine the qualities needed to direct neighbors and spreading this message throughout the whole mesh, aggregating them reduces the number of packets being sent. | |
| | | ''routing_algo'' | string | ''BATMAN_IV'' | ''BATMAN_IV'' or ''BATMAN_V'' | Which routing algorithm to use - more info below but for now use ''BATMAN_IV'' until ''BATMAN_V'' is ready for actual use. | |
| | | ''bonding'' | boolean | ''0'' | ''0'', ''1'' | If some interfaces are similar in quality and speed, it's possible to distribute frames through them using Round Robin which shows a 50% throughput increase, but if the links aren't similar in speed and since it isn't detected by BATMAN_IV, you may actually lose throughput, so it should be done explicitly on known nodes. | |
| | | ''fragmentation'' | boolean | ''1'' | ''0'', ''1'' | Since batman-adv prepends its own headers and some clients aren't aware of that, packets are optimized for 1500 MTU even though 1528 is required, if it isn't possible with some devices fragmentation is used(the algorithm that handles fragmented data). | |
| | | ''gw_mode'' | string | ''off'' | ''off'', ''client'', ''server'' | Gateway mode, if set to ''server'' other nodes are notified of that node's internet connection and **must** be complemented by ''gw_bandwidth'', that notifies the algorithm that server is one of the best paths for internet access. \\ If set to ''client'', the criteria by which batman-adv will choose a gateway(other nodes with ''gw_mode'' set as ''server'') is **required** to be set with ''gw_sel_class''. | |
| | | ''gw_bandwidth'' | string | ''10000/2000'' | ''not specified'' | **(Server)** Set the bandwidth, so ''client'' nodes will know about the gateway's quality stated by ''download/upload'', units can be suffixed with ''mbit'' or ''kbit'' (''10mbit/2mbit''), if you state download but not upload, upload defaults to the value of ''download / 5'', so 100mbit without upload would default to 100 / 5 = 20mbit. | |
| | | ''gw_sel_class'' | integer | **BATMAN_IV** ''20'' \\ **BATMAN_V** ''5000'' | **BATMAN_IV** ''1'', ''256'' \\ **BATMAN_V** ''0'', ''Not specified'' | **(Client)** Set the criteria by which to select a gateway(internet connection) indicated by TQ. \\ With **BATMAN_IV_** set in ''routed_algo'': \\ default: ''20'' (late switch) \\ ''1'' (Fast), prioritize by advertised throughput and link quality, use until gateway disappears. \\ ''2'' (Stable), prioritize by link quality only, use until gateway disappears. \\ ''3'' (Fast Switch), prioritize link quality only, but scan and switch to a better gateway if found. \\ ''XX'' (Late Switch), prioritize link quality only, but scan and switch to a better gateway if found, which is at least ''XX'' TQ better than the currently selected gateway, where XX is between 3-256. \\ With **BATMAN_V** set in ''routed_algo'': \\ default: ''5000'' (Late Switch), 5000 kbit/s throughput. \\ example: ''1500'' (Fast Switch), scan and switch to another gateway only if its throughput is at least 1500 kbit/s faster than the current, throughput is evaluated by determining what's lower: advertised throughput or the maximum bandwidth across the entire path. | |
| | | ''log_level'' | integer | ''0'' | ''0'', ''255'' (8 bit Bitmask) | Standard warning/error messages are sent to the kernel log, but more is possible(depending if compiling with debugging enabled). \\ [0] all debug output disabled (none) \\ [1](BIT 0 set) messages related to routing / flooding / broadcasting (batman), \\ [2](BIT 1 set) messages related to route added / changed / deleted (routes) \\ [4](BIT 2 set) messages related to translation table operations (tt) \\ [8](BIT 3 set) messages related to bridge loop avoidance (bla) \\ [16](BIT 4 set) messages related to arp snooping and distributed arp table (dat) \\ [32](BIT 5 set) messages related to network coding (nc) \\ [64](BIT 6 set) messages related to multicast (mcast) \\ [128](BIT 7 set) messages related to throughput meter (tp) \\ [255](ALL BITS set) Enable all messages \\ **NOTE:** Integer values are form the [[ https://www.kernel.org/doc/html/v5.0/networking/batman-adv.html#logging-debugging | Kernel docs]] and bitfield from [[ https://github.com/open-mesh-mirror/batman-adv/blob/master/net/batman-adv/log.h#L38 | batman-adv source]]| |
| | | ''orig_interval'' | integer | ''1000'' | ''not specified'' | Specified in milliseconds, the interval in which batman-adv floods the network with its protocol information, '1000' as a default means a message per second which allows batman to recognize a route change up to a minute. In a static environment(nodes aren't moving, rare up/down of nodes) you might want to increase the interval value to save bandwidth, inversely, in a highly mobile environment(cars) but remember that will drastically increase traffic. \\ It's recommended to keep the default unless there are problems. | |
| | | ''bridge_loop_avoidance'' | boolean | ''1'' | ''0'', ''1'' | In bridged LAN setups, this should be enabled in order to avoid broadcast loops that can completely flood the entire LAN(this option might need to be compiled), if you don't connect multiple batman-adv hosts to the same ethernet or don't use bridging, you can disable this option. | |
| | | ''distributed_arp_table'' | boolean | ''1'' | ''0'', ''1'' | Mesh-wide ARP table cache, helps non-mesh clients get ARP responses more reliably without much delay(this option might need to be compiled). | |
| | | ''multicast_mode'' | boolean | ''1'' | ''0'', ''1'' | A more efficient, group aware multicast forwarding infrastructure, aiming to reduce unnecessary packet transmissions, if disabled, every multicast traffic will flood every node(broadcast). | |
| | | ''multicast_fanout'' | integer | ''16'' | ''not specified'' | Requires and related to ''multicast_mode'', batman-adv detects potential multicast listeners who are interested in traffic to a given multicast destination address, so no listeners means nothing is transmitted. \\ The default value of ''16'' is the max number of listeners before a classic flooding of all multicast frames is used, if it's equal or under ''16'', batman-adv can use individual unicast transmissions instead - that's the fanout \\ **NOTE:** Classic multicast flooding will still happen if: \\ -- No IGMP/MLD querier \\ -- The packet's destination is an IPv4 multicast \\ -- The IPv6 multicast destination is ''ff02::1''. | |
| | | ''network_coding'' | boolean | ''1'' | ''0'', ''1'' | Combine two packets into a single transmission, which saves air-time but **requires**: \\ -- At least 3 nodes to be effective \\ -- One node must act as a relay which has this option enabled \\ -- Relay must support Promiscuous mode (both receive and send) \\ -- Support MTU value of at least 1546. | |
| | | ''hop_penalty'' | boolean | ''30'' | ''not specified'' | Modify batman_adv's preference for multihop routes vs short routes, the value is applied to the TQ of each forwarded OGM, propagating the cost of an extra hop(packet must be received and re-transmitted), the higher it's the more unlikely other nodes will choose the current node as an intermediate hop towards any node, otherwise, a lower value will result in longer routes because re-transmissions aren't penalized. | |
| | | ''ap_isolation'' | boolean | ''0'' | ''0'', ''1'' | Standard WiFi APs support AP Isolation, which prevents clients communicating with each other, if the WiFi AP interface is bridged into batman-adv mesh network, it might be desirable to extend this isolation throughout the mesh by enabling this option. | |
| | | ''isolation_mark'' | string | ''0x00000000/0x00000000'' | ''0'', ''1'' | An extension of ''ap_isolation'', it allows the user to decide which client is classified as isolated via firewall rules, increasing the flexibility of the isolation, batman-adv extracts the fwmark the firewall attached to each packet it receives through the soft-interface and decides based on that value if the source client is isolated or not, this value is defined as a ''value/mask'', in the firewall, a simple case is to mark all the packets coming with a fwmark using ''tc'', you then set the fwmark you've set with ''tc'' in this option for it to work. | |
| | |
| | :!: Options that might need to be compiled are options the official B.A.T.M.A.N docs state which require compiling, OpenWrt packages batman-adv so you might not need to and it depends on what's actually compiled. |
| | |
| | <WRAP round info 60%> |
| | **BATMAN_IV** uses OGM to determine link quality and spread the message in the mesh, there are drawbacks, wireless interfaces suffer packet loss over time, which ends with more overhead(due to the transmission protocol), also it would be better to detect link quality changes faster than spreading it through the mesh first(far-end of mesh doesn't care anyways) and it might be possible to avoid OGM for certain tasks. |
| | |
| | **BATMAN_V** apparently has some problems on-site currently, but it's the better algorithm, since ELP(Echo Location Protocol) was introduced, which is a packet that doesn't forward/re-broadcast in the mesh used for neighbor discovery, besides, OGM v2 is used to further determine the overall best transmit paths and that task separation is what leads to reduced overhead, neighbor discovery can be individual and multiple interface handling can be reduced and finally BATMAN_V uses throughput as a metric *instead* of a packet loos metric like in BATMAN_IV. |
| | </WRAP> |
| | |
| | <WRAP round info 60%> |
| | **TQ** - **Transmit Quality** algorithm (Batman IV), used to define a better path by finding both the receiving **and** transmitting quality of a node, where transmit speed is prioritized, TQ is calculated by propagating an OGM message and finding the best paths, the value of TQ starts as the max 255(count from 255 to 0) and through each node's TQ is re-calculated and transmitted to the next node etc.. |
| | </WRAP> |
| |
| ====== In Operation ====== | ====== In Operation ====== |