udev 上的 `ATTR{type}=="1"` 是什么意思?

lve*_*lla 2 linux networking udev

在获取网络设备上的信息时,为顶级设备列出的属性之一是:

ATTR{type}=="1"
Run Code Online (Sandbox Code Playgroud)

这是什么意思以及为什么为网络设备提供持久名称的规则与它相匹配?

A.B*_*A.B 5

ATTR{type}指定 中相应条目的值/sys,由 udev 过滤器中的其他元素过滤。如果您这样做,find /sys/ -name type您会发现它可以应用于各个子系统中的大量对象。

既然您用我的标签标记了您的问题,linux networking我可以假设问题仅与网络设备有关,然后是网络接口协议type

内容:/sys/class/net/<iface>/type
日期:2005 年 4 月
内核版本:2.6.12
联系人:netdev@vger.kernel.org
描述:
以十进制值表示接口协议类型。查看include/uapi/linux/if_arp.h所有可能的值。

该文件又定义了已知值:

#define ARPHRD_ETHER    1       /* Ethernet 10Mbps      */
Run Code Online (Sandbox Code Playgroud)

这就是1in ATTR{type}=="1",它只是意味着“以太网设备”(无论其速度如何,无论是真实的,包括无线等伪以太网设备,还是虚拟的,包括 veth 或网桥......)。

另一种常见的接口是lo类型为 772 的接口(因此udev如果它检测到与前一个一起出现,则不会关心它ATTR{type}=="1"),如下所示:

#define ARPHRD_LOOPBACK 772     /* Loopback device      */
Run Code Online (Sandbox Code Playgroud)

可以通过以下方式验证:

$ cat /sys/class/net/lo/type
772
Run Code Online (Sandbox Code Playgroud)