Как 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
Три бита, которые установлены 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-ссылка сообщает о состоянии ВНИЗ?
Это другой тип государства.
Флаг IFF_UP (показанный выше как "
") описывает административное состояние, которое представляет собой ручную ручку, которую можно установить с помощью ip link set eth0 up
,С другой стороны, текст "состояние […]" описывает рабочее состояние, которое указывает, способен ли интерфейс работать.
Рабочее состояние примерно такое же, как и присутствие "оператора" - например, канал Ethernet полностью установлен или точка доступа Wi-Fi связана с ним. Сообщается, что мост работает (имеет оператора связи), если хотя бы один из его портов-участников работает. По этой причине вы можете добавить dummy0
интерфейс в качестве члена моста.
Оперативное состояние примерно соответствует флагам IFF_LOWER_UP
(отображается как "IFF_RUNNING
(его отсутствие показано как псевдо-флаг "
Однако инструменты iproute получают информацию об интерфейсе через Netlink, а state …
раздел печатается на основе атрибута netlink IFLA_OPERSTATE. ( исходный код)
Этот атрибут доступен через sysfs на …/operstate
также. Документация Linux содержит более подробное объяснение этих флагов и атрибутов в operstates.txt.