firmware:babel

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
firmware:babel [14.02.2017 19:56] – [Folgeaufgaben für Testmesh] christffirmware:babel [10.06.2021 12:27] (aktuell) igor
Zeile 1: Zeile 1:
-. Wir haben mit den Integrationsarbeiten für den [[https://nilsschneider.net/2016/04/10/babel-in-gluon.html|Gluon Babel Masterplan]] begonnen.+======= Freifunk mit babel ======= 
 +<WRAP center round important 60%> 
 +Diese Seite ist veraltet da FFFFM aktuell keine Babel Infrastruktur betreibt. 
 +</WRAP>
  
-==== Dinge die schon gehen ==== 
-  * Custom-Pakete für die folgenden Pakete, sodass die benötigten Komponenten in der Firmware eingebaut ist und per ifup auch gestartet werden können.  
-    * gluon-mesh-babel 
-    * gluon-l3roamd 
-    * gluon-mmfd 
-    * mmfd 
-    * gluon-mesh-vpn-fastd 
-    * babeld-git Version (mit rw-Socket) 
-    * dnsmasq wurde deutlich verkleinert, DHCP entfernt. 
-  * Kommunikation: 
-    * Ein Client verbindet sich mit einem Node und es ist Kommunikation zwischen diesen beiden Geräten möglich 
-    * Ein Client verbindet sich mit einem Node und erreicht über das Mesh einen anderen Node 
-    * zwei Clients an unterschiedlichen Mesh-Nodes können miteinander kommunizieren 
-    * zwei Clients verbinden sich mit einem Node und können kommunizieren. (jeweils switch-port, beide per wifi und wechselseitig kabel/wifi) 
-    * Routing ins Internet für einen Client funktioniert für IPv6 und IPv4 
-    * Internetzugang an mesh-only-node funktioniert 
-  * DNS als anycast-service funktioniert (2a06:8187:fb00:53::53) 
-  * DNS-cache auf node funktioniert (siehe Erweiterung durch die DNS-Tabelle in der site.conf) 
-  * roaming eines clients (nach merge von #938) 
-  * Babel-Nodes erscheinen gemeinsam mit Batman-Nodes auf der Map 
-  * Es gibt eine funktionierende Firewall 
-  * Es gibt eine (Stand 8.2.2017) memleak-freie Statuspage 
  
 +Wir haben mit den Integrationsarbeiten für den [[https://nilsschneider.net/2016/04/10/babel-in-gluon.html|Gluon Babel Masterplan]] begonnen.
  
-Die aktuelle Entwicklungsfirmware gibt es [[https://dl.ffm.freifunk.net/firmware/babel-dev/|hier]]+Die aktuelle frankfurter babel-Firmware gibt es [[https://dl.ffm.freifunk.net/firmware/babel-dev/|hier (development)]], [[https://dl.ffm.freifunk.net/firmware/babel-test/|hier (test)]] und [[https://dl.ffm.freifunk.net/firmware/babel-stable/|hier (stable)]].   
 +Die dazugehörige Map ist hier zu finden: [[http://gw01.babel.ffm.freifunk.net:8080/#/en/graph|Babel Map - Freifunk Frankfurt a.M.]]
  
 +<WRAP center round todo 60%> Die Informationen in dem obigen Teilabschnitt sind wahrscheinlich nicht mehr aktuell.\\  Hilf mit und bringe diese Seite auf einen aktuellen Stand.</WRAP>
 + ====== Status ======
 + 
 +Man kann sich verbinden, roamen und das Netz nutzen. Man hat 25% mehr Durchsatz als mit Batman unter gleichen Funkbedingungen.
  
-==== Folgeaufgaben für Testmesh ==== +Im Detail heißt das: 
-Alle bekannten Bugs sind behoben => Bitte testen (14.2.2017) +    * Ein Client kann sich mit einem Node verbinden und es ist Kommunikation zwischen diesen beiden Geräten möglich. 
-===== Folgeaufgaben, nachdem ein Testmesh aufgebaut ist ===== +    * Ein Client kann sich mit einem Node verbinden und erreicht über das Mesh einen anderen Node
-  Refactoring und Entfernung von dupliziertem Code in den babel-Modulen und Programmen rund um respondd in gluon-status-page-api und gluon-mesh-babel (wäre für die batman-Welt auch mal nett) +    * Zwei Clients an unterschiedlichen Mesh-Nodes können miteinander kommunizieren. 
-  ggf. REJECT durch DROP ersetzen in der Firewall und Logging entfernen um die Netzleistung zu verbessern+    Zwei Clients verbinden sich mit einem Node und können kommunizieren. (Jeweils switch-port, beide per wifi und wechselseitig kabel/wifi) 
-  Nach der Reparatur der Paketabhängigkeiten in openwrt/lede die Abhängigkeiten der Pakete neu entwerfen+    * Routing ins Internet für einen Client funktioniert für **IPv6** und **IPv4**. 
-  Erstellung eines [[https://github.com/tcatm/l3roamd/issues/2|prefixd]] +    * Internetzugang an mesh-only-node funktioniert. 
-  Wie geht lokale Service Discovery in einem l3-Netz (Bittorrent Peer Exchange, ad-hoc xmpp)? +    Babel-Nodes erscheinen neben Batman-Nodes auf der Babel-Map
-  * l3roamd: Unterstützung des Lernens von neuen Clients auch auf bridge-interfaces +    DNS funktioniert mit dem durch das Babel-Projekt in gluon eingeführten DNS-Cache
-==== Workarounds ==== +    Roaming eines Clients geht
-Die Firmware enthält folgende Workarounds: +    Es gibt eine funktionierende Firewall. 
-  l3roamd stürzt ab, wenn er ohne client interface gestartet wird, workaround: -i lo +    Auf einem Socket sind verschieden l3roamd-Operationen möglich. 
-  babeld muss mit interface gestartet werden, workaround: lo +    * Folgenden Pakete wurden angepasst, sodass die benötigten Komponenten in der Firmware eingebaut ist und per ifup auch gestartet werden können.  
-==== Überblick weitere Entwicklungen ==== +        gluon-mesh-babel 
-  ddhcp für ipv4-Unterstützung ist in der Entwicklung [[https://git.toppoint.de/sargon/ddhcpd/]] +        gluon-l3roamd 
-  l3roamd ist in der Entwicklung [[https://github.com/tcatm/l3roamd]]+        mmfd 
 +        * gluon-mesh-vpn-fastd 
 +        babeld >1.8 (master von März 2018)
  
-==== technische Änderungen ==== +Bitte erfasst Probleme in unserer [[https://github.com/freifunk-ffm/ToDo-Liste/issues?q=is:issue+is:open+label:Babel|Todo-Liste]].
-  * Nutzung von ff05 statt ff02 für respondd, Anpassung für hopglass.+
  
-==== IPv6 Adressen ====+====== Entwicklung ====== 
 +[[wiki:designthemen_gluon]] 
 +[[wiki:babel_android]] 
 +====== Changelog ====== 
 +[[wiki:babel-changelog]] 
 +====== Debugging ====== 
 +===== Auf dem Gerät ===== 
 +Das Babel-Netz ist ein Testnetz. Niemand weiß wie man Layer 3-Netze mit Roaming aufbaut - wir sind die ersten. 
 +Es kann also durchaus passieren, dass etwas nicht glatt läuft. In so einem Fall ist man mit generellen Debugging-Hinweisen gut beraten.   
 +Wichtig ist meist die Ausgabe von: 
 +  * logread 
 +  * nodeinfo 
 +  * echo get_clients | socat - /var/run/l3roamd.sock 
 +  * ip -6 r s 
 + 
 +===== Core-Files auswerten ===== 
 +  * Die Erzeugung von core-Files auf dem openwrt-Gerät aktivieren: 
 + 
 +``` 
 +touch /.init_enable_core 
 +sysctl -w "kernel.core_pattern=/tmp/%e.%p.%s.%t.core" 
 +ulimit -c unlimited 
 +``` 
 + 
 +  * Den zu beobachtenden Prozess direkt von busybox aus starten, den Absturz provozieren. Das  das core-file liegt dann in /tmp. 
 +  * Die  unstripped binaries liegen auf dem Build-System in staging_dir/target-*/root-* 
 +  * mit dem gdb für den build das binary aus dem build-tree und dem core-file vom router laden: 
 + 
 +``` 
 +cd /var/lib/jenkins/workspace/gluon_christf_next_musl/lede 
 +./build_dir/toolchain-mips_24kc_gcc-5.4.0_musl-1.1.16/gdb-8.0.1/gdb/gdb ./staging_dir/target-mips_24kc_musl-1.1.16/root-ar71xx/usr/sbin/l3roamd  /tmp/l3roamd.1516492435.7730.11.core 
 +``` 
 + 
 + 
 + 
 +====== Infrastruktur ====== 
 + 
 +===== IPv6 Adressen ====
 +  * 2a06:8187:fbab:2::1 next-node Adresse (löst auch im Netz als nextnode auf)
   * 2a06:8187:fb00:53::53 DNS   * 2a06:8187:fb00:53::53 DNS
   * 2a06:8187:fb00:123::123 ntp   * 2a06:8187:fb00:123::123 ntp
   * 2a06:8187:fbab::/48   * 2a06:8187:fbab::/48
     * 2a06:8187:fbab:1::/64 Node Netz     * 2a06:8187:fbab:1::/64 Node Netz
 +      * 2a06:8187:fbab:1::9000:xxxx Infrastrukturbereich im Node Netz
     * 2a06:8187:fbab:2::/64 Client Netz     * 2a06:8187:fbab:2::/64 Client Netz
     * 2a06:8187:fb00:1::/96 Netz für nat64     * 2a06:8187:fb00:1::/96 Netz für nat64
-  * 2a06:8187:fbab:2::1 next-node Adresse (löst auch im Netz als nextnode auf) 
  
  
-==== Infrastruktur ==== +===== Aufbau von Gateways ===== 
-serverseitig führen wir auf dem hopglass.babel.ffm.freifunk.net für eth2 (babel-mesh-Interface) als post-up script folgendes aus:+Die Komponenten des Netzes sind [[http://l3-freifunk.readthedocs.io/de/latest/components.html#besondere-adressen-netze|hier]] beschrieben. 
 + 
 +Das Setup der Gateways ist  [[infrastruktur:gateway:babel-gateway|hier]] zu finden. 
 + 
 +Serverseitig (anbei die hopglass-Integration ins Netzkann man loslegen, wenn man als post-up script folgendes ausführt:
 <code> <code>
 #!/bin/bash #!/bin/bash
Zeile 66: Zeile 96:
 cat >/tmp/babeld.conf<<EOF cat >/tmp/babeld.conf<<EOF
 ipv6-subtrees true ipv6-subtrees true
 +reflect-kernel-metric true
 export-table 10 export-table 10
 import-table 11 import-table 11
 import-table 12 import-table 12
 +local-port-readwrite 33123
 +interface ens6 type wired rxcost 10 update-interval 60
 +interface babel-vpn-1374 type tunnel link-quality true update-interval 300
  
-interface eth2 
 default enable-timestamps true default enable-timestamps true
 default max-rtt-penalty 96 default max-rtt-penalty 96
-#redistribute ip 2a06:8187:fbab:2::/64 eq 128  allow +default rtt-min 25 
-#redistribute ip 2a06:8187:fbab:1::/64 eq 128  allow +out ip 2a06:8187:fbab:2::1/128 deny 
-#redistribute ip 2a06:8187:fb00::/40 eq 128 allow +redistribute ip 2a06:8187:fbab:2::1/128 deny 
-#redistribute local  deny +redistribute ip 2a06:8187:fbab:2::/64 eq 128  allow 
-#redistribute ip ::/0 metric 256  +redistribute ip 2a06:8187:fbab:1::/64 eq 128  allow 
-redistribute metric 256+redistribute ip 2a06:8187:fbab:3::/64 eq 96 allow 
 +redistribute src-prefix 2a06:8187:fb00::/40 ip 2000::/3 allow 
 +redistribute ip ::/0 allow 
 +redistribute ip 2000::/3 allow 
 +redistribute local deny 
 +redistribute src-prefix 2a06:8187:fbab:2::/64 if eth1 metric 256
 EOF EOF
 localnode=$(ipv6calc --action prefixmac2ipv6 --in prefix+mac --out ipv6addr 2a06:8187:fbab:1:: $( ip a s dev eth0|grep link/ether|awk '{print $2}')) localnode=$(ipv6calc --action prefixmac2ipv6 --in prefix+mac --out ipv6addr 2a06:8187:fbab:1:: $( ip a s dev eth0|grep link/ether|awk '{print $2}'))
Zeile 89: Zeile 127:
 /usr/local/bin/babeld -D -s -I /var/run/babeld.pid  -G 33123 -c /tmp/babeld.conf /usr/local/bin/babeld -D -s -I /var/run/babeld.pid  -G 33123 -c /tmp/babeld.conf
  
-#TODO: there is no client interface but l3roamd crashes when started without -i 
-#TODO: once l3roamd supports sockets it should be started from init-script, in here only mesh-interface should be added 
 sleep 1 sleep 1
  
-/usr/local/bin/l3roamd -p 2a06:8187:fbab:2::/64 -i lo  -m $IFACE -t 11 -a 2a06:8187:fbff:2::2 &+/usr/local/bin/l3roamd -p 2a06:8187:fbab:2::/64 -m $IFACE -t 11 -a 2a06:8187:fbff:2::2 &
 disown disown
 /usr/local/bin/mmfd -v & /usr/local/bin/mmfd -v &
Zeile 101: Zeile 137:
 #/sbin/ip a add 2a06:8187:fb00:2::4/128 dev mmfd0 #/sbin/ip a add 2a06:8187:fb00:2::4/128 dev mmfd0
 /sbin/ip a add 2a06:8187:fbab:1:383b:9ff:fed5:9f53/128 dev mmfd0 /sbin/ip a add 2a06:8187:fbab:1:383b:9ff:fed5:9f53/128 dev mmfd0
-/sbin/ip r add ff05::2:1001/128 dev mmfd0 table local+/sbin/ip r add ff05::2:1001/128 dev mmfd0 table local # (reicht auf dem Server wo yanic läuft, muss nicht auf gateways sein)
 /sbin/ip link set dev mmfd0 up /sbin/ip link set dev mmfd0 up
 +/sbin/ip -6 r a 2a06:8187:fbab:2::/64 dev l3roam0 t 10
 +
  
 #add route to icvpn - all other freifunk networks #add route to icvpn - all other freifunk networks
Zeile 108: Zeile 146:
 </code> </code>
  
-Auf dem Gateway läuft fastd udn bringt die mmfd/l3roamd mit dem gleichen script (einzige AUsnahme: ff05-route wird nicht gesetzt) hoch. bird6 schreibt auf dem gateway seine default-route in Routing Tabelle 10.+Auf dem Gateway läuft fastd und bringt die mmfd/l3roamd mit dem obigen script (einzige AUsnahme: ff05-route wird nicht gesetzt) hoch. bird6 schreibt auf dem gateway seine default-route in Routing Tabelle 10
 + 
 +Salt-states für Gateways haben wir auch - leider aktuell noch nicht öffentlich.
  • firmware/babel.1487102184.txt.gz
  • Zuletzt geändert: 14.02.2017 19:56
  • von christf