Provided by: manpages-ru_4.27.0-1_all bug

НАИМЕНОВАНИЕ

       rtnetlink - Linux routing socket

ОБЗОР

       #include <asm/types.h>
       #include <linux/if_link.h>
       #include <linux/netlink.h>
       #include <linux/rtnetlink.h>
       #include <sys/socket.h>

       rtnetlink_socket = socket(AF_NETLINK, int socket_type, NETLINK_ROUTE);

ОПИСАНИЕ

       Rtnetlink  позволяет  читать  и  изменять  таблицы маршрутизации ядра. Он используется для взаимодействия
       различных подсистем внутри ядра (это здесь не  описано),  а  также  для  взаимодействия  пользовательских
       программ.  Сетевыми  маршрутами,  IP-адресами, параметрами связи (link parameters), настройками соседства
       (neighbor setups), алгоритмами планирования очереди (queueing disciplines), классификацией трафика  и   и
       пакетными  классификаторами  можно  управлять  через сокеты NETLINK_ROUTE. Они основываются на сообщениях
       netlink; подробности смотрите в netlink(7).

   Атрибуты маршрутизации
       Некоторые сообщения rtnetlink содержат необязательные атрибуты после начального заголовка:

           struct rtattr {
               unsigned short rta_len;    /* длина параметра */
               unsigned short rta_type;   /* тип параметра */
               /* данные … */
           };

       Этими атрибутами нужно управлять только с помощью макросов RTA_* или libnetlink, смотрите rtnetlink(3).

   Сообщения
       Rtnetlink поддерживает следующие типы сообщений (в дополнении к стандартным сообщениям netlink):

       RTM_NEWLINK
       RTM_DELLINK
       RTM_GETLINK
              Создание, удаление и получение  информации  об  определённом  сетевом  интерфейсе.  Эти  сообщения
              содержат структуру ifinfomsg, за которой следует ряд структур rtattr.

              struct ifinfomsg {
                  unsigned char  ifi_family; /* AF_UNSPEC */
                  unsigned short ifi_type;   /* тип устройства */
                  int            ifi_index;  /* индекс интерфейса */
                  unsigned int   ifi_flags;  /* флаги устройства */
                  unsigned int   ifi_change; /* маска изменения */
              };

              В  ifi_flags  содержатся  флаги устройства, смотрите netdevice(7); в ifi_index — уникальный индекс
              интерфейса (начиная с Linux 3.7 возможно передать ненулевое значение в  сообщении  RTM_NEWLINK;  в
              этом  случае  создаётся  связь  (link)  с  заданным ifindex); элемент ifi_change зарезервирован на
              будущее и его значение всегда должно быть равно 0xFFFFFFFF.
                                    Атрибуты маршрутизации
              rta_type            тип значения       описание
              ────────────────────────────────────────────────────────────────────
              IFLA_UNSPEC         -                  не определено
              IFLA_ADDRESS        аппаратный адрес   адрес интерфейса L2
              IFLA_BROADCAST      аппаратный адрес   широковещательный адрес L2
              IFLA_IFNAME         строка asciiz      имя устройства
              IFLA_MTU            unsigned int       MTU устройства
              IFLA_LINK           int                тип связи
              IFLA_QDISC          строка asciiz      алгоритм очереди
              IFLA_STATS          смотрите ниже      статистика интерфейса
              IFLA_PERM_ADDRESS   аппаратный адрес   hardware address provided by
                                                     device (since Linux 5.5)

              Тип  значения  для  IFLA_STATSstruct  rtnl_link_stats  (в  Linux  2.4  и  старее   —   struct
              net_device_stats).

       RTM_NEWADDR
       RTM_DELADDR
       RTM_GETADDR
              Add,  remove,  or  receive information about an IP address associated with an interface.  In Linux
              2.2, an interface can carry multiple IP addresses, this replaces the alias device concept in Linux
              2.0.  In Linux 2.2, these messages support IPv4 and IPv6 addresses.   They  contain  an  ifaddrmsg
              structure, optionally followed by rtattr routing attributes.

              struct ifaddrmsg {
                  unsigned char ifa_family;    /* тип адреса */
                  unsigned char ifa_prefixlen; /* длина префикса адреса */
                  unsigned char ifa_flags;     /* флаги адреса */
                  unsigned char ifa_scope;     /* область адреса */
                  unsigned int  ifa_index;     /* индекс интерфейса */
              };

              Поле ifa_family представляет тип адресного семейства (AF_INET или AF_INET6), ifa_prefixlen — длину
              адресной  маски  адреса,  если  это  применимо для семейства (в IPv4), ifa_scope — область адреса,
              ifa_index  —  индекс  интерфейса,  которому  назначен  адрес.  Поле  ifa_flags  —  слово   флагов:
              IFA_F_SECONDARY  —  вторичный  адрес  (старый  псевдоним интерфейса), IFA_F_PERMANENT — постоянный
              адрес, назначенный пользователем и другие недокументированные флаги.
                                                 Атрибуты
              rta_type        тип значения                           описание
              ───────────────────────────────────────────────────────────────────────────────
              IFA_UNSPEC      -                                      не определено
              IFA_ADDRESS     адрес неструктурированного протокола   адрес интерфейса
              IFA_LOCAL       адрес неструктурированного протокола   локальный адрес
              IFA_LABEL       строка asciiz                          название интерфейса
              IFA_BROADCAST   адрес неструктурированного протокола   широковещательный адрес
              IFA_ANYCAST     адрес неструктурированного протокола   адрес anycast
              IFA_CACHEINFO   struct ifa_cacheinfo                   информация об адресе

       RTM_NEWROUTE
       RTM_DELROUTE
       RTM_GETROUTE
              Создание, удаление или получение информации о сетевом маршруте. Эти сообщения  содержат  структуру
              rtmsg  с  необязательными дополнительными структурами rtattr. Для RTM_GETROUTE, если rtm_dst_len и
              rtm_src_len задать значение 0, то вы получите все записи  определённой  таблицы  маршрутизации.  В
              других полях, кроме rtm_table и rtm_protocol, 0 считается шаблоном (wildcard).

              struct rtmsg {
                  unsigned char rtm_family;   /* Address family of route */
                  unsigned char rtm_dst_len;  /* Length of destination */
                  unsigned char rtm_src_len;  /* Length of source */
                  unsigned char rtm_tos;      /* TOS filter */
                  unsigned char rtm_table;    /* Routing table ID;
                                                 see RTA_TABLE below */
                  unsigned char rtm_protocol; /* Routing protocol; see below */
                  unsigned char rtm_scope;    /* See below */
                  unsigned char rtm_type;     /* See below */

                  unsigned int  rtm_flags;
              };
              rtm_type          Тип маршрута
              ───────────────────────────────────────────────────────────────
              RTN_UNSPEC        неизвестный маршрут
              RTN_UNICAST       шлюз или прямой маршрут
              RTN_LOCAL         маршрут локального интерфейса
              RTN_BROADCAST     локальный      широковещательный     маршрут
                                (широковещательная отправка)
              RTN_ANYCAST       локальный     широковещательный      маршрут
                                (однонаправленная отправка)
              RTN_MULTICAST     многоадресный маршрут
              RTN_BLACKHOLE     маршрут для отброса пакетов
              RTN_UNREACHABLE   недостижимый пункт назначения
              RTN_PROHIBIT      маршрут для отклонения пакетов
              RTN_THROW         продолжение поиска маршрута в другой таблице
              RTN_NAT           правило трансляции сетевого адреса
              RTN_XRESOLVE      ссылка    на    внешний   определитель   (не
                                реализовано)
                                Происхождение маршрута
              ────────────────────────────────────────────────────────
              RTPROT_UNSPEC     неизвестно
              RTPROT_REDIRECT   из-за перенаправления  полученном  по
                                ICMP (не используется)
              RTPROT_KERNEL     посылается ядром
              RTPROT_BOOT       при загрузке машины
              RTPROT_STATIC     указан администратором

              Значения  больше RTPROT_STATIC не учитываются ядром, они предназначены только для пользовательской
              информации. Они могут использоваться для пометки источника  информации  о  маршрутизации  или  для
              отличения  различных  служб  маршрутизации друг от друга. Уже назначенные идентификаторы для служб
              маршрутизации можно найти в <linux/rtnetlink.h>.

              rtm_scope — расстояние до назначения:
              RT_SCOPE_UNIVERSE   глобальный маршрут
              RT_SCOPE_SITE       внутренний   маршрут   в    локальной
                                  автономной системе
              RT_SCOPE_LINK       маршрут на эту связь
              RT_SCOPE_HOST       маршрут на локальный узел
              RT_SCOPE_NOWHERE    назначение не существует

              Значения от RT_SCOPE_UNIVERSE и до RT_SCOPE_SITE доступны пользователю.

              Поле rtm_flags может иметь следующие значения:
              RTM_F_NOTIFY     если   маршрут   изменился   —   уведомить
                               пользователя через rtnetlink
              RTM_F_CLONED     маршрут склонирован из другого маршрута
              RTM_F_EQUALIZE   многопутевой уравниватель (не реализовано)

              В rtm_table задаётся таблица маршрутизации:
              RT_TABLE_UNSPEC    таблица маршрутизации не задана
              RT_TABLE_DEFAULT   таблица по умолчанию
              RT_TABLE_MAIN      главная таблица
              RT_TABLE_LOCAL     локальная таблица

              Пользователь может назначать произвольные значения от RT_TABLE_UNSPEC и до RT_TABLE_DEFAULT.
                                           Атрибуты
              rta_type        тип значения          описание
              ───────────────────────────────────────────────────────────────────
              RTA_UNSPEC      -                     игнорируется
              RTA_DST         адрес протокола       адрес маршрута назначения
              RTA_SRC         адрес протокола       адрес маршрута источника
              RTA_IIF         int                   индекс входного интерфейса
              RTA_OIF         int                   индекс выходного интерфейса
              RTA_GATEWAY     адрес протокола       шлюз маршрута
              RTA_PRIORITY    int                   приоритет маршрута
              RTA_PREFSRC     адрес протокола       Preferred source address
              RTA_METRICS     int                   метрика маршрута
              RTA_MULTIPATH                         Multipath  nexthop  data  br
                                                    (see below).
              RTA_PROTOINFO                         No longer used
              RTA_FLOW        int                   Route realm
              RTA_CACHEINFO   struct rta_cacheinfo  (see linux/rtnetlink.h)
              RTA_SESSION                           No longer used
              RTA_MP_ALGO                           No longer used
              RTA_TABLE       int                   Routing table ID; if set,
                                                    rtm_table is ignored
              RTA_MARK        int
              RTA_MFC_STATS   struct rta_mfc_stats  (see linux/rtnetlink.h)
              RTA_VIA         struct rtvia          Gateway in different AF (see
                                                    below)
              RTA_NEWDST      адрес протокола       Change   packet  destination
                                                    address
              RTA_PREF        char                  RFC4191     IPv6      router
                                                    preference (see below)
              RTA_ENCAP_TYPE  short                 Encapsulation type for
                                                    lwtunnels (see below)
              RTA_ENCAP                             Defined by RTA_ENCAP_TYPE
              RTA_EXPIRES     int                   Expire  time for IPv6 routes
                                                    (in seconds)

              RTA_MULTIPATH contains several packed instances of struct  rtnexthop  together  with  nested  RTAs
              (RTA_GATEWAY):

                  struct rtnexthop {
                      unsigned short rtnh_len;     /* Length of struct + length
                                                      of RTAs */
                      unsigned char  rtnh_flags;   /* Flags (see
                                                      linux/rtnetlink.h) */
                      unsigned char  rtnh_hops;    /* Nexthop priority */
                      int            rtnh_ifindex; /* Interface index for this
                                                      nexthop */
                  }

              There  exist  a  bunch of RTNH_* macros similar to RTA_* and NLHDR_* macros useful to handle these
              structures.

                  struct rtvia {
                      unsigned short rtvia_family;
                      unsigned char  rtvia_addr[0];
                  };

              rtvia_addr is the address, rtvia_family is its family type.

              RTA_PREF   may   contain    values    ICMPV6_ROUTER_PREF_LOW,    ICMPV6_ROUTER_PREF_MEDIUM,    and
              ICMPV6_ROUTER_PREF_HIGH defined incw <linux/icmpv6.h>.

              RTA_ENCAP_TYPE  may  contain values LWTUNNEL_ENCAP_MPLS, LWTUNNEL_ENCAP_IP, LWTUNNEL_ENCAP_ILA, or
              LWTUNNEL_ENCAP_IP6 defined in <linux/lwtunnel.h>.

              Заполнить эти значения!

       RTM_NEWNEIGH
       RTM_DELNEIGH
       RTM_GETNEIGH
              Добавление, удаление или получение информации о записи соседей по таблице (например, запись  ARP).
              В сообщении содержится структура ndmsg:

              struct ndmsg {
                  unsigned char ndm_family;
                  int           ndm_ifindex;  /* Interface index */
                  __u16         ndm_state;    /* State */
                  __u8          ndm_flags;    /* Flags */
                  __u8          ndm_type;
              };

              struct nda_cacheinfo {
                  __u32         ndm_confirmed;
                  __u32         ndm_used;
                  __u32         ndm_updated;
                  __u32         ndm_refcnt;
              };

              В ndm_state содержится битовая маска следующих состояний:
              NUD_INCOMPLETE   запись кэша в данный момент определяется
              NUD_REACHABLE    подтверждённая рабочая запись кэша
              NUD_STALE        устаревшая запись кэша
              NUD_DELAY        запись ожидает срабатывания таймера
              NUD_PROBE        запись кэша в данный момент проверяется повторно
              NUD_FAILED       некорректная запись кэша
              NUD_NOARP        устройство без кэша назначений
              NUD_PERMANENT    статическая запись

              Допустимые значения ndm_flags:
              NTF_PROXY    запись прокси arp
              NTF_ROUTER   маршрутизатор IPv6

              Структура rtattr имеет следующие значения для поля rta_type:
              NDA_UNSPEC      неизвестный тип
              NDA_DST         кэш адресов назначения соседей на сетевом уровне
              NDA_LLADDR      кэш адресов соседей на уровне связей
              NDA_CACHEINFO   статистика кэша

              Если значение поля rta_type равно NDA_CACHEINFO, то присутствует заголовок struct nda_cacheinfo.

       RTM_NEWRULE
       RTM_DELRULE
       RTM_GETRULE
              Добавление, удаление или получение правила маршрутизации. Содержит struct rtmsg.

       RTM_NEWQDISC
       RTM_DELQDISC
       RTM_GETQDISC
              Добавление,  удаление  или  получение планирования очереди. В сообщении содержится struct tcmsg, а
              также может быть серия атрибутов.

              struct tcmsg {
                  unsigned char    tcm_family;
                  int              tcm_ifindex;   /* индекс интерфейса */
                  __u32            tcm_handle;    /* описатель qdisc */
                  __u32            tcm_parent;    /* предок qdisc */
                  __u32            tcm_info;
              };
                                          Атрибуты
              rta_type     тип значения                 описание
              ──────────────────────────────────────────────────────────────────
              TCA_UNSPEC   -                            не определено
              TCA_KIND     строка asciiz                имя план-ания очереди
              TCA_OPTIONS  байтовая последовательность  есть параметры qdisc
              TCA_STATS    struct tc_stats              статистика qdisc
              TCA_XSTATS   относится к qdisc            стат-ка по опр. модулю
              TCA_RATE     struct tc_estimator          ограничение по скорости

              Также, разрешены дополнительные атрибуты модуля qdisc. Дополнительную информацию можно получить из
              соответствующих заголовочных файлов.

       RTM_NEWTCLASS
       RTM_DELTCLASS
       RTM_GETTCLASS
              Добавление, удаление или получение класса трафика. В этих сообщениях содержится  структура  struct
              tcmsg, описанная ранее.

       RTM_NEWTFILTER
       RTM_DELTFILTER
       RTM_GETTFILTER
              Добавление,  удаление  или  получение  информации  о фильтре трафика. В этих сообщениях содержится
              структура struct tcmsg, описанная ранее.

ВЕРСИИ

       Свойство rtnetlink появилось в Linux 2.2.

ОШИБКИ

       Данная справочная страница не полна.

СМОТРИТЕ ТАКЖЕ

       cmsg(3), rtnetlink(3), ip(7), netlink(7)

ПЕРЕВОД

       Русский перевод этой страницы руководства  разработал(и)  aereiae  <aereiae@gmail.com>,  Azamat  Hackimov
       <azamat.hackimov@gmail.com>,     Dmitriy     S.     Seregin     <dseregin@59.ru>,     Katrin     Kutepova
       <blackkatelv@gmail.com>,  Lockal  <lockalsash@gmail.com>,  Yuri  Kozlov   <yuray@komyakino.ru>,   Баринов
       Владимир, Иван Павлов <pavia00@gmail.com> и Kirill Rekhov <krekhov.dev@gmail.com>

       Этот  перевод является свободной программной документацией; он распространяется на условиях общедоступной
       лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html  версии  3  или
       более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

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

Справочные страницы Linux 6.9.1                   2 мая 2024 г.                                     rtnetlink(7)