Projekte/v642/olsrd2-Debug-Party

Aus FunkFeuer Wiki
< Projekte‎ | v642
Zur Navigation springen Zur Suche springen

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 und NHDP 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 tcdumps auf einem EdgeRouter. Gegen 20:00 startet @kosh am Tunnelserver ts2018 eine olsrd2-v0.15.0-9-Instanz. Jetzt warten wir auf den nächsten Crash ;-)