CodingBox Q&A Ask question

Dell M14MK SFP28 отклоняется на OpenWrt с no common interface modes, а QSFPTEK SFP+ линкуется

Asked Active Viewed 92 AI translation from English
7

Небольшая домашняя лаборатория. Перепрошил Linksys LGS328C на OpenWrt SNAPSHOT, чтобы уйти от стокового веб-интерфейса. Всё пережило переход, кроме одного порта SFP28, который раньше прекрасно работал.

  • коммутатор: Linksys LGS328C (Realtek rtl930x), OpenWrt SNAPSHOT
  • модуль: Dell S28-10G-25G-SR-85C, двухскоростной 10G/25G, EEPROM читается как DELL M14MK rev A1
  • эталонный модуль в том же слоте: QSFPTEK QT-SFP+-SR
  • одинаковое волокно и один и тот же дальний конец в обоих тестах

Модуль Dell определяется и тут же выбрасывается:

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

Что уже проверил:

  • поставил QSFPTEK SFP+ в тот же слот: в логе видно, что порт выбирает inband/10gbase-r, и я получаю чистый линк 10 Гбит/с;
  • тот же модуль Dell нормально работал на этом коммутаторе под стоковой прошивкой, так что оптика не мертва;
  • переустановил и почистил коннектор - без изменений в логе.

Модуль реально неправильно запрограммирован, или драйвер коммутатора придирается к 25G-совместимой детали? Хочу разобраться в этом, а не просто купить другую оптику.

Comments 5

Accepted answer

Этот дамп всё объясняет. У слоя sfp в ядре ровно один источник данных для определения, какие режимы интерфейса может выдать модуль - это те самые байты соответствия. Когда ни один из них не выставлен, получается пустое множество, оно пересекается с тем, что предлагает MAC, общего не находится ничего, и печатается ровно то сообщение, что вы видите. 10000baseCR/Full в ethtool - это то, что осталось от стороны порта, а не то, что запросил модуль. Стоковая прошивка вендора на это не смотрит, потому что такие образы обычно вообще пропускают байты соответствия и вместо этого сверяют строки vendor и part со встроенным списком - вот почему оптика работала до перепрошивки.

Решение, которое реально держится - это квирк модуля. В drivers/net/phy/sfp.c добавьте запись SFP_QUIRK_S, совпадающую по vendor DELL и part M14MK, и принудительно выставляйте ETHTOOL_LINK_MODE_10000baseSR_Full и PHY_INTERFACE_MODE_10GBASER, затем пересоберите образ. Порт поднимается как обычный 10G линк, отчитываясь 10000baseSR/Full, и строка unsupported-module исчезает из лога.

Два предостережения. Держите патч в виде, который можно отправить в netdev, а не сидеть на нём в отдельной ветке: EEPROM сам себя не починит, и та же деталь Dell есть у других людей. И если вы вообще не хотите поддерживать свою сборку ядра, скучная альтернатива - уже имеющийся у вас QSFPTEK SFP+ - 10G это всё, что этот порт вам в любом случае даст.

5 United Statestxnode67US Show original (English) AI translation

Прежде чем винить драйвер коммутатора, снимите дамп EEPROM и посмотрите, что объявляет модуль: ethtool --module-info lan28. Выложите первые строки hex-дампа плюс полный ethtool lan28. "no common interface modes" означает, что ядро не смогло вывести ни одного пригодного режима из модуля, так что содержимое этих байтов - вся история здесь.

Ещё стоит уточнить: QSFPTEK стоит именно в том же слоте, а не в соседнем? В вашем логе строка про p49, а вывод ethtool про lan28, и путаница портов в таком тесте тратит много времени.

3 United Statesphotonrunner70US Show original (English) AI translation

Снял дамп. Короткая версия: кода соответствия 10G нет вообще - эти байты просто пусты, при этом строки vendor и part заполнены ровно так, как и ожидалось для DELL M14MK rev A1. ethtool lan28 по-прежнему показывает Advertised link modes: 10000baseCR/Full и Link detected: no, а dmesg | grep lan25 не выдаёт ничего сверх тех двух строк из моего первого поста.

То есть модуль почти ничего не сообщает хосту о том, что он реально умеет, а QSFPTEK в том же слоте по-прежнему линкуется на 10 Гбит/с.

0 South Koreawaverunner63KR Show original (English) AI translation

Стоит записать, потому что более раннее сообщение об этом же баге на точно такой же паре предполагало другое. Теория там была, что двухскоростной модуль объявляет 25gbase-r, драйвер rtl930x не реализует этот режим, пересечение выходит пустым, и с самим модулем всё в порядке. Hex-дамп убивает это объяснение: модуль не объявляет ничего, не 25G. То же самое сообщение ядра, другая причина, и различить их можно только по дампу.

Это также напоминание, что брендовая оптика вендора не автоматически закодирована правильно. Собственная OS10 от Dell покажет подлинный Q28-128GFC-SW4 (партномер KP0VM) как QSFP28 100GBASE-SR4 с Qualified false, потому что некоторые партии несут EEPROM-кодировку, которую её проверка медиа не распознаёт, и FC-линк остаётся down, пока вручную не разрешить неподдерживаемые трансиверы.

1 RussianetadminRU Show original (English) AI translation

Собрал образ с записью SFP_QUIRK_S для DELL / M14MK, и он делает ровно то, что вы описали. Порт линкуется на 10 Гбит/с, ethtool lan28 теперь показывает 10000baseSR/Full с поднятым линком, и лог чистый - нигде нет строки unsupported-module. Оставил работать под реальным трафиком на несколько дней, прежде чем трогать что-либо ещё на коробке, флапов нет.

Сейчас причёсываю патч для отправки в netdev, потому что держать его в своём дереве никому не помогает. Спасибо, что подтолкнули меня сначала к дампу module-info, я два вечера читал таблицы режимов драйвера.

2 South Koreawaverunner63KR Show original (English) AI translation
Log in to comment. Log in