Como o 'ip link show' de iproute2 determina o estado do link?

3

Eu tenho uma interface de rede que ip link show relata 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/flags diz isto:

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

Os três bits definidos são IFF_MULTICAST , IFF_BROADCAST e IFF_UP . Isso parece uma interface UP. Por que ip link report state DOWN ?

O sistema é o Linux 4.15 / Ubuntu 18.04.

    
por Tom 11.10.2018 / 11:40

1 resposta

2

The three bits that are set are IFF_MULTICAST, IFF_BROADCAST and IFF_UP. This looks like an interface that is UP

E isso corresponde perfeitamente à saída flags :

3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP>
                           ↑         ↑      ↑

Why does ip link report state DOWN?

Esse é um tipo diferente de estado.

  • O sinalizador IFF_UP (mostrado acima como "< UP >") descreve o estado administrativo , que é o botão manual que você pode definir via ip link set eth0 up .

  • Por outro lado, o texto "estado […]" descreve o estado operacional , que indica se a interface é capaz de funcionar.

O estado operacional é aproximadamente o mesmo que a presença de "portadora" - por exemplo, Link Ethernet totalmente estabelecido ou ponto de acesso Wi-Fi associado a. Uma ponte é relatada como estando ativa (se tiver uma portadora) se pelo menos uma de suas portas membro estiver ativa. Por esse motivo, talvez você queira adicionar uma interface dummy0 como membro de 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 )

No entanto, as ferramentas iproute obtêm informações de interface via Netlink, e a seção state … é impressa com base no atributo netlink IFLA_OPERSTATE . ( código-fonte )

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

    
por 11.10.2018 / 12:10