And*_*ang 18 rhel centos network-interface
在一致的网络设备命名方案下,eno16777736CentOS 7 或 RHEL 7 的网络接口名称中的“eno”代表什么?
小智 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):
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 种可能的解决方案......
[这是 i-need-to-find-better-uses-of-my-time 的解决方案]
经过:
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)
[我称之为让我们忽略问题而只是让事情看起来很漂亮的解决方案]
[这当然是如果它坏了,关掉它然后在孤独中哭泣的解决方案](不是真正的解决方案)......
[但这是一个-temporary-hack-until-my-software-gets-updated 解决方案]
小智 14
只是在以前的答案中添加详细信息:
基于接口类型的两个字符前缀:
Run Code Online (Sandbox Code Playgroud)* 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
来源:http : //ask.xmodulo.com/change-network-interface-name-centos7.html