Netlink

редактировать
Netlink
Стабильный выпуск 5.9.1 (17 октября 2020 г.; 0 дней назад (2020-10-17))
Предварительный выпуск 5.9-rc8 (4 октября 2020 г.; 13 дней назад (2020-10-04))
Операционная система Linux
Платформа ядро ​​Linux
Тип Интерфейс прикладного программирования
Лицензия Стандартная общественная лицензия GNU
Веб-сайтwiki.linuxfoundation.org / network / generic _netlink _howto

Семейство Netlinksocket - это интерфейс ядра Linux, используемый для межпроцессного взаимодействия (IPC) между обоими ядра и пользовательского пространства, а также между различными процессами пользовательского пространства, аналогично сокетам домена Unix. Аналогично сокетам домена Unix и в отличие от сокетов INET, связь Netlink не может пересекать границы хоста. Однако, в то время как сокеты домена Unix используют пространство имен файловой системы, процессы Netlink обычно адресуются с помощью идентификаторов процессов (PID).

Netlink разработан и используется для передачи различная сетевая информация между пространством ядра и процессами пользовательского пространства. Сетевые утилиты, такие как семейство iproute2 и утилиты, используемые для настройки драйверов беспроводной сети на основе mac80211, используют Netlink для связи с ядром Linux из пользовательского пространства. Netlink предоставляет стандартный интерфейс на основе socket для процессов пользовательского пространства и API на стороне ядра для внутреннего использования модулями ядра. Первоначально Netlink использовал семейство сокетов AF_NETLINK.

Netlink разработан как более гибкий преемник ioctl ; RFC 3549 подробно описывает протокол.

Содержание
  • 1 История
  • 2 Структура пакета
  • 3 Семейства сокетов Netlink
  • 4 Протоколы Netlink
    • 4.1 Пользовательский протокол Netlink
  • 5 См. Также
  • 6 Ссылки
  • 7 Внешние ссылки
История

Netlink был создан Алексеем Кузнецовым как более гибкая альтернатива сложному, но неудобному методу связи ioctl, используемому для настройки и получения варианты внешних розеток. Ядро Linux продолжает поддерживать ioctlдля обратной совместимости.

Netlink впервые был реализован в ядре Linux серии 2.0 и реализован как символьное устройство . К 2013 году этот интерфейс устарел, но все еще представляет собой метод связи ioctl ; сравните использование rtnetlink. Интерфейс сокета Netlink появился в серии 2.2 ядра Linux.

Структура пакета
Битовое смещение0–1516–31
0Длина сообщения
32ТипФлаги
64Порядковый номер
96PID
128+Данные

В отличие от сокетов BSD, использующих Интернет такие протоколы, как TCP, в которых заголовки сообщений генерируются автоматически, вызывающий должен подготовить заголовок сообщения Netlink (доступный как struct nlmsghdr). Сокет Netlink обычно работает в режиме, подобном SOCK_RAW, даже если для его создания использовался SOCK_DGRAM.

Затем часть данных содержит специфичное для подсистемы сообщение, которое может быть дополнительно вложено.

Семейства сокетов Netlink

Семейство AF_NETLINKпредлагает несколько подмножеств протоколов. Каждый из них взаимодействует с другим компонентом ядра и имеет различное подмножество обмена сообщениями. На подмножество ссылается поле протокола в вызове сокета:

int socket (AF_NETLINK, SOCK_DGRAM или SOCK_RAW, протокол)

Отсутствие стандарта, SOCK_DGRAMи SOCK_RAWне гарантируется, что он будет реализован в данной версии Linux (или другой ОС). Некоторые источники заявляют, что оба варианта допустимы, а ссылка ниже из Red Hat утверждает, что SOCK_RAWвсегда является параметром. Однако iproute2 использует оба варианта взаимозаменяемо.

Протоколы Netlink

Ниже приводится неполный список поддерживаемых записей протокола:

