CodingBox Q&A Ask question

SONiC dekoduje CMIS 4.0 QSFP-DD na zniekształcone pola vendora, podczas gdy moduły SFF parsują się poprawnie

Asked Active Viewed 101 AI translation from English
5

Nasze narzędzie inwentaryzacyjne obchodzi każdy switch i zapisuje vendora, part number i numer seryjny dla każdego pluggable prosto z CLI SONiC. Działa wszędzie oprócz jednej partii modułów QSFP-DD, gdzie pola tożsamości wracają zniekształcone, a baza zasobów zapełnia się śmieciami.

  • Switch: SONiC, klatki QSFP-DD
  • Moduł: QSFP-DD, CMIS 4.0, part vendora T-DP4CNH-NCI, numer seryjny L23340629 19 wydrukowany na etykiecie
  • Starsze moduły w stylu SFF w tym samym chassis dekodują się czysto
$ show interface transc eeprom
Vendor Name: T-DP4CNH-NCI
Vendor PN:   <unreadable>
Vendor SN:   <garbled characters>
Encoding:    <shifted>
Connector:   <shifted>

Czyli part number pojawia się tam, gdzie powinna być nazwa vendora, numer seryjny jest nieczytelny, a encoding i connector też są przesunięte. Co sprawdziłem:

  • ponownie osadziłem moduł i odczytałem go jeszcze raz, bajt po bajcie ten sam wynik
  • etykieta naprawdę mówi T-DP4CNH-NCI i L23340629 19, więc te ciągi istnieją wewnątrz modułu
  • QSFP28 w sąsiedniej klatce drukuje vendora, PN i SN poprawnie tą samą komendą

Czy to moduł źle zapisuje swój EEPROM, czy CLI czyta złe bajty dla części CMIS? I czy jest w międzyczasie sposób, żeby zdobyć odczyt, któremu faktycznie mogę zaufać?

Comments 6

Na jakiej gałęzi jesteś? Są znane niespójności nazw kluczy między show interfaces transceiver eeprom a sfputil w 202012, które zostały ogarnięte w 202205, i warto to wykluczyć, zanim zaczniesz kopać głębiej.

Wklej wynik sudo sfputil show eeprom -d dla tego samego portu. Jeśli sfputil daje ci te same zniekształcone ciągi, usterka jest we wspólnej ścieżce dekodowania. Jeśli zamiast tego wywala błąd, jesteś w innym terytorium - mamy platformy, gdzie po prostu odpowiada Cannot get Module EEPROM data: Invalid argument i nigdy nie dochodzi do dekodowania czegokolwiek.

4 GermanycoreadminDE Show original (English) AI translation

Odpaliłem oba: sudo sfputil show eeprom -d i show interfaces transceiver eeprom -d na tym samym porcie. Identyczne zniekształcenie, te same pola, te same śmieci tam, gdzie powinien być numer seryjny. Żadnego Invalid argument nigdzie, sam odczyt przechodzi bez zastrzeżeń.

Czyli obie komendy zgadzają się ze sobą, tylko zgadzają się na złej odpowiedzi. Sąsiednie porty QSFP28 zostają czyste w obu, co sprawia, że wygląda to na coś specyficznego dla tej części CMIS, a nie dla platformy.

2 Indiawaverunner21IN Show original (English) AI translation

Ten wzorzec to podpis parsera zastosowanego do mapy pamięci, której nie rozumie: part number siedzący w polu nazwy vendora, nieczytelny numer seryjny, przesunięte connector i encoding. Zepsuty moduł albo zepsuty odczyt I2C dają błąd albo blok zer, a nie schludnie błędne ciągi.

Ścieżka dekodowania siedzi w sonic_platform_base/sonic_sfp/sfputilbase.py, i tam te trzy ciągi tożsamości są zdejmowane z offsetów zaszytych na sztywno względem starszej mapy SFF, cokolwiek by nie było podłączone. CMIS 4.0 QSFP-DD nie trzyma swojego bloku tożsamości pod tymi adresami - spec CMIS 4.0 opisuje to w sekcji 8.3 - więc kod czyta prawdziwe bajty z właściwego modułu, tylko nie te, które sądzi, że czyta, i drukuje cokolwiek zajmuje ten zakres. Dlatego też nic nigdy nie failuje czysto: żaden krok nie patrzy na bajt identyfikatora i nie przełącza się na układ CMIS.

