Por que meu eth0 é chamado eno16777736?

27

Eu vi o http://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/ , que descreve a justificativa para a nomeação consistente / previsível de dispositivos e as regras pelas quais os nomes de dispositivos são gerados :

 * 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

Então, digamos que eu tenho um dispositivo eno16777736: por que é chamado assim? É uma placa Ethernet, eu entendi. Mas como posso voltar para o restante do nome dessa interface?

Eu examinei /sys/class/net/eno16777736e vi:

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

Não tenho certeza de como interpretar isso ou se posso usar essas informações para entender eno16777736.

Atualizar

Então o 16777736é do dispositivo acpi_index. Por 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.

E realmente:

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

Além disso, para reconciliar a saída de ifconfigou ip linke seus dispositivos em 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 

Observe o "dispositivo interromper 19". E de lspci -v, que tem "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

Aqui você também vê "Phyiscal Slot 33" e, de fato, algumas vezes o VMWare inicializa as VMs que recebem ens33o nome da interface. Portanto, não está claro por que outras vezes ele escolhe eno16777736. Mas o 16777736 vem do acpi_indexe o 33 vem do slot PCI.

Dmitry Minkovsky
fonte
Parece que a Red Hat fixou seu lado no RHEL7.3: redhat.com/en/about/blog/…
Stefan Lasiewski

Respostas:

30

en para Ethernet

o para bordo

16777736é o índice do dispositivo, conforme fornecido pelo firmware (BIOS / EFI). Teria sido lógico iniciar o índice em 1. Ou você tem um firmware sensato e mais de 16 milhões de dispositivos a bordo! Mas o mais provável é que você esteja vendo o problema levantado (mas não respondido) na Comunidade VMware - parece que o número vem de um possível estouro negativo acpi_index.

Você pode visualizar informações semelhantes udevno seu sistema com:

udevadm info --name=/dev/eno16777736 --attribute-walk
garethTheRed
fonte
Haha interessante. Então, meu BIOS é VMWare. O estranho é que, às vezes, o VMWare faz eno16777736 e às vezes ens33. Às vezes, está "a bordo" e, às vezes, "plugado a quente?" Esquisito. 16777736 está muito perto de 4096 ^ 2 #
Dmitry Minkovsky
Ou 2 ^ 24. Talvez por isso, começa a partir daí ...
Dmitry Minkovsky
2
AHH, então é o "acpi_index". Muito obrigado. Eu realmente queria ver esse número em algum lugar em alguma saída! É uma pena que o OP nesse post não mostre o comando que ele emitiu, mas tenho certeza que posso pesquisar no Google por isso. Obrigado
Dmitry Minkovsky
9

Você está usando o VMware?

O site Unix Stackexchange tinha uma pergunta e resposta sobre isso. Parece que as informações sobre a NIC estão sendo fornecidas pelo BIOS.

Se você quiser alterá-lo para eth0(ou outro nome), use o udev para fazer isso. Aqui está um guia útil para fazer isso.

Gene
fonte
Sim, VMWare. E obrigado, vou verificar seus links! Não preciso alterá-lo para eth0, pois quero que esse sistema seja realmente previsível para mim: D. Também tive ens33, por exemplo, o uso do VMWare. Realmente quero saber como ele escolhe esses valores e como eu posso voltar a usá-los.
Dmitry Minkovsky