Skip to the content.

网卡名称

简单来说:

固件、BIOS 提供的不可插拔的板载设备,命名 eno1,eno2…… 固件、BIOS 提供的 PCI-E 可热插拔的设备,命名 ens1,ens2…… physical/geographical location of the connector of the hardware,命名为 enp2s0…… MAC 地址,命名为 enx78e7d1ea46da 传统的,命名为 eth0……

对照图

https://unix.stackexchange.com/questions/134483/why-is-my-ethernet-interface-called-enp0s10-instead-of-eth0

实验1 : 在虚拟机中, 是否 enable iommu 也会导致网卡名称变化

enable 之后:

3: enp0s4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:00:00:15 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::d257:27da:d80b:64be/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

没有

3: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:00:00:15 brd ff:ff:ff:ff:ff:ff
    altname enp0s5
    inet 10.0.0.100/16 brd 10.0.255.255 scope global noprefixroute ens5
       valid_lft forever preferred_lft forever
    inet6 fe80::fe45:9ed6:a64e:4d19/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

看到没,当存在 iommu 之后,网卡名称增加了 domain 。

在 https://www.freedesktop.org/software/systemd/man/latest/systemd.net-naming-scheme.html 中:

The PCI domain is only prepended when it is not 0

实验 2 : 测试这个问题

/**
 *	dev_get_phys_port_name - Get device physical port name
 *	@dev: device
 *	@name: port name
 *	@len: limit of bytes to copy to name
 *
 *	Get device physical port name
 */
int dev_get_phys_port_name(struct net_device *dev,
			   char *name, size_t len)
{
	const struct net_device_ops *ops = dev->netdev_ops;
	int err;

	if (ops->ndo_get_phys_port_name) {
		err = ops->ndo_get_phys_port_name(dev, name, len);
		if (err != -EOPNOTSUPP)
			return err;
	}
	return devlink_compat_phys_port_name_get(dev, name, len);
}

实验 3 : 在 guest OS 中,当

-machine pc 变为 -machine q35 之后,可以发现虚拟机中网卡名称全部变为了 enp0s5 这种

其他的测试 13900k

2: enp5s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master ovs-system state UP group default qlen 1000
    link/ether 00:e0:4c:68:0c:0c brd ff:ff:ff:ff:ff:ff
3: enp6s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether a0:36:bc:ad:c2:ce brd ff:ff:ff:ff:ff:ff
05:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 05)
06:00.0 Ethernet controller: Intel Corporation Ethernet Controller I225-V (rev 03)

n100

2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 58:47:ca:76:2d:9f brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.5/16 brd 10.0.255.255 scope global noprefixroute enp1s0
       valid_lft forever preferred_lft forever
    inet6 fe80::1f6f:f5a4:4fa6:1f2d/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
3: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 58:47:ca:76:2d:a0 brd ff:ff:ff:ff:ff:ff
🧀  lspci | grep Eth
01:00.0 Ethernet controller: Intel Corporation Ethernet Controller I226-V (rev 04)
03:00.0 Ethernet controller: Intel Corporation Ethernet Controller I226-V (rev 04)

发生修改的地方

dev_change_name

可以影响 rename 的地方还有

具体的,详细的,在这里。

可以看到,甚至 /etc/sysconfig/network-scripts/ 都会控制。

例如,如果有 nic 匹配了 HWADDR =

[root@node74 11:12:43 network-scripts]$ cat ifcfg-ens1f0
DEVICE=ens1f0abcfafa
HWADDR=52:54:00:00:02:58
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=no

那么,网卡的名称将会变为 ens1f0abcfafa

本站所有文章转发 CSDN 将按侵权追究法律责任,其它情况随意。