link Status vom ethernet Interface festellen

OP #5929789
Lesenswert?

per syscall wäre auch eine Lösung. Das sollte doch jeder Treiber zur 
Verfügung stellen ?? Ist doch einfach die PHY zu fragen ob ein Träger 
vorhanden ist oder nicht.

Ich würde den Zustand gerne Festellen um sofort im Netzwerk nach Geräten 
zu suchen. Es muss nicht einmal ein Signal erzeugt werden, ich kann das 
z.Bsp alle 5 sec etc prüfen. Link up oder down..

ewt. sollte ich mal in den Code von ifconfig schauen :)

/sys/class/net/<iface>/carrier ginge auch aber bei 
/sys/class/net/<iface>/operstate kommt wenigstens "unknown" oder 
"notpresent"
#5932853
Lesenswert?

Marco H. schrieb:
> Ich würde den Zustand gerne Festellen um sofort im Netzwerk nach Geräten
> zu suchen.

Bei debian-basierten Distros sollte es reichen, das Skript, das das tut 
in /etc/network/if-up.d zu legen. Der Name des Netzwerk-Interfaces steht 
dann in der Umgebungsvariable $IFACE.

Auf 
https://stackoverflow.com/questions/26672414/inotify-add-watch-fails-on-sys-class-net-eth0-operstate#26674239 
findet man ein Beispielprogramm in C, das die Erkennung über netlink 
macht.
Ist allerdings ein kleiner Fehler drin:
1
oid read_msg(int fd)

hier muss natürlich ein v vor das oid.
OP #5933512
Lesenswert?

Danke damit habe ich mich schon beschäftigt. So wirklich gut ist die 
sache nicht Dokumentiert :(. Aber ich habe eine Anleitung gefunden die 
den Sachverhalt besser erklärt.

http://olegkutkov.me/2018/02/14/monitoring-linux-networking-state-using-netlink/

oder https://www.infradead.org/~tgr/libnl/doc/core.html#_introduction

Ich habe das Problem erst mal so gelöst indem ich das SYS Filesystem 
auslese.

Gehört zwar weniger hier her, aber der Erfolg ist auch abhängig vom 
Driver. Auf einen RPI4 ließ sich das Network Interface nicht mal in den 
RAW Mode versetzen. Es ignorierte einfach den Mode.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren