Batman-Test: Unterschied zwischen den Versionen

Aus Weimarnetz Wiki
Zur Navigation springen Zur Suche springen
(+batman howto)
 
(8 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 +
[[Kategorie:Howto]]
 
===BATMAN fliegt durchs Weimarnetz===
 
===BATMAN fliegt durchs Weimarnetz===
 
*BATMAN ist ein neues, revolutionaeres ("ja, das sagen 'se alle...") Routingprotokoll, welches OLSR vielleicht mal abloesen wird
 
*BATMAN ist ein neues, revolutionaeres ("ja, das sagen 'se alle...") Routingprotokoll, welches OLSR vielleicht mal abloesen wird
*Am 10 Juli 2006 um 12 Uhr wurde BATMAN auf allen - ca. 100 - Routern im Weimarnetz aktiviert.  
+
*Am 10 Juli 2006 um 12 Uhr wurde BATMAN auf allen - ca. 100 - Routern im Weimarnetz aktiviert.
 +
*'''Deaktiviert:''' Aufgrund von uebermaessigem CPU-Verbrauch, wurde BATMAN in den fruehen Morgenstunden wieder deaktiviert. Siehe [[Batman-Test-Analyse]]
 
*Es laeuft auf einem Aliasinterface: 103.63.knotennummer.1 / wifi
 
*Es laeuft auf einem Aliasinterface: 103.63.knotennummer.1 / wifi
 
*Ihr koennt in der Routentabelle mit <tt>ip route|grep 103.63</tt> sehen, wieviel Routen schon existieren
 
*Ihr koennt in der Routentabelle mit <tt>ip route|grep 103.63</tt> sehen, wieviel Routen schon existieren
 
*Version: Batman2-v0.06 - danke an Elektra dafuer! [[Benutzer:Fries43|fries43]] 10:51, 10. Jul 2006 (CEST)
 
*Version: Batman2-v0.06 - danke an Elektra dafuer! [[Benutzer:Fries43|fries43]] 10:51, 10. Jul 2006 (CEST)
*'''Livedaten:''' http://mmlxvi.dyndns.org:8082/cgi-bin-batman
 
<pre>
 
 
Mem: 12736K used, 1644K free, 0K shrd, 972K buff, 4156K cached
 
Load average: 1.58, 1.36, 1.30    (State: S=sleeping R=running, W=waiting)
 
 
  PID USER    STATUS  RSS  PPID %CPU %MEM COMMAND
 
4978 root    R        272    1 66.0  1.8 batman
 
11204 root    R        816    1  9.5  5.6 olsrd
 
---
 
Mem: 12488K used, 1892K free, 0K shrd, 972K buff, 4156K cached
 
Load average: 1.40, 1.42, 1.34    (State: S=sleeping R=running, W=waiting)
 
 
  PID USER    STATUS  RSS  PPID %CPU %MEM COMMAND
 
4978 root    R        272    1 88.7  1.8 batman
 
11204 root    S        816    1  5.7  5.6 olsrd
 
 
Mem: 12492K used, 1888K free, 0K shrd, 972K buff, 4156K cached
 
Load average: 1.52, 1.44, 1.34    (State: S=sleeping R=running, W=waiting)
 
 
  PID USER    STATUS  RSS  PPID %CPU %MEM COMMAND
 
4978 root    R        272    1 85.4  1.8 batman
 
11204 root    S        816    1  6.0  5.6 olsrd
 
-----------------------------
 
root@Funkstelle:~# ip route|grep 103.63|wc -l
 
    75
 
root@Funkstelle:~# traceroute -n 103.63.1.1
 
traceroute to 103.63.1.1 (103.63.1.1), 30 hops max, 40 byte packets
 
1  103.63.45.1  6.214 ms  5.317 ms  12.526 ms
 
2  103.63.102.1  6.39 ms  5.917 ms  67.68 ms
 
3  * * 103.63.127.1  1021.61 ms
 
4  103.63.1.1  24.004 ms  52.035 ms  28.882 ms
 
root@Funkstelle:~# traceroute -n 10.63.1.1
 
traceroute to 10.63.1.1 (10.63.1.1), 30 hops max, 40 byte packets
 
1  10.63.45.1  60.142 ms  23.628 ms  3.703 ms
 
2  10.63.73.1  1012.25 ms  11.933 ms  5.232 ms
 
3  10.63.2.1  13.746 ms  23.879 ms  18.364 ms
 
4  10.63.1.1  38.426 ms  15.974 ms  8.243 ms
 
root@Funkstelle:~# traceroute -n 103.63.1.1
 
traceroute to 103.63.1.1 (103.63.1.1), 30 hops max, 40 byte packets
 
1  103.63.45.1  7.517 ms  3.915 ms  5.404 ms
 
2  103.63.122.1  19.315 ms  8.774 ms  20.07 ms
 
3  103.63.7.1  12.283 ms  10.414 ms  7.402 ms
 
4  * 103.63.133.1  27.425 ms  9.193 ms
 
5  103.63.102.1  12.349 ms  9.449 ms  17.481 ms
 
6  * 103.63.1.1  1047.55 ms *
 
root@Funkstelle:~# traceroute -n 10.63.1.1
 
traceroute to 10.63.1.1 (10.63.1.1), 30 hops max, 40 byte packets
 
1  10.63.45.1  3.621 ms  35.847 ms  3.577 ms
 
2  10.63.73.1  10.154 ms  5.161 ms  3.616 ms
 
3  10.63.2.1  6.809 ms  10.416 ms  5.602 ms
 
4  10.63.1.1  11.154 ms  12.849 ms  7.773 ms
 
root@Funkstelle:~# traceroute -n 10.63.1.1
 
traceroute to 10.63.1.1 (10.63.1.1), 30 hops max, 40 byte packets
 
1  10.63.45.1  27.182 ms  3.601 ms  27.269 ms
 
2  10.63.73.1  4.86 ms  4.534 ms  3.679 ms
 
3  10.63.2.1  28.088 ms  20.091 ms  6.367 ms
 
4  10.63.1.1  46.744 ms  28.787 ms  11.837 ms
 
root@Funkstelle:~# traceroute -n 103.63.1.1
 
traceroute to 103.63.1.1 (103.63.1.1), 30 hops max, 40 byte packets
 
1  103.63.45.1  2.091 ms  11.624 ms  4.307 ms
 
2  103.63.102.1  39.358 ms  3.794 ms  6.919 ms
 
3  103.63.127.1  1018.27 ms  21.048 ms  13.519 ms
 
4  103.63.1.1  37.457 ms  48.402 ms  40.2 ms
 
root@Funkstelle:~# wget -O /dev/null http://10.63.1.1/cgi-bin-dev-zero.bin
 
Connecting to 10.63.1.1[10.63.1.1]:80
 
null                100% |*******************************************************************************************************************|  311 KB    --:-- ETA
 
root@Funkstelle:~# wget -O /dev/null http://103.63.1.1/cgi-bin-dev-zero.bin
 
Connecting to 103.63.1.1[103.63.1.1]:80
 
null                100% |*******************************************************************************************************************| 76288      --:-- ETA
 
root@Funkstelle:~# wget -O /dev/null http://103.63.1.1/cgi-bin-dev-zero.bin
 
Connecting to 103.63.1.1[103.63.1.1]:80
 
null                100% |*******************************************************************************************************************|  182 KB    --:-- ETA
 
 
 
----------------------------
 
root@Funkstelle:~# traceroute -n 10.63.92.1
 
traceroute to 10.63.92.1 (10.63.92.1), 30 hops max, 40 byte packets
 
1  10.63.45.1  2.875 ms  37.927 ms  5.034 ms
 
2  10.63.63.1  17.53 ms  4.025 ms  3.28 ms
 
3  10.63.104.1  55.538 ms  9.711 ms  19.583 ms
 
4  10.63.54.1  37.431 ms  37.222 ms  37.03 ms
 
5  * 10.63.166.1  78.208 ms  137.316 ms
 
6  10.63.112.1  51.618 ms  77.776 ms  34.922 ms
 
7  10.63.87.1  53.513 ms  36.661 ms *
 
8  * 10.63.92.1  104.067 ms  52.07 ms
 
root@Funkstelle:~# traceroute -n 103.63.92.1
 
traceroute to 103.63.92.1 (103.63.92.1), 30 hops max, 40 byte packets
 
1  103.63.63.1  38.759 ms  18.184 ms  10.165 ms
 
2  103.63.54.1  11.686 ms  11.045 ms  17.975 ms
 
3  103.63.166.1  120.896 ms  9.29 ms *
 
4  103.63.112.1  43.777 ms  41.922 ms  118.468 ms
 
5  * * *
 
6  * * *
 
7  * * *
 
8  * 103.63.92.1  80.162 ms *
 
root@Funkstelle:~# traceroute -n 103.63.92.1
 
traceroute to 103.63.92.1 (103.63.92.1), 30 hops max, 40 byte packets
 
1  103.63.33.1  4.278 ms  12.795 ms  39.485 ms
 
2  103.63.40.1  38.954 ms  18.434 ms  65.975 ms
 
3  * * *
 
4  103.63.42.1  1000.84 ms !H *  1000.79 ms !H
 
root@Funkstelle:~# traceroute -n 103.63.92.1
 
traceroute to 103.63.92.1 (103.63.92.1), 30 hops max, 40 byte packets
 
1  103.63.45.1  5.442 ms  49.461 ms  11.228 ms
 
2  103.63.133.1  10.313 ms  24.904 ms  6.536 ms
 
3  * 103.63.133.1  1020.31 ms !H 103.63.62.1  54.698 ms
 
4  * 103.63.62.1  1022.26 ms !H 103.63.103.1  42.929 ms
 
5  103.63.63.1  10.927 ms  101.785 ms  33.454 ms
 
6  103.63.45.1  42.855 ms  34.929 ms  20.144 ms
 
7  103.63.133.1  92.322 ms  53.528 ms  113.98 ms
 
8  103.63.62.1  55.878 ms  61.55 ms  64.636 ms
 
9  103.63.103.1  40.671 ms  103.598 ms  31.805 ms
 
10  103.63.63.1  46.25 ms 103.63.103.1  51.867 ms  41.451 ms
 
11  103.63.63.1  56.809 ms  44.751 ms  20.711 ms
 
12  103.63.103.1  76.681 ms * *
 
13  103.63.92.1  242.863 ms *  169.424 ms
 
root@Funkstelle:~# traceroute -n 10.63.92.1
 
traceroute to 10.63.92.1 (10.63.92.1), 30 hops max, 40 byte packets
 
1  10.63.45.1  82.036 ms  4.395 ms  4.696 ms
 
2  10.63.63.1  30.22 ms  5.088 ms  8.759 ms
 
3  10.63.104.1  33.002 ms  9.123 ms  10.486 ms
 
4  10.63.54.1  42.352 ms  46.687 ms  59.588 ms
 
5  * 10.63.153.1  480.068 ms  262.304 ms
 
6  10.63.8.1  24.539 ms  22.144 ms  59.277 ms
 
7  * 10.63.166.1  47.14 ms  28.965 ms
 
8  10.63.112.1  46.237 ms  44.08 ms  33.692 ms
 
9  10.63.87.1  62.693 ms  40.267 ms  39.263 ms
 
10  10.63.92.1  66.989 ms  46.013 ms  65.221 ms
 
 
 
</pre>
 
 
 
 
 
*Aus der [http://b.a.t.m.a.n.freifunk.net/svn/b.a.t.m.a.n/trunk/LIESMICH Dokumentation] :  
 
*Aus der [http://b.a.t.m.a.n.freifunk.net/svn/b.a.t.m.a.n/trunk/LIESMICH Dokumentation] :  
 
<pre>
 
<pre>
Zeile 273: Zeile 140:
 
das Mesh reisen oder unterwegs irgendwann verloren gehen. Geht ein Broadcast
 
das Mesh reisen oder unterwegs irgendwann verloren gehen. Geht ein Broadcast
 
verloren wird nicht nach dem Verbleib oder einer Neuübetragung gefragt -
 
verloren wird nicht nach dem Verbleib oder einer Neuübetragung gefragt -
anders als bei TCP-Daten, wo bis zu 7 mal die ?bertragung wiederholt wird,
+
anders als bei TCP-Daten, wo bis zu 7 mal die ?bertragung wiederholt wird,
 
wenn eine Bestätigung des Empfängers ausbleibt.
 
wenn eine Bestätigung des Empfängers ausbleibt.
  
Zeile 328: Zeile 195:
  
 
Herrscht Gleichstand an empfangenen Paketen von zwei oder mehreren Nachbarn
 
Herrscht Gleichstand an empfangenen Paketen von zwei oder mehreren Nachbarn
entscheidet die ?te TTL (geringster Hopcount). Herrscht Gleichstand auch
+
entscheidet die grö�?te TTL (geringster Hopcount). Herrscht Gleichstand auch
 
bei der TTL entscheidet wer das letzte eingegangene Orginator-Paket zum
 
bei der TTL entscheidet wer das letzte eingegangene Orginator-Paket zum
 
Zielknoten gebroadcastet hat.
 
Zielknoten gebroadcastet hat.
Zeile 344: Zeile 211:
 
dass Verbindungen unsymmetrisch sein können. Die Annahme ist, dass auf dem
 
dass Verbindungen unsymmetrisch sein können. Die Annahme ist, dass auf dem
 
Pfad auf dem die Pakete von Node A den Node F erreichen auch die beste
 
Pfad auf dem die Pakete von Node A den Node F erreichen auch die beste
?bertragung in die Gegenrichtung möglich ist. Das ist im Fall von
+
?bertragung in die Gegenrichtung möglich ist. Das ist im Fall von
 
unsymmetrischen Links ein Trugschluss. Unsymmetrische Links treten auf wenn
 
unsymmetrischen Links ein Trugschluss. Unsymmetrische Links treten auf wenn
 
ein Router zwar einen anderen hört, aber umgekehrt nicht. Es kann sein, dass
 
ein Router zwar einen anderen hört, aber umgekehrt nicht. Es kann sein, dass
eine perfekte ?bertragung möglich ist - aber nur in eine Richtung. Das
+
eine perfekte ?bertragung möglich ist - aber nur in eine Richtung. Das
 
einfache B.A.T.M.A.N-Verfahren würde hier komplett scheitern. Es muss also
 
einfache B.A.T.M.A.N-Verfahren würde hier komplett scheitern. Es muss also
 
geprüft werden ob Links symmetrisch sind und nur Informationen die von
 
geprüft werden ob Links symmetrisch sind und nur Informationen die von
Zeile 392: Zeile 259:
 
Elektra, Thomas, Axel, Felix  
 
Elektra, Thomas, Axel, Felix  
 
</pre>
 
</pre>
 +
 +
===BATMAN fliegt durchs Weimarnetz - die Zweite===
 +
=was wollen wir?=
 +
* route vergleichen ->trace
 +
** laenge -> trace
 +
** bandbreite der links - werden auch schmalbandige links genutzt? -> infoseite
 +
** packetloss -> floodping
 +
** Wechseln der Routen
 +
* wie schnell fuellt sich die routingtabelle
 +
* cpu auslastung -> infoseite / monitoring
 +
* speicher -> infoseite / monitoring
 +
* Anzahl der Nodes
 +
* Traffic des Protokoll -> codeschnipsel
 +
 +
=wie=
 +
* alle schalten batman ein -> infoseite
 +
* wenige testen
 +
* ein script fuer alle -> matas
 +
* schoen waere die funktionalitaet vom monitoring zu nutzen -> jens
 +
 +
** Ideen: [[Benutzer:Storchi|Storchi]] 16:23, 24. Okt 2006 (CEST) und [[Benutzer:matas|matas]]
 +
* wer macht mit?
 +
** [[Benutzer:matas|matas]]
 +
** [[Benutzer:Storchi|Storchi]] 16:23, 24. Okt 2006 (CEST)
 +
** [[Benutzer:Andi.braeu|Andi.braeu]] 08:37, 25. Okt 2006 (CEST)
 +
** [[Benutzer:MegaDave|MegaDave]] 15:31, 25. Okt 2006 (CEST)
 +
** [[Benutzer:Fries43|fries43]] 00:49, 26. Okt 2006 (CEST)
 +
 +
===Batman installieren===
 +
* der grundsaetzliche Vorgaeng um Batman zu installieren ist im SVN zu finden und schon in die weimarnetzfirmware integriert
 +
** [http://svn.sourceforge.net/viewvc/weimarnetz-fw/trunk/firmware/usr/sbin/cron.weimarnetz.halfhourly.2.batman_starten.sh?revision=27&view=markup batman_starten]
 +
* der grobe vorgang beschreibt sich wie folgt:
 +
** Aliasinterface am dem WLAN anlegen mit
 +
*** gleiche IP wie WLAN bisher nur erstes Oktett veraendern, dann blickt man besser durch
 +
*** Beispiel: normale IP = 104.1.1.1 und BATMAN-IP dann 103.1.1.1, mit:
 +
<pre>
 +
WIFI=$(nvram get wifi_ifname)
 +
IP=$(nvram get lan_ipaddr|awk '{gsub(/104./,"103.");print}')
 +
ip addr add dev $WIFI $IP/8 brd 103.255.255.255 label $WIFI:2
 +
</pre>
 +
** BATMAN starten, wie folgt:
 +
<pre>
 +
batman $WIFI:2 &
 +
</pre>
 +
* nun kann man nach einer weile alle batman-knoten anpingen, oder mit traceroute die wege verfolgen

Aktuelle Version vom 26. Oktober 2006, 13:26 Uhr

BATMAN fliegt durchs Weimarnetz

  • BATMAN ist ein neues, revolutionaeres ("ja, das sagen 'se alle...") Routingprotokoll, welches OLSR vielleicht mal abloesen wird
  • Am 10 Juli 2006 um 12 Uhr wurde BATMAN auf allen - ca. 100 - Routern im Weimarnetz aktiviert.
  • Deaktiviert: Aufgrund von uebermaessigem CPU-Verbrauch, wurde BATMAN in den fruehen Morgenstunden wieder deaktiviert. Siehe Batman-Test-Analyse
  • Es laeuft auf einem Aliasinterface: 103.63.knotennummer.1 / wifi
  • Ihr koennt in der Routentabelle mit ip route|grep 103.63 sehen, wieviel Routen schon existieren
  • Version: Batman2-v0.06 - danke an Elektra dafuer! fries43 10:51, 10. Jul 2006 (CEST)
  • Aus der Dokumentation :
B.A.T.M.A.N-II

BETTER APPROACH TO MOBILE AD-HOC NETWORKING

B.A.T.M.A.N ist eine völlig neue Herangehensweise an Ad-Hoc-Routing, deren
Durchführbarkeit wir mit diesem Code testen wollen. Alle bisherigen uns
bekannten Routingalgorithmen für MANETs (Mobile Ad-Hoc Networks) versuchen
Routen zu berechnen. B.A.T.M.A.N tut etwas völlig anderes. Es berechnet keine
Routen - es spürt das Vorhandensein von Routen auf, und benutzt sie bei
Bedarf. 

B.A.T.M.A.N interessiert sich nicht dafür wie eine Route verläuft die es
benutzt um mit einem anderen Knoten im Mesh-Netzwerk zu kommunizieren.
B.A.T.M.A.N prüft lediglich über welchen direkten Nachbarn ein bestimmter
Netzwerkknoten am besten zu erreichen ist. Wer wissen möchte wie B.A.T.M.A.N
zu einem bestimmten Knoten routet, kann das mit

ping -R <Zieladresse> 

herausfinden. Das geht allerdings leider nicht mit dem in Busybox (Das
'Schweizer Taschenmesser': Multicall Binary für Embedded Linux) integrierten
Ping-Kommando weil diese Option nicht zur Verfügung steht. Hier muss dann

traceroute -n <Zieladresse>

herhalten.


Ein Knoten in einem B.A.T.M.A.N-MANET interessiert sich nur dafür, von der
Existenz aller anderer Knoten zu wissen die er direkt oder über eine
Multi-Hop-Verbindung erreichen kann. Um mit einem indirekten Nachbarn zu
kommunizieren muss B.A.T.M.A.N einen Nachbarn in direkter Funkreichweite
bestimmen dem ein Datenpaket überreicht werden kann, damit dieser es auf dem
günstigsten Weg zu dem Nachbarn in der Ferne routet. Am besten wird der
Vorteil dieser Herangehensweise vielleicht deutlich wenn wir ältere Ansätze
für Routing in MANETs zum Vergleich heranziehen - das sogenannte Source
Routing und das Link State Routing.

Beim Source Routing 'denkt' ein Knoten Y im Meshnetzwerk, dass der beste Weg
Daten an Knoten D zu schicken über die Knoten Q, S, H, W, F, C führt (in
dieser Reihenfolge). Y gibt also an Q den Auftrag die Daten an S zu
schicken. S erhält von Y den Auftrag, die Daten an H zu schicken und so
weiter. Y gibt also den Weg zu D vor.

Einer der älteren Entwürfe für MANET Routing ist DSR - Dynamic Source
Routing. DSR enthält einen Algorithmus der Sourcerouten ermitteln und bei
Bedarf erneuern soll, wenn diese nicht mehr existieren. Der Haken bei der
Sache ist, dass MANETs hochgradig dynamischen Veränderungen unterworfen
sind. In einem MANET gehen nicht nur Datenpakete der Nutzlast verloren,
sondern auch Datenpakete die über die Struktur des Netzes Auskunft geben. Je
weiter das Ziel von Y entfernt ist desto unwahrscheinlicher ist es, dass die
Informationen die Y über die entfernte Netztopologie hat, stimmig sind. So
kann W keinen Link mehr zu F und H haben - die Kette die sich Y ausgedacht
hat ist schon lange zusammengebrochen, und Y erhält die Meldung "Ziel nicht
erreichbar" und fängt immer wieder an einen neuen Pfad zu suchen.

Auch das Link-State-Routing (LSR) versucht Routen zu berechnen die für das
gesamte Netz gültig sind. Glücklicherweise bedeutet das aber kein
Source-Routing. Stattdessen berechnet ein Knoten mit einem
Link-State-Routing-Algorithmus welchen Pfad seine Pakete nehmen müssten und
gibt sie vertrauensvoll dem nächsten Nachbarn, der auf der gedachten Route
an nächster Stelle steht. Dieser Nachbarknoten hat selbständig einen Pfad
berechnet und gibt das Paket wiederum dem nächsten Nachbarn auf dem besten
errechneten Weg zum Ziel. Jeder Netzwerkknoten trifft selbständig die
Entscheidung wie das Paket weitergereicht wird. Das ist ganz gut so, denn je
näher die Knoten dem Ziel sind, desto besser wissen sie über den Zustand der
Route Bescheid. Letztendlich kann aber ein Knoten nur die Entscheidung des
nächsten Sprunges treffen. Um die Entscheidung des nächsten Sprungs zum Ziel
zu treffen betreibt LSR jedoch einen enormen Aufwand - es erfasst die
Topologieinformationen des gesamten Netzes. Zu allen Knoten im Netz erfasst
LSR die Informationen über die vorhandenen Nachbarn und berechnet sämtliche
Routen. Auch hier ist aber die Sicht notwendigerweise unscharf. Die
Unmöglichkeit die Informationen über die gesamte Netztopologie synchron zu
halten kann zu Routing Loops führen, gerade weil LSR sich ein so umfassendes
Bild des Netzes zu machen versucht. Es kann vorkommen das benachbarte Knoten
sich über den Pfad derartig uneins sind, dass zwei oder mehrere Knoten sich ein
Paket gegenseitig hin- und herschicken bis das Paket ungültig wird. Das
geschieht so lange bis sich ihre Routingtabellen schliesslich
synchronisieren. Macht man einen Ping zum Ziel erhält man in der
Zwischenzeit die Rückmeldung, dass die TTL abgelaufen ist.

Der bekannteste Vertreter von LSR ist OLSR von olsr.org. Inzwischen ist OLSR
mit ETX-Erweiterung und Fisheye-Algorithmus sehr brauchbar geworden.
Abgesehen von einigen wenigen Bugs in der Implementierung und dem störenden
Effekt, dass es sehr oft den Internetgateway wechselt, was bei geNATteten
Internetgateways zu Verbindungsabbrüchen führt. Letztendlich fehlen für OLSR
nur noch ein IP-Tunnel-Plugin um sich den Gateway aussuchen zu können und
ein paar Bugfixes.

Schlussendlich stört aber der hohe Rechenaufwand von OLSRD in den CPUs der
kleinen Meshrouter im Berliner Freifunk-Netz. Das Freifunk-MANET hat die
Grenzen des Wachstums mit dem proaktiven OLSR erreicht. Zeit also für etwas
einfacheres und besseres: B.A.T.M.A.N

Von Antoine Saint Exupery (Autor des 'Kleinen Prinz') stammt dieser Satz:

Alles menschliche Tun geht den Weg vom Primitiven über das Komplizierte zum
Einfachen. 


B.A.T.M.A.N ist eine Gruppe von Regeln an die sich ein Router halten muss.

#####################################
# Einfachstes B.A.T.M.A.N-Verfahren #
#	     		      	    #
# 	   B.A.T.M.A.N-I	    #
#####################################


B.A.T.M.A.N verwendet Port 1966 UDP. Dieser Port muss für eingehende und ausgehende
Nachrichten offen sein, also darf eine Firewall B.A.T.M.A.N nicht blockieren.

1.) Broadcasts

B.A.T.M.A.N findet seine Nachbarn und entfernte Netzwerkknoten im Mesh (im
folgenden Nodes genannt) durch Broadcasts die weitergereicht werden. In
einem Broadcast steht die Adresse des Erzeugers drin (im folgenden Orginator
genannt). Weiterhin enthält der Broadcast einen TTL-Wert und eine
Sequenz-Nummer. TTL steht für Time-To-Live. Die TTL ist eine Zahl die
jedesmal um den Wert 1 reduziert wird, wenn ein Datenpaket weitergereicht
wird. Wird der TTL-Wert 0 ist das Paket zu lange (üblicherweise auf
Irrwegen) unterwegs und wird verworfen. Anhand der TTL kann man daher auch
sehen wie oft ein Paket schon weitergereicht wurde. Besonders wichtig für
B.A.T.M.A.N ist die Sequenznummer. Das sind die laufenden Nummern der
Orginator-Nachrichten die ein Orginator aussendet.

Broadcasts werden in einem festgelegten Intervall von jedem Node als
Orginator ausgesendet und von allen anderen Nodes als Relais weitergereicht
(wenn bestimmte Bedingungen erfüllt sind), so dass sie immer weiter durch
das Mesh reisen oder unterwegs irgendwann verloren gehen. Geht ein Broadcast
verloren wird nicht nach dem Verbleib oder einer Neuübetragung gefragt -
anders als bei TCP-Daten, wo bis zu 7 mal die �?bertragung wiederholt wird,
wenn eine Bestätigung des Empfängers ausbleibt.

Nehmen wir an wir haben eine Kette von Mesh-Knoten:

Node A <--> Node B <--> Node C <--> Node D

Nehmen wir weiterhin an, jeder Node kann nur seine unmittelbaren Nachbarn
sehen. Nun sendet Node A eine Orginator-Nachricht. Node B sieht diese und
wiederholt sie. 

Dadurch sieht Node C: Nachricht von Node A, weitergeleitet von Node B,
Sequenz Nummer 0, TTL 49

Node C wiederholt die Nachricht. Also sieht Node D: Nachricht von Node A,
weitergeleitet von Node C, Sequenz Nummer 0, TTL 48

Nun weiss Node D:

Es existiert Node A, den erreiche Ich über zwei Zwischenstationen. Um Node A
zu erreichen müssen die Pakete an Node C gesendet werden. Mehr muss Node D
gar nicht wissen.

Das erste Beispiel ist natürlich sehr einfach gehalten. Was geschieht nun
wenn das Netz so aussieht:


       * ---- Node B ---- Node C ---- *
       |			      |
Node A + ------------ Node D -------- + Node F
       | 		 	      |
       * ------------ Node E -------- *

Die Grafik soll verdeutlichen, dass Node A die Nodes B, D, E als Nachbarn
hat. Ebenso hat Node F die Nodes C, D, E als Nachbarn. Was macht BATMAN nun?

Node A schickt eine Orginator-Meldung mit Sequenznummer 0. B, C, D und E
wiederholen sie. Betrachten Wir den Werdegang der Orginator Nachrichten von
Node A.

Node F sieht die Orginator-Nachricht Sequenznummer 0 von Node A über Node D
zuerst und merkt sich, dass er A über D gesehen hat. Node F ignoriert die
Orginator-Nachricht mit Sequenznummer 0 von Node A, die von Node B
wiederholt wird und über Node C eintrifft, da sie später ankommt. Die
Nachricht von Node E geht unterwegs verloren oder kommt ebenfalls zu spät.

Auf dem besten Pfad zwischen Node A und F kommen die Pakete häufiger und
meist auch schneller an. Node F merkt sich nun, von wem er die
Orginatorpakete von Node A am häufigsten erhält. Schnelligkeit ist hier
entscheidend weil Node F sich immer nur für das am schnellsten ankommende
Paket mit übereinstimmender Orginatoradresse und Sequenznummer interessiert.
Will Node F nun mit Node A kommunizieren benutzt er den Nachbarn mit der besten
Statistik als Router.

Herrscht Gleichstand an empfangenen Paketen von zwei oder mehreren Nachbarn
entscheidet die grö�?te TTL (geringster Hopcount). Herrscht Gleichstand auch
bei der TTL entscheidet wer das letzte eingegangene Orginator-Paket zum
Zielknoten gebroadcastet hat.


######################################
# Verbessertes B.A.T.M.A.N-Verfahren #
#				     #
#	   B.A.T.M.A.N-II	     #
######################################



Das einfachste B.A.T.M.A.N-Verfahren hat einen Haken: Es berücksichtigt nicht,
dass Verbindungen unsymmetrisch sein können. Die Annahme ist, dass auf dem
Pfad auf dem die Pakete von Node A den Node F erreichen auch die beste
�?bertragung in die Gegenrichtung möglich ist. Das ist im Fall von
unsymmetrischen Links ein Trugschluss. Unsymmetrische Links treten auf wenn
ein Router zwar einen anderen hört, aber umgekehrt nicht. Es kann sein, dass
eine perfekte �?bertragung möglich ist - aber nur in eine Richtung. Das
einfache B.A.T.M.A.N-Verfahren würde hier komplett scheitern. Es muss also
geprüft werden ob Links symmetrisch sind und nur Informationen die von
diesen kommen dürfen ausgewertet und verwendet werden.

Dafür gibt es ein einfaches Set von Regeln:

1.) Symmetrieprüfung

Nachbarn, die unsere eigenen Orginatornachrichten mit TTLMAX - 1 wiederholen
haben Uns gesehen und wir haben sie gesehen. Nur Nachbarn, die unsere
eigenen Orginatorpakete (aus der Sicht des Nodes) mit TTLMAX-1 wiederholen,
werden berücksichtigt. Bekommen wir in einem bestimmten Zeitraum unsere
Orginatornachrichten nicht von unseren Nachbarn als Wiederholung zu sehen
ist der Link unsymmetrisch.

2.) Broadcasts von Nodes zu denen wir keinen symmetrischen Link haben,
werden ignoriert und nicht weitergeleitet.  Wir ignorieren sie so lange bis
die Symmetrieprüfung wieder erfolgreich ist.


3.) Ausnahme

