Почему мой eth0 называется eno16777736?

27

Я видел 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: почему оно так называется? Это карта Ethernet, я понял. Но как мне вернуться к названию этого интерфейса?

Я осмотрел /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 <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.

И действительно:

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

Кроме того, чтобы согласовать вывод от ifconfigили ip 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». И из того lspci -v, что имеет "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

Здесь вы также видите «Phyiscal Slot 33», и действительно, иногда VMWare загружает виртуальные машины, которые получают в ens33качестве имени интерфейса. Итак, неясно, почему в других случаях он выбирает eno16777736. Но 16777736 происходит от acpi_index, а 33 - от слота PCI.

Дмитрий Минковский
источник
Похоже, что Red Hat исправили свою сторону в RHEL7.3: redhat.com/en/about/blog/…
Стефан Ласевский

Ответы:

30

en для Ethernet

o для бортового

16777736это индекс устройства в соответствии с прошивкой (BIOS / EFI). Было бы логично начать индекс с 1. Либо так, либо у вас разумная прошивка и более 16 миллионов встроенных устройств! Но, скорее всего, вы видите проблему, поднятую (но не получившую ответа) в сообществе VMware - кажется, что это число связано с возможным отрицательным переполнением acpi_index.

Вы можете просмотреть аналогичную информацию udevдля вашей системы с:

udevadm info --name=/dev/eno16777736 --attribute-walk
garethTheRed
источник
Хаха, интересно. Так что мой BIOS это VMWare. Что странно, так это то, что иногда VMWare делает eno16777736, а иногда ens33. Так что иногда это «на борту», ​​а иногда «горячее подключение»? Weird. 16777736 очень близко к 4096 ^ 2
Дмитрий Минковский
Или 2 ^ 24. Так что, может быть, это начинается оттуда ...
Дмитрий Минковский
2
Ааа, так что это "acpi_index". Большое спасибо. Я действительно хотел увидеть это число где-нибудь в выводе! Жаль, что ОП на этом посту не показывает команду, которую он издал, но я уверен, что смогу Google для этого. Спасибо
Дмитрий Минковский
9

Используете VMware?

У сайта Unix Stackexchange был вопрос и ответ по этому поводу. Похоже, что информация о NIC предоставляется BIOS.

Если вы хотите изменить его на eth0(или другое имя), вы можете использовать udev для этого. Вот удобное руководство для этого.

Ген
источник
Да, VMWare. И спасибо, я проверю ваши ссылки! Мне не нужно менять его на eth0 настолько, насколько я хочу, чтобы эта система была для меня предсказуемой: D. Я ens33тоже, например, использовал VMWare. Очень хочу знать, как он выбирает эти ценности и как я могу вернуться к ним сам.
Дмитрий Минковский