Hat jemand eine Idee wie man den Link Status vom Ethernet unter Linux mit C Festellen kann ? Gibt es einen ioctl() Aufruf hierzu ? Aus der Shell heraus ist das kein Problem... Ich habe zwar schon ein paar Ansätze gefunden aber keine wirklich brauchbaren ...
ioctl weiss ich nicht, aber schau mal hier: https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-class-net What: /sys/class/net/<iface>/operstate Allerdings glaube ich, dass laengst nicht alle Treiber dies implementieren...
Vielleicht per system call: system("ethtool eth0"); alternativ system("ip link");
:
Bearbeitet durch User
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"
:
Bearbeitet durch User
geht sogar noch besser ;) /sys/class/net/<iface>/carrier_changes man teste dies und ließt dann die daten neu aus :)
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.
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.
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.