Вопрос или проблема
Я хочу использовать ethtool для тестирования сетевого кабеля с помощью ethtool --cable-test
и ethtool --cable-test-tdr
.
Я пытался сделать это (как root) на своем компьютере (внутренний сетевой адаптер), двух адаптерах USB-to-Ethernet и внутреннем адаптере Raspberry Pi4.
Во всех случаях я получил Unsupported Operation
. Похоже, что только конкретные устройства и драйверы поддерживают эту функцию.
Есть ли какой-либо список, который показывает, какие именно? Я не смог найти такой сам.
На моем компьютере установлена Arch Linux, так что у меня самый новый ядро Linux (6.6.6-arch1-1).
Будет здорово, если кто-то из вас укажет мне правильное направление, как это сделать.
Я сделал следующее:
Проверил исходный код ethtool, чтобы увидеть, какие сообщения netlink он использует при запросе результатов тестирования кабеля (например, nl_cable_test
и nl_cable_test_tdr
). Затем я проследил их в дерево исходных кодов драйвера ядра, и похоже, что следующие драйверы Ethernet PHY поддерживают базовое тестирование кабеля:
drivers/net/phy/at803x.c
drivers/net/phy/bcm-phy-lib.h
drivers/net/phy/nxp-c45-tja11xx.c
drivers/net/phy/nxp-tja11xx.c
drivers/net/phy/adin.c
drivers/net/phy/micrel.c
drivers/net/phy/bcm-phy-lib.c
drivers/net/phy/phy_device.c
drivers/net/phy/marvell.c
drivers/net/phy/microchip_t1.c
drivers/net/phy/bcm54140.c
… для полного списка поддерживаемых чипов NIC вам нужно будет обратиться к этим исходным файлам и другим частям кода, чтобы увидеть, к какому оборудованию NIC это относится.
Единственным, который поддерживает тестирование TDR (на Linux 6.7.0), был драйвер Marvell PHY. Другие комментарии в другом месте в исходном коде (например, заголовочные файлы IC NIC) предполагают, что различные другие чипы также имеют какую-либо функциональность аппаратного TDR (включая некоторое древнее оборудование), но похоже, что они остаются не реализованными.
Поддержка тестирования TDR Marvell, похоже, была добавлена Андрю Ланном, и есть несколько видео на YouTube, в которых он представляет эту работу.
Обновление: Тестирование TDR работает на Huawei AP5030DN с патчем в стадии разработки https://github.com/openwrt/openwrt/issues/17077 – я обновлю этот ответ со списком известных работающих устройств, когда эта работа будет завершена.
Ответ или решение
Для успешного использования команд ethtool --cable-test
и ethtool --cable-test-tdr
необходимо учитывать, что не все сетевые устройства и драйверы поддерживают данную функциональность. Ваша проблема заключается в том, что при попытке выполнения этих команд на различных сетевых адаптерах возникает сообщение об ошибке "Unsupported Operation". Это значит, что ваше оборудование или драйверы не способны выполнять тестирование кабеля.
Поддерживаемые устройства и драйверы для ethtool --cable-test
Исходный код утилиты ethtool
показывает, что поддержка функций тестирования кабеля реализована только на определенных драйверах Ethernet PHY. На данный момент, под Linux с ядром 6.6.6 и выше, для операций тестирования кабеля доступны следующие драйверы:
- at803x.c – Драйвер для PHY на основе чипа Atheros.
- bcm-phy-lib.h – Библиотека для драйверов на основе Broadcom PHY.
- nxp-c45-tja11xx.c – Драйвер для PHY-наборов от NXP.
- nxp-tja11xx.c – Еще один драйвер от NXP.
- adin.c – Драйвер для Adin Technology PHY.
- micrel.c – Драйвер для PHY на основе Micrel.
- bcm54140.c – Драйвер для Broadcom BCM54140.
- marvell.c – Драйвер, поддерживающий тестирование TDR (Time Domain Reflectometry).
- microchip_t1.c – Драйвер для Microchip PHY.
Поддержка TDR-тестирования
На текущий момент поддержка TDR-тестирования реализована только в драйвере Marvell. Это означает, что если вы хотите использовать --cable-test-tdr
, вам необходимо удостовериться, что ваше устройство использует данный драйвер.
Кроме того, в источник кода также отмечается поддержка TDR-тестирования для оборудования Huawei AP5030DN, но для его работы требуется использование патча, находящегося в стадии разработки. Работы над поддержкой TDR также затрагивают и другие чипы, но пока не все из них имеют реализованную функциональность.
Как проверить поддерживаемость
Если вы хотите проверить, поддерживает ли ваш сетевой адаптер данную функциональность, выполните следующие шаги:
- Убедитесь, что у вас установлен
ethtool
, и вы используете последнюю версию, совместимую с вашим ядром. - Используйте команду
ethtool -i <имя_интерфейса>
, чтобы получить информацию о драйвере вашего сетевого устройства. - Проверьте, принадлежит ли ваш драйвер к одному из перечисленных выше.
- Выполните команду
ethtool --cable-test <имя_интерфейса>
, чтобы произвести тест. Если появляется ошибка "Unsupported Operation", то оборудование, вероятно, не поддерживает данную функцию.
Заключение
Изучение поддерживаемых устройств и драйверов для функций ethtool --cable-test
и ethtool --cable-test-tdr
позволяет вам точно определить, какие адаптеры будут работать. Для полноты картины следует проверять исходный код драйверов и следить за обновлениями, так как поддержка может расширяться с выходом новых версий ядра и драйверов. Если у вас возникнут дополнительные вопросы или пожелания, буду рад помочь вам более подробно.