NETLINK_ROUTE

NETLINK_ROUTEпредоставляет информацию о маршрутизации и канале связи. Эта информация используется в первую очередь для демонов маршрутизации в пространстве пользователя. Linux реализует большой набор сообщений:

  • Канальный уровень: RTM_NEWLINK, RTM_DELLINK, RTM_GETLINK, RTM_SETLINK
  • Настройки адреса: RTM_NEWADDR, RTM_DELADDR, RTM_GETADDR
  • Таблицы маршрутизации: RTM_NEWROUTE, RTM_DELROUTE, RTM_GETROUTE
  • Соседний кеш: RTM_NEWNEIGH, RTM_DELNEIGH, RTM_GETNEIGH
  • правила маршрутизации: RTM_NEWRULE, RTM_DELRULE, RTM_DELRULE, настройки RTM_DELRUTM, QueTM_GETTM_GETTM_DISCLE_GETTM_DISCLE, RTM_DELRUTM_DISCLE, QueTM_GETMQETM_DISCLE_GETTM>
  • Классы трафика, используемые с очередями: RTM_NEWTCLASS, RTM_DELTCLASS, RTM_GETTCLASS
  • Фильтры трафика: RTM_NEWTFILTER, RTM_DELTFILTER, RTM_GETTFILTER
  • Другие: RTM_NEWACTION_IX, RTM_NEWACTION, RTM_NEWACTION, RTM_NEWACTION, RTM_NEWACTION, RTM_NEWACTION, RTM_DELTM_DELTM_DELTM_DELTM, RTM_NEWNEIGHTBL, RTM_GETNEIGHTBL, RTM_SETNEIGHTBL
NETLINK_FIREWALL

NETLINK_FIREWALLпредоставляет интерфейс для приложения пользовательского пространства для приема пакетов от межсетевого экрана.

NETLINK_NFLOG

используемый интерфейс NETLINK_NFLOG

NETLINK_NFLOG

общаться между Netfilter и iptables.

NETLINK_ARPD

NETLINK_ARPDпредоставляет интерфейс для управления таблицей ARP из пространства пользователя.

NETLINK_AUDIT

NETLINK_AUDITпредоставляет интерфейс к подсистеме аудита, присутствующей в ядре Linux версии 2.6.6 и выше.

NETLINK_IP6_FW

NETLINK_IP6_FWпредоставляет интерфейс для транспортировки пакетов из netfilter в пространство пользователя.

NETLINK_ROUTE6
NETLINK_TAPBASE
NETLINK_NETFILTER
NETLINK_TCPDIAG
NETLINK_XFRM

NETLINK_XFRMпредоставляет интерфейс для управления ассоциацией безопасности IPsec и безопасностью базы данных политик - в основном используются демонами диспетчера ключей, использующими протокол Internet Key Exchange.

NETLINK_KOBJECT_UEVENT

NETLINK_KOBJECT_UEVENTпредоставляет интерфейс, в котором ядро ​​транслирует uevents, обычно потребляемые udev.

NETLINK_GENERIC

Одним из недостатков протокола Netlink является то, что количество семейств протоколов ограничено 32 (MAX_LINKS). Это одна из основных причин, по которой было создано общее семейство Netlink - для поддержки добавления большего числа семейств. Он действует как мультиплексор Netlink и работает с одним семейством Netlink NETLINK_GENERIC. Общий протокол Netlink основан на протоколе Netlink и использует его API.

Пользовательский протокол Netlink

Пользователи могут добавлять обработчик Netlink в свои собственные процедуры ядра. Это позволяет разрабатывать дополнительные протоколы Netlink для работы с новыми модулями ядра.

См. Также
  • значок Портал компьютерного программирования
  • Портал бесплатного программного обеспечения с открытым исходным кодом
  • значок Портал Linux
Ссылки
Внешние ссылки
Последняя правка сделана 2021-05-31 04:51:09
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте