
Я работаю над проектом с использованием серии 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
Я уверен, что вы найдете там всю необходимую информацию для сопоставления.