Mesh/BATMAN-adv
The batman-adv is an implementation of the BATMAN routing protocol. The protocol is configured with a file, but these settings can be changed with batctl. The advantage of routing using batman-adv, rather than cjdns, is its a layer two protocol, which can send all types of layers three packets (udp, tcp/ip, etc). The protocol "forwards all traffic until it reaches the destination, hence emulating a virtual network switch of all nodes participating. Therefore all nodes appear to be link local and are unaware of the network's topology as well as unaffected by any network changes.[1]"
Configure batctl
These are the main functions that change the configuration or adds a monitor:
- alfred-gpsd - a used to distribute GPS location information about your batman-adv mesh network. This information could be, for example, combined with vis to visualize your mesh topology with true geographic layout. The server fetches the information from locals nodes serving data from gpsd.
- batadv-vis - its a server that saves local client tables and distributes these tables via alfred. These tables can be used to create network topology maps.
- bonding - when there's multiple interfaces with similar throughput, bonding can be used to increase frame throughput. It uses round robin load balancing to evenly distribute frames.
- dat - a distributed arp table is a Distributed Hash Table aimed to store ARP entries and to allow nodes to perform fast lookup operations. All the operations in the DHT (get and store) are performed on a set of nodes computed by means of a distributed hash function which input value is an IPv4 address.
- fragmentation - a driver that sets fragmentation, which sends frames in fragmented frames when a wireless interfaces can't send/receive packets more than 1500 bytes. The protocol adds its own header to existing frames, which makes the packets have 1528 bytes.
- gw_mode - a server is an internet gateway, a client sends and receives traffic to and from the gateway
- traceroute - tries to find the bat-host name if the given parameter was not a MAC address. It can also try to guess the MAC address using an IPv4/IPv6 address or a hostname when the IPv4/IPv6 address was configured on top of the batman-adv interface of the destination device and both source and destination devices are in the same IP subnet.
Wireless configuration
This configuration is valid for OpenWRT 12.09 (Attitude Adjustment), which uses BATMAN 2012.4.0. In newer versions, the version of BATMAN used is 2013.0.0 and the configuration of BATMAN slightly differs.
In /etc/config/wireless:
config wifi-device 'radio0' option type 'mac80211' option hwmode '11g' option channel '3' # You may want another channel option disabled '0' option phy 'phy0' # the interface where non-mesh nodes connect config wifi-iface option device 'radio0' option ifname 'ap0' option encryption 'none' option network 'lan' option mode 'ap' option ssid 'sudomesh' # You should change the ssid to be unique for dev purposes # the mesh interface config wifi-iface option device 'radio0' option ifname 'adhoc0' option encryption 'none' option network 'mesh' option mode 'adhoc' option bssid 'CA:FE:C0:DE:F0:0D' # You should change this to be unique for development purposes, but for meshing this should be the same for all routers on the mesh option ssid 'sudomesh-backchannel' # You should change the ssid to be unique for development purposes, but for meshing this should be the same for all routers on the mesh
Write some of this stuff down for reference later! You might need it!
Network configuration
In /etc/config/network:
config interface 'loopback' option ifname 'lo' option proto 'static' option ipaddr '127.0.0.1' option netmask '255.0.0.0' # set up ethernet bridging between eth0 and bat0 # this means that packets can move between the ethernet port # and the wifi mesh config interface 'lan' option type 'bridge' option proto 'static' option ipaddr '10.42.10.11' # this should be a unique IP option netmask '255.255.0.0' option dns '208.67.222.222' option gateway '192.168.1.1' # an internet gateway, not sure how to deal with multiple gateways yet option ifname 'eth0 bat0' # the mesh interface config interface 'mesh' option ifname 'adhoc0' option proto 'none' option mtu '1528'
BATMAN configuration
In /etc/config/batman-adv:
config mesh 'bat0' option interfaces 'adhoc0' # the interface for which to enable batman0 option 'aggregated_ogms' # no idea what this means option 'ap_isolation' # no idea what this means
System configuration
In /etc/config/system you can set hostname and timezone. This is not strictly necessary for BATMAN to work, but it should be set correctly. The below timezone is correct for the pacific U.S. timezone. The naming convention for hostnames is: <router-model-name>-<some-unique-name-you-choose>
config system option hostname tl-wr703n-foo option timezone PST8PDT,M3.2.0,M11.1.0
You may also have to turn off dnsmasq. (someone else can chime in if this contradicts their working knowledge)
/etc/init.d/dnsmasq disable
Testing
You should see the 'sudomesh' and 'sudomesh-backchannel' wifi interfaces when running `sudo iwlist wlan0 scan`