Используйте родительский атрибут «serial» в конфигурации UDEV, чтобы назначить интерфейсу локальной сети другое имя, а не полагаться на MAC-адрес.

Используйте родительский атрибут «serial» в конфигурации UDEV, чтобы назначить интерфейсу локальной сети другое имя, а не полагаться на MAC-адрес.

Учитывая эту проблему ядра, ожидающую исправления, и случайным образом назначаем MAC-адрес этим USB3 LAN-адаптерам:Debian 12 - Внезапно моему USB3 Lan адаптеру назначается случайный MAC-адрес при каждой перезагрузке

Я пытаюсь найти обходной путь помимо пользовательских настроек.перекомпиляция ядра с патчемилииспользовать старую версию ядра.

По сути, все мои настройки интерфейсов основаны на пользовательских именах, полученных с помощью файла конфигурации udev.70-постоянные-сетевые.правила(некоторые интерфейсы переименовываются на основе их MAC-адреса, но, учитывая указанную выше ошибку, это больше не работает).

Рассматривая синтаксис файлов udev/etc/udev/rules.d/70-persistent-net.rules

В моей конфигурации есть такие строки:

SUBSYSTEM="net", ACTION="add", DRIVERS="?*", ATTR{address}="00:....", ATTR{dev_id}="0x0", ATTR{type}="1", KERNEL="eth*", NAME="lan1"

Вот что я обнаружил, вызвав команду:

udevadm информация -a -p /sys/class/net/eth1

и то же самое с eth2, eth3, eth4, eth5...

что есть интересный ATTR для уникальной идентификации интерфейсов.

Это атрибут, называемый «serial», но он недоступен для eth1, eth2..., но доступен для их прямого родительского устройства dev.

Действительно, заповедь начинается со слов:глядя на устройство ...но после того, как он говоритсмотрим на родительское устройство...

Поэтому мне интересно, могу ли я сделать что-то вроде:

SUBSYSTEM="net", ACTION="add", DRIVERS="?*", ATTR{parent>serial}="00000003", ATTR{dev_id}="0x0", ATTR{type}="1", KERNEL="eth*", NAME="lan1"

использование родительского серийного номера вместо того, чтобы основывать конфигурацию на MAC-адресе, чтобы переименовать интерфейс локальной сети.

Существует ли такой синтаксис?

Спасибо

решение1

Кажется, я нашел ответ на этот вопрос в этом посте:Чем отличаются USB-устройства?

Читая эту ссылку:https://www.reactivated.net/writing_udev_rules.html

Кажется, что вы можете смешивать уровни с одним родителем с фактическим уровнем, используяАТТРС, поэтому использованиеATTRS{серийный}вместоATTR{адрес}и используя серийный номер, предоставленныйudevadm информация -a -p /sys/class/net/eth1сделать работу.

Пример:

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTRS{serial}=="00000000000094", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="lan1"

Поэтому я вернулся к использованию последнего ядра Linux, ожидая, что разработчики Debian поместят патч в upstream-канал, чтобы можно было прочитать mac в eeprom. Пока это обходной путь, но надежный.

Единственное интересное то, что если к устройствам не подключены кабели, то в моем случае будут присутствовать и lan1, и eth0, lan1 активен и «странным образом» получает правильный MAC-адрес, а eth0 по-прежнему отключен со случайным MAC-адресом.

EDIT: Это работало, пока я не обнаружил, что некоторые устройства используют один и тот же серийный номер ¯_(ツ)_/¯, поэтому я начал использовать напрямую номер корневой шины USB и номер устройства для уникальной идентификации адаптеров, учитывая тот факт, что я всегда оставляю их на месте, не перемещая. Проверьте это по вопросу:Используйте путь usb адреса USB-NIC в правилах udev, чтобы назначить имя интерфейса вместо MAC-адреса.

Связанный контент