Introdução
Em servidores é essencial que nós consigamos saber de qual placa de Rede pertence as interfaces do sistemas, para dessa forma configurarmos corretamente os endereçamentos IP e vlans.
Irei demonstrar como se faz para ver usando um sistema com duas interfaces onboard de 1Gb cada e duas interfaces offboard de 10Gb cada. Inicialmente é mais fácil usando o utilitário ethtool
, mas acontece que as vezes temos acesso a console do equipamento via iDRAC (no caso de servidores Dell) mas não temos internet por não ter configurado as interfaces ainda e precisamos saber qual interface pertence a placa de Rede correta.
Portanto nesse tutorial vou demonstrar como se faz sem precisar instalar nenhuma ferramenta.
Primeiro veja as interfaces que estão disponíveis no Sistema:
$ ls /sys/class/net/
eno8303 eno8403 enp202s0f0 enp202s0f1 lo
# Usando o comando 'ip':
$ ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eno8303: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP mode DEFAULT group default qlen 1000
link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff permaddr XX:XX:XX:XX:XX:XX
altname enp4s0f0
3: enp202s0f0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff
4: eno8403: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP mode DEFAULT group default qlen 1000
link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff permaddr XX:XX:XX:XX:XX:XX
altname enp4s0f1
5: enp202s0f1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff
Sanitizei os endereços MAC.
Perceba que tenho dois grupos de interfaces que são similares: eno8303
, eno8403
e enp202s0f0
, enp202s0f1
. Agora precisamos saber de qual placa se trata cada interface, portanto, veja qual módulo cada interface está usando:
$ lspci | grep -Ei 'net|ether'
04:00.0 Ethernet controller: Broadcom Inc. and subsidiaries NetXtreme BCM5720 2-port Gigabit Ethernet PCIe
04:00.1 Ethernet controller: Broadcom Inc. and subsidiaries NetXtreme BCM5720 2-port Gigabit Ethernet PCIe
ca:00.0 Ethernet controller: Intel Corporation Ethernet Controller X710 for 10GBASE-T (rev 02)
ca:00.1 Ethernet controller: Intel Corporation Ethernet Controller X710 for 10GBASE-T (rev 02)
Veja que na descrição temos
10GBASE-T
para a Intel (placa de 10Gb) e para a Broadcom temosGigabit Ethernet
na descrição, indicando que é uma interface de 1Gb apenas.
Agora que temos o barramento usado por cada placa de Rede (Broadcom e Intel), vamos ver qual módulo cada uma está usando, normalmente uma placa de rede vai alocar o mesmo módulo para todas as interfaces nela.
# Verificando a primeira interface do Broadcom:
$ lspci -v -s 04:00.0 | grep -i 'Kernel driver in use'
Kernel driver in use: tg3
# Verificando a segunda interface do Broadcom:
$ lspci -v -s 04:00.1 | grep -i 'Kernel driver in use'
Kernel driver in use: tg3
# Verificando a primeira interface da Intel:
$ lspci -v -s ca:00.0 | grep -i 'Kernel driver in use'
Kernel driver in use: i40e
# Verificando a segunda interface do Intel:
$ lspci -v -s ca:00.1 | grep -i 'Kernel driver in use'
Kernel driver in use: i40e
Pronto, agora só precisamos saber qual interface está usando cada módulo:
# Verificando o módulo para a interface eno8303:
$ grep -i 'driver' /sys/class/net/eno8303/device/uevent
DRIVER=tg3
# Verificando o módulo para a interface eno8403:
$ grep -i 'driver' /sys/class/net/eno8403/device/uevent
DRIVER=tg3
# Verificando o módulo para a interface enp202s0f0:
$ grep -i 'driver' /sys/class/net/enp202s0f0/device/uevent
DRIVER=i40e
# Verificando o módulo para a interface enp202s0f1:
$ grep -i 'driver' /sys/class/net/enp202s0f1/device/uevent
DRIVER=i40e
Agora sabemos que as interfaces eno8303
e eno8403
pertencem a placa de Rede da Broadcom e as interfaces enp202s0f0
e enp202s0f1
pertencem a placa de Rede da Intel.
Como linkar o barramento com a interface
Algo simples mas vou deixar registrado aqui, vamos ver como linkar o barramento que usamos em conjunto com o comando lspci
e o nome da interface:
$ ls -lh /sys/class/net/
total 0
lrwxrwxrwx 1 root root 0 Sep 22 13:00 eno8303 -> ../../devices/pci0000:00/0000:00:1c.5/0000:04:00.0/net/eno8303
lrwxrwxrwx 1 root root 0 Sep 22 13:00 eno8403 -> ../../devices/pci0000:00/0000:00:1c.5/0000:04:00.1/net/eno8403
lrwxrwxrwx 1 root root 0 Sep 22 13:00 enp202s0f0 -> ../../devices/pci0000:c9/0000:c9:02.0/0000:ca:00.0/net/enp202s0f0
lrwxrwxrwx 1 root root 0 Sep 22 13:00 enp202s0f1 -> ../../devices/pci0000:c9/0000:c9:02.0/0000:ca:00.1/net/enp202s0f1
lrwxrwxrwx 1 root root 0 Sep 22 13:00 lo -> ../../devices/virtual/net/lo
A saída desse comando já nos indica a qual barramento uma interface pertence. Por exemplo a interface
eno8303
aponta para04:00.0
, igual vemos no comandolspci
.
Deixando mais fácil de visualizar:
$ grep -i 'pci_slot' /sys/class/net/eno8303/device/uevent
PCI_SLOT_NAME=0000:04:00.0
$ grep -i 'pci_slot' /sys/class/net/eno8403/device/uevent
PCI_SLOT_NAME=0000:04:00.1
$ grep -i 'pci_slot' /sys/class/net/enp202s0f0/device/uevent
PCI_SLOT_NAME=0000:ca:00.0
$ grep -i 'pci_slot' /sys/class/net/enp202s0f1/device/uevent
PCI_SLOT_NAME=0000:ca:00.1