Baza kodu FreeBSD przyjmuje implementację protokołu komunikacyjnego Netlink (RFC 3549), który jest używany w Linuksie do organizowania interakcji między jądrem a procesami w przestrzeni użytkownika. Projekt ogranicza się do wsparcia rodziny operacji NETLINK_ROUTE do zarządzania stanem podsystemu sieciowego w jądrze.
W swojej obecnej formie warstwa wsparcia Netlink pozwala FreeBSD używać narzędzia Linux ip z pakietu iproute2 do zarządzania interfejsami sieciowymi, ustawiania adresów IP, konfigurowania routingu i manipulowania obiektami następnego przeskoku, które przechowują stan używany do przekazania pakietu do żądanego miejsca docelowego. Po niewielkiej zmianie plików nagłówkowych możliwe jest użycie Netlink w pakiecie routingu Bird.
Implementacja Netlink dla FreeBSD jest spakowana jako ładowalny moduł jądra, który, jeśli to możliwe, nie wpływa na inne podsystemy jądra i tworzy osobne kolejki zadań (tasqueue) do przetwarzania przychodzących wiadomości za pośrednictwem protokołu i wykonywania operacji w trybie asynchronicznym. Powodem przeniesienia Netlinka jest brak standardowego mechanizmu interakcji z podsystemami jądra, co prowadzi do tego, że różne podsystemy i sterowniki wymyślają własne protokoły.
Netlink oferuje ujednoliconą warstwę komunikacyjną i rozszerzalny format wiadomości, który może działać jako pośrednik, który automatycznie łączy różne dane z różnych źródeł w jedno żądanie. Na przykład podsystemy FreeBSD, takie jak devd, jail i pfilctl, można migrować do Netlink, używając teraz własnych wywołań ioctl, co znacznie uprości tworzenie aplikacji do pracy z tymi podsystemami. Ponadto użycie Netlink do modyfikacji obiektów i grup następnego przeskoku w stosie routingu umożliwi bardziej wydajną interakcję z procesami routingu w przestrzeni użytkownika.
Obecnie zaimplementowane funkcje:
- Uzyskaj informacje o trasach, następnych przeskokach i grupach, interfejsach sieciowych, adresach i sąsiednich hostach (arp/ndp).
- Tworzenie powiadomień o pojawieniu się i rozłączeniu interfejsów sieciowych, ustawianiu i usuwaniu adresów, dodawaniu i usuwaniu tras.
- Dodawanie i usuwanie tras, obiektów i grup nexthopów, bramek, interfejsów sieciowych.
- Integracja z interfejsem Rtsock do zarządzania tablicą routingu.
Źródło: opennet.ru