Perché il mio eth0 si chiama eno16777736?


27

Ho visto http://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/ , che descrive la logica per la denominazione dei dispositivi coerente / prevedibile, e quindi le regole con cui vengono generati i nomi dei dispositivi :

 * 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

Quindi diciamo che ho un dispositivo eno16777736: perché si chiama così? È una scheda Ethernet, l'ho capito. Ma come posso tornare nel resto del nome di questa interfaccia da solo?

Ho esaminato /sys/class/net/eno16777736e ho visto:

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

Non sono sicuro di come interpretarlo, o se posso usare queste informazioni per arrivare a eno16777736.

Aggiornare

Quindi 16777736è il dispositivo acpi_index. Per https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-bus-pci :

What:       /sys/bus/pci/devices/.../acpi_index
Date:       July 2010
Contact:    Narendra K <narendra_k@dell.com>, linux-bugs@dell.com
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.

E senza dubbio:

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

Inoltre, per riconciliare l'output da ifconfigo verso i ip linktuoi dispositivi in 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 

Notare "interruzione dispositivo 19". E da lspci -v, che ha "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

Qui puoi anche vedere "Phyiscal Slot 33" e, in effetti, a volte VMWare avvia le VM che ottengono ens33come nome dell'interfaccia. Quindi, non è chiaro il motivo per cui altre volte sceglie eno16777736. Ma il 16777736 viene dal acpi_index, e il 33 proviene dallo slot PCI.


Sembra che Red Hat si sia schierato dalla parte di RHEL7.3: redhat.com/en/about/blog/…
Stefan Lasiewski,

Risposte:


30

en per Ethernet

o a bordo

16777736è l'indice del dispositivo fornito dal firmware (BIOS / EFI). Sarebbe stato logico avviare l'indice in 1. O quello, o hai un firmware ragionevole e oltre 16 milioni di dispositivi integrati! Ma più probabilmente, stai vedendo il problema sollevato (ma non risolto) sulla VMware Community - sembra che il numero provenga da un possibile overflow negativo acpi_index.

Puoi visualizzare informazioni simili da udevper il tuo sistema con:

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

Haha interessante. Quindi il mio BIOS è VMWare. La cosa strana è che a volte VMWare esegue eno16777736 e talvolta ens33. Quindi a volte è "a bordo" e a volte "collegato a caldo?" Strano. 16777736 è molto vicino al 4096 ^ 2
Dmitry Minkovsky il

O, 2 ^ 24. Quindi forse inizia da lì ...
Dmitry Minkovsky,

2
AHH quindi è il "acpi_index". Grazie mille. Volevo davvero vedere quel numero da qualche parte in qualche uscita! È un peccato che l'OP in quel post non mostri il comando che ha emesso, ma sono sicuro di poterlo fare su Google. Grazie
Dmitry Minkovsky,

9

Usi VMware?

Il sito Unix Stackexchange aveva una domanda e una risposta a riguardo. Sembrerebbe che le informazioni sulla scheda NIC siano fornite dal BIOS.

Se vuoi cambiarlo in eth0(o in qualche altro nome) puoi usare udev per farlo. Ecco una guida pratica per farlo.


Sì, VMWare. E grazie, controllerò i tuoi link! Non ho bisogno di cambiarlo in eth0 tanto quanto voglio che questo sistema sia realmente prevedibile per me: D. Anch'io ho dovuto ens33usare VMWare. Voglio davvero sapere come sceglie questi valori e come posso rientrare in essi stessi.
Dmitry Minkovsky,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.