LINUX.ORG.RU

Где найти документацию на формат вывода команды ip addr?

 , , ,


1

2

Читаю man ip, читаю man ip-address, читаю ip addr help.

Нигде не написано, какие конкретно данные показывает утилита IP и в каком формате. Вот например:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff

Вначале идет номер интерфейса, нумерация с единицы. Это можно понять.

Затем имя интерфейса.

Затем нечто в угловых скобках «<...>». То ли то ли это текущее состояние интерфейса, то ли это возможные состояния интерфейса, то ли там намешаны и возможные «флаги», и текущие. В общем что это? Где найти описание всех возможных значений, применяемых в угловых скобках?

Далее идет поток каких-то ключевых слов. Есть подозрение, что они организованы в пары (имя значение), но подтверждения этой теории в документации не нашел. И даже если это ключ-значение, то что они значат? Возможное (настроенное) состояние? Текущее состояние? Все вперемешку? Где официально найти что значат сами параметры, их описание и возможные значения (mtu, qdisc, state, group, qlen, может еще что)?

Вот, например, имеются строки:
"<LOOPBACK,UP,LOWER_UP> ... state UNKNOWN"
или
"<BROADCAST,MULTICAST,UP,LOWER_UP> ... state DOWN

Что сие значит? Интерфейс поднят или нет? В угловых скобках есть и UP и какой-то LOWER_UP, но в state написано UNKNOWN или DOWN. Как это понимать?

★★★★★

Утилита ip отображает множество параметров сетевых интерфейсов, и они действительно могут показаться запутанными. Давайте разберемся, что именно выводится и как это понимать.

1. Номер интерфейса и его имя

Пример:

1: lo: 
  • 1 — порядковый номер интерфейса.
  • lo — имя интерфейса (в данном случае — loopback интерфейс).

2. Флаги интерфейса (в угловых скобках)

Пример:

<LOOPBACK,UP,LOWER_UP>

Флаги в угловых скобках показывают текущие характеристики и состояние интерфейса. Вот расшифровка некоторых из них:

  • LOOPBACK — это loopback-интерфейс, который используется для внутренней связи в системе.
  • BROADCAST — интерфейс поддерживает широковещательные пакеты.
  • MULTICAST — интерфейс поддерживает мультикаст.
  • UP — интерфейс включен (логически активен).
  • LOWER_UP — физический уровень (например, кабель) активен, связь установлена.

Таким образом, UP показывает, что интерфейс активен на уровне программного обеспечения, а LOWER_UP означает, что связь активна на уровне физической сети (кабель подключен, например).

3. Параметры интерфейса

Пример:

mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
  • mtu 65536 — максимальный размер передаваемого пакета по этому интерфейсу. В данном примере это 65536 байт.
  • qdisc noqueue — очередь пакетов (queuing discipline). В данном случае, noqueue означает, что пакеты не ставятся в очередь, так как это loopback-интерфейс. Для других интерфейсов это может быть, например, pfifo_fast.
  • state UNKNOWN — текущее состояние интерфейса. Возможные значения:
    • UP — интерфейс включен и функционирует.
    • DOWN — интерфейс выключен.
    • UNKNOWN — состояние неизвестно (может быть связано с особенностями виртуальных интерфейсов или драйверов).
  • group default — группа, к которой относится интерфейс. По умолчанию интерфейсы входят в группу default.
  • qlen 1000 — длина очереди на интерфейсе. Это максимальное количество пакетов, которые могут быть помещены в очередь на обработку.

4. MAC-адрес и широковещательный адрес

Пример:

link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff
  • link/ether — это тип канала связи, в данном случае Ethernet.
  • 52:54:00:12:34:56 — MAC-адрес интерфейса.
  • brd ff:ff:ff:ff:ff:ff — широковещательный (broadcast) адрес.

5. IP-адреса

Пример:

inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
  • inet 127.0.0.1/8 — IPv4-адрес с префиксом /8.
  • inet6 ::1/128 — IPv6-адрес с префиксом /128.
  • scope host — область действия IP-адреса. host означает, что это локальный адрес.

Как интерпретировать флаги и состояние

В примере:

<LOOPBACK,UP,LOWER_UP> state UNKNOWN
  • UP говорит о том, что интерфейс активен на уровне ОС.
  • LOWER_UP говорит, что физический уровень (например, сетевой кабель) активен.
  • state UNKNOWN указывает на то, что система не может точно определить текущее состояние интерфейса. Это может происходить по разным причинам, например, из-за особенностей конфигурации или виртуальных интерфейсов.

