Ethernet-Karte Hänger
-
Topic author - Rank 5
- Beiträge: 427
- Registriert: Sa 27. Okt 2018, 17:51
- Hauptanschluß: 898906 laeng d
Re: Ethernet-Karte Hänger
Neue Erkenntnisse: Die Karte lässt sich reproduzierbar in den Zustand verbringen. Sie beantwortet testweise gesendete ICMP-Echo-Requests mit einer Payload bis zu 1468 Bytes, entsprechend 1510 Bytes Framelänge (plus 4 Byte FCS), zuverlässig, die ICMP-Echo-Replies haben dann eine Framelänge von 1514 Bytes.
Ab 1469 bis zu 1472 Bytes Payload (1511..1514 Bytes Frame plus 4 Byte FCS) werden Requests nicht mehr beantwortet und die Karte hängt sich manchmal auf (bei 1472 Bytes sehr oft).
Ab 1473 Bytes Payload entsprechend 2 Frames (Fragmented IP Protocol, 2 Frames mit 1514 und 35 Bytes da die MTU beim verwendeten Rechner auf 1500 steht) geht die Karte reproduzierbar in den Hänger mit der Anzeige "RAM-Fehler" über.
Damit wird auch klar, warum das Problem nicht ohne Traffic und bisher auch nicht bei nur internem Traffic im LAN auftritt: Es sendet intern keiner fragmentiert. Das kommt von außen (dann auf den Port 134). Dummerweise kann ich das aktuell nicht ohne weiteres unterbinden.
Ich habe mal den Wireshark-Trace mit den gefilterten Paketen angehängt, ein Dauerping mit Standard-Nutzdaten, einer mit dem Ping of death. Man sieht daß die Karte sogar noch Pings nach dem Todespaket beantwortet bevor sie stirbt:
Ab 1469 bis zu 1472 Bytes Payload (1511..1514 Bytes Frame plus 4 Byte FCS) werden Requests nicht mehr beantwortet und die Karte hängt sich manchmal auf (bei 1472 Bytes sehr oft).
Ab 1473 Bytes Payload entsprechend 2 Frames (Fragmented IP Protocol, 2 Frames mit 1514 und 35 Bytes da die MTU beim verwendeten Rechner auf 1500 steht) geht die Karte reproduzierbar in den Hänger mit der Anzeige "RAM-Fehler" über.
Damit wird auch klar, warum das Problem nicht ohne Traffic und bisher auch nicht bei nur internem Traffic im LAN auftritt: Es sendet intern keiner fragmentiert. Das kommt von außen (dann auf den Port 134). Dummerweise kann ich das aktuell nicht ohne weiteres unterbinden.
Ich habe mal den Wireshark-Trace mit den gefilterten Paketen angehängt, ein Dauerping mit Standard-Nutzdaten, einer mit dem Ping of death. Man sieht daß die Karte sogar noch Pings nach dem Todespaket beantwortet bevor sie stirbt:
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Gruß Bernd
--
Fernschreibstelle Labenz
DERZEIT OFFLINE 898906 laeng d
--
Fernschreibstelle Labenz
DERZEIT OFFLINE 898906 laeng d
-
- Rank 12
- Beiträge: 4210
- Registriert: Do 28. Mär 2019, 09:10
- Wohnort: Marburg
- Hauptanschluß: 7822222 hael d
Re: Ethernet-Karte Hänger
Das sieht nach einem Pufferüberlauf aus.
Gruß, Detlef
i-Telex: 7822222 (T1000), 114288 (F1300), 211230 (T100Z), 96868 (T37), 24394 (T68d)
Konf.-Dienst: 11160/11161, Rundsender: 11162/11163 , Baudot-Bilder: 11166, Chat-GPT: 11168
Mail-/Fax-Dienst: 11170/11171, News-Ticker: 11180/11181, hist. Ausk.: 40140, Wetter: 717171
i-Telex: 7822222 (T1000), 114288 (F1300), 211230 (T100Z), 96868 (T37), 24394 (T68d)
Konf.-Dienst: 11160/11161, Rundsender: 11162/11163 , Baudot-Bilder: 11166, Chat-GPT: 11168
Mail-/Fax-Dienst: 11170/11171, News-Ticker: 11180/11181, hist. Ausk.: 40140, Wetter: 717171
-
- Founder
- Beiträge: 2320
- Registriert: Fr 3. Jun 2016, 13:49
- Wohnort: Braunschweig
- Hauptanschluß: 8579924 hawe d
Re: Ethernet-Karte Hänger
Danke für deine Mühen. Mit dem Dateianhang kann ich mangels Kenntnissen nichts anfangen. Aber mich interessiert sehr, warum dann ein RAM-Fehler angezeigt wird, ich vermute auch dass es kein RAM-Fehler ist, sondern das initialisieren des ENC28J60 schiefgeht.
Kannst du bitte mal den genauen Ablauf der LED der Ethernet-Karte nach dem Ping of death beschreiben?
Kannst du bitte mal den genauen Ablauf der LED der Ethernet-Karte nach dem Ping of death beschreiben?
Grüße,
Fred Sonnenrein, Braunschweig
i-Telex 952741 (Lo133), 8579924 (T100s), 781272 (T100), 792911 (T68d) oder 531072 (T.typ.72)
Bei besetzt oder gestört bitte 531002 versuchen.
Fred Sonnenrein, Braunschweig
i-Telex 952741 (Lo133), 8579924 (T100s), 781272 (T100), 792911 (T68d) oder 531072 (T.typ.72)
Bei besetzt oder gestört bitte 531002 versuchen.
-
Topic author - Rank 5
- Beiträge: 427
- Registriert: Sa 27. Okt 2018, 17:51
- Hauptanschluß: 898906 laeng d
Re: Ethernet-Karte Hänger
Ich vermute eher daß da arbiträr irgendwas direkt über den Stack angesprungen wird.
Ein schlechtes Video sagt mehr als eine gute Beschreibung:
Sorry für die Schaukelei, in Seesternchenposition die rechte Hand mit dem Handy vors Rack halten und mit der linken ganz unten den Laptop bedienen...
Ein schlechtes Video sagt mehr als eine gute Beschreibung:
Sorry für die Schaukelei, in Seesternchenposition die rechte Hand mit dem Handy vors Rack halten und mit der linken ganz unten den Laptop bedienen...
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Gruß Bernd
--
Fernschreibstelle Labenz
DERZEIT OFFLINE 898906 laeng d
--
Fernschreibstelle Labenz
DERZEIT OFFLINE 898906 laeng d
-
- Founder
- Beiträge: 2320
- Registriert: Fr 3. Jun 2016, 13:49
- Wohnort: Braunschweig
- Hauptanschluß: 8579924 hawe d
Re: Ethernet-Karte Hänger
In der Tat merkwürdig, ein Reset nach Timeout käme entweder später und müsste mit blauer LED beginnen.
Grüße,
Fred Sonnenrein, Braunschweig
i-Telex 952741 (Lo133), 8579924 (T100s), 781272 (T100), 792911 (T68d) oder 531072 (T.typ.72)
Bei besetzt oder gestört bitte 531002 versuchen.
Fred Sonnenrein, Braunschweig
i-Telex 952741 (Lo133), 8579924 (T100s), 781272 (T100), 792911 (T68d) oder 531072 (T.typ.72)
Bei besetzt oder gestört bitte 531002 versuchen.
-
Topic author - Rank 5
- Beiträge: 427
- Registriert: Sa 27. Okt 2018, 17:51
- Hauptanschluß: 898906 laeng d
Re: Ethernet-Karte Hänger
Update: Auch mit Firmware 875 keine Besserung.
Gruß Bernd
--
Fernschreibstelle Labenz
DERZEIT OFFLINE 898906 laeng d
--
Fernschreibstelle Labenz
DERZEIT OFFLINE 898906 laeng d
-
- Founder
- Beiträge: 2320
- Registriert: Fr 3. Jun 2016, 13:49
- Wohnort: Braunschweig
- Hauptanschluß: 8579924 hawe d
Re: Ethernet-Karte Hänger
An den Ethernet / TCP-Stacks ist auch seit Beginn der Entwicklung fast nichts geändert worden. Leider ist das "Basisprojekt" OpenMCP vor etlichen Jahren "abgestorben". Daher werden neue Versionen keine Besserungen in deinem Problem bringen können.
Fangen wir mal weiter oben an... Was für eine Stromversorgung hast du? Kann es sein, dass die unter Umständen einknickt und Störungen verursacht?
Oder ein ganz anderer Ansatz: Nimm mal alles in deinem Heimnetz außer Betrieb, was nicht i-Telex ist. Kommen die Abstürze dann auch noch?
Fangen wir mal weiter oben an... Was für eine Stromversorgung hast du? Kann es sein, dass die unter Umständen einknickt und Störungen verursacht?
Oder ein ganz anderer Ansatz: Nimm mal alles in deinem Heimnetz außer Betrieb, was nicht i-Telex ist. Kommen die Abstürze dann auch noch?
Grüße,
Fred Sonnenrein, Braunschweig
i-Telex 952741 (Lo133), 8579924 (T100s), 781272 (T100), 792911 (T68d) oder 531072 (T.typ.72)
Bei besetzt oder gestört bitte 531002 versuchen.
Fred Sonnenrein, Braunschweig
i-Telex 952741 (Lo133), 8579924 (T100s), 781272 (T100), 792911 (T68d) oder 531072 (T.typ.72)
Bei besetzt oder gestört bitte 531002 versuchen.
-
- Rank 3
- Beiträge: 201
- Registriert: Mi 6. Mai 2020, 21:25
- Wohnort: Darmstadt
- Hauptanschluß: 844767 twtr d
Github
(Nebenbei: Scheinbar hat der ursprüngliche Entwickler vor einem Jahr den letzten Stand von OpenMCP auf Github hochgeladen, unter GPL 2.0. Mit entsprechenden Kenntnissen der Architektur wäre ein Fork für i-Telex machbar.)
844767 twtr d
-
- Founder
- Beiträge: 2320
- Registriert: Fr 3. Jun 2016, 13:49
- Wohnort: Braunschweig
- Hauptanschluß: 8579924 hawe d
Re: Ethernet-Karte Hänger
Ui, das ist interessant, da werde ich mich mal einklinken.
Grüße,
Fred Sonnenrein, Braunschweig
i-Telex 952741 (Lo133), 8579924 (T100s), 781272 (T100), 792911 (T68d) oder 531072 (T.typ.72)
Bei besetzt oder gestört bitte 531002 versuchen.
Fred Sonnenrein, Braunschweig
i-Telex 952741 (Lo133), 8579924 (T100s), 781272 (T100), 792911 (T68d) oder 531072 (T.typ.72)
Bei besetzt oder gestört bitte 531002 versuchen.
-
Topic author - Rank 5
- Beiträge: 427
- Registriert: Sa 27. Okt 2018, 17:51
- Hauptanschluß: 898906 laeng d
Re: Ethernet-Karte Hänger
So, ich habe jetzt 2 Änderungen getestet:
1. Für die ICMP-Antwort wird der ursprünglich empfangene Frame modifiziert und wieder zum Versand gegeben. Dabei wurde übersehen, daß der Empfangsframe die Prüfsumme am Ende enthält, diese beim Senden aber vom Chip selber angehängt wird (Register MACON3 Bits PADCFG). Dadurch wurde der ICMP-Reply um 4 Bytes zu lang gesendet. Lustigerweise steht sogar an der Stelle im code der Kommentar "length - 4", aber der code zieht da keine 4 ab...
Mit der Änderung können nun ICMP-ECHO-Requests mit bis zu 1472 Byte Länge korrekt verarbeitet werden (bisher: 1468)
ICMP-Echo-requests mit 1473 Bytes Payload bringen die Karte weiterhin in den Orkus...
2. Soweit ich sehen kann werden fragmentierte Pakete mit mehreren Frames nicht in der Ethernet-Schicht gehandhabt, sondern müssten in tieferliegenden Schichten behandelt werden. Zumindest die Schichten IP und ICMP tun das nicht. Damit würde ein zu langer ICMP-Echo-request in 2 Frames eintrudeln, wobei nur der erste einen IP-Header hat und das zweite Fragment erst angehängt werden müsste, bevor es in der IP-Schicht weiterverarbeitet wird. Da beim ersten Fragment der IP-Header und der ICMP-Header korrekt sind, müsste das hier trotzdem funktionieren, der Reply hätte dann eine zu geringe Länge. Der zweite Frame würde irgendwelchen Unsinn enthalten und vermutlich sofort verworfen werden. Dennoch habe ich testweise eingebaut, daß Frames mit Fragmenten gleich verworfen werden (auch dies war in Kommentaren bereits vorgesehen).
Dennoch bringt ein ICMP-ECHO-Request mit mehreren Frames die Karte gleich wieder in den Abgrund.
Meine Überlegung geht jetzt noch in eine andere Richtung: Soweit ich sehe wird die Ethernet-Routine im Interrupt aufgerufen. Fragentierte Pakete werden aber vermutlich so schnell wie möglich nacheinander gesendet, möglicherweise back-to-back, lediglich durch Präambel und SFD getrennt. Damit könnte während der Interruptbearbeitung ein weiterer vom ENC28J60 generiert werden, zumal das zweite Fragment beliebig kurz sein kann. Keine Ahnung wie das gehandhabt wird und was da passieren kann.
Also Test: Floodping an die Karte senden. Mit der Defaultlänge funktioniert das relativ gut, bei größeren Längen rebootet die Karte schnell (allerdings ohne den Hänger). Scheint also nicht so ganz sauber zu laufen, packet loss wäre OK, reboot nicht.
Ein kurzer Vergleich von OpenMCP auf github zeigt zumindest an den beiden ersten Stellen keinen Unterschied, also zumindest der ICMP-Bug ist da ebenfalls drin. Ich sehe, es ist noch mehr zu tun...
1. Für die ICMP-Antwort wird der ursprünglich empfangene Frame modifiziert und wieder zum Versand gegeben. Dabei wurde übersehen, daß der Empfangsframe die Prüfsumme am Ende enthält, diese beim Senden aber vom Chip selber angehängt wird (Register MACON3 Bits PADCFG). Dadurch wurde der ICMP-Reply um 4 Bytes zu lang gesendet. Lustigerweise steht sogar an der Stelle im code der Kommentar "length - 4", aber der code zieht da keine 4 ab...
Mit der Änderung können nun ICMP-ECHO-Requests mit bis zu 1472 Byte Länge korrekt verarbeitet werden (bisher: 1468)
ICMP-Echo-requests mit 1473 Bytes Payload bringen die Karte weiterhin in den Orkus...
2. Soweit ich sehen kann werden fragmentierte Pakete mit mehreren Frames nicht in der Ethernet-Schicht gehandhabt, sondern müssten in tieferliegenden Schichten behandelt werden. Zumindest die Schichten IP und ICMP tun das nicht. Damit würde ein zu langer ICMP-Echo-request in 2 Frames eintrudeln, wobei nur der erste einen IP-Header hat und das zweite Fragment erst angehängt werden müsste, bevor es in der IP-Schicht weiterverarbeitet wird. Da beim ersten Fragment der IP-Header und der ICMP-Header korrekt sind, müsste das hier trotzdem funktionieren, der Reply hätte dann eine zu geringe Länge. Der zweite Frame würde irgendwelchen Unsinn enthalten und vermutlich sofort verworfen werden. Dennoch habe ich testweise eingebaut, daß Frames mit Fragmenten gleich verworfen werden (auch dies war in Kommentaren bereits vorgesehen).
Dennoch bringt ein ICMP-ECHO-Request mit mehreren Frames die Karte gleich wieder in den Abgrund.
Meine Überlegung geht jetzt noch in eine andere Richtung: Soweit ich sehe wird die Ethernet-Routine im Interrupt aufgerufen. Fragentierte Pakete werden aber vermutlich so schnell wie möglich nacheinander gesendet, möglicherweise back-to-back, lediglich durch Präambel und SFD getrennt. Damit könnte während der Interruptbearbeitung ein weiterer vom ENC28J60 generiert werden, zumal das zweite Fragment beliebig kurz sein kann. Keine Ahnung wie das gehandhabt wird und was da passieren kann.
Also Test: Floodping an die Karte senden. Mit der Defaultlänge funktioniert das relativ gut, bei größeren Längen rebootet die Karte schnell (allerdings ohne den Hänger). Scheint also nicht so ganz sauber zu laufen, packet loss wäre OK, reboot nicht.
Ein kurzer Vergleich von OpenMCP auf github zeigt zumindest an den beiden ersten Stellen keinen Unterschied, also zumindest der ICMP-Bug ist da ebenfalls drin. Ich sehe, es ist noch mehr zu tun...
- Folgende Benutzer bedankten sich beim Autor ProgBernie für den Beitrag (Insgesamt 3):
- cguenther • FredSonnenrein • BjoernS
Gruß Bernd
--
Fernschreibstelle Labenz
DERZEIT OFFLINE 898906 laeng d
--
Fernschreibstelle Labenz
DERZEIT OFFLINE 898906 laeng d