iproute2的`ip link show`如何決定連結狀態?

iproute2的`ip link show`如何決定連結狀態?

我有一個網路接口,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

設定的三位是IFF_MULTICASTIFF_BROADCASTIFF_UP。這看起來像是一個 UP 的介面。為什麼要ip link檢舉state DOWN

系統是Linux 4.15 / Ubuntu 18.04。

答案1

設定的三個位元是 IFF_MULTICAST、IFF_BROADCAST 和 IFF_UP。這看起來像是一個 UP 的介面

這與實際情況完全吻合旗幟輸出:

3:docker0:<無載體,廣播、組播、上行>
                           ↑ ↑ ↑

為什麼 ip link 報告狀態為 DOWN?

那是一種不同的狀態。

  • 標誌 IFF_UP(上面顯示為“<UP>”)描述行政的狀態,這是可以透過 進行設定的手動旋鈕ip link set eth0 up

  • 另一方面,「狀態[…]」文字描述了操作state,表示介面是否處於狀態有能力的工作的。

操作狀態與「運營商」存在大致相同 - 例如,乙太網路連結完全建立,或關聯到 Wi-Fi 存取點。如果滿足以下條件,則報告網橋已啟動(有載體):最後一個其成員連接埠已啟動。因此,您可能需要新增一個dummy0介面作為橋接成員。

操作狀態大致對應於標誌IFF_LOWER_UP(在標誌區域中顯示為“<LOWER_UP>”)和IFF_RUNNING(其缺失在範例中顯示為偽標誌“<NO-CARRIER>”)。 (原始碼

而iproute工具透過Netlink取得介面訊息,並state …根據該資訊列印該部分國際圖聯_操作狀態網路連結屬性。 (原始碼

該屬性…/operstate也可以透過 sysfs at 取得。 Linux 文件對這些標誌和屬性有更詳細的解釋操作狀態.txt

相關內容