Чому мій 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 завантажує VM, які отримують 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

Ха-ха цікаво. Тож мій BIOS - це VMWare. Що дивно, це те, що іноді VMWare робить eno16777736, а іноді ens33. Так іноді це "на борту", а іноді "гаряче підключено?" Дивно. 16777736 дуже близький до 4096 ^ 2
Дмитро Мінковський

Або, е, 2 ^ 24. То, можливо, воно починається звідти…
Дмитро Міньковський

2
AHH, значить, це "acpi_index". Велике спасибі. Я дуже хотів побачити це число десь у якомусь виході! Соромно, що ОП на цій посаді не показує команду, яку він видав, але я впевнений, що можу Google за це. Дякую
Дмитро Мінковський

9

Використовуєте VMware?

На сайті Unix Stackexchange були запитання та відповіді з цього приводу. Здається, що інформація про NIC надається BIOS.

Якщо ви хочете змінити його на eth0(або якесь інше ім'я), ви можете використовувати для цього udev. Ось зручний посібник для цього.


Так, VMWare. І дякую, я перевірю ваші посилання! Мені не потрібно змінювати його на eth0 настільки, як я хочу, щоб ця система насправді була передбачуваною для мене: D. Я ens33теж, наприклад, використовував VMWare. Дуже хочеться знати, як він сприймає ці значення і як я сам можу повернутись до них.
Дмитро Мінковський
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.