W bazie kodu FreeBSD przyjęta została implementacja protokołu komunikacyjnego Netlink (RFC 3549), stosowanego w Linuxie do organizacji interakcji jądra z procesami w przestrzeni użytkownika. Projekt obejmuje wsparcie dla rodziny operacji NETLINK_ROUTE, służących do zarządzania stanem podsystemu sieciowego w jądrze.
W obecnej formie poziom wsparcia Netlink umożliwia korzystanie w FreeBSD z narzędzia ip z pakietu iproute2 do zarządzania interfejsami sieciowymi, ustawiania adresów IP, konfigurowania routingu oraz manipulacji obiektami nexthop, które przechowują dane o stanie wykorzystywanym do przesyłania pakietów do pożądanych punktów docelowych. Po drobnych zmianach w plikach nagłówkowych można używać Netlink w pakiecie routingu Bird.
Implementacja Netlink dla FreeBSD została wykonana w formie modułu jądra, który w miarę możliwości nie ingeruje w inne podsystemy jądra i tworzy osobne kolejki zadań (taskqueue) do przetwarzania przychodzących wiadomości protokołu i wykonywania operacji w trybie asynchronicznym. Powód portowania Netlink to brak standardowego mechanizmu do interakcji z podsystemami jądra, co prowadzi do sytuacji, w której różne podsystemy i sterowniki wymyślają własne protokoły.
Netlink oferuje zunifikowaną warstwę komunikacyjną oraz rozszerzalny format wiadomości, który może pełnić rolę pośrednika, automatycznie łączącego w jednym zapytaniu rozproszone dane z różnych źródeł. Na przykład, podsystemy FreeBSD, takie jak devd, jail i pfilctl, które obecnie korzystają z własnych wywołań ioctl, mogą być przetłumaczone na Netlink, co znacznie uprości tworzenie aplikacji do pracy z tymi podsystemami. Ponadto wykorzystanie Netlink do zmiany obiektów i grup nexthop w stosie routingu umożliwi bardziej efektywną interakcję z procesami routingu w przestrzeni użytkownika.
Aktualnie wdrożone funkcje:
- Uzyskiwanie informacji o trasach, obiektach i grupach nexthop, interfejsach sieciowych, adresach i sąsiednich hostach (arp/ndp).
- Tworzenie powiadomień o pojawianiu się i znikaniu interfejsów sieciowych, dodawaniu i usuwaniu adresów, dodawaniu i usuwaniu tras.
- Dodawanie i usuwanie tras, obiektów i grup nexthop, bram, interfejsów sieciowych.
- Integracja z interfejsem Rtsock do zarządzania tabelą routingu.
Źródło: opennet.ru
