¿Cómo determina el `ip link show` de iproute2 el estado del enlace?

¿Cómo determina el `ip link show` de iproute2 el estado del enlace?

Tengo una interfaz de red que ip link showinforma así:

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

Pero /sys/class/net/docker0/flagsdice esto:

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

Los tres bits que se establecen son IFF_MULTICAST, IFF_BROADCASTy IFF_UP. Esto parece una interfaz que está ARRIBA. ¿Por qué ip linkinformar state DOWN?

El sistema es Linux 4.15 / Ubuntu 18.04.

Respuesta1

Los tres bits que se establecen son IFF_MULTICAST, IFF_BROADCAST e IFF_UP. Esto parece una interfaz que está ARRIBA

Y eso se corresponde perfectamente con la realidadbanderasproducción:

3: docker0: <SIN PORTADORA,TRANSMISIÓN, MULTIDIFUSIÓN, ARRIBA>
                           ↑ ↑ ↑

¿Por qué el informe del enlace IP indica ABAJO?

Ese es un tipo diferente de estado.

  • La bandera IFF_UP (mostrada arriba como "<UP>") describeadministrativoestado, que es la perilla manual que puede configurar mediante ip link set eth0 up.

  • Por otra parte, el texto "estado […]" describeOperacionalestado, que indica si la interfaz estácapazde trabajo.

El estado operativo es aproximadamente el mismo que la presencia de un "portador": por ejemplo, un enlace Ethernet completamente establecido o un punto de acceso Wi-Fi asociado. Se informa que un puente está levantado (tiene un transportista) sial menos unode sus puertos miembros ha aumentado. Por ese motivo, es posible que desee agregar una dummy0interfaz como miembro puente.

El estado operativo corresponde aproximadamente a las banderas IFF_LOWER_UP(que se muestran como "<LOWER_UP>" en el área de banderas) y IFF_RUNNING(su ausencia se muestra como pseudo-bandera "<NO-CARRIER>" en su ejemplo). (código fuente)

Sin embargo, las herramientas de iproute obtienen información de la interfaz a través de Netlink y la state …sección se imprime según laIFLA_OPERSTATEatributo de enlace de red. (código fuente)

Este atributo …/operstatetambién está disponible a través de sysfs en. La documentación de Linux tiene una explicación más detallada de estos indicadores y atributos enoperastates.txt.

información relacionada