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

설정된 3개의 비트는 IFF_MULTICAST, IFF_BROADCAST및 입니다 IFF_UP. 이것은 UP인 인터페이스처럼 보입니다. ip link보고하는 이유는 무엇입니까 state DOWN?

시스템은 Linux 4.15 / Ubuntu 18.04입니다.

답변1

설정된 세 가지 비트는 IFF_MULTICAST, IFF_BROADCAST 및 IFF_UP입니다. 이것은 UP인 인터페이스처럼 보입니다.

그리고 그것은 실제 상황과 완벽하게 일치합니다.깃발산출:

3: docker0: <캐리어 없음,브로드캐스트, 멀티캐스트, 업>
                           ↑ ↑ ↑

IP 링크 보고서에 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_OPERSTATE넷링크 속성. (소스 코드)

이 속성은 sysfs를 통해서도 사용할 수 있습니다 …/operstate. Linux 문서에는 이러한 플래그와 속성에 대한 자세한 설명이 있습니다.Operastates.txt.

관련 정보