我在工作中有一个项目,我试图将以太网 MAC 地址明确映射到物理端口(IE 卡 1 端口 0 是 eth0 (mac xx:xx:xx:xx:xx:xx),非技术操作员可以对于使用 Linux(目前为 CentOS 6.6)的服务器(任意服务器供应商和型号)中的网络设备,查看该端口描述符并准确了解电缆插入盒子的位置,而无需破解物理盒子。
这个问题的答案可能在于 Linux 如何枚举硬件,但我既没有在 Google 上找到任何明确的信息,也没有在手册页等中找到任何明确的信息。最后,我不相信我阅读 C 语言的能力能够在我需要的时候得到我需要的答案。
使用lshw
:
root@E2APF77 (~)# lshw -c network -businfo
Bus info Device Class Description
====================================================
pci@0000:06:00.0 eth0 network Ethernet Controller 10-Gigabit X540-AT2
pci@0000:06:00.1 eth1 network Ethernet Controller 10-Gigabit X540-AT2
pci@0000:16:00.0 eth2 network NetXtreme BCM5719 Gigabit Ethernet PCIe
pci@0000:16:00.1 eth3 network NetXtreme BCM5719 Gigabit Ethernet PCIe
pci@0000:16:00.2 eth4 network NetXtreme BCM5719 Gigabit Ethernet PCIe
pci@0000:16:00.3 eth5 network NetXtreme BCM5719 Gigabit Ethernet PCIe
usb0 network Ethernet interface
这很有趣,但我更喜欢查看硬件路径,所以我运行:
root@E2APF77 (~)# lshw -c network -short -businfo
H/W path Device Class Description
=======================================================
/0/100/2/0 eth0 network Ethernet Controller 10-Gigabit X540-AT2
/0/100/2/0.1 eth1 network Ethernet Controller 10-Gigabit X540-AT2
/0/100/1c.4/0 eth2 network NetXtreme BCM5719 Gigabit Ethernet PCIe
/0/100/1c.4/0.1 eth3 network NetXtreme BCM5719 Gigabit Ethernet PCIe
/0/100/1c.4/0.2 eth4 network NetXtreme BCM5719 Gigabit Ethernet PCIe
/0/100/1c.4/0.3 eth5 network NetXtreme BCM5719 Gigabit Ethernet PCIe
/1 usb0 network Ethernet interface
现在这对我来说很有趣,但我不确定我是否看到了我需要的上下文。因此,运行以下命令可以为我提供更好的上下文:
root@E2APF77 (~)# lshw -short -businfo -c bridge
H/W path Device Class Description
=======================================================
/0/100 bridge Xeon E5 v3/Core i7 DMI2
/0/100/1 bridge Xeon E5 v3/Core i7 PCI Express Root Port 1
/0/100/2 bridge Xeon E5 v3/Core i7 PCI Express Root Port 2
/0/100/3 bridge Xeon E5 v3/Core i7 PCI Express Root Port 3
/0/100/1c bridge C610/X99 series chipset PCI Express Root Port #1
/0/100/1c.3 bridge C610/X99 series chipset PCI Express Root Port #4
/0/100/1c.3/0 bridge Renesas Technology Corp.
/0/100/1c.3/0/0 bridge Renesas Technology Corp.
/0/100/1c.3/0/0/0 bridge Renesas Technology Corp.
/0/100/1c.3/0/1 bridge Renesas Technology Corp.
/0/100/1c.4 bridge C610/X99 series chipset PCI Express Root Port #5
/0/100/1f bridge C610/X99 series chipset LPC Controller
好的。我喜欢这个。现在我看到以下内容:
/0/100/2 bridge Xeon E5 v3/Core i7 PCI Express Root Port 2
/0/100/2/0 eth0 network Ethernet Controller 10-Gigabit X540-AT2
/0/100/2/0.1 eth1 network Ethernet Controller 10-Gigabit X540-AT2
/0/100/1c.4 bridge C610/X99 series chipset PCI Express Root Port #5
/0/100/1c.4/0 eth2 network NetXtreme BCM5719 Gigabit Ethernet PCIe
/0/100/1c.4/0.1 eth3 network NetXtreme BCM5719 Gigabit Ethernet PCIe
/0/100/1c.4/0.2 eth4 network NetXtreme BCM5719 Gigabit Ethernet PCIe
/0/100/1c.4/0.3 eth5 network NetXtreme BCM5719 Gigabit Ethernet PCIe
...其中第一张卡位于Xeon E5
网桥的端口 2 上,第二张卡位于网桥1c.4
的端口上C610/X99
(如果我使用了正确的命名法。如果我没有使用正确的命名,请原谅我)。我没有简单的方法来验证硬件插入的位置,并且目前我在不阅读文档的情况下不了解这些机器的构建细节。
那么,我们是否可以断言或假设 Linux 枚举盒子中硬件的方式具有某种优先级,我们可以使用它来确定任意盒子中任意数量、任意品牌网卡的物理端口?我假设我正在吠叫正确的树,但有些东西没有通过我的嗅觉测试。