Skip to main content

Linkando interface Rede com a Placa

· 4 min read


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 temos Gigabit 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 para 04:00.0, igual vemos no comando lspci.


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