B.A.T.M.A.N. Advanced
B.A.T.M.A.N. Advanced (Better Approach to Mobile Adhoc Networking, oft auch als batman-adv referenziert) ist eine Implementierung des B.A.T.M.A.N.-Routing-Protokoll in Form eines Linux Kernel Moduls und befindet sich auf Schicht 2 des OSI-Schichtenmodells. Es wird aktuell von der Freifunk-Community entwickelt und soll OLSR ablösen. Im Gegensatz zu B.A.T.M.A.N., welches im Benutzer-Modus agiert (wie OLSR auch), arbeitet batman-adv im Kernel-Modus.
OSI-Schicht 2?
Die meisten anderen drahtlosen Routing-Protokoll-Implementierungen (z. B. OLSR, batmand) arbeiten auf der OSI-Schicht 3. Die Knoten tauschen die Routing-Informationen mittels UDP-Paketen untereinander aus und Routen die Nutzdaten nach einer Manipulation der Kernel-Routing-Tabelle. Batman-adv funktioniert ausschließlich auf der OSI-Schicht 2 – nicht nur die Routing-Informationen, die über rohe Ethernet Frames transportiert werden, sondern auch der Datenverkehr wird direkt von batman-adv behandelt. Es kapselt und leitet den gesamten Datenverkehr, bis es sein Ziel erreicht; es emuliert quasi ein virtuelles Netzwerk-Switch für alle beteiligten Knoten. Die Knoten haben deshalb den Eindruck direkt miteinander verbunden zu sein und sind sich der Netzwerk-Topologie überhaupt nicht bewusst und von ihrer möglichen, spontanen Änderung unbeeinflusst.
Dieses Design hat einige interessante Eigenschaften:
- Netzwerk-Layer-Agnostizismus: man kann ein beliebiges Protokoll über batman-adv nutzen: IPv4, IPv6, DHCP, IPX, NetBEUI, …
- Knoten benötigen in einem Mesh-Netz keine eigene IP-Adresse
- einfache Integration von Nicht-Mesh- bzw. Mobilen-Clients (es ist kein manuelles Hantieren der HNA erforderlich)
- Roaming der Nicht-Mesh-Clients
- Optimierung des Datenflusses durch die Knoten (z. B. Alternieren der Schnittstellen, Multicast, Vorwärtsfehlerkorrektur, usw.)
- es laufen auch Protokolle, die auf Broadcast/Multicast basieren, problemlos für Mesh- und Nicht-Mesh-Clients (Windows neighborhood, mDNS, Streaming, usw.)
Ein Kernel-Modul?
Ein Layer-2-Routing-Protokoll muss auch den Datenverkehr handhaben, weil es in der Regel nicht möglich ist Ethernet-Pakete zu routen oder weiter zu leiten. Die Paketverarbeitung im Benutzer-Modus (Userland) benötigt sehr viele CPU-Zyklen, weil für jedes Paket read()- und write()-Befehle vom und zum Kernel benötigt werden. Dies verringert die Bandbreite, insbesondere auf Low-End-Geräten. Deshalb befindet sich batman-adv direkt im Kernel, entweder als Kernel Modul oder direkt hinein kompiliert. Der Paketverarbeitungsaufwand ist dadurch vernachlässigbar, sogar unter hoher Belastung.
batctl?
Um noch ein praktisches Tool zum Konfigurieren und Debuggen des batman-adv-Kernel-Moduls wurde batctl entwickelt. Es bietet eine komfortable Schnittstelle zu allen Moduleinstellungen sowie zu Statusinformationen. Es enthält auch eine Layer-2-Version von Ping, Traceroute und tcpdump, da das virtuelle Netzwerk-Switch vollständig transparent für alle Protokolle über der zweiten OSI-Schicht ist.
B.A.T.M.A.N. Advanced Update
Das Paket kmod-batman-adv ist abhängig vom Kernel. Nicht nur die Kernelversion muss übereinstimmen, das Paket muss auch binärkompatibel zum Kernel sein. Man kann deshalb leider nicht so einfach im OpenWrts Trunk-Downloadordner vorbei schauen und sich das dort befindende Paket installieren. Entweder muss man selbst mit einem SDK das Paket kompilieren (Kernel Module sind im SDK leider nicht trivial) oder eine komplett neue Firmware installieren.
Firmware des Wuppertaler Firmwarebäckers
Die neueren B.A.T.M.A.N.-adv-Versionen befinden sich hier. Dabei ist darauf zu achten, dass man ein zum Kernel passendes Paket auswählt („uname -r“ verrät die Kernelversion des Routers, 2012.3.0-1 steht als Beispiel für die B.A.T.M.A.N.-Version). Dieses Paket kann man dann
- entweder direkt vom Knoten aus herunterladen
cd /tmp wget http://firmware.freifunk-wuppertal.net/pakete/backports/kmod-batman-adv_3.2.13+2012.3.0-1_ar71xx.ipk
- oder auf den Knoten mittels SCP übertragen
scp kmod-batman-adv_3.2.13+2012.3.0-1_ar71xx.ipk root@[fda0:747e:ab29:e1ba:ffff:mac:des:knotens]:/tmp
Nun prüft man die MD5,
cd /tmp md5sum kmod-batman-adv_3.2.13+2012.3.0-1_ar71xx.ipk
führt das Update durch,
opkg install /tmp/kmod-batman-adv_3.2.13+2012.3.0-1_ar71xx.ipk
und aktualisiert die Konfiguration, die vom Paket überschrieben wurde.
uci set batman-adv.bat0.interfaces="wlan0-1" uci set batman-adv.bat0.bridge_loop_avoidance=1 uci commit batman-adv
Anschließend kann man noch den Banner aktualisieren, dies ist aber nur noch Kosmetik.
sed -e "s/- B.A.T.M.A.N.-adv.*/- B.A.T.M.A.N.-adv 2012.3.0/g" -i /etc/banner
Der Router muss danach neu gestartet werden.
reboot & exit