Co oznacza eno w nazwie interfejsu sieciowego „eno16777736” dla CentOS 7 lub RHEL 7?

16

W ramach spójnego schematu nazewnictwa urządzeń sieciowych, co oznacza „eno” w nazwie interfejsu sieciowego eno16777736dla CentOS 7 lub RHEL 7?

Andy Huang
źródło

Odpowiedzi:

18

Hmmm. Bardziej niż „en” i „o” bardziej martwi mnie „16777736”.

Chyba że przypadkowo wszedłeś do Google i znalazłeś się na serwerze z niestandardową architekturą PCI, tak naprawdę nie rozumiem, jak 16777736 może być możliwą wartością. Może to wskazywać na poważniejszy problem.

W obecnym schemacie system nie byłby w stanie zaadresować więcej niż 256 magistral PCI (z 32 urządzeniami pod każdą magistralą i maksymalnie 8 funkcjami pod każdym urządzeniem). Jest to również znane jako Bus: Device.Funkcja adresowania. Nowoczesne systemy używają Domain: Bus: Device.Function, aby przekroczyć ograniczenie magistrali 256. W każdym razie wracając do problemu ...

Czy możesz zrobić:

ls -la /sys/class/net | grep eno16777736

Jeśli zobaczysz coś bardzo podobnego do:

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

Następnie sugeruję, abyś biegał szybko, zanim Google przyłapie cię na zabawie na swoich serwerach.

Powyższy /(0000:1000208:01.0)/ powyżej to Domena: Magistrala: Urządzenie. Adres funkcji z wartością magistrali „1000208”, będącą reprezentacją szesnastkową 16777736. Jednak „0x100” (256) powinna być wartością maksymalną które możesz mieć dla „Bus”.

Z drugiej strony, jeśli wartość „Bus” jest mniejsza niż 0x100, na przykład:

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

Wtedy pomyślałem, że problem będzie związany z tym, jak twoje Bios / Firmware wysyła informacje do udev (systemd) podczas uruchamiania. Aby ustalić potencjalną przyczynę, najpierw sprawdź wartości, do których wraca z powrotem udev.

Zwykle istnieją trzy miejsca, w których zapytania udev tworzą kod PIN (przewidywalna nazwa interfejsu)

  1. ACPI_DSM
  2. Tabela SMBIOS [konkretnie „sloty” typu rekordu [9] i typ 41]
  3. Tabela routingu PCI IRQ

[w tej kolejności]

Możemy przetestować (1) przez:

udevadm info --path=/sys/class/net/eno16777736 --attribute-walk | grep acpi

Jeśli to daje 16777736, najprawdopodobniej twój system nie obsługuje PCI Firmware Specification 3.1, który jest potrzebny do obsługi ACPI_DSM

Musimy teraz przetestować (2). Najpierw sprawdźmy najpierw rekord typu 41 w tabeli SMBIOS (typ 41 jest najbardziej odpowiedni):

dmidecode -t 41 | more

Jeśli nic się nie pokazuje lub wersja SMBIOS jest mniejsza niż „2.62”, oznacza to, że udev będzie opierał się na tablicy routingu PCI IRQ w celu utworzenia kodu PIN.

Więc powinniśmy sprawdzić (3)

biosdecode

Zwróć szczególną uwagę na maksymalną liczbę miejsc na automacie ... powinna ona mieć postać:

Slot Entry X: ID 00:00, (slot number X| status)

Jeśli X wynosi 25, ze względu na argument, twoja karta sieciowa powinna znajdować się w gnieździe mniejszym lub równym 25. Jeśli nie, udev będzie nadal odwoływał się do wartości zastępczej 16777736.

W większości przypadków możesz sprawdzić numer swojej nici poprzez:

lspci -bv | grep -i -A10 ether

I znowu W większości przypadków w BDF (Bus: Device.Function) urządzenie powinno być równe numerowi portu fizycznego (po konwersji z szesnastkowego na dziesiętny). W innych przypadkach (jeśli tak nie jest), lspci wyświetli fizyczne gniazdo w osobnym wierszu w wyniku wykonania powyższego polecenia lspci.

Więc jeśli wymieniony numer gniazda fizycznego jest większy niż X (maksymalna liczba, którą znaleźliśmy w naszej tabeli routingu PCI IRQ), najprawdopodobniej wyodrębniliśmy problem.

W tym przypadku jest 5 możliwych rozwiązań ...

  1. Hackowanie jądra ... Odbuduj jądro z nową tabelą routingu PCI IRQ. Zajrzyj na /arch/x86/pci/irq.c

[To jest rozwiązanie, którego potrzebuję, aby znaleźć lepsze zastosowania mojego czasu]

  1. Odwzoruj urządzenie na inną nazwę, tworząc nową regułę

przez:

vi /etc/udev/rules.d/70-my-net-names.rules

następnie dodaj:

ACTION=="add", SUBSYSTEM=="net", ENV{ID_BUS}=="pci", 
KERNELS=="{Domain:Bus:Device.Function}", NAME="{name: i.e. eno1 or eth0}" 

[Nazywam to rozwiązaniem „zignorujmy problem i po prostu zróbmy rzeczy”.

  1. Możesz dodać net.ifnames = 0 do opcji rozruchu jądra, aby całkowicie wyłączyć tę funkcję

[Jest to oczywiście rozwiązanie, jeśli jest zepsute, skręca, wyłącza i płacze w samotności] (nie jest to rozwiązanie) ...

  1. A jeśli zdarzy ci się uruchomić VM ... VMWare / VirtualBox itp. ... otwórz plik konfiguracyjny i zmodyfikuj „pciSlotNumber” na coś poniżej X.

[ale jest to rozwiązanie polegające na tymczasowym hackowaniu, aż moje oprogramowanie zostanie zaktualizowane]

  1. Kup nowy komputer. [i na koniec rozwiązanie jeśli nie możesz ich pokonać]
Dominic Williams
źródło
3
Uważam, że dziwnie wyglądająca liczba odpowiada urządzeniu sieciowemu w VMWare BIOS. Wygląda na to, że OP używa maszyn wirtualnych CentOS 7.
Nie zawsze jest tak samo - mam eno16780032. Co za tyłek.
Dan Pritts
1
Ta odpowiedź jest tak wyczerpująca, że ​​odpowiadając na pytanie PO udało się uzyskać zwięzłe odniesienie do tego, jak identyfikować urządzenia według ich wskaźników.
Konrads
Tego rodzaju nazwy dla VMware najwyraźniej nie są rzadkie. Na przykład, moje urządzenia mają nazwy eno16777732.
Stefan Lasiewski
Problem, na jaki natknąłem się w związku z VMWare, polega na tym, że nie ma sposobu na uzyskanie acpi_index danej karty sieciowej z interfejsu API VSphere.
Danny
14

Aby dodać szczegóły do ​​poprzednich odpowiedzi:

Dwa prefiksy znaków w zależności od typu interfejsu:

*   en -- ethernet
*   sl -- serial line IP (slip)
*   wl -- wlan
*   ww -- wwan
*   ib -- Infiniband

Rodzaj nazw:

*   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>][..]1[i<interface>]
                                          -- USB port number chain

Źródło: http://ask.xmodulo.com/change-network-interface-name-centos7.html

sumid
źródło