Wie ermittelt die „IP-Link-Show“ von iproute2 den Verbindungsstatus?

Wie ermittelt die „IP-Link-Show“ von iproute2 den Verbindungsstatus?

Ich habe eine Netzwerkschnittstelle, die ip link showFolgendes meldet:

3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default 
    link/ether 02:42:43:e6:b1:e7 brd ff:ff:ff:ff:ff:ff

Aber /sys/class/net/docker0/flagssagt das:

$ cat /sys/class/net/docker0/flags 
    0x1003

Die drei gesetzten Bits sind IFF_MULTICAST, IFF_BROADCASTund IFF_UP. Dies sieht aus wie eine Schnittstelle, die aktiv ist. Warum ip linkmeldet state DOWN?

Das System ist Linux 4.15 / Ubuntu 18.04.

Antwort1

Die drei gesetzten Bits sind IFF_MULTICAST, IFF_BROADCAST und IFF_UP. Dies sieht aus wie eine Schnittstelle, die UP ist

Und das entspricht ganz genau dem tatsächlichenFlaggenAusgabe:

3: docker0: <KEIN-TRÄGER,BROADCAST, MULTICAST, NACH OBEN>
                           ↑ ↑ ↑

Warum wird im IP-Link-Bericht der Status „DOWN“ angezeigt?

Das ist ein anderer Zustand.

  • Das Flag IFF_UP (oben als "<UP>" dargestellt) beschreibtVerwaltungZustand, das ist der manuelle Knopf, den Sie über einstellen können ip link set eth0 up.

  • Andererseits beschreibt der Text „Staat […]“betriebsbereitZustand, der angibt, ob die Schnittstellefähigdes Arbeitens.

Der Betriebszustand entspricht in etwa der Anwesenheit eines „Trägers“ – z. B. Ethernet-Verbindung vollständig hergestellt oder Wi-Fi-Zugangspunkt verbunden. Eine Brücke gilt als aktiv (über einen Träger verfügend), wennmindestens einseiner Mitgliedsports ist aktiv. Aus diesem Grund möchten Sie möglicherweise eine dummy0Schnittstelle als Bridge-Mitglied hinzufügen.

Der Betriebszustand entspricht in etwa den Flags IFF_LOWER_UP(im Flag-Bereich als „<LOWER_UP>“ angezeigt) und IFF_RUNNING(sein Fehlen wird in Ihrem Beispiel als Pseudo-Flag „<NO-CARRIER>“ angezeigt). (Quellcode)

Die iproute-Tools erhalten jedoch Schnittstelleninformationen über Netlink, und der state …Abschnitt wird basierend auf demIFLA_OPERSTATENetlink-Attribut. (Quellcode)

Dieses Attribut ist auch über sysfs verfügbar …/operstate. Die Linux-Dokumentation enthält eine ausführlichere Erklärung dieser Flags und Attribute inoperstates.txt.

verwandte Informationen