Warum heißt mein eth0 eno16777736?

27

Ich habe http://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/ gesehen , in dem die Gründe für eine konsistente / vorhersagbare Gerätenamensgebung und anschließend die Regeln beschrieben werden, nach denen Gerätenamen generiert werden :

 * 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

Nehmen wir also an, ich habe ein Gerät eno16777736: Warum heißt es so? Es ist eine Ethernet-Karte, das habe ich. Aber wie kann ich selbst in den Rest des Namens dieser Schnittstelle zurückkehren?

Ich untersuchte /sys/class/net/eno16777736und sah:

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

Ich bin mir auch nicht sicher, wie ich das interpretieren soll oder ob ich diese Informationen verwenden kann, um dorthin zu gelangen eno16777736.

Aktualisieren

Also das 16777736ist das Gerät 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 <[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.

Und in der Tat:

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

Um die Ausgabe von ifconfigoder ip linkund Ihren Geräten zu synchronisieren, gehen Sie wie folgt vor 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 

Beachten Sie den "Geräte-Interrupt 19". Und von lspci -v, der "IRQ 19" hat:

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

Hier sehen Sie auch "Phyiscal Slot 33" und in der Tat bootet VMWare manchmal VMs, die ens33als Schnittstellennamen erhalten. Es ist also unklar, warum es zu anderen Zeiten eno16777736 wählt. Aber der 16777736 kommt vom acpi_index, und der 33 kommt vom PCI-Steckplatz.

Dmitry Minkovsky
quelle
Es sieht so aus, als ob Red Hat in RHEL7.3 die Seite repariert hat: redhat.com/en/about/blog/…
Stefan Lasiewski

Antworten:

30

en für Ethernet

o für an bord

16777736ist der Index des Geräts, wie er von der Firmware (BIOS / EFI) bereitgestellt wird. Es wäre logisch gewesen, den Index bei zu beginnen 1. Entweder das, oder Sie haben eine vernünftige Firmware und über 16 Millionen Onboard-Geräte! Wahrscheinlicher ist jedoch, dass das Problem in der VMware Community angesprochen (aber nicht beantwortet) wird - es scheint, dass die Zahl auf einen möglichen negativen Überlauf zurückzuführen ist acpi_index.

Sie können ähnliche Informationen udevfür Ihr System anzeigen mit:

udevadm info --name=/dev/eno16777736 --attribute-walk
garethTheRed
quelle
Haha interessant. Mein BIOS ist also VMWare. Was seltsam ist, ist, dass manchmal VMWare eno16777736 und manchmal ens33 tut. Also ist es manchmal "an Bord" und manchmal "hot plugged"? Seltsam. 16777736 ist sehr nah an 4096 ^ 2
Dmitry Minkovsky
Oder 2 ^ 24. Vielleicht fängt es von dort an ...
Dmitry Minkovsky
2
AHH, es ist also der "acpi_index". Vielen Dank. Ich wollte diese Zahl unbedingt irgendwo in einer Ausgabe sehen! Es ist eine Schande, dass das OP in diesem Beitrag den Befehl, den er ausgegeben hat, nicht anzeigt, aber ich bin sicher, dass ich dafür googeln kann. Vielen Dank
Dmitry Minkovsky
9

Verwenden Sie VMware?

Die Unix Stackexchange-Site hatte eine Frage und Antwort dazu. Offenbar werden Informationen zur Netzwerkkarte vom BIOS bereitgestellt.

Wenn Sie es in eth0(oder einen anderen Namen) ändern möchten, können Sie dazu udev verwenden. Hier ist ein praktischer Leitfaden dafür.

Gen
quelle
Ja, VMWare. Und danke, ich werde deine Links überprüfen! Ich muss es nicht so sehr in eth0 ändern, da ich möchte, dass dieses System für mich tatsächlich vorhersehbar ist: D. Ich hatte ens33auch zum Beispiel mit VMWare. Ich möchte wirklich wissen, wie es diese Werte auswählt und wie ich sie selbst wieder aufnehmen kann.
Dmitry Minkovsky