Projekte/v642/olsrd2-Debug-Party
Worum geht es?
olsrd2
-Versionen bis hinunter zu (mindestens) 0.14.0 stürzen unter zu recherchierenden Bedingungen mit einem segfault
ab, wenn mindestens eine Instanz mit Version 0.15.x im Netz läuft.
v0.14 und v0.15 dürften beide einen Bug haben, den aber nur v0.15 "aktiv erzeugen" kann, um dann selbst abzustürzen und v0.14 mitzureißen.
Um das Problem einzugrenzen, zeichnet @Pocki aktuell auf einem seiner EdgeRouter den olsrd2
-Verkehr mit tcpdump
auf.
Debugmethode
Es bieten sich verschiedene Möglichkeiten an, um diesen Problemen auf den Grund zu gehen. Wir untersuchen zunächst einmal den Netzwerkverkehr; parallel dazu hat @dabeani ein olsrd2
-Executable mit Debugsymbolen gebaut, das lokal ausgerollt und dessen Dumps untersucht werden können.
Netzwerkverkehr analysieren
Hierzu braucht es zwei Schritte: Zuerst wird der Verkehr aufgezeichnet, dann untersucht.
Aufzeichnung
tcpdump
[1] ist das Mittel der Wahl.. @Pocki macht auf einem seiner EdgeRouter konkret
nohup tcpdump -C 1 -W 10 -w /tmp/olsr2dump -i br0 "udp port 269" &>/dev/null & # nohup damit tcpdump nach dem Ausloggen weiterläuft # -C 1 um die Dateigröße auf 1 MB zu begrenzen # -W 10 um höchstens 10 solcher Dateien aufzuheben ("Log Rotation") # -w DATEINAME um den Verkehr in eine Datei zu schreiben # -i SCHNITTSTELLE für das Netzwerkinterface, das verwendet werden soll # "udp port 269" als Paketfilter, hier für OLSRd2 # &>/dev/null um Ausgaben auf stdout und stderr zu unterdrücken # & um den Prozess in den Hintergund zu schicken
Die Dumps stellt er hier im Web bereit: http://78.41.113.166:8000/www/dumps.html
Analyse
Zwar hat tcpdump
sogenannte "Printer" für viele Protokolle (siehe die print-*
-Module in den Sourcen), d.h. es kann Paketinhalte in menschenlesbarer Form ausgeben. Allerdings zählt olsrd2
-Verkehr nicht dazu.
Wireshark hingegen hat einen passenden Dissector (siehe Source). Beachte, dass Wireshark olsrd2
-Verkehr als "PacketBB"-Protokoll klassifiziert. Die Auswertung der Nachrichteninhalte von olsrd2
und NHDP
funktioniert aber korrekt, von wenigen nicht implementierten Ausnahmen abgesehen.
Henning, der den Dissector ursprünglich geschrieben hat, erklärt dazu:
PacketBB ist die alte Bezeichnung für RFC5444, das Generalized Mobile Ad Hoc Network Packet/Message Format, das von
olsrd2
undNHDP
verwendet wird.
Zeitleiste
Details siehe den v642-Matrix-Chat!
- vor 23.02.2018:
olsrd2
-Version 0.14.0-16 läuft im Netz. - 23.02.2018: Version 0.15.0 wird ausgerollt.
- 28.02.2018: Alle Instanzen stürzen ab, inklusive der des Tunnelservers.
- Das ist nicht der erste Absturz von v2, aber der erste netzweite.
- 03.03.2018: Weiterer netzweiter Absturz.
- "Henning hat gemeint es sei eine TCP Verbindung, die den Logfile-Eintrag verursacht. Der daemon stürzt aber erst etwas später danach ab."
- 04.03.2018: Nächster Absturz.
- Bis dato finde ich in den Logs unserer EdgeRouter 4 Absturzzeitpunkte, die sich BTW auf die Sekunde genau decken: Feb 19 20:17:10, Feb 27 23:05:46, Mar 3 12:06:39, Mar 4 11:40:58."
- Spekulation über mögliche Ursachen:
- Broadcasts auf UDP-Port 269
Telnet/HTTP-Plugin auf TCP-Port 8000. Das wird wieder ausgeschlossen, als der Daemon am Metalab-v642-EdgeRouter abstürzt. Hier ist Port 8000 nicht offen.
- 03.04.2018: Absturz um 05:05. Es wird wieder eine problematische Version in Betrieb gefunden: v0.15.0-9.
- 04.04.2018: @Pocki startet zu Mittag ein
tcdump
s auf einem EdgeRouter. Gegen 20:00 startet @kosh am Tunnelserverts2018
eineolsrd2
-v0.15.0-9-Instanz. Jetzt warten wir auf den nächsten Crash ;-)