1 октября 2022 года Александр Черников отправил в FreeBSD патч, реализовывающий поддержку протокола Netlink.
Netlink — это протокол связи, который в настоящее время используется в ядре Linux для изменения, чтения и подписки практически на все сетевые состояния. Интерфейсы, адреса, маршруты, брандмауэр, виртуальные сети и т.д. управляются через netlink. Это асинхронный протокол на основе TLV, обеспечивающий связь one-to-one и one-to-many.
На текущий момент реализация ограничивается семейством операций NETLINK_ROUTE
для управления состоянием сетевой подсистемы в ядре и позволяет управлять сетевыми интерфейсами, IP-адресами, маршрутизацией и объектами nexthop, хранящими данные о состоянии передаваемого пакета.
Netlink реализован через загружаемый модуль ядра, при этом не затрагивающий многие его части. Каждый сокет netlink использует выделенную очередь задач для поддержки асинхронных операций, которые могут находиться в режиме ожидания, таких как, например, создание интерфейса. Вся обработка сообщений выполняется в этих очередях задач.
Большинство моделей данных Netlink прекрасно соответствуют концепциям FreeBSD. Неизмененный двоичный файл ip
корректно работает с интерфейсами, адресами и маршрутами.
Для компиляции и работы с FreeBSD netlink некоторым программным обеспечением, таким как net/bird, требуются модификации только для заголовка.
>>> Подробности