Dell M14MK SFP28 отклоняется на OpenWrt с no common interface modes, а QSFPTEK SFP+ линкуется
Небольшая домашняя лаборатория. Перепрошил 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
Этот дамп всё объясняет. У слоя 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 это всё, что этот порт вам в любом случае даст.
Прежде чем винить драйвер коммутатора, снимите дамп EEPROM и посмотрите, что объявляет модуль:
ethtool --module-info lan28. Выложите первые строки hex-дампа плюс полныйethtool lan28. "no common interface modes" означает, что ядро не смогло вывести ни одного пригодного режима из модуля, так что содержимое этих байтов - вся история здесь.Ещё стоит уточнить: QSFPTEK стоит именно в том же слоте, а не в соседнем? В вашем логе строка про p49, а вывод ethtool про lan28, и путаница портов в таком тесте тратит много времени.
Снял дамп. Короткая версия: кода соответствия 10G нет вообще - эти байты просто пусты, при этом строки vendor и part заполнены ровно так, как и ожидалось для DELL M14MK rev A1.
ethtool lan28по-прежнему показываетAdvertised link modes: 10000baseCR/FullиLink detected: no, аdmesg | grep lan25не выдаёт ничего сверх тех двух строк из моего первого поста.То есть модуль почти ничего не сообщает хосту о том, что он реально умеет, а QSFPTEK в том же слоте по-прежнему линкуется на 10 Гбит/с.
Стоит записать, потому что более раннее сообщение об этом же баге на точно такой же паре предполагало другое. Теория там была, что двухскоростной модуль объявляет 25gbase-r, драйвер rtl930x не реализует этот режим, пересечение выходит пустым, и с самим модулем всё в порядке. Hex-дамп убивает это объяснение: модуль не объявляет ничего, не 25G. То же самое сообщение ядра, другая причина, и различить их можно только по дампу.
Это также напоминание, что брендовая оптика вендора не автоматически закодирована правильно. Собственная OS10 от Dell покажет подлинный Q28-128GFC-SW4 (партномер KP0VM) как QSFP28 100GBASE-SR4 с Qualified false, потому что некоторые партии несут EEPROM-кодировку, которую её проверка медиа не распознаёт, и FC-линк остаётся down, пока вручную не разрешить неподдерживаемые трансиверы.
Собрал образ с записью SFP_QUIRK_S для DELL / M14MK, и он делает ровно то, что вы описали. Порт линкуется на 10 Гбит/с,
ethtool lan28теперь показывает 10000baseSR/Full с поднятым линком, и лог чистый - нигде нет строки unsupported-module. Оставил работать под реальным трафиком на несколько дней, прежде чем трогать что-либо ещё на коробке, флапов нет.Сейчас причёсываю патч для отправки в netdev, потому что держать его в своём дереве никому не помогает. Спасибо, что подтолкнули меня сначала к дампу module-info, я два вечера читал таблицы режимов драйвера.