网卡命名策略¶
由于Linux内核无法保证网卡的发现顺序,网卡设备的初始命名ethN无法映射到固定网卡。为了确保网卡名可以映射到固定的网卡设备上,devmaster实现了内置命令net_id,它会读取网卡的硬件属性,并根据网卡命名策略naming scheme,生成特定网卡设备上固定的property属性,基于这些属性,可以获得特定于网卡设备的命名。
在net_id生成这些环境变量并导入到devmaster的数据库后,devmaster的内置命令net_link_setup会根据网卡配置中的NamePolicy配置项,选择其中一个网卡属性,作为ID_NET_NAME属性的值。之后通过NAME赋值规则,将网卡重命名为ID_NET_NAME的值。
1. 命名策略设置¶
网卡命名策略用于控制devmaster生成的网卡名,devmaster提供了两种策略设置方法:
-
配置启动参数:
net.naming-scheme=<scheme> -
设置环境变量:
NET_NAMING_SCHEME=<scheme>
环境变量NET_NAMING_SCHEME的值以':'开头时,优先使用启动参数中指定的策略,否则优先使用环境变量中指定的策略。命名策略主要影响内置命令net_id获取的网卡属性,同时会改变net_setup_link或规则处理过程中的网卡命名行为。设置为v000或0关闭网卡重命名功能。
为了保持向后兼容并提供策略可扩展能力,devmaster使用了策略开关机制。不同的命名策略由多种策略开关组合而成,新策略在原策略的基础上,新增一些开关。 目前devmaster仅支持两种策略组合,latest策略和udev的253版本策略保持兼容,v023策略和udev的249版本保持兼容。未来会考虑针对udev不同版本的兼容性做更细粒度的划分。
2. 网卡属性¶
内置命令net_id生成的网卡属性总是以2位英文字母作为前缀prefix,根据网卡类型的不同,属性前缀包括以下5类:
en:以太网(Ethernet)-
ib:无限带宽(InfiniBand) -
sl:串列线路IP协议(Serial Line Internet Protocol) wl:无线局域网(Wireless local area network (WLAN))ww:无线广域网(Wireless wide area network (WWAN))
devmaster的内置命令net_id导出的property属性如下:
ID_NET_NAME_ONBOARD:根据板载网卡固件提供的序列信息设置属性值,属性值受策略开关影响。支持的属性值如下:
| 属性值 | 描述 | 涉及的策略开关 |
|---|---|---|
<prefix>o<number> |
number为网卡的PCI板载索引,打开ONBOARD_16BIT_INDEX开关时支持16位索引,否则只支持14位索引。打开ZERO_ACPI_INDEX开关时,允许索引值为0。 |
ONBOARD_16BIT_INDEX、ZERO_ACPI_INDEX |
<prefix>d<number> |
number为网卡的Devicetree别名索引。 |
DEVICETREE_ALIASES |
ID_NET_LABEL_ONBOARD=<prefix><label>:label为板载设备的固件提供的文本标签。该属性仅对PCI设备生效。如果LABEL_NOPREFIX开关打开,则不附加prefix前缀。ID_NET_NAME_MAC=<prefix>x<mac address>:mac address为12位的十六进制MAC地址。该属性仅在网卡拥有固定的MAC地址时生效。MAC地址和唯一的网卡设备绑定。-
ID_NET_NAME_SLOT:根据网卡的插槽位置设置属性值,不同类型网卡对应的属性值受不同的策略开关影响。根据网卡设备类型的不同,属性值中包含USB、BCMA、SR-VIO插槽号等信息。 |属性值|描述|涉及的策略开关| |-|-|-| |<prefix>[P<domain>]s<slot>[f<function>][n<port_name>|d<dev_port>]|PCI插槽号。当PCI的域号不为0时,附加P<domain>信息。当网卡为多功能PCI设备时,附加f<function>信息。如果网卡拥有端口名port_name时,附加n<port_name>信息,否则附加端口号信息d<dev_port>。|无| |<prefix>[P<domain>]s<slot>[f<function>][n<port_name>|d<dev_port>]b<number>|number为Broadcom bus(BCMA)的核心号,如果为0,则舍弃该附加值。|无| |<prefix>[P<domain>]s<slot>[f<function>][n<port_name>|d<dev_port>]u<port...>[c<config>][i<interface>]|USB端口号作为后缀。仅当开关打开,且网卡设备通过USB接口连接时生效。如果USB端口号超过15个字符,当USB配置号为1时,舍弃c<config>附加值。当接口号为0时,舍弃i<interface>附加值。|USB_HOST| |<prefix>[P<domain>]s<slot>[f<function>][n<port_name>|d<dev_port>]v<slot>|如果网卡为SR-IOV虚拟设备,附加虚拟设备号后缀v<slot>。slot为虚拟设备号。|SR_IO_V| |<prefix>v<slot>|VIO的插槽号(IBM PowerVM)。|无| |<prefix>X<number>|VIF卡号(Xen)。|XEN_VIF| -
ID_NET_NAME_PATH:该属性描述了设备的安装位置。不同总线类型生成的属性值受不同策略开关的影响。对于USB和BCMA设备,属性值由网卡前缀、PCI插槽标识符和USB或BCMA位置信息组成。
| 属性值 | 描述 | 策略开关 |
|---|---|---|
<prefix>c<bus_id> |
CCW或组CCW设备标识符。 |
无 |
<prefix>a<vencor model>i<instance> |
arm64平台设备的ACPI路径名。 |
无 |
<prefix>i<address>n<port_name> |
模拟网络设备Netsim的设备号和端口号。 |
NETDEVSIM |
<prefix>[P<domain>]p<bus>s<slot>[f<function>][n<phys_port_name>|d<dev_port>] |
PCI的物理位置信息。 |
无 |
<prefix>[P<domain>]p<bus>s<slot>[f<function>][n<phys_port_name>|d<dev_port>]b<number> |
BCMA网卡会附加b<number>后缀,number为BCMA总线核心号。 |
无 |
<prefix>[P<domain>]p<bus>s<slot>[f<function>][n<phys_port_name>|d<dev_port>]u<port...>[c<config>][i<interface>] |
USB端口号作为后缀。config非1,interface非0。 |
USB_HOST |
策略开关¶
| 策略开关 | 描述 | 策略版本 |
|---|---|---|
| SR_IOV_V | 控制net_id内置命令,如果网卡为SR-IOV虚拟设备,ID_NET_NAME_SLOT属性中附加虚拟设备号后缀。 |
v023 |
| NPAR_ARI | 控制net_id内置命令,如果网卡开启了ARI模式,使用传统的5比特插槽号和3比特功能号组合成f<function> |
v023 |
| INFINIBAND | 控制net_id内置命令,允许使用ib前缀。 |
v023 |
| ZERO_ACPI_INDEX | 控制net_id内置命令,允许acpi_index值为0,影响ID_NET_NAME_ONBOARD。 |
v023 |
| ALLOW_RERENAMES | 控制net_setup_link内置命令,允许devmaster重命名网卡。devmaster尚不支持该开关的功能。 |
v023 |
| STABLE_VIRTUAL_MACS | 控制net_setup_link内置命令,使用设备名生成MAC地址。devmaster尚不支持该开关的功能。 |
v023 |
| NETDEVSIM | 控制net_id内置命令,ID_NET_NAME_PATH以模拟网络设备Netsim的设备号和端口号作为后缀。 |
v023 |
| LABEL_NOPREFIX | 控制net_id内置命令,影响ID_NET_LABEL_ONBOARD的前缀附加条件。 |
v023 |
| NSPAWN_LONG_HASH | 控制nspawn,支持长整数哈希。 devmaster不涉及。 |
v023 |
| BRIDGE_NO_SLOT | 控制net_id内置命令,如果网卡是PCI桥设备,不使用PCI热插拔插槽号信息。 |
v023 |
| SLOT_FUNCTION_ID | 控制net_id内置命令,使用function_id属性标识PCI热插拔插槽位置,影响属性中的s<slot>后缀。 |
v023 |
| ONBOARD_16BIT_INDEX | 控制net_id内置命令,允许16比特的acpi_index索引值。 |
v023 |
| REPLACE_STRICTLY | 控制devmaster规则处理行为,不允许网卡名中存在非法字符。 devmaster尚不支持该开关的功能。 |
v023 |
| XEN_VIF | 控制net_id内置命令,如果网卡时Xen设备,使用VIF卡号作为ID_NET_NAME_SLOT的后缀。 |
latest |
| BRIDGE_MULTIFUNCTION_SLOT | 控制net_id内置命令,开关BRIDGE_NO_SLOT打开时,如果网卡为多功能PCI设备,使用关联网桥的PCI热插拔插槽信息。 |
latest |
| DEVICETREE_ALIASES | 控制net_id内置命令,以Devicetree别名生成ID_NET_NAME_ONBOARD。 |
latest |
| USB_HOST | 控制net_id内置命令,使用USB端口号作为后缀。 |
latest |
Created: September 1, 2023