Во FreeBSD добавлена поддержка протокола Netlink, применяемого в ядре Linux

В кодовую базу FreeBSD принята реализация коммуникационного протокола Netlink (RFC 3549), применяемого в Linux для организации взаимодействия ядра с процессами в пространстве пользователя. Проект ограничивается поддержкой семейства операций NETLINK_ROUTE для управления состоянием сетевой подсистемы в ядре.

В текущем виде уровень поддержки Netlink позволяет использовать во FreeBSD Linux-утилиту ip из пакета iproute2 для управления сетевыми интерфейсами, установки IP-адресов, настройки маршрутизации и манипуляции объектами nexthop, хранящими данные о состоянии, используемом для передачи пакета в желаемую точку назначения. После незначительного изменения заголовочных файлов возможно использование Netlink в пакете маршрутизации Bird.

Реализация Netlink для FreeBSD оформлена в виде загружаемого модуля ядра, по возможности не затрагивающего другие подсистемы ядра и создающего отдельные очереди задач (tasqueue) для обработки поступающих по протоколу сообщений и выполнения операций в асинхронном режиме. В качестве причины портирования Netlink называется отсутствие стандартного механизма для взаимодействия с подсистемами ядра, что приводит к тому, что разные подсистемы и драйверы изобретают собственные протоколы.

Netlink предлагает унифицированный коммуникационный слой и расширяемый формат сообщений, который может выступать в роли посредника, автоматически объединяющего в одном запросе разрозненные данные от разных источников. Например, на Netlink могут быть переведены такие подсистемы FreeBSD, как devd, jail и pfilctl, ныне использующие собственные вызовы ioctl, что значительно упростит создание приложений для работы с данными подсистемами. Кроме того, использование Netlink для изменения объектов и групп nexthop в стеке маршрутизации позволит более эффективно взаимодействовать с процессами маршрутизации в пространстве пользователя.

Реализованные в настоящее время возможности:

  • Получение информации о маршрутах, объектах и группах nexthops, сетевых интерфейсах, адресах и соседних хостах (arp/ndp).
  • Формирование уведомлений о появлении и отключении сетевых интерфейсов, установке и удалении адресов, добавлении и удалении маршрутов.
  • Добавление и удаление маршрутов, объектов и групп nexthops, шлюзов, сетевых интерфейсов.
  • Интеграция с интерфейсом Rtsock для управления таблицей маршрутизации.

Источник: opennet.ru

Добавить комментарий