Eu tenho um projeto aqui no trabalho em que estou tentando mapear definitivamente os endereços MAC Ethernet para portas físicas (a placa 1 da porta 1 é eth0 (mac xx: xx: xx: xx: xx: xx) e uma operador técnico pode olhar para esse descritor de porta e saber exatamente onde um cabo está conectado em uma caixa) para dispositivos de rede em servidores (fornecedores e modelos de servidores arbitrários) usando Linux, atualmente CentOS 6.6 sem ser necessário quebrar a caixa física. Eu não sou um guru de hardware, então qualquer ajuda seria muito apreciada.
A resposta para essa questão provavelmente está em como o Linux enumera o hardware, mas eu não encontrei nada definitivo perguntando aos Googles nem consegui encontrar nada definitivo nas páginas man e afins. Finalmente, não acredito em minhas habilidades em ler C para obter a resposta de que preciso no tempo que preciso.
Usando 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
que é interessante, mas eu prefiro ver o caminho hw, então eu corro:
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
Agora isso é interessante para mim, mas não tenho certeza se estou vendo o contexto de que preciso. Então, executar o seguinte me fornece um contexto melhor:
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
OK. Eu gosto disso. Agora vejo o seguinte:
/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
... onde a primeira placa está na porta 2 da ponte Xeon E5
e a segunda placa está na porta 1c.4
da ponte C610/X99
(se eu estiver usando a nomenclatura correta da nomenclatura). Por favor, me perdoe se eu não for. Não tenho uma maneira fácil de validar as localizações de onde o hardware está conectado e atualmente não tenho conhecimento dos detalhes de como essas máquinas são construídas sem ler a documentação.
Então, alguém pode afirmar ou assumir que a forma como o Linux está enumerando o hardware na caixa tem alguma prioridade que podemos usar para determinar as portas físicas para um número arbitrário de marcas arbitrárias de placas de rede em caixas arbitrárias? Estou assumindo que estou latindo na árvore certa, mas algo não está passando no teste do cheiro para mim sobre isso.