web-dev-qa-db-ja.com

iproute2の「iplinkshow」はどのようにリンク状態を決定しますか?

私はip link showこのようなレポート:

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

だが /sys/class/net/docker0/flagsはこれを言います:

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

設定される3ビットはIFF_MULTICASTIFF_BROADCASTおよびIFF_UP。これはUPのインターフェースのように見えます。なぜ ip link 報告書 state DOWN

システムはLinux4.15/Ubuntu18.04です。

3
Tom

設定される3ビットは、IFF_MULTICAST、IFF_BROADCAST、およびIFF_UPです。これはUPのインターフェースのように見えます

そして、それは実際のフラグ出力に完全に対応しています。

 3:docker0:<NO-CARRIER、ブロードキャスト、マルチキャスト、UP> 
↑↑↑

IPリンクレポートの状態がダウンしているのはなぜですか?

それは別の種類の状態です。

  • フラグIFF_UP(上記では「<UP>」として表示)は、administrative状態を示します。これは、ip link set eth0 upを介して設定できる手動ノブです。

  • 一方、「state […]」テキストは、operationalstateを記述し、インターフェースが対応可能であるかどうかを示します。 。

動作状態は、「キャリア」の存在とほぼ同じです。イーサネットリンクが完全に確立されているか、Wi-Fiアクセスポイントがに関連付けられています。 メンバーポートの少なくとも1つがアップしている場合、ブリッジはアップしている(キャリアがある)と報告されます。そのため、ブリッジメンバーとしてdummy0インターフェイスを追加することをお勧めします。

動作状態は、フラグIFF_LOWER_UP(フラグ領域に「<LOWER_UP>」として表示)およびIFF_RUNNING(この例では疑似フラグ「<NO-CARRIER>」として表示されない)にほぼ対応します。 。 ( ソースコード

ただし、iprouteツールはNetlinkを介してインターフェイス情報を取得し、state …セクションはIFLA_OPERSTATEnetlink属性に基づいて出力されます。 ( ソースコード

この属性は、…/operstateのsysfsからも利用できます。 Linuxのドキュメントには、operstates.txtにこれらのフラグと属性の詳細な説明があります。

2
user1686