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

And*_*ang 18 rhel centos network-interface

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

gar*_*Red 25

这是可预测的网络接口设备名称在起作用。

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

udev-builtin-net_id.c源码中的更多细节


小智 19

嗯。与“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
Run Code Online (Sandbox Code Playgroud)

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

eno16777736 -> ../.../devices/pci0000:00/0000:00:11.0/0000:1000208:01.0/net/eno16777736
Run Code Online (Sandbox Code Playgroud)

然后我建议你在谷歌发现你在玩他们的服务器之前跑得快。

上面的/(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
Run Code Online (Sandbox Code Playgroud)

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

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

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

[以该顺序]

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

udevadm info --path=/sys/class/net/eno16777736 --attribute-walk | grep acpi
Run Code Online (Sandbox Code Playgroud)

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

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

dmidecode -t 41 | more
Run Code Online (Sandbox Code Playgroud)

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

所以我们应该检查(3)

biosdecode
Run Code Online (Sandbox Code Playgroud)

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

Slot Entry X: ID 00:00, (slot number X| status)
Run Code Online (Sandbox Code Playgroud)

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

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

lspci -bv | grep -i -A10 ether
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

[这是 i-need-to-find-better-uses-of-my-time 的解决方案]

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

经过:

vi /etc/udev/rules.d/70-my-net-names.rules
Run Code Online (Sandbox Code Playgroud)

然后添加以下内容:

ACTION=="add", SUBSYSTEM=="net", ENV{ID_BUS}=="pci", 
KERNELS=="{Domain:Bus:Device.Function}", NAME="{name: i.e. eno1 or eth0}" 
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

[但这是一个-temporary-hack-until-my-software-gets-updated 解决方案]

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

  • 我相信奇怪的数字与 VMWare BIOS 中的网络设备相匹配。看起来 OP 正在使用 CentOS 7 VM。 (3认同)

小智 14

只是在以前的答案中添加详细信息:

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

*   en -- ethernet
*   sl -- serial line IP (slip)
*   wl -- wlan
*   ww -- wwan
*   ib -- Infiniband
Run Code Online (Sandbox Code Playgroud)

名称类型:

*   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
Run Code Online (Sandbox Code Playgroud)

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