Como determinar o tipo lógico de um dispositivo de rede linux

5

com lógica quero dizer tudo legal no comando ip link como, por exemplo:

ip link add link dum0 name dum0.200 type vlan protocol 802.1Q id 200

onde o tipo lógico seria "vlan". Todos os tipos válidos são, para citar a página man:

vlan | veth | vcan | dummy | ifb | macvlan | macvtap | can | bridge | ipoib | ip6tnl | ipip | sit | vxlan |gre | gretap | ip6gre | ip6gretap | vti

Observe que isso claramente não é o tipo de dispositivo físico (como ethernet, wifi, ppp etc.), conforme solicitado em esta questão , que contém uma pedra preciosa referência ao tipo físico que me levou a testar:

find /sys/class/net ! -type d | xargs --max-args=1 realpath | 
  while read d; do 
    b=$(basename $d) ; n=$(find $d -name type) ; echo -n $b' ' ; cat $n;
 done
dum0.200 1
dum0.201 1
dum1.300 1
dum1.301 1
dummy0 1
ens36 1
ens33 1
lo 772
dum0 1
dum1 1
wlan0 1

Mas, aparentemente, os dispositivos dummy, vlan e wlan são do tipo ARPHRD_ETHER.

Alguém sabe mais? Agradecemos antecipadamente.

    
por JdeHaan 13.03.2016 / 17:12

1 resposta

4

Existe uma maneira de percorrer todos os tipos disponíveis e mostrar todas as interfaces por tipo (usando ip link show type <type> ). A partir disso, é possível coletar as interfaces para todos os tipos e depois analisar a interface que se deseja conhecer. Não é elegante, mas funciona:

Usando o bash:

#!/bin/bash

# Arguments: $1: Interface ('grep'-regexp).

# Static list of types (from 'ip link help'):
TYPES=(bond bond_slave bridge dummy gre gretap ifb ip6gre ip6gretap ip6tnl ipip ipoib ipvlan macvlan macvtap nlmon sit vcan veth vlan vti vxlan)

iface="$1"

for type in "${TYPES[@]}"; do
  ip link show type "${type}" | grep -E '^[0-9]+:' | cut -d ':' -f 2 | sed 's|^[[:space:]]*||' | while read _if; do
    echo "${_if}:${type}"
  done | grep "^${iface}"
done

Salve isso em um arquivo, torne-o executável e execute-o com sua interface que você deseja conhecer como argumento.

Para o exemplo de dum0.200 beeing do tipo vlan sobre o link eth0 (criado com ip link add link eth0 name dum0.200 type vlan protocol 802.1Q id 200 ), a saída seria dum0.200@eth0:vlan , indicando que é do tipo vlan . Observe que o @eth0 vem de ip link show e pode ser analisado se alguém desejar.

Como o argumento para este script é interpretado como grep -regexp, especificando nada lista tudo o que ip link show type <type> produz, ou especificando apenas um prefixo lista alguns, etc.

    
por 04.04.2016 / 11:25