Как `ip link show` iproute2 определяет состояние соединения?

Как `ip link show` iproute2 определяет состояние соединения?

У меня есть сетевой интерфейс, который 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_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.

  • С другой стороны, текст «государства […]» описываетоперативныйсостояние, которое указывает, является ли интерфейсспособныйработы.

Рабочее состояние примерно такое же, как и наличие «носителя» — например, полностью установленное соединение Ethernet или точка доступа Wi-Fi, связанная с. Мост считается включенным (имеет носителя), еслихотя бы одиниз его портов-участников работает. По этой причине вы можете захотеть добавить dummy0интерфейс в качестве участника моста.

Рабочее состояние примерно соответствует флагам IFF_LOWER_UP(отображается как "<LOWER_UP>" в области флагов) и IFF_RUNNING(его отсутствие отображается как псевдофлаг "<NO-CARRIER>" в вашем примере). (исходный код)

Однако инструменты iproute получают информацию об интерфейсе через Netlink, и state …раздел печатается на основеIFLA_OPERSTATEатрибут netlink. (исходный код)

Этот атрибут также доступен через sysfs в …/operstate. Документация Linux содержит более подробное объяснение этих флагов и атрибутов вoperstates.txt.

Связанный контент