Überprüfen Sie, ob das Netzwerkkabel an die angegebene Netzwerkkarte angeschlossen ist.

Überprüfen Sie, ob das Netzwerkkabel an die angegebene Netzwerkkarte angeschlossen ist.

Der Server verfügt über mehrere Netzwerkkarten, von denen nur bei einer ein Kabel eingesteckt ist.

Wie kann ich testen, ob der angegebene Port ethXangeschlossen ist oder nicht?

Ich fand viele ähnlicheFragen, aber weder ethtoolnoch cat /sys/class/net/eth1/carrierfunktioniert für mich.

In meinem Fall ist das Kabel zwar angeschlossen , zeigt eth2aber trotzdemethtoolLink detected: no

Settings for eth2:
    Supported ports: [ FIBRE ]
    Supported link modes:   10000baseT/Full 
    Supported pause frame use: Symmetric
    Supports auto-negotiation: No
    Advertised link modes:  10000baseT/Full 
    Advertised pause frame use: Symmetric
    Advertised auto-negotiation: No
    Speed: Unknown!
    Duplex: Unknown! (255)
    Port: Direct Attach Copper
    PHYAD: 0
    Transceiver: internal
    Auto-negotiation: off
    Supports Wake-on: d
    Wake-on: d
    Current message level: 0x00000007 (7)
                   drv probe link
    Link detected: no

Es ist kein Kabel angeschlossen eth3, aber ethtooldie Ausgabe sieht fast gleich aus:

diff <(ethtool eth2) <(ethtool eth3)
1c1
< Settings for eth2:
---
> Settings for eth3:
11c11
<   Port: Direct Attach Copper
---
>   Port: Other

Erst wenn ich die Schnittstelle hochfahre eth2, ethtoolwird angezeigt Link detected: yes. Danach ethtoolwird der Link als gemeldet yes, auch wenn ich die Schnittstelle herunterfahre.

Kurz gesagt, ethtooles scheint nicht auf Anhieb zu funktionieren, bevor die Schnittstelle aktualisiert wurde.

Wie kann ich zuverlässig testen, ob das Kabel an der angegebenen Schnittstelle angeschlossen ist oder nicht??

Antwort1

Ich gehe davon aus, dass Sie den Verbindungsstatus der Netzwerkkarte herausfinden möchten und nicht den physischen Zustand eines in die Buchse eingesteckten Kabels. (Das lässt sich möglicherweise nicht herausfinden.)

Nach einer kurzen Suche glaube ich, dass Sie die Antwort bereits gefunden haben. Rufen Sie die Schnittstelle auf, warten Sie, bis ein Link gefunden wird, falls es einen gibt (das kann einige Sekunden dauern), und überprüfen Sie dann die Ausgabe von ethtooloder carrierund/oder operstatein /sys/class/net/$NIC/.

ifconfig somenic upscheint diese beiden ioctlAufrufe zu tätigen:

ioctl(4, SIOCGIFFLAGS, {ifr_name="somenic", ifr_flags=IFF_BROADCAST|IFF_MULTICAST}) = 0
ioctl(4, SIOCSIFFLAGS, {ifr_name="somenic", ifr_flags=IFF_UP|IFF_BROADCAST|IFF_RUNNING|IFF_MULTICAST}) = 0

Das heißt, es setzt IFF_UP. Basierend aufHier, Einstellung, die tatsächlich zur Initialisierung des Geräts führt:

Anschließend setzt es mittels (Socket I/O Control Set Interface Flags) das IFF_UPBit , um die Schnittstelle einzuschalten.dev->flagioctl(SIOCSIFFLAGS)

Der letztere Befehl ( ioctl(SIOCSIFFLAGS)) ruft jedoch die Open-Methode für das Gerät auf.

Was den eigentlichen Code betrifft, muss der Treiber viele der gleichen Aufgaben ausführen wie die Zeichen- und Blocktreiber. Open fordert alle benötigten Systemressourcen an und weist die Schnittstelle an, zu erscheinen.

Ähnliche Kommentare gibt es ime1000eTreiberquelle:

/**
 * e1000e_open - Called when a network interface is made active
 * @netdev: network interface device structure
 *
 * Returns 0 on success, negative value on failure
 *                                                                                                                                                                           * The open entry point is called when a network interface is made
 * active by the system (IFF_UP).  At this point all resources needed
 * for transmit and receive operations are allocated, the interrupt
 * handler is registered with the OS, the watchdog timer is started,
 * and the stack is notified that the interface is ready.
 **/
int e1000e_open(struct net_device *netdev)  

Das würde bedeuten, dass es keine Möglichkeit gibt, den Verbindungsstatus einer Netzwerkkarte sinnvoll zu ermitteln, die nichthoch, da die Hardware nicht einmal initialisiert würde.


Natürlich ist es zumindest theoretisch möglich, dass sich einige Treiber anders verhalten und die Hardware initialisieren, bevor jemand einstellt IFF_UP, aber im Allgemeinen würde das immer noch nicht helfen.

Auf einer Maschine (mit e1000eAnschluss an einen Cisco-Switch) führt das Herunterziehen der Schnittstelle dazu, dass der Switch den Verbindungsverlust erkennt.

Auf einem anderen Rechner (mit eingebetteter Realtek-Netzwerkkarte) führen Änderungen von „hoch“ nach „herunter“ dazu, dass der Remote-Switch eine kurze Unterbrechung erkennt, die Verbindung jedoch erkennt und dann wiederhergestellt wird. ( ethtoolAuf der PC-Seite wird jedoch „keine Verbindung“ angezeigt.) Dies kann mit der Vorbereitung für Wake-on-LAN oder Ähnliches zu tun haben oder auch nicht, aber ich habe wirklich keine Ahnung.

Antwort2

Versuchen Sie den Befehl ifplugstatusaus dem Paketifplugd

$ ifplugstatus net0
net0: unplugged

$ ifplugstatus wlnet0
wlnet0: link beat detected

Neben der Bildschirmausgabe können Sie dies auch am Beendigungsstatus des Befehls erkennen.

(aus der Manpage)

RÜCKGABEWERTE

  0 Success

  1 Failure

  2 Link beat detected (only available when an interface is specified)

  3 Unplugged (same here)

Antwort3

Ich habe mir den Ethertools-Quellcode angesehen, konnte aber keine Stelle finden, an der der Linkstatus beschrieben wird.

Dann stellte ich fest, dass dies eine exakte Kopie einer Frage auf SO zu sein scheint:https://stackoverflow.com/questions/808560/wie-erkennt-man-den-physischen-verbindungszustand-eines-netzwerkkabelverbinders?

Ich habe die meisten der dort aufgeführten Antworten ausprobiert (mii-tools, ethertool, cat the carrier oder operstate, dmesg) und keine davon hat bei der Verbindung richtig funktioniert, als die ifconfig ausgefallen war.

Da die SO-Frage mehr als 6 Jahre alt ist, denke ich, dass die meistenmöglichAntworten gibt es bereits.

Meiner Meinung nach können Sie mit Standard-Linux-Tools den Netzbetreiber erst prüfen, wenn Sie versuchen, ihn aufzurufen. Danach mii-toolsschien die Linkerkennung einwandfrei zu funktionieren und eine einheitliche Antwort zu geben.

Ich habe rtnetlink und einige andere Antworten dort nicht ausprobiert, die sich mit der Erkennung vonÄnderungenim Link-Status, was, wie ich annehme, nicht das ist, was Sie wollten.

verwandte Informationen