Praktyczny wniosek jest taki, że nic poniżej parsera, który rozumie mapę CMIS, nie zrobi tego dobrze, a dopóki to nie wyląduje w twojej gałęzi, wynik CLI dla tej części nie jest klasy inwentaryzacyjnej. Do bazy zasobów czytaj strony surowo i dekoduj je sam, zamiast skrobać CLI.

3 Vietnamlambdaeng12VN Show original (English) AI translation

Do surowego odczytu chcesz sterownika optoe: wystawia EEPROM-y SFP, QSFP i CMIS do bezpośredniego odczytu i zapisu, więc możesz wyciągnąć bajty i zdekodować je we własnym skrypcie. To jedyne, czym na razie karmiłbym bazę zasobów dla części CMIS.

Jedno ostrzeżenie, jeśli szukasz offsetów. Tabela, którą wszyscy cytują, to ta SFF - A0h bajty 20-35 na nazwę vendora, 40-59 na PN, rev i SN. To dokładnie te offsety, które produkują twoje śmieci na module CMIS, więc nie używaj ich tam ponownie. Ta sama ostrożność na hoście Linux jako narzędziu na stole: ethtool -m do widoku zdekodowanego i ethtool -e do surowych bajtów są w porządku dla części SFP, ale sprawdź, co twój build faktycznie rozumie, zanim zaufasz polom, które drukuje dla CMIS.

2 Chinacorebyte73CN Show original (English) AI translation

Obsługa CMIS jest cienka w więcej miejscach niż tylko dekoder EEPROM. Wstawiliśmy do eksploatacji tacę optyki InnoLight 800G QSFP-DD, T-DP8CNH-NNO i T-DP8CNT-NNO, i mniej więcej co drugie włożenie zostawiało nas z martwym portem: datapathy zgłaszały DataPathDeactivated, log niósł timeout dla 'ConfigSuccess', a stamtąd port był down na stałe - żadnego retry, nic, co przywróciłoby go samo.

Winowajca okazał się decommission_all_datapaths() w cmis.py. Przechodzi całą sekwencję jedno po drugim - DEINIT, application ID wyzerowany do 0, potem INIT - i nigdy nie sprawdza, czy krok faktycznie zadziałał, zanim zacznie następny. Nasze części potrzebują dokładnie tego potwierdzenia, więc datapath zostaje na wpół skonfigurowany, a maszyna stanów po prostu wysiaduje swój timer. Prawdziwa poprawka musi czekać asynchronicznie, bo nie można blokować wewnątrz inline'owej maszyny stanów CMIS w xcvrd, i ostatnio jak sprawdzałem, nikt takiej nie wylądował. Inny bug, ten sam motyw: ścieżka CMIS doczepiona do kodu napisanego pod części SFF.

4 Indiarackpilot49IN Show original (English) AI translation

Jedna korekta do kierunku, w który to dryfuje, bo te dwa tryby awarii ciągle się ze sobą mieszają. Cannot get Module EEPROM data: Invalid argument, albo QSFP znikający z sfputil po cyklu zasilania, dopóki sterownik nie zostanie naprawiony, albo platforma, która po prostu nie implementuje get_transceiver_info - to są luki platformy i sterownika, i zatrzymują cię, zanim dojdzie do jakiegokolwiek dekodowania.

To, co jest opisane tutaj, to coś odwrotnego: kompletny, udany odczyt, który potem jest interpretowany z złym układem pól. Nie wymieniaj modułów ani nie goń wersji sterownika przez to. Bajty wewnątrz tego modułu są w porządku, a każde narzędzie, które zdekoduje je jako CMIS, pokaże ci numer seryjny z etykiety.

3 CanadalantechCA Show original (English) AI translation
Log in to comment. Log in