Linkstatus der Netzwerkkarte ermitteln

02 Aug 2013

Hinter dem sperrigen Titel steckt ein sperriges Problem. Ein Beispiel: man hat vier Ethernetports am Rechner aber kennt die Zuordnung zu deren logischen Interfaces (ethX) in Linux nicht. Durch die udev-Regeln bleibt die Zuordnung der Interfaces zu den physikalischen Ports zwar über den Reboot hinaus erhalten aber wie bekommt man diese Zuordnung erst einmal heraus?

Unter /sys/class/net/ findet man hilfreiche Informationen zu den Netzwerkinterfaces.

# grep "" /sys/class/net/eth0/*

/sys/class/net/eth0/addr_assign_type:0
/sys/class/net/eth0/address:00:19:99:be:96:48
/sys/class/net/eth0/addr_len:6
/sys/class/net/eth0/broadcast:ff:ff:ff:ff:ff:ff
/sys/class/net/eth0/carrier:1
/sys/class/net/eth0/dev_id:0x0
/sys/class/net/eth0/dormant:0
/sys/class/net/eth0/duplex:full
/sys/class/net/eth0/flags:0x1003
/sys/class/net/eth0/ifindex:2
/sys/class/net/eth0/iflink:2
/sys/class/net/eth0/link_mode:0
/sys/class/net/eth0/mtu:1500
/sys/class/net/eth0/netdev_group:0
/sys/class/net/eth0/operstate:up
/sys/class/net/eth0/speed:1000
/sys/class/net/eth0/tx_queue_len:1000
/sys/class/net/eth0/type:1
/sys/class/net/eth0/uevent:INTERFACE=eth0
/sys/class/net/eth0/uevent:IFINDEX=2

Interessant für unser beispielhaftes Problem ist in diesem Fall /sys/class/net/ethX/carrier. Ist ein Kabel eingesteckt enthält diese Datei eine 1, sonst 0. Zusammen mit dem Befehl watch kann man sich nun periodisch den physikalischen Verbindungsstatus ausgeben lassen.

# watch -n5 'grep "" /sys/class/net/eth*/carrier'

/sys/class/net/eth0/carrier:1
/sys/class/net/eth1/carrier:0
/sys/class/net/eth2/carrier:0
/sys/class/net/eth3/carrier:0

Der Befehl erzeugt die Liste aller Interfaces, den zugehörigen physikalischen Kabelverbindungsstand und aktualisiert ihn alle 5 Sekunden (-n5). Nun kann man ein Kabel der Reihe nach einstecken und sieht sofort welches physische Interface mit welchem logischen Interface verbunden ist.

Wenn in der Liste statt der Nullen und Einsen nur “invalid argument” auftaucht, so muss man die Interfaces vorher noch aktivieren:

# ifconfig eth0 up
# ifconfig eth1 up
# ifconfig eth2 up
# ifconfig eth3 up

Möchte man die Interfaces nachträglich noch umsortieren, so muss man unter Ubuntu die Datei /etc/udev/rules.d/70-persistent-net.rules entsprechend abändern. Hat man nun das richtige Interface mit dem richtigen Netzwerkkabel versehen und das Netzwerk steht, kann man auch ethtool installieren, welches einem noch mehr Informationen liefert und auch Parameter von Netzwerkkarten setzen kann.

(via so)

opensource netzwerk link carrier linux
comments powered by Disqus