В другом примере:

<BROADCAST,MULTICAST,UP,LOWER_UP> state DOWN
  • UP — интерфейс активен логически.
  • LOWER_UP — физическое соединение активно.
  • state DOWN — говорит о том, что интерфейс выключен на уровне программного обеспечения, несмотря на то, что физическое соединение активно (это может происходить, например, если интерфейс отключен вручную).

Где найти официальную документацию?

Более подробную информацию можно найти в официальных man-страницах утилиты ip:

  • man ip-link — содержит описание флагов и параметров интерфейсов.
  • man ip-address — информация по IP-адресам и связанным параметрам.
  • man ip — общая справка по командам утилиты ip.
unclestephen
()

Есть подозрение, что они организованы в пары (имя значение), но подтверждения этой теории в документации не нашел.

У ip есть ключик --json, поэтому скажите ip --json a |jq . и получите красивую разноцветную разблюдовку.

i586 ★★★★★
()
Ответ на: комментарий от unclestephen

Это то, что нафантазировала нейросеть. А официальные описания где взять?

Более подробную информацию можно найти в официальных man-страницах утилиты ip:
man ip-link — содержит описание флагов и параметров интерфейсов.
man ip-address — информация по IP-адресам и связанным параметрам.
man ip — общая справка по командам утилиты ip.

Нейросетка врет. Например, поиск по ключевому слову UNKNOWN не дает ничего во всех предложенных вариантах документации.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Khnazile

UNKNOWN, походу, это operstate, доступный через /sys/class/net/*/operstate , https://www.kernel.org/doc/Documentation/networking/operstates.txt

2ТС: Про group написано в man ip-link, по сути это просто строка, позволяющая управлять (up/down/простотр состояния) одной командой несколькими интрефейсами. Сами назначили произвольную группу нескольким интерфейсам, а потом:

ip link show group 22

Интерестно, почему в вашем выводе нет ″mode DEFAULT″?

P.S. Единой документации нет, ip просто выводит всё подряд, что получила от ядра.

mky ★★★★★
()

Если не понятно, надо читать код. Грепать по ключевым словам из выдачи и читать, где оно печатается и откуда берёт значения. Повторять до просветления.

annulen ★★★★★
()

eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state DOWN

Это реальная копипаста, или DOWN случайно вставилось? Мне не понятно, как так может быть ″UP,LOWER_UP″, но при этом ″state DOWN″. Если во флагах ″UP″, то при ″state DOWN″ должно быть ″NO-CARRIER″. А, если CARRIER есть и линку сказали ″UP″, то он должен переходить в ″state UP″ или ″state UNKNOWN″, вроде как...

mky ★★★★★
()
Ответ на: комментарий от mky

Это реальная копипаста, или DOWN случайно вставилось? Мне не понятно, как так может быть ″UP,LOWER_UP″, но при этом ″state DOWN″.

Это пример, он из моих записулек, когда я пытался поднять WiFi через usb-свисток. Так как сети небыло, я переписывал вручную, возможно в одной строке начало от одного состояния, продолжение от другого. В какой момент было сделано не помню, в середине могла еще произойти установка firmware пакетов. В любом случае, вместо eth0 читай wlan0 или wlxabcdefabcdef.

Доберусь до железяки и скажу точнее.

Кстати, я на этом и споткнулся: имеем флаг <UP>, а по факту DOWN, и одной установкой фирмвари дело не закончилось. Щас найти не могу, но на стековерфлове была инфа, что не каждая фирмварь переваривает длинные имена девайсов, которые с некоторых пор приняты в ядре, типа «wlxabcdefabcdef». А потом еще проблемы могут быть и у DHCP-клиента по той же причине (допустимо менее 14 символов). В общем, мне еще крутить и крутить.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

Нашёл в арчвики, в примере, что такое может быть, если ″mode DORMANT″, то есть:

<UP,LOWER_UP> ... state DOWN mode DORMANT

Хотя мне кажется, что это баг драйвера и должно быть:

<UP,LOWER_UP> ... state DORMANT mode DORMANT

Но я в этих DORMANT'ах не разбираюсь. Как я понимаю, DORMANT обозначает, что линк есть, а пакеты не могут ходить, при этом у разных типо интерфейсов разные причины нахождения интерфейса в этом сосотоянии и не понятно, выводится где-то какая именно причина у данного конкретного интерфейса или нет.

Ну а баги драйверов могут давать ещё более странные сочетания флагов.

mky ★★★★★
()