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 report 状态为 DOWN?

这是一种不同的状态。

  • 标志 IFF_UP(上面显示为“<UP>”)描述行政的状态,这是您可以通过 设置的手动旋钮ip link set eth0 up

  • 另一方面,“状态 […]”文本描述操作状态,指示接口是否有能力的的工作。

运行状态与“运营商”存在大致相同 - 例如以太网链路已完全建立,或 Wi-Fi 接入点已关联。如果出现以下情况,则报告桥已启动(有运营商)最后一个其成员端口均处于开启状态。因此,您可能需要添加一个dummy0接口作为桥接成员。

操作状态大致对应于标志IFF_LOWER_UP(在标志区域中显示为“<LOWER_UP>”)和IFF_RUNNING(在您的示例中,它的缺失显示为伪标志“<NO-CARRIER>”)。(源代码

但是,iproute 工具是通过 Netlink 获取接口信息的,并且该state …部分是根据IFLA_操作状态netlink 属性。(源代码

此属性也可通过 sysfs 获得…/operstate。Linux 文档对这些标志和属性有更详细的解释操作状态.txt

相关内容