постоянные сетевые правила udev: именование интерфейсов на основе драйвера/чипсета

постоянные сетевые правила udev: именование интерфейсов на основе драйвера/чипсета

Я работаю над проектом с использованием серии Raspberry Pi, каждая из которых оснащена двумя различными беспроводными картами (с разными чипсетами / использующими разные модули, одна из них — rtl8187, а другая — rt2800usb).

На данный момент я установил постоянные правила именования для каждой Pi, поэтому, когда я настраиваю новую Pi или меняю беспроводные карты между Pi, мне приходится редактировать их так, чтобы новая карта rtl8187 по-прежнему имела имя wlan0, а новая карта rt2800usb — wlan1.

Есть ли способ изменить постоянные правила, чтобы называть интерфейсы на основе используемого ими модуля или что-то в этом роде? В идеале я хотел бы, чтобы он знал, что любая карта rtl8187, которую я подключаю, должна быть wlan0, а любая карта rt2800usb должна быть wlan1.

Или в качестве обходного пути, есть ли способ использовать частичный подстановочный знак для сопоставления MAC-адреса? Каждая карта, которая у меня есть с тем же чипсетом, имеет тот же префикс MAC-адреса поставщика.

решение1

Первое, что я бы попробовал, это просто изменить

ATTR{address}=="12:34:56:78:9A:AB"

к

ATTR{address}=="12:34:56:*"

(при условии, что /etc/udev/rules.d/70-persistent-net.rulesон находится в том же месте на вашем RaspPi).

Я не проверял, но именно так работает обычное сопоставление.

Если это сработает, просто скопируйте этот файл на каждый новый RaspPi.

решение2

Я не думаю, что указание имени устройства поможет, поскольку вы заметили, что решающим фактором при определении того, является ли устройство wan0 или wan1, является его MAC-адрес.

Единственное решение, которое я смог придумать, это очень грязное... иметь две копии конфигурации сети и использовать правило udev, чтобы скопировать нужную конфигурацию сети на место. (Это сработает, но будет очень грязным...)

Возможно, кто-то придумает лучшее решение, но если вы выберете этот метод, то нужно сопоставить устройство с правилом udev и в конце правила udev указать +RUN=/usr/local/bin/bashscript.sh (не забудьте заблокировать разрешения).

У меня есть только один вопрос: я не понимаю, в чем проблема, если одна сетевая карта будет wlan1.

Я считаю, что решение вашей проблемы не в переключении с wlan1 на wlan0, а в выяснении, зачем вам это нужно...

Вот пример правила udev, которое у меня есть с bash-скриптом:

ATTRS{idVendor}=="1050", ATTRS{idProduct}=="0010|0110|0111|0114|0116|0401|0403|0405|0407|0410", ACTION=="remove", RUN+="/usr/local/bin/secdev_lock.sh"

(блокирую экран ноутбука, когда отключаю ключ безопасности)


ОБНОВЛЯТЬ:

для отладки атрибутов карты доступны:

SUBSYSTEM=="net", ACTION=="add", RUN+="/usr/local/bin/addnic.sh"

в addnic.sh;

#!/bin/bash

env > /home/user/udev_$RANDOM.txt

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

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