Como o `ip link show` do iproute2 determina o estado do link?

Como o `ip link show` do iproute2 determina o estado do link?

Eu tenho uma interface de rede que ip link showinforma assim:

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

Mas /sys/class/net/docker0/flagsdiz isto:

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

Os três bits definidos IFF_MULTICASTsão IFF_BROADCASTe IFF_UP. Parece uma interface UP. Por que ip linkrelata state DOWN?

O sistema é Linux 4.15/Ubuntu 18.04.

Responder1

Os três bits definidos são IFF_MULTICAST, IFF_BROADCAST e IFF_UP. Parece uma interface UP

E isso corresponde perfeitamente à realidadebandeirassaída:

3: docker0: <NO-CARRIER,TRANSMISSÃO, MULTICAST, ATÉ>
                           ↑ ↑ ↑

Por que o relatório do link IP indica DOWN?

Esse é um tipo diferente de estado.

  • O sinalizador IFF_UP (mostrado acima como "<UP>") descreveadministrativoestado, que é o botão manual que você pode definir por meio de ip link set eth0 up.

  • Por outro lado, o texto “estado […]” descreveoperacionalestado, que indica se a interface estácapazde trabalho.

O estado operacional é aproximadamente o mesmo que a presença de uma 'operadora' – por exemplo, link Ethernet totalmente estabelecido ou ponto de acesso Wi-Fi associado. É relatado que uma ponte está ativa (tem uma transportadora) sepelo menos umde suas portas membros está em alta. Por esse motivo, você pode querer adicionar uma dummy0interface como membro da ponte.

O estado operacional corresponde aproximadamente aos sinalizadores IFF_LOWER_UP(mostrados como "<LOWER_UP>" na área de sinalizadores) e IFF_RUNNING(sua ausência mostrada como pseudo-sinalizador "<NO-CARRIER>" no seu exemplo). (Código fonte)

Porém, as ferramentas iproute obtêm informações da interface via Netlink, e a state …seção é impressa com base noIFLA_OPERSTATEatributo netlink. (Código fonte)

Este atributo …/operstatetambém está disponível via sysfs em. A documentação do Linux tem uma explicação mais detalhada desses sinalizadores e atributos emoperastates.txt.

informação relacionada