rtnetlink(7) | Miscellaneous Information Manual | rtnetlink(7) |
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):
struct ifinfomsg { unsigned char ifi_family; /* AF_UNSPEC */ unsigned short ifi_type; /* тип устройства */ int ifi_index; /* индекс интерфейса */ unsigned int ifi_flags; /* флаги устройства */ unsigned int ifi_change; /* маска изменения */ };
Атрибуты маршрутизации | ||
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 | смотрите ниже | статистика интерфейса |
struct ifaddrmsg { unsigned char ifa_family; /* тип адреса */ unsigned char ifa_prefixlen; /* длина префикса адреса */ unsigned char ifa_flags; /* флаги адреса */ unsigned char ifa_scope; /* область адреса */ unsigned int ifa_index; /* индекс интерфейса */ };
Атрибуты | ||
rta_type | тип значения | описание |
IFA_UNSPEC | - | не определено |
IFA_ADDRESS | адрес неструктурированного протокола | адрес интерфейса |
IFA_LOCAL | адрес неструктурированного протокола | локальный адрес |
IFA_LABEL | строка asciiz | название интерфейса |
IFA_BROADCAST | адрес неструктурированного протокола | широковещательный адрес |
IFA_ANYCAST | адрес неструктурированного протокола | адрес anycast |
IFA_CACHEINFO | struct ifa_cacheinfo | информация об адресе |
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>.
RT_SCOPE_UNIVERSE | глобальный маршрут |
RT_SCOPE_SITE | внутренний маршрут в локальной автономной системе |
RT_SCOPE_LINK | маршрут на эту связь |
RT_SCOPE_HOST | маршрут на локальный узел |
RT_SCOPE_NOWHERE | назначение не существует |
Значения от RT_SCOPE_UNIVERSE и до RT_SCOPE_SITE доступны пользователю.
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) |
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 */ }
struct rtvia { unsigned short rtvia_family; unsigned char rtvia_addr[0]; };
struct ndmsg { unsigned char ndm_family; int ndm_ifindex; /* индекс интерфейса */ __u16 ndm_state; /* состояние */ __u8 ndm_flags; /* флаги */ __u8 ndm_type; }; struct nda_cacheinfo { __u32 ndm_confirmed; __u32 ndm_used; __u32 ndm_updated; __u32 ndm_refcnt; };
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.
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. Дополнительную информацию можно получить из соответствующих заголовочных файлов.
Свойство 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>
Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.
Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.
15 декабря 2022 г. | Linux man-pages 6.03 |