Dell M14MK SFP28 auf OpenWrt abgelehnt mit no common interface modes, während ein QSFPTEK SFP+ linkt
Kleines Homelab. Ich habe einen Linksys LGS328C auf OpenWrt SNAPSHOT geflasht, um vom Stock-Webinterface wegzukommen. Alles hat den Umzug überlebt bis auf einen SFP28-Port, der vorher tadellos funktioniert hat.
- Switch: Linksys LGS328C (Realtek rtl930x), OpenWrt SNAPSHOT
- Modul: Dell S28-10G-25G-SR-85C, Dual-Rate 10G/25G, EEPROM liest DELL M14MK rev A1
- Referenzmodul im selben Käfig: QSFPTEK QT-SFP+-SR
- gleiche Faser und gleiches Gegenende bei beiden Tests
Das Dell-Modul wird erkannt und dann direkt rausgeworfen:
sfp sfp-p49: module DELL M14MK rev A1
rtl83xx-switch ...: unsupported SFP module: no common interface modes
# ethtool lan28
Advertised link modes: 10000baseCR/Full
Link detected: no
Was ich schon geprüft habe:
- das QSFPTEK SFP+ im selben Käfig eingesetzt: Das Log zeigt, wie der Port inband/10gbase-r wählt, und ich bekomme einen sauberen 10-Gbps-Link;
- dasselbe Dell-Modul lief an diesem Switch unter der Stock-Firmware einwandfrei, die Optik ist also nicht tot;
- neu gesteckt und den Anschluss gereinigt, keine Änderung im Log.
Ist das Modul tatsächlich falsch programmiert, oder ist der Switch-Treiber wählerisch bei einem 25G-fähigen Teil? Ich würde das gern verstehen, statt einfach eine andere Optik zu kaufen.
Comments 5
Dieser Dump erklärt die ganze Sache. Der sfp-Layer des Kernels hat genau eine Eingabe, wenn er herausfindet, welche Interface-Modi ein Modul beherrscht, und das sind diese Compliance-Bytes. Sind keine davon gesetzt, landet er bei einer leeren Menge, schneidet die mit dem, was der MAC anbietet, findet nichts gemeinsam und druckt genau die Meldung, die du siehst. Das 10000baseCR/Full in ethtool ist das, was von der Port-Seite übrig bleibt, nicht etwas, das das Modul angefragt hat. Die Stock-Herstellerfirmware kümmert sich nicht darum, weil diese Images die Compliance-Bytes generell komplett überspringen und stattdessen Vendor- und Part-Strings gegen eine fest codierte Liste abgleichen - deshalb hat die Optik funktioniert, bevor du geflasht hast.
Die Lösung, die tatsächlich hält, ist ein Modul-Quirk. In drivers/net/phy/sfp.c einen SFP_QUIRK_S-Eintrag hinzufügen, der auf Vendor DELL mit Part M14MK passt und zwangsweise ETHTOOL_LINK_MODE_10000baseSR_Full sowie PHY_INTERFACE_MODE_10GBASER setzt, dann das Image neu bauen. Der Port kommt als gewöhnlicher 10G-Link hoch, meldet 10000baseSR/Full, und die Unsupported-Module-Zeile verschwindet aus dem Log.
Zwei Einschränkungen. Halt den Patch in einer Form, die du an netdev schicken kannst, statt ihn nur nachgelagert bei dir liegen zu lassen: Das EEPROM repariert sich nicht von selbst, und andere Leute besitzen dasselbe Dell-Teil. Und falls du lieber gar keinen eigenen Kernel-Build pflegen willst, ist die langweilige Alternative das QSFPTEK SFP+, das du schon hast - 10G ist ohnehin alles, was dieser Port hergibt.
Bevor du dem Switch-Treiber die Schuld gibst, dump das EEPROM und schau nach, was das Modul deklariert:
ethtool --module-info lan28. Poste die ersten Zeilen des Hex-Dumps plus das vollständigeethtool lan28. "no common interface modes" heißt, der Kernel konnte aus dem Modul keinen einzigen brauchbaren Modus ableiten, der Inhalt dieser Bytes ist hier also die ganze Geschichte.Noch etwas zum Bestätigen: Steckt das QSFPTEK im selben Käfig, nicht in einem Nachbarkäfig? Deine Log-Zeile sagt p49, während die ethtool-Ausgabe lan28 ist, und Ports bei so einem Test zu verwechseln kostet eine Menge Zeit.
Gedumpt. Kurzfassung: Es ist überhaupt kein 10G-Compliance-Code gesetzt - diese Bytes sind schlicht leer, während Vendor- und Part-Strings genau so gefüllt sind, wie man es für ein DELL M14MK rev A1 erwarten würde.
ethtool lan28zeigt weiterhinAdvertised link modes: 10000baseCR/FullundLink detected: no, unddmesg | grep lan25bringt nichts über die zwei Zeilen aus meinem ersten Beitrag hinaus.Das Modul sagt dem Host also fast nichts darüber, was es tatsächlich kann, und das QSFPTEK im selben Käfig linkt weiterhin mit 10 Gbps.
Lohnt sich festzuhalten, denn der frühere Bugreport zu genau dieser Paarung tippte auf etwas anderes. Die Theorie dort war, dass das Dual-Rate-Modul 25gbase-r anbietet, der rtl930x-Treiber diesen Modus nicht implementiert, die Schnittmenge leer herauskommt und am Modul selbst nichts falsch ist. Der Hex-Dump killt diese Erklärung: Das Modul bietet gar nichts an, nicht 25G. Dieselbe Kernel-Meldung, andere Ursache, und nur der Dump unterscheidet die beiden.
Es ist auch eine Erinnerung daran, dass eine herstellermarkierte Optik nicht automatisch korrekt codiert ist. Dells eigenes OS10 zeigt ein echtes Q28-128GFC-SW4 (Teil KP0VM) als QSFP28 100GBASE-SR4 mit Qualified false, weil manche Chargen eine EEPROM-Codierung tragen, die seine Media-Qualifizierung nicht erkennt, und der FC-Link bleibt unten, bis man nicht unterstützte Transceiver von Hand erlaubt.
Ein Image mit dem SFP_QUIRK_S-Eintrag für DELL / M14MK gebaut, und es tut genau das, was du beschrieben hast. Der Port linkt mit 10 Gbps,
ethtool lan28meldet jetzt 10000baseSR/Full bei Link up, und das Log ist sauber - nirgendwo eine Unsupported-Module-Zeile. Ein paar Tage mit echtem Traffic laufen lassen, bevor ich sonst noch etwas an der Box angefasst habe, keine Flaps.Räume den Patch jetzt auf, um ihn an netdev zu schicken, ihn nur im eigenen Tree zu behalten hilft ja niemandem. Danke, dass du mich zuerst zum module-info-Dump geschickt hast, ich hatte schon zwei Abende die Treiber-Modustabellen gelesen.