listando interface pai de uma vlan

1

Eu tenho uma configuração com várias interfaces vlan em uma interface física.

Physical interface: eth1
VLANS on top of this: vlan1, vlan2, vlan3

Agora, quero saber qual é a interface pai da minha vlan (por exemplo, aqui eth1 é a interface pai dessas vlans).

Eu posso obter essas informações executando "ip addr show vlan-name" e, em seguida, na saída, vou obter vlan1 @ eth1, mas eu preciso analisar a saída deste comando ou olhando para o meu arquivo de configuração de rede, analisando e interpretá-lo.

Existe outra maneira pela qual eu possa obter essa informação sem qualquer lógica de análise? Por exemplo, para interfaces ligadas, a informação está presente no diretório / sys / class / net / e pode-se simplesmente ler arquivos lá.

# cat /sys/class/net/bond0/bonding/slaves
eth0 eth1

Existe um caminho / arquivo similar disponível para interfaces marcadas com vlan? Eu não consegui descobrir se há algum arquivo que eu possa ler sem qualquer análise e extrair essa informação ou qualquer comando / utilitário que apenas forneça o nome da interface pai.

Por favor, deixe-me saber se existem outras alternativas para isso.

Obrigado.

    
por Rahul 10.11.2017 / 00:38

1 resposta

1

Eu não encontrei uma maneira sem qualquer análise para obter a interface subjacente, então eu dei 4 (às vezes apenas um pouco) maneiras diferentes de obter essa informação, espero que seja útil.

Há um link simbólico com o nome da interface física:

$ ls -l /sys/class/net/vlan2
[...]
lrwxrwxrwx. 1 root root 0 nov. 10 02:12 lower_eth1 -> ../eth1
[...] -rw-r--r--. 1 root root 4096 nov. 10 01:49 uevent

Método 1

$ echo $(basename $(readlink /sys/class/net/vlan2/lower_*))
eth1

uevent útil também:

$ cat /sys/class/net/vlan2/uevent 
DEVTYPE=vlan
INTERFACE=vlan2
IFINDEX=24
$ cat /sys/class/net/vlan2/lower_*/uevent
INTERFACE=eth1
IFINDEX=22

Método 2

$ cat /sys/class/net/vlan2/lower_*/uevent|sed -n 's/^INTERFACE=//p'
eth1

Como root, existem entradas em /proc/net/vlan :

# ls /proc/net/vlan/
config  vlan1  vlan2  vlan3  vlan4  vlan5
# cat /proc/net/vlan/config
VLAN Dev name    | VLAN ID
Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD
vlan1          | 1  | eth1
vlan3          | 3  | eth1
vlan4          | 4  | eth1
vlan2          | 2  | eth1
vlan5          | 5  | eth2

# cat /proc/net/vlan/vlan2
[...]
Device: eth1
[...]

Método 3

# awk -F ' *\| *' '$1 == "vlan2" { print $3 }' /proc/net/vlan/config
eth1

Método 4

# sed -n 's/^Device: //p' /proc/net/vlan/vlan2
eth1

Note que em / sys a outra direção também é possível com upper_* :

$ ls -l /sys/class/net/eth1

[...]

-rw-r--r--. 1 root root 4096 nov.  10 01:46 uevent
lrwxrwxrwx. 1 root root    0 nov.  10 02:23 upper_vlan1 -> ../vlan1
lrwxrwxrwx. 1 root root    0 nov.  10 02:18 upper_vlan2 -> ../vlan2
lrwxrwxrwx. 1 root root    0 nov.  10 02:23 upper_vlan3 -> ../vlan3
lrwxrwxrwx. 1 root root    0 nov.  10 02:23 upper_vlan4 -> ../vlan4

$ sed -n 's/^INTERFACE=//p' /sys/class/net/eth1/upper_*/uevent
vlan1
vlan2
vlan3
vlan4
    
por 10.11.2017 / 08:34