Projekte/v642/olsrd2-Debug-Party: Unterschied zwischen den Versionen

Aus FunkFeuer Wiki
< Projekte‎ | v642
Zur Navigation springen Zur Suche springen
(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…“)
 
(→‎Wie wird Netzwerkverkehr aufgezeichnet?: Abschnitt umbenannt und neu strukturiert, um auf Wireshark und PacketBB-dekodiert-olsrd2 hinzuweisen)
Zeile 9: Zeile 9:




== Wie wird Netzwerkverkehr aufgezeichnet? ==
== 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 tcdumps auf einem EdgeRouter.