FreeBSD fügt Unterstützung für das im Linux-Kernel verwendete Netlink-Protokoll hinzu

Die FreeBSD-Codebasis übernimmt eine Implementierung des Netlink-Kommunikationsprotokolls (RFC 3549), das in Linux verwendet wird, um die Interaktion zwischen dem Kernel und Prozessen im Benutzerbereich zu organisieren. Das Projekt beschränkt sich auf die Unterstützung der NETLINK_ROUTE-Operationsfamilie zur Verwaltung des Status des Netzwerksubsystems im Kernel.

In seiner aktuellen Form ermöglicht die Netlink-Unterstützungsschicht FreeBSD, das Linux-IP-Dienstprogramm aus dem iproute2-Paket zu verwenden, um Netzwerkschnittstellen zu verwalten, IP-Adressen festzulegen, Routing zu konfigurieren und Nexthop-Objekte zu manipulieren, die den Status speichern, der zum Weiterleiten eines Pakets an das gewünschte Ziel verwendet wird . Nach geringfügiger Änderung der Header-Dateien ist es möglich, Netlink im Bird-Routing-Paket zu verwenden.

Die Netlink-Implementierung für FreeBSD ist als ladbares Kernelmodul verpackt, das andere Kernel-Subsysteme möglichst nicht beeinträchtigt und separate Aufgabenwarteschlangen (Tasqueue) erstellt, um über das Protokoll eingehende Nachrichten zu verarbeiten und Vorgänge im asynchronen Modus auszuführen. Der Grund für die Portierung von Netlink ist das Fehlen eines Standardmechanismus für die Interaktion mit Kernel-Subsystemen, was dazu führt, dass verschiedene Subsysteme und Treiber ihre eigenen Protokolle erfinden.

Netlink bietet eine einheitliche Kommunikationsschicht und ein erweiterbares Nachrichtenformat, das als Vermittler fungieren kann und unterschiedliche Daten aus verschiedenen Quellen automatisch in einer einzigen Anfrage zusammenführt. Beispielsweise können FreeBSD-Subsysteme wie devd, jail und pfilctl zu Netlink migriert werden, wobei jetzt ihre eigenen ioctl-Aufrufe verwendet werden, was die Erstellung von Anwendungen für die Arbeit mit diesen Subsystemen erheblich vereinfacht. Darüber hinaus ermöglicht die Verwendung von Netlink zum Ändern der Nexthop-Objekte und -Gruppen im Routing-Stack eine effizientere Interaktion mit User-Space-Routing-Prozessen.

Derzeit implementierte Funktionen:

  • Abrufen von Informationen über Routen, Nexthops-Objekte und -Gruppen, Netzwerkschnittstellen, Adressen und benachbarte Hosts (ARP/NDP).
  • Bildung von Benachrichtigungen über das Erscheinen und Trennen von Netzwerkschnittstellen, das Setzen und Löschen von Adressen, das Hinzufügen und Löschen von Routen.
  • Hinzufügen und Entfernen von Routen, Nexthops-Objekten und -Gruppen, Gateways und Netzwerkschnittstellen.
  • Integration mit der Rtsock-Schnittstelle zur Verwaltung der Routing-Tabelle.

Source: opennet.ru

Kommentar hinzufügen