CentOS 7 或 RHEL 7 的网络接口名称“eno16777736”中的 eno 是什么意思?

CentOS 7 或 RHEL 7 的网络接口名称“eno16777736”中的 eno 是什么意思?

eno16777736在一致的网络设备命名方案下, CentOS 7 或 RHEL 7 的网络接口名称中的“eno”代表什么?

答案1

这是可预测的网络接口设备名称在行动中。

  • en用于以太网
  • o用于船上
  • 该数字是固件/BIOS 提供的索引。

来源中的更多详细信息udev-builtin-net_id.c

答案2

嗯。比起“en”和“o”,我更关心“16777736”。

除非你不小心走进了 Google,发现自己坐在一台具有自定义 PCI 架构的服务器上,否则我真的不明白 16777736 是一个可能的值。这可能暗示着一个更严重的问题。

在当前架构下,系统将无法寻址超过 256 个 PCI 总线(每个总线下有 32 个设备,每个设备下最多有 8 个功能)。这也称为 Bus:Device.Function 寻址。现代系统使用 Domain:Bus:Device.Function 来克服 256 条总线的限制。但无论如何,回到你的问题......

你能做一个:

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

如果您看到与以下内容非常相似的内容:

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

那么我建议你在谷歌发现你在玩弄他们的服务器之前快点跑。

上面的/(0000:1000208:01.0)/是Domain:Bus:Device.Function地址,总线值为“1000208”,是16777736的十六进制表示。但是,“0x100”(256)应该是最大值您可以在“巴士”中使用它。

另一方面,如果“总线”的值低于 0x100,例如:

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

然后,我认为问题与您的 Bios/固件在启动时如何向 udev(systemd) 发送信息有关。要找出潜在的原因,首先检查 udev 返回的值。

通常有三个地方 udev 查询来创建 PIN(可预测接口名称)

  1. ACPI_DSM
  2. SMBIOS 表[具体记录类型“插槽”[9],以及类型 41]
  3. PCI IRQ 路由表

[以该顺序]

我们可以通过以下方式测试(1):

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

如果这给你 16777736 那么很可能你的系统不支持支持 ACPI_DSM 所需的 PCI 固件规范 3.1

所以我们现在必须测试(2)。因此,让我们首先检查 SMBIOS 表中的记录类型 41(类型 41 是最相关的):

dmidecode -t 41 | more

如果没有任何显示,或者 SMBIOS 版本低于“2.62”,则意味着 udev 将依赖 PCI IRQ 路由表来创建 PIN。

所以我们应该检查(3)

biosdecode

请密切注意您的最大插槽条目...它应该采用以下形式:

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

如果 X 是 25,为了论证,您的 NIC 应该位于小于或等于 25 的插槽上。如果不是,udev 将继续引用占位符值 16777736。

在大多数情况下,您可以通过以下方式检查网卡的插槽号:

lspci -bv | grep -i -A10 ether

同样,在大多数情况下,在 BDF (Bus:Device.Function) 中,设备应等于物理端口号(将其从十六进制转换为十进制后)。在其他情况下(如果没有),lspci 将在执行上述 lspci 命令的输出中在单独的行上列出物理插槽。

因此,如果列出的物理插槽编号大于 X(我们在 PCI IRQ 路由表中找到的最大编号),我们很可能已经隔离了该问题。

在这种情况下我能想到5种可能的解决方案......

  1. 内核黑客攻击...使用新的 PCI IRQ 路由表重建内核。看看/arch/x86/pci/irq.c

[这是我需要找到更好地利用我的时间的解决方案]

  1. 通过创建新规则将设备映射到不同的名称

经过:

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

然后添加以下内容:

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

[我称之为让我们忽略问题并让事情看起来漂亮的解决方案]

  1. 您可以将 net.ifnames=0 添加到内核启动选项以完全禁用该功能

[这当然是“如果它坏了,就关掉它,然后在孤独中哭泣”的解决方案](不是真正的解决方案)...

  1. 如果您碰巧正在运行 VM...VMWare/VirtualBox 等...打开配置文件并将“pciSlotNumber”修改为低于 X 的值。

[但这是一个临时黑客,直到我的软件得到更新的解决方案]

  1. 买一台新电脑。 [最后是“如果你不能打败他们,加入他们”的解决方案]

答案3

只是为了向以前的答案添加详细信息:

基于接口类型的两个字符前缀:

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

名称类型:

*   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

来源:http://ask.xmodulo.com/change-network-interface-name-centos7.html

相关内容