为什么我的eth0叫做eno16777736?

我见过http://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/ ,它描述了一致/可预测的设备命名的基本原理,以及设备名称生成的规则 :

* Two character prefixes based on the type of interface: * en -- ethernet * sl -- serial line IP (slip) * wl -- wlan * ww -- wwan * * Type of names: * b<number> -- BCMA bus core number * ccw<name> -- CCW bus group name * o<index> -- on-board device index number * s<slot>[f<function>][d<dev_port>] -- hotplug slot index number * x<MAC> -- MAC address * [P<domain>]p<bus>s<slot>[f<function>][d<dev_port>] * -- PCI geographical location * [P<domain>]p<bus>s<slot>[f<function>][u<port>][..][c<config>][i<interface>] * -- USB port number chain 

所以我们说我有设备eno16777736 :为什么叫这个? 这是一个以太网卡,我明白了。 但是我怎么能自己回到这个界面名字的其余部分呢?

我检查了/sys/class/net/eno16777736 ,看到:

 eno16777736 -> ../../devices/pci0000:00/0000:00:11.0/0000:02:01.0/net/eno16777736 

不知道如何解释这一点,或者我是否可以使用这些信息去eno16777736

更新

所以16777736是设备的acpi_index 。 根据https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-bus-pci :

 What: /sys/bus/pci/devices/.../acpi_index Date: July 2010 Contact: Narendra K <[email protected]>, linux[email protected] Description: Reading this attribute will provide the firmware given instance (ACPI _DSM instance number) of the PCI device. The attribute will be created only if the firmware has given an instance number to the PCI device. ACPI _DSM instance number will be given priority if the system firmware provides SMBIOS type 41 device type instance also. 

而且的确如此:

 core@localhost /sys/devices/pci0000:00/0000:00:11.0/0000:02:01.0 $ find . -type f | xargs grep 1677 2> /dev/null ./net/eno16777736/uevent:INTERFACE=eno16777736 ./acpi_index:16777736 

此外,要协调来自ifconfigip link输出和您在lspci的设备:

 $ ifconfig eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.0.37 netmask 255.255.255.0 broadcast 10.0.0.255 inet6 fe80::20c:29ff:fe70:c039 prefixlen 64 scopeid 0x20<link> inet6 2601:a:7c0:66:20c:29ff:fe70:c039 prefixlen 64 scopeid 0x0<global> ether 00:0c:29:70:c0:39 txqueuelen 1000 (Ethernet) RX packets 326 bytes 37358 (36.4 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 172 bytes 45999 (44.9 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 device interrupt 19 base 0x2000 

注意“设备中断19”。 从具有“IRQ 19”的lspci -v

 02:01.0 Ethernet controller: Advanced Micro Devices, Inc. [AMD] 79c970 [PCnet32 LANCE] (rev 10) Subsystem: Advanced Micro Devices, Inc. [AMD] PCnet - Fast 79C971 Physical Slot: 33 Flags: bus master, medium devsel, latency 64, IRQ 19 I/O ports at 2000 [size=128] [virtual] Expansion ROM at fd500000 [disabled] [size=64K] Kernel driver in use: pcnet32 

在这里您还可以看到“Phyiscal Slot 33”,事实上,有时VMWare启动了以ens33作为接口名称的虚拟机。 所以,目前还不清楚为什么其他时候selecteno16777736。 但16777736来自acpi_index ,而33来自PCI插槽。

以太网

o在船上

16777736是由固件(BIOS / EFI)提供的设备的索引。 从1开始索引是合乎逻辑的。 要么,要么你有明智的固件和超过1600万的机载设备! 但更有可能的是,你看到VMware Community上提出的问题(但没有回答) – 似乎这个数字来自于acpi_index可能的负溢出。

您可以通过以下方式查看udev与您系统相似的信息:

 udevadm info --name=/dev/eno16777736 --attribute-walk 

使用VMware?

Unix Stackexchange网站对此有一个问题和答案 。 看来有关NIC的信息由BIOS提供。

如果你想把它改成eth0 (或其他的名字),你可以使用udev来实现。 这是一个方便的指南 。