присвоение номера wlan

Как и где Linux определяет назначение сетевого устройства? В частности, wlan0 или wlan1 для беспроводных USB-устройств.

Я подключил USB-интерфейс TP USB некоторое время назад, и ему было назначено wlan0 . Я удалил его. На этой неделе я подключил USB-устройство Edimax USB, и оно появилось как wlan1 . Я удалил его сегодня, чтобы попробовать второе беспроводное устройство Edimax USB (я купил два), и теперь он появляется wlan2 .

Я знаю достаточно Unix / Linux, чтобы знать, что это где-то настраивается, и если я удалю неиспользуемый файл конфигурации, я могу сделать последний Edimax wlan0 . Но как / где?

Udev – это системный компонент, определяющий имена устройств под Linux – в основном имена файлов в /dev , а также имена сетевых интерфейсов.

Версии udev от 099 до 196 поставляются с правилами записи имен сетевых интерфейсов и всегда используют один и тот же номер для одного и того же устройства. Эти правила отключены по умолчанию, начиная с udev 174, но тем не менее могут быть включены вашим дистрибутивом (например, Ubuntu сохраняет их). Некоторые дистрибутивы предоставляют разные наборы правил.

Сценарий, который записывает и резервирует имена интерфейсов для будущего использования, это /lib/udev/rules.d/75-persistent-net-generator.rules . Он пишет правила в /etc/udev/rules.d/70-persistent-net.rules . Поэтому удалите существующие записи wlan0 и wlan1 из /etc/udev/rules.d/70-persistent-net.rules и измените wlan2 на wlan0 . Запустите udevadm --trigger --attr-match=vendor='Edimax' (или любой --attr-match параметр --attr-match вы найдете, соответствует вашему устройству), чтобы повторно применить правила к уже подключенному устройству.

Эта проблема была решена с Systemd v197 с внедрением постоянных имен для сетевых устройств.

Согласно странице « Предсказуемые имена сетевых адресов freedesktop», ядро ​​просто назначало имена на основе порядка, который они определяли соответствующими драйверами:

Классическая схема именования сетевых интерфейсов, применяемая ядром, – это просто назначать имена, начинающиеся с «eth0», «eth1», … ко всем интерфейсам, поскольку они исследуются драйверами. Поскольку пробное тестирование драйверов обычно не предсказуемо для современных технологий, это означает, что, как только доступно несколько сетевых интерфейсов, назначение имен «eth0», «eth1» и т. Д. Обычно не фиксируется, и вполне может случиться так, eth0 "на одной загрузке заканчивается тем, что является" eth1 "на следующем.

Если ваш дистрибутив использует systemd, вы можете использовать предсказуемые, но, возможно, громоздкие имена, такие как wlp0s11 или вы можете написать правило udev чтобы дать им имя, с которым вам удобнее, например wifi1 , на основе MAC-адреса …

Включите файл в /etc/udev/rules.d/ называемый 10-network-device.rules :

 SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="22:bb:cc:33:44:dd", NAME="wifi1"