У кодову базу 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