Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| firmware:babel [22.03.2018 22:30] – christf | firmware:babel [10.06.2021 12:27] (aktuell) – igor | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| - | . Wir haben mit den Integrationsarbeiten für den [[https:// | + | ======= Freifunk  | 
| + | <WRAP center round important 60%> | ||
| + | Diese Seite ist veraltet da FFFFM aktuell keine Babel Infrastruktur betreibt. | ||
| + | </ | ||
| - | ==== Dinge die schon gehen ==== | + | |
| - | ES GEHT! Man kann sich verbinden, roamen, das Netz nutzen. Man hat 25% mehr Durchsatz als mit Batman unter gleichen Funkbedingungen. | + | Wir haben mit den Integrationsarbeiten für den [[https:// | 
| + | |||
| + | Die aktuelle frankfurter babel-Firmware gibt es [[https:// | ||
| + | Die dazugehörige Map ist hier zu finden: [[http:// | ||
| + | |||
| + | <WRAP center round todo 60%> Die Informationen in dem obigen Teilabschnitt sind wahrscheinlich nicht mehr aktuell.\\  | ||
| + |  ======  | ||
| + | |||
| + | Man kann sich verbinden, roamen  | ||
| 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  | + |     * Zwei Clients verbinden sich mit einem Node und können kommunizieren. (Jeweils  | 
| - | * 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. | 
| - | * Babel-Nodes erscheinen neben Batman-Nodes auf der Babel-Map | + | * Babel-Nodes erscheinen neben Batman-Nodes auf der Babel-Map. | 
| - |     * <del>DNS als anycast-service  | + |     * DNS funktioniert  | 
| - |     * DNS-cache auf node funktioniert (siehe Erweiterung  | + |     * Roaming eines Clients  | 
| - |     * Roaming eines clients  | + | * Es gibt eine funktionierende Firewall. | 
| - | * Es gibt eine funktionierende Firewall | + | |
| * Auf einem Socket sind verschieden l3roamd-Operationen möglich. | * Auf einem Socket sind verschieden l3roamd-Operationen möglich. | ||
| - |     * folgenden  | + |     * Folgenden  | 
| * gluon-mesh-babel | * gluon-mesh-babel | ||
| * gluon-l3roamd | * gluon-l3roamd | ||
| * mmfd | * mmfd | ||
| * gluon-mesh-vpn-fastd | * gluon-mesh-vpn-fastd | ||
| - | * babeld 1.8 (master) | + |         * babeld  | 
| + | Bitte erfasst Probleme in unserer [[https:// | ||
| - | + | ====== Entwicklung ====== | |
| - | Die aktuelle Entwicklungsfirmware gibt es [[https:// | + | |
| - | + | ||
| - | + | ||
| - | ==== Designthemen  | + | |
| [[wiki: | [[wiki: | ||
| + | [[wiki: | ||
| + | ====== Changelog ====== | ||
| + | [[wiki: | ||
| + | ====== 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 - / | ||
| + | * ip -6 r s | ||
| - | CHANGELOG | + | ===== Core-Files auswerten  | 
| - | ========= | + | |
| - | + | ||
| - | ========================= v0.0.1.68 | + | |
| - | [X] l3roamd: only put active IP addresses in info packet | + | |
| - | [X] l3roamd: improve roaming for cable clients - use NEWLINK messages originating from fdb to learn new clients. | + | |
| - | [X] l3roamd: allow change of client interface, do not always exit on epoll error, re-initialize arp, icmp6 routemgr | + | |
| - |     [X] l3roamd  | + | |
| - | [X] l3roamd: fix info message parsing | + | |
| - | [X] l3roamd: use /48 clat range in -4 init parameter using a /96 length | + | |
| - | [X] l3roamd: intercom: fill sender-field in all outgoing packets | + | |
| - | [X] l3roamd: add debug output for intercom packet handling | + | |
| - | [X] l3roamd: remove endless loop when flushing packets | + | |
| - |     [X] gluon-mesh-babel: | + | |
| - |     [X] introduce xlat464-clat, | + | |
| - | [X] babeld upgrade to master to get event-triggered route-updates working | + | |
| - |     [X] gluon-mesh-babel: | + | |
| - | + | ||
| - | + | ||
| - | ========================= v0.0.1.65 | + | |
| - | [X] l3roamd: send claim if the client was known in the past but is inactive now (it might have roamed away and back again). | + | |
| - | [X] l3roamd: rework socket structure to allow multiple instances of l3roamd on one host while allowing to communicate via multicast and unicast on all relevant addresses: | + | |
| - | [X] bind m sockets (one for each mesh interface) to mcast address to receive multicast packets | + | |
| - | [X] bind 1 socket to node-IP for sending claims and receiving info in response | + | |
| - | [X] bind n sockets fec0-socket /close when claiming / removing client => add to client structure | + | |
| - | [X] l3roamd: intercom - bind to node-ip | + | |
| - |     [X] l3roamd: roaming - keep old clients for 5 minutes after dropping them in an " | + | |
| - | [X] babeld: adjust confit to include redistribution of CLATs and PLATs | + | |
| - |     [X] gluon-mesh-babel: | + | |
| - |     [X] gluon-mesh-babel: | + | |
| - |     [X] gluon-l3roamd: | + | |
| - |     [X] gluon-l3roamd: | + | |
| - | [X] l3roamd: fix nl80211 client discovery | + | |
| - |     [X] l3roamd: introduce switches to disable discovery via ndp/ | + | |
| - | [X] respondd: catch errors in corner cases for retrieving mac addresses | + | |
| - | [X] l3roamd: roaming: if the client is not available any more, forget ipv4 address along with ipv6 | + | |
| - | [X] l3roamd: Allow setting the ula-node-client-prefix | + | |
| - | [X] l3roamd: purge packets from own task scheduled when packet is received instead from NS-task | + | |
| - | [X] l3roamd: ipmgr: when dropping old packets, send icmp destination unreachable | + | |
| - | [X] l3roamd: FIX purge packets when debug is disabled | + | |
| - | [X] l3roamd: update usage() include all socket functions in help text | + | |
| - | [X] make autoupdater work on snapshot and next branches | + | |
| - | [X] l3roamd: do not crash when purging old packets | + | |
| - | ========================= 1.8.0 Snapshot 63 | + | |
| - | [X] l3roamd: rework seek logic triggers | + | |
| - | [x] l3roamd: when sending NS, use clients ll-address as destination if it is known already - RFC2461 | + | |
| - | [X] l3roamd: fix output when sending NS | + | |
| - | [X] l3roamd: beim entfernen von ip adressen eines clients, eine prüfugn der anderen ip adressen anstoßen => mit echo requests damit der kernel das gleich alles mitkriegt. | + | |
| - |     [X] l3roamd: help with roaming - do not remove the client unless it's last IP-Address was deactivated >5 Minutes ago when bridge/ | + | |
| - | [X] l3roamd: allow to add / remove addresses for clients using the socket. | + | |
| - |     [X] respondd: implement json parsing for unlimited size of return value of l3roamd  | + | |
| - | [X] l3roamd: always use multicast claims instead of unicast. | + | |
| - |     [X] l3roamd: NS/ | + | |
| - | [X] l3roamd: use nl-messages with state NUD_NOARP to deactivate client IP. | + | |
| - |     [X] gluon-mesh-respondd: | + | |
| - |     [X] l3roamd: allow re-detection of client' | + | |
| - | [X] l3roamd: fix segfault on clientmgr_is_known_address() | + | |
| - | ========================= 1.8.0 Snapshot 62 | + | |
| - | [x] l3roamd: when deleting clients, remove all their addresses by iterating backwards in the address-vector | + | |
| - | [X] mmfd: allow to run multiple instances in parallel | + | |
| - | [X] l3roamd: allow to run multiple instances in parallel | + | |
| - | [X] l3roamd: introduce get_prefixes-command on socket | + | |
| - | [X] adjust upgrade-scripts to domain config | + | |
| - | [X] l3roamd: do not remove client too early see log | + | |
| - | ========================= 1.8.0 Snapshot 60 | + | |
| - |     [X] l3roamd: avoid double-free of client-> | + | |
| - |     [X] l3roamd: " | + | |
| - | [X] l3roamd: IP & Client-löschen ermöglichen | + | |
| - | [X] l3roamd: IPv4-Adresserkennung ermöglichen | + | |
| - | [X] l3roamd: bei DELNEIGH wird nicht die ll-adresse des clients gelösct, weil diese nciht im client-Adress-Array ist. => mit dem client auch essen ll-adresse mitführen. | + | |
| - | [X] prefixd: auf socket von l3roamd schreiben und damit roaming in zusätzlichen prefixes ermöglichen | + | |
| - |     [X] libbabelhelper: | + | |
| - | ========================= 1.8.0 Snapshot 58 | + | |
| - | [X] respondd: BUGFIX: some neighbour interfaces are not shown. | + | |
| - | [X] respondd: statt mac-Adressen ll-Adressen einbauen | + | |
| - | [X] l3roamd: FIX: page fault | + | |
| - | + | ||
| - | ============================ 1.8.0 Snapshot 54 | + | |
| - | [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: | + | |
| - | [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, | + | |
| - | [X] l3roamd: review clientmgr | + | |
| - |     [X] server umstellen für firmwareuploads https:// | + | |
| - | [X] l3roamd: add version-switch | + | |
| - | [X] statuspage batman: ?PROTO? (undefined) | + | |
| - |     [X] respondd-Strukturen: | + | |
| - | ========================= 1.8.0 Snapshot 41 | + | |
| - |     [X] FIX: [  257.537508] neighbours-babe[2318]: | + | |
| - |     [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, | + | |
| - |     [X] NS: NONCE einbauen nach https:// | + | |
| - | [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, | + | |
| - | [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, | + | |
| - | [X] rebase n_babel-work | + | |
| - |         [X] package/ | + | |
| - | [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, | + | |
| - | [X] Anpassung an send_claim: Eintrag nach dem claim in die claim-retry-liste legen. | + | |
| - |         [X] Anpassung handle_info: | + | |
| - |         [X] claim-retry-task bauen, die so lange retries sekündlich schickt und den retry-counter inkrementiert, | + | |
| - | a) ein Eintrag in der claim-retry-liste ist und | + | |
| - | b) der counter nicht 3 überschritten hat. | + | |
| - |             Wenn er 3 überschreitet, | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | ===== Folgeaufgaben, | + | |
| - |   * Erprobung des  [[https:// | + | |
| - | * 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:// | + | |
| - |   * l3roamd ist in der Entwicklung [[https:// | + | |
| - | + | ||
| - | ==== Core-Files auswerten ==== | + | |
| * Die Erzeugung von core-Files auf dem openwrt-Gerät aktivieren: | * Die Erzeugung von core-Files auf dem openwrt-Gerät aktivieren: | ||
| Zeile 195: | Zeile 60: | ||
| ``` | ``` | ||
| - |   * Den zu beobachtenden Prozess direkt von busybox aus starten, den Absturz  | + |   * Den zu beobachtenden Prozess direkt von busybox aus starten, den Absturz  | 
|   * Die  unstripped binaries liegen auf dem Build-System in staging_dir/ |   * Die  unstripped binaries liegen auf dem Build-System in staging_dir/ | ||
| - | * mit dem gdb für den build binary und core debuggen: | + |   * mit dem gdb für den build das binary  | 
| ``` | ``` | ||
| - |  cd / | + | cd / | 
| - |   | + | ./ | 
| ``` | ``` | ||
| - | ==== technische Änderungen ==== | ||
| - | * Nutzung von ff05 statt ff02 für respondd, Anpassung für hopglass. | ||
| - | ==== IPv6 Adressen ==== | + | |
| + | |||
| + | ====== Infrastruktur ====== | ||
| + | |||
| + | ===== IPv6 Adressen ===== | ||
| + |   * 2a06: | ||
|   * 2a06: |   * 2a06: | ||
|   * 2a06: |   * 2a06: | ||
| Zeile 215: | Zeile 82: | ||
|     * 2a06: |     * 2a06: | ||
|     * 2a06: |     * 2a06: | ||
| - |   * 2a06: | ||
| - | == Infrastruktur  | + | |
| - | serverseitig führen wir auf dem hopglass.babel.ffm.freifunk.net für eth2 (babel-mesh-Interface) als post-up script folgendes  | + | ===== Aufbau von Gateways ===== | 
| + | Die Komponenten des Netzes sind [[http:// | ||
| + | |||
| + | Das Setup der Gateways ist  [[infrastruktur: | ||
| + | |||
| + | Serverseitig (anbei die hopglass-Integration ins Netz) kann man loslegen, wenn man als post-up script folgendes  | ||
| < | < | ||
| #!/bin/bash | #!/bin/bash | ||
| Zeile 256: | Zeile 127: | ||
| / | / | ||
| - | #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, | ||
| sleep 1 | sleep 1 | ||
| - | / | + | / | 
| disown | disown | ||
| / | / | ||
| Zeile 268: | Zeile 137: | ||
| #/sbin/ip a add 2a06: | #/sbin/ip a add 2a06: | ||
| /sbin/ip a add 2a06: | /sbin/ip a add 2a06: | ||
| - | /sbin/ip r add ff05:: | + | /sbin/ip r add ff05:: | 
| /sbin/ip link set dev mmfd0 up | /sbin/ip link set dev mmfd0 up | ||
| /sbin/ip -6 r a 2a06: | /sbin/ip -6 r a 2a06: | ||
| Zeile 277: | Zeile 146: | ||
| </ | </ | ||
| - | Auf dem Gateway läuft fastd udn bringt die mmfd/ | + | Auf dem Gateway läuft fastd und bringt die mmfd/ | 
| + | |||
| + | Salt-states für Gateways haben wir auch - leider aktuell noch nicht öffentlich. | ||