FreeBSD dodaje obsługę protokołu Netlink używanego w jądrze Linuksa

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

Dodaj komentarz