Broadcasts von Orginatoren aus der direkten Nachbarschaft werden immer
wiederholt (Broadcasts mit TTLMAX), auch dann wenn sie (noch) nicht
symmetrische Nachbarn sind. In diesem Fall ist ein Unsymmetrieflag in dem
wiederholten Broadcast enthalten - damit der Orginator weiss, dass wir
Ihn gesehen haben. Andere Knoten wissen, dass sie den Broadcast den wir
wiederholen ignorieren können. Die wiederholte Orginatornachricht die mit
dem Unsymmetrieflag gesendet wird geht nur den Orginator was an, alle
anderen Knoten ignorieren sie.

Diese Ausnahme ist notwendig um ein Henne-und-Ei Problem zu verhindern.
Ansonsten würden wir die Orginatornachrichten unserer direkten Nachbarn
stets ignorieren - weil sie unsymmetrisch sind und bleiben. Und sie würden
uns ignorieren... Andere Nodes dürfen indirekt empfangene Orginatormeldungen
mit TTLMAX -1 nicht wiederholen wenn der Unsymmetrieflag gesetzt wird -
sonst fällt B.A.T.M.A.N doch noch auf Broadcasts rein, die von
unsymmetrischen Links stammen.


Happy testing!

Elektra, Thomas, Axel, Felix 

