Como posso encontrar o mestre de uma interface de rede no Linux?

0

Eu preciso ler o mestre de uma interface de rede a partir de um script bash.

Por exemplo, eu tenho essas duas interfaces ...

$ ip link show tap0
4: tap0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop master br0 state DOWN mode DEFAULT group default qlen 1000
    link/ether c6:3f:96:13:02:25 brd ff:ff:ff:ff:ff:ff
$ ip link show br0
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether 30:9c:23:75:ad:b1 brd ff:ff:ff:ff:ff:ff

Dado o nome de uma interface, preciso encontrar o mestre dessa interface, então tap0 - > "br0" e br0 - > ""

Eu posso analisar a saída de ip link show ...

ip link show tap0 | head -n1 | sed 's/.*master \([^ ]*\).*//' | grep -v " "

que gera br0 (ou nada se eu substituir tap0 por um dispositivo que não tenha mestre)

Mas eu preferiria uma maneira mais robusta de ler essa informação. Existe algum tipo de forma de estilo procfs para ler isso? Ou um comando que pode produzir apenas o mestre de uma interface?

    
por DanJAB 25.07.2018 / 11:51

1 resposta

1

Você pode escrever um script que reúna essas informações fazendo o seguinte (que é provavelmente o que ip e ifconfig fazem)

  • Ir para /sys/class/net

  • Existem links simbólicos para todos os adaptadores de rede no sistema de arquivos sysfs. Os que correspondem ao hardware físico são links simbólicos para ../../devices/pciXXXX:XX/... , outros são ligados simbolicamente a ../../devices/virtual .

  • Se você cd para um dos virtuais, existe um link simbólico master que aponta para o mestre dessa interface. Se não houver mestre, provavelmente não existirá.

por 25.07.2018 / 15:15