在 UDEV 配置中使用父属性“serial”为 lan 接口分配另一个名称,而不是依赖于 MAC 地址

在 UDEV 配置中使用父属性“serial”为 lan 接口分配另一个名称,而不是依赖于 MAC 地址

鉴于此内核问题等待修复,并且随机分配 MAC 地址给此 USB3 LAN 适配器:Debian 12 - 突然间,我的 USB3 Lan 适配器每次重新启动时都会分配随机 MAC 地址

我正在尝试寻找自定义之外的解决方法使用补丁重新编译内核或者使用旧的内核版本

基本上我所有的接口配置都是基于使用 udev 配置文件获得的自定义名称70-持久-网络.规则(某些接口根据其 MAC 地址进行重命名,但考虑到上述错误,这不再起作用)。

通过查看udev文件的语法/etc/udev/rules.d/70-persistent-net.rules

我的conf有不同的行,例如:

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...但适用于它们的直接父开发人员。

事实上,该命令首先说正在查看设备...但在它说之后查看父设备...

所以我想知道我是否可以做这样的事情:

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

使用父串行而不是基于 MAC 地址的配置来重命名 LAN 接口。

存在这样的语法吗?

谢谢

答案1

看来我已经通过这篇文章找到了答案:USB 设备如何独特区分?

阅读此参考文献:https://www.reactivated.net/writing_udev_rules.html

看来你可以通过使用将单亲水平与实际水平混合ATTRS,所以使用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开发人员将补丁放入上游通道,以便可以读取eeprom中的mac。目前是一种解决方法,但却是一种可靠的方法。

唯一有趣的部分是,如果设备没有连接电缆,在我的情况下,lan1 和 eth0 都会出现,lan1 处于活动状态并且“奇怪”地获得正确的 mac 地址,而 eth0 仍然处于随机 mac 地址 1 状态。

编辑:这一直有效,直到我发现某些设备共享相同的序列 ̶_(ツ)_/̶所以我开始直接使用 USB 根总线编号和设备编号来唯一标识适配器,因为我总是将它们保留在适当的位置无需移动它们。检查这个问题:在 udev 规则中使用 USB 网卡地址的 USB 路径来分配接口名称而不是 MAC 地址

相关内容