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 (make确保锁定权限)。

我唯一的问题是,我不明白将一个网卡用作 wlan1 会出现什么问题。

我相信您问题的答案不是从 wlan1 更改为 wlan0,而是弄清楚为什么您需要...

这是我在 bash 脚本中使用的 udev 规则示例:

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

我相信您会在那里找到所有匹配的相关信息

相关内容