Skip to content

网卡命名策略

由于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提供了两种策略设置方法:

  1. 配置启动参数: net.naming-scheme=<scheme>

  2. 设置环境变量: NET_NAMING_SCHEME=<scheme>

环境变量NET_NAMING_SCHEME的值以':'开头时,优先使用启动参数中指定的策略,否则优先使用环境变量中指定的策略。命名策略主要影响内置命令net_id获取的网卡属性,同时会改变net_setup_link或规则处理过程中的网卡命名行为。设置为v0000关闭网卡重命名功能。

为了保持向后兼容并提供策略可扩展能力,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:根据网卡的插槽位置设置属性值,不同类型网卡对应的属性值受不同的策略开关影响。根据网卡设备类型的不同,属性值中包含USBBCMASR-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>|numberBroadcom 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:该属性描述了设备的安装位置。不同总线类型生成的属性值受不同策略开关的影响。对于USBBCMA设备,属性值由网卡前缀、PCI插槽标识符和USBBCMA位置信息组成。

属性值 描述 策略开关
<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>后缀,numberBCMA总线核心号。
<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

Last update: September 4, 2023
Created: September 1, 2023