J'ai vu http://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/ , qui décrit la justification de la dénomination cohérente/prévisible des appareils, puis les règles de quels noms de périphériques sont générés :
* 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
Alors disons que j'ai un appareil eno16777736
: Pourquoi est-il appelé ainsi? C'est une carte Ethernet, je l'ai. Mais comment puis-je revenir moi-même sur le reste du nom de cette interface?
J'ai examiné /sys/class/net/eno16777736
Et j'ai vu:
eno16777736 -> ../../devices/pci0000:00/0000:00:11.0/0000:02:01.0/net/eno16777736
Je ne sais pas comment interpréter cela non plus, ni si je peux utiliser ces informations pour accéder à eno16777736
.
Mise à jour
Le 16777736
Est donc le acpi_index
De l'appareil. Par 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]>, [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.
Et en effet:
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
De plus, pour réconcilier la sortie de ifconfig
ou ip link
Et de vos appareils dans 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
Remarquez l '"interruption de périphérique 19". Et de lspci -v
, Qui a "IRQ 19":
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
Ici, vous voyez également "Phyiscal Slot 33", et en effet, VMWare démarre parfois des machines virtuelles qui obtiennent ens33
Comme nom d'interface. Donc, on ne sait pas pourquoi d'autres fois il choisit eno16777736. Mais le 16777736 provient du acpi_index
Et le 33 du slot PCI.
en
pour Ethernet
o
pour à bord
16777736
est l'index de l'appareil fourni par le firmware (BIOS/EFI). Il aurait été logique de démarrer l'index à 1
. Soit ça, soit vous avez un firmware sensible et plus de 16 millions d'appareils embarqués! Mais plus probablement, vous voyez le problème soulevé (mais sans réponse) sur VMware Community - il semble que le nombre provienne d'un débordement négatif possible sur acpi_index
.
Vous pouvez afficher des informations similaires à partir de udev
pour votre système avec:
udevadm info --name=/dev/eno16777736 --attribute-walk
Vous utilisez VMware?
Le le site Unix Stackexchange avait une question et une réponse à ce sujet. Il semblerait que les informations sur le NIC soient fournies par le BIOS.
Si vous voulez le changer en eth0
(ou un autre nom), vous pouvez utiliser udev pour le faire. Voici un guide pratique pour ce faire.