Введение

Интерфейс ядра Linux для межпроцессного взаимодействия между процессами, включая модем.

Netlink — это семейство сокетов, используемое для межпроцессного взаимодействия (IPC) как между ядром и процессами пользовательского пространства, так и между различными процессами пользовательского пространства, подобно сокетам домена Unix, доступным в некоторых Unix-подобных операционных системах, включая его первоначальную реализацию в качестве интерфейса ядра Linux, а также последующую реализацию на FreeBSD. Как и сокеты домена Unix, но в отличие от сокетов INET, связь по Netlink не может пересекать границы хостов. Однако, если сокеты домена Unix используют пространство имен файловой системы, то сокеты Netlink обычно адресуются по идентификаторам процессов (PID). Netlink предназначен и используется для передачи разнообразной сетевой информации между ядром и процессами пользовательского пространства. Сетевые утилиты, такие как семейство iproute2 и утилиты для настройки беспроводных драйверов на основе mac80211, используют Netlink для связи с ядром Linux из пользовательского пространства. Netlink предоставляет стандартный интерфейс на основе сокетов для процессов пользовательского пространства и API на стороне ядра для внутреннего использования модулями ядра. Изначально Netlink использовал семейство сокетов. Netlink разработан как более гибкая замена ioctl; RFC 3549 подробно описывает этот протокол.

История

Netlink был создан Алексеем Кузнецовым как более гибкая альтернатива сложному и неудобному способу обмена данными, использовавшемуся для установки и получения внешних опций сокетов. Ядро Linux продолжает поддерживать его для обратной совместимости. Netlink впервые появился в серии 2.0 ядра Linux и был реализован как символьное устройство. К 2013 году этот интерфейс устарел, но по-прежнему используется как метод связи через ioctl; сравните с использованием интерфейса сокетов Netlink, который появился в серии 2.2 ядра Linux. В 2022 году в FreeBSD была добавлена экспериментальная поддержка протокола Netlink. Первоначально поддерживается лишь часть семейств NETLINK ROUTE и NETLINK GENERIC.

Протокол Netlink, определяемый пользователем

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