BATMAN fliegt durchs Weimarnetz - die Zweite

was wollen wir?

  • route vergleichen ->trace
    • laenge -> trace
    • bandbreite der links - werden auch schmalbandige links genutzt? -> infoseite
    • packetloss -> floodping
    • Wechseln der Routen
  • wie schnell fuellt sich die routingtabelle
  • cpu auslastung -> infoseite / monitoring
  • speicher -> infoseite / monitoring
  • Anzahl der Nodes
  • Traffic des Protokoll -> codeschnipsel

wie

  • alle schalten batman ein -> infoseite
  • wenige testen
  • ein script fuer alle -> matas
  • schoen waere die funktionalitaet vom monitoring zu nutzen -> jens

Batman installieren

  • der grundsaetzliche Vorgaeng um Batman zu installieren ist im SVN zu finden und schon in die weimarnetzfirmware integriert
  • der grobe vorgang beschreibt sich wie folgt:
    • Aliasinterface am dem WLAN anlegen mit
      • gleiche IP wie WLAN bisher nur erstes Oktett veraendern, dann blickt man besser durch
      • Beispiel: normale IP = 104.1.1.1 und BATMAN-IP dann 103.1.1.1, mit:
WIFI=$(nvram get wifi_ifname)
IP=$(nvram get lan_ipaddr|awk '{gsub(/104./,"103.");print}')
ip addr add dev $WIFI $IP/8 brd 103.255.255.255 label $WIFI:2
    • BATMAN starten, wie folgt:
batman $WIFI:2 &
  • nun kann man nach einer weile alle batman-knoten anpingen, oder mit traceroute die wege verfolgen