Projekte/v642/olsrd2-Debug-Party: Unterschied zwischen den Versionen
Albert (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „== Worum geht es? == <code>olsrd2</code>-Versionen bis hinunter zu (mindestens) 0.14.0 stürzen unter zu recherchierenden Bedingungen ab, wenn mindestens eine…“) |
Albert (Diskussion | Beiträge) (→Wie wird Netzwerkverkehr aufgezeichnet?: Abschnitt umbenannt und neu strukturiert, um auf Wireshark und PacketBB-dekodiert-olsrd2 hinzuweisen) |
||
Zeile 9: | Zeile 9: | ||
== | == Debugmethode == | ||
<code>tcpdump</code> [https://www.tcpdump.org/] ist das Mittel der Wahl. @Pocki macht konkret | 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 <code>olsrd2</code>-Executable mit Debugsymbolen gebaut, dessen Dumps untersucht werden können. | ||
=== Netzwerkverkehr analysieren === | |||
Hierzu braucht es zwei Schritte: Zuerst wird der Verkehr aufgezeichnet, dann untersucht. | |||
==== Aufzeichnung ==== | |||
<code>tcpdump</code> [https://www.tcpdump.org/] 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 tcpdump -C 1 -W 10 -w /tmp/olsr2dump -i br0 "udp port 269" &>/dev/null & | ||
Zeile 24: | Zeile 33: | ||
# & um den Prozess in den Hintergund zu schicken | # & 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 <code>tcpdump</code> sogenannte ''"Printer"'' für viele Protokolle (siehe die <code>print-*</code>-Module in [https://github.com/the-tcpdump-group/tcpdump den Sourcen]), d.h. es kann Paketinhalte in menschenlesbarer Form ausgeben. Allerdings zählt <code>olsrd2</code>-Verkehr nicht dazu. | |||
[https://www.wireshark.org/#download Wireshark] hingegen hat einen passenden ''Dissector'' (siehe [https://code.wireshark.org/review/gitweb?p=wireshark.git;a=blob;f=epan/dissectors/packet-packetbb.c;hb=HEAD Source]). Beachte, dass Wireshark <code>olsrd2</code>-Verkehr als '''PacketBB'''-Protokoll klassifiziert. Die Auswertung der Nachrichteninhalte von <code>olsrd2</code> und <code>NHDP</code> funktioniert aber mit wenigen nicht implementierten Ausnahmen korrekt. | |||
== Zeitleiste == | == Zeitleiste == |
Version vom 5. April 2018, 13:41 Uhr
Worum geht es?
olsrd2
-Versionen bis hinunter zu (mindestens) 0.14.0 stürzen unter zu recherchierenden Bedingungen 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, 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 mit wenigen nicht implementierten Ausnahmen korrekt.
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: Start eines
tcdump
s auf einem EdgeRouter.