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 [21.01.2018 15:21] 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 ==== + 
-ES GEHT!+Wir haben mit den Integrationsarbeiten für den [[https://nilsschneider.net/2016/04/10/babel-in-gluon.html|Gluon Babel Masterplan]] begonnen. 
 + 
 +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.
  
 Im Detail heißt das: Im Detail heißt das:
-    * Ein Client kann sich mit einem Node verbinden und es ist Kommunikation zwischen diesen beiden Geräten möglich +    * Ein Client kann sich mit einem Node verbinden und es ist Kommunikation zwischen diesen beiden Geräten möglich. 
-    * Ein Client kann sich mit einem Node verbinden und erreicht über das Mesh einen anderen Node +    * Ein Client kann sich mit einem Node verbinden und erreicht über das Mesh einen anderen Node. 
-    * zwei Clients an unterschiedlichen Mesh-Nodes können miteinander kommunizieren +    * 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) +    * 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 +    * Routing ins Internet für einen Client funktioniert für **IPv6** und **IPv4**. 
-    * Internetzugang an mesh-only-node funktioniert +    * Internetzugang an mesh-only-node funktioniert. 
-    * <del>Babel-Nodes erscheinen neben Batman-Nodes auf der Map</del> +    * Babel-Nodes erscheinen neben Batman-Nodes auf der Babel-Map. 
-    * <del>DNS als anycast-service funktioniert (2a06:8187:fb00:53::53)</del> +    * DNS funktioniert mit dem durch das Babel-Projekt in gluon eingeführten DNS-Cache
-    * DNS-cache auf node funktioniert (siehe Erweiterung durch die DNS-Tabelle in der site.conf) +    * Roaming eines Clients geht. 
-    * Roaming eines clients geht +    * Es gibt eine funktionierende Firewall. 
-    * Es gibt eine funktionierende Firewall +    * Auf einem Socket sind verschieden l3roamd-Operationen möglich
-    * Der Client-Count wird vom l3roamd per socket gemeldet+    * Folgenden Pakete wurden angepasst, sodass die benötigten Komponenten in der Firmware eingebaut ist und per ifup auch gestartet werden können. 
-    * folgenden Pakete wurden angepasst, sodass die benötigten Komponenten in der Firmware eingebaut ist und per ifup auch gestartet werden können. +
         * gluon-mesh-babel         * gluon-mesh-babel
         * gluon-l3roamd         * gluon-l3roamd
         * mmfd         * mmfd
         * gluon-mesh-vpn-fastd         * gluon-mesh-vpn-fastd
-        * babeld 1.8+        * babeld >1.8 (master von März 2018)
  
 +Bitte erfasst Probleme in unserer [[https://github.com/freifunk-ffm/ToDo-Liste/issues?q=is:issue+is:open+label:Babel|Todo-Liste]].
  
 +====== 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
  
-Die aktuelle Entwicklungsfirmware gibt es [[https://dl.ffm.freifunk.net/firmware/babel-dev/|hier]]+===== 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
 +```
  
- 14.2.2017Version 0.0.1.0 -- Alle bekannten Bugs sind behoben => Bitte testet mit uns +  Den zu beobachtenden Prozess direkt von busybox aus startenden Absturz provozierenDas  das core-file liegt dann in /tmp
- * 17.2.2017, Version 0.0.1.1 -- Der Neustart aus dem Konfigurationsmoduls kam sehr zeitverzögert. Nach dem erneuten Einbau von haveged sollte das behoben sein. => Bitte testet mit uns +  * Die  unstripped binaries liegen auf dem Build-System in staging_dir/target-*/root-* 
- * 24.4.2017, Version 0.0.1.3 -- Statuspage fixes (keine NExtnode-IP mehr damit werden die Daten vom richtigen Node angezeigt, Ermittlung der Clientanzahl über Statussocket vom l3roamd, Firewall-Anpassung für Ports von fastd) +  mit dem gdb für den build das binary aus dem build-tree und dem core-file vom router laden:
-         Bekanntes PRoblem: respondd segfault ist in Analyse +
- * 27.4.2017, Version 0.0.1.4 -- respondd-segfault behoben, gateway_nexthop in statistiken aufgenommen+
- 4.5.2017, Version 0.0.1.5 -- respondd memleaks entfernt +
-        Die Statuspage enthält nach wie vor die Graphen noch nicht, da ist noch eine Frage zum Vorgehen offen. +
- * 18.6.2017, Version 0.0.1.6 -- erste Version des prefixd inklusive web-frontend ist enthalten, daneben babeld-config fixes, Einführung von source-specific routing, Rebase auf gluon master, Firewall fixes für forward-traffic im mesh und zum dynamischen hinzufügen von Interfaces zur mesh-zone,  +
-  27.6.2017, Version 0.0.1.7 -- Workaround eingebaut, der macht, dass DNS-Queries immer Freifunk-intern geroutet werden. +
-  1.10.2017 Version 0.0.1.8 -- l3roamd fixes (memleaks, client detection, state-machine) respondd-fixes (client-count) +
- * seit Oktober/November -- häufig neue Snapshots mit jeweils angepassten l3roamd um client-Erkennung zu verbessern und die Stabilität von bestehenden Verbindungen zu erhöhen. Statuspage ist wieder vollständig. +
- +
-CHANGELOG +
-========= +
-============================ 1.8.0 Snapshot 53 +
-    [x] gluon-web-network Paket ist an Bord, Mesh on LAN ist konfigurierbar +
-    [x] l3roamd Absturz behoben +
-    [x] jool ist an bord für nicht-tiny target zum direkten ausleiten +
-    [X] l3roamd: die special IP darf erst nach allen claim retries gesetzt werden damit claim/info und damit roaming geht. +
-    [x] gc_thresh1 = 2 setzen und gc_thresh=3 +
-    [X] l3roamd: Entfernen von neighbours per netlink realieseren +
-    [X] l3roamd: client entfernen, wenn dessen letzte IP entfernt wird. +
-    [X] Fix debug output: seeking on intercom for client 2a06:8187:fbab:2::1sent intercom packet to a00:1593:0:0:ff02:: on iface lo rc: -+
-    [X] l3roamd: do not re-add clients when they are already active +
-    [X] x86-glibc buildjob: artifect nur für lede-x86-64-combined-squashfs.img speichern, auf make oldcnofig umsteigen für den zweiten defconfig +
-    [X] use-site-conf autoupdater branch patchen +
-    [x] firewall: allow dhcp on local_node interface +
-    [X] l3roamd: beim entfernen eines clients (roaming, drop, exit), die special-IPs vom client-Interface entfernen +
-    [X] l3roamd: neighbour entfernen bei client disconnect +
- +
-========================= 1.8.0 Snapshot 52 +
-    [X] l3roamd: Umgang mit Speicher bereinigen +
-    [X] l3roamd: get_clients should also display all clients, their macs and ip addresses +
-    [X] wann gehen wir in den tentative-STatus => REview durchführen (wenn wir per info-message neue IPs erhalten und wenn wir einen mac-change haben und inaktive-Adressen für den client +
-    [X] modules mit hochladen bei snapshots +
-    [X] dnsmasq konfigurieren, IPv4 für Clients +
-    [X] l3roamd: review clientmgr +
-    [X] server umstellen für firmwareuploads https://wiki.ffm.freifunk.net/infrastruktur:servers:download +
-    [X] l3roamd: add version-switch +
-    [X] statuspage batman: ?PROTO? (undefined) +
-    [X] respondd-Strukturen: Link-Quality und eingestellter Durchsatz aufnehmen. siehe iwinfo mesh0 assoclist +
-========================= 1.8.0 Snapshot 41 +
-    [X] FIX: [  257.537508] neighbours-babe[2318]: segfault at 0 ip 0000000000401302 sp 00007ffe76b852d0 error 6 in neighbours-babel[400000+2000] +
-    [X] babel-neighbour-struktur anpassen an Batman-Format: +
-    [X] statuspage rebase auf master, bauen +
-    [X] buildjob für christf_next branch machen und diese firmware auf ffm-server hochladen +
-    [X] DNS mit next-node feature reparieren +
-    [X] push christf_respondd-time & raise PR +
-    [X] statuspage heilen: wieder batadv-stream fehler (hoffentlich mit Thomas gemeinsam) +
-    [X] update-interval für mesh-vpn verbindung in den Minutenbereich erhöhen. +
-    [X] prefixd: roaming in zusätzlichen prefixes erlauben durch Bekanntgabe des zusätzlichen prefix an den l3roamd +
-    [X] gluon-mesh-babel script anpassen: loopback.ip6addr muss gesetzt werden +
-    [X] cnames in name überführen, delete_all weg nehmen, einzeln löschen (section namen hochzählen und dann explizit die gluon-dingens löschen. +
-    [X] NS: NONCE einbauen nach https://tools.ietf.org/html/rfc3971 +
-    [X] mmfd: neues debian-package bauen und hochladen +
-    [X] automatisch mmfd0 interface hoch bringen, analog zu l3roamd +
-=============================================================== 1.8.0 SNAPSHOT32 +
-    [X] gw02 aufbauen +
-    [X] l3roamd: beobachten, wie clients inaktiv werden +
-    [X] l3roamd arbeitet nicht richtig, wenn ein -4 IP-MAP-Netz nicht angegeben ist. Wird der speicherbereich initialisiert, gehts. -4 wird also angegeben. => fixen +
-    [X] l3roamd: wen multicast claims und unicast claims geshickt werden: ip adresse mit im log ausgeben für den der claim gilt +
-    [X] ipmgr - Sicherstellen, dass die queue von alten Paketen bereinigt wird. FIX memleak +
-    [X] rebase n_babel-work +
-        [X] package/gluon-core/luasrc/lib/gluon/upgrade/140-firewall-rules reject_input_on_wan nachrüsten aus https://github.com/freifunk-ffm/gluon/blame/d9f6c0aa6bb662dd59850676e49190a4 +
-        [X] Firewallregeln auf Duplikate prüfen +
-        [X] Kontrolle der Commits durchführen - einzeln durchgehen. +
-    [X] gedroppte Clients erst nach 10 minuten löschen oder wenn ein claim kommt. +
-    [X] interface-IDs in routemgr nutzen +
-    [X] aliase für kurze DNS für nextnode nn.ffffm.net nn +
-    [X] Retry für Claims bauen +
-        [X] claim-Datenstruktur bauen: send-counter, claim selbst +
-        [X] Anpassung an send_claim: Eintrag nach dem claim in die claim-retry-liste legen. +
-        [X] Anpassung handle_info: prüfen ob im claim-retry-vector ein eintrag für den client ist, wenn ja, entfernen. +
-        [X] claim-retry-task bauen, die so lange retries sekündlich schickt und den retry-counter inkrementiert, wie  +
-                a) ein Eintrag in der claim-retry-liste ist und  +
-                b) der counter nicht 3 überschritten hat. +
-            Wenn er 3 überschreitet, Eintrag aus der retry-liste löschen. +
  
 +```
 +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 ======
  
-===== Folgeaufgaben, nachdem ein Testmesh aufgebaut ist ===== +===== IPv6 Adressen ===== 
-  * Erprobung des  [[https://github.com/tcatm/l3roamd/issues/2|prefixd]] +  * 2a06:8187:fbab:2::1 next-node Adresse (löst auch im Netz als nextnode auf)
-  * Wie geht lokale Service Discovery in einem l3-Netz (Bittorrent Peer Exchange, ad-hoc xmpp)? +
- +
-==== Überblick - weitere Entwicklungen ==== +
-  * ddhcp für ipv4-Unterstützung ist in der Entwicklung [[https://git.toppoint.de/sargon/ddhcpd/]] +
-  * l3roamd ist in der Entwicklung [[https://github.com/freifunk-gluon/l3roamd]] +
- +
-==== Core-Files auswerten ==== +
-  * Die  unstripped binaries liegen auf dem Build-System in staging_dir/target-*/root-* +
-  * mit dem gdb für den build binary und core debuggen:   +
-  *  +
- 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 +
- +
-==== technische Änderungen ==== +
-  * Nutzung von ff05 statt ff02 für respondd, Anpassung für hopglass. +
- +
-==== IPv6 Adressen ====+
   * 2a06:8187:fb00:53::53 DNS   * 2a06:8187:fb00:53::53 DNS
   * 2a06:8187:fb00:123::123 ntp   * 2a06:8187:fb00:123::123 ntp
Zeile 138: Zeile 82:
     * 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 ==== + 
-serverseitig führen wir auf dem hopglass.babel.ffm.freifunk.net für eth2 (babel-mesh-Interface) als post-up script folgendes aus:+===== Aufbau von Gateways ===== 
 +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 148: 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 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 redistribute src-prefix 2a06:8187:fbab:2::/64 if eth1 metric 256
 EOF EOF
Zeile 171: 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 183: 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 /sbin/ip -6 r a 2a06:8187:fbab:2::/64 dev l3roam0 t 10
Zeile 192: 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.1516548072.txt.gz
  • Zuletzt geändert: 21.01.2018 15:21
  • von christf