Dlaczego mój eth0 nazywa się eno16777736?

27

Widziałem http://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/ , który opisuje uzasadnienie spójnego / przewidywalnego nazewnictwa urządzeń, a następnie zasady generowania nazw urządzeń :

 * 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

Powiedzmy, że mam urządzenie eno16777736: dlaczego to się nazywa? To karta ethernet, mam to. Ale jak mogę sam wrócić do reszty nazwy tego interfejsu?

Zbadałem /sys/class/net/eno16777736i zobaczył:

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

Nie jestem pewien, jak to interpretować, ani czy mogę użyć tych informacji, aby się do niego dostać eno16777736.

Aktualizacja

Więc to 16777736jest urządzenie acpi_index. Według 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.

I rzeczywiście:

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

Ponadto, aby pogodzić dane wyjściowe z ifconfiglub ip linkz urządzeń w 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 

Zwróć uwagę na „przerwanie urządzenia 19”. I z lspci -v, który ma „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

Tutaj widzisz także „Phyiscal Slot 33” i rzeczywiście czasami VMWare uruchamia maszyny wirtualne, które otrzymują ens33jako nazwę interfejsu. Nie jest więc jasne, dlaczego innym razem wybiera eno16777736. Ale 16777736 pochodzi z acpi_index, a 33 pochodzi z gniazda PCI.

Dmitrij Minkowski
źródło
Wygląda na to, że Red Hat naprawił swoją stronę w RHEL7.3: redhat.com/en/about/blog/…
Stefan Lasiewski

Odpowiedzi:

30

en dla Ethernetu

o na pokładzie

16777736to indeks urządzenia podany przez oprogramowanie układowe (BIOS / EFI). Logiczne byłoby rozpoczęcie indeksowania od 1. Albo to, albo masz rozsądne oprogramowanie i ponad 16 milionów urządzeń pokładowych! Ale bardziej prawdopodobne jest to, że problem został podniesiony (ale nie został rozwiązany) w społeczności VMware - wygląda na to, że liczba ta pochodzi z możliwego ujemnego przepełnienia acpi_index.

Możesz wyświetlić podobne informacje udevdla swojego systemu za pomocą:

udevadm info --name=/dev/eno16777736 --attribute-walk
garethTheRed
źródło
Haha ciekawe. Więc mój BIOS to VMWare. Dziwne jest to, że czasami VMWare robi eno16777736, a czasem ens33. Czasami więc jest „na pokładzie”, a czasem „na gorąco”? Dziwne. 16777736 jest bardzo blisko 4096 ^ 2
Dmitry Minkovsky
Albo 2 ^ 24. Więc może zaczyna się stamtąd ...
Dmitrij Minkovsky
2
AHH, więc to „acpi_index”. Dziękuję Ci bardzo. Naprawdę chciałem zobaczyć tę liczbę gdzieś na jakimś wyjściu! Szkoda, że ​​OP w tym poście nie pokazuje polecenia, które wydał, ale jestem pewien, że mogę to zrobić za pomocą Google. Dziękuję
Dmitrij Minkovsky
9

Używasz VMware?

Witryna Unix Stackexchange miała na to pytanie i odpowiedź . Wygląda na to, że informacje o karcie sieciowej są dostarczane przez system BIOS.

Jeśli chcesz go zmienić na eth0(lub inną nazwę), możesz użyć do tego udev. Oto przydatny przewodnik .

Gen
źródło
Tak, VMWare. I dzięki, sprawdzę twoje linki! Nie muszę go zmieniać na eth0, ponieważ chcę, aby ten system był dla mnie przewidywalny: D. Ja ens33też na przykład korzystałem z VMWare. Naprawdę chcę wiedzieć, w jaki sposób zbiera te wartości i jak sam mogę się do nich przywrócić.
Dmitry Minkovsky