FreeBSD voegt ondersteuning toe voor het Netlink-protocol dat wordt gebruikt in de Linux-kernel

De FreeBSD-codebase maakt gebruik van een implementatie van het Netlink-communicatieprotocol (RFC 3549), dat in Linux wordt gebruikt om de interactie tussen de kernel en processen in de gebruikersruimte te organiseren. Het project beperkt zich tot het ondersteunen van de NETLINK_ROUTE-familie van bewerkingen voor het beheren van de status van het netwerksubsysteem in de kernel.

In zijn huidige vorm stelt de Netlink-ondersteuningslaag FreeBSD in staat om het Linux ip-hulpprogramma van het iproute2-pakket te gebruiken om netwerkinterfaces te beheren, IP-adressen in te stellen, routering te configureren en nexthop-objecten te manipuleren die de status opslaan die wordt gebruikt om een ​​pakket naar de gewenste bestemming te sturen . Na een kleine aanpassing van de headerbestanden is het mogelijk om Netlink te gebruiken in het Bird routing pakket.

De Netlink-implementatie voor FreeBSD is verpakt als een laadbare kernelmodule die, indien mogelijk, geen invloed heeft op andere kernelsubsystemen en aparte taakwachtrijen (tasqueue) creëert om binnenkomende berichten via het protocol te verwerken en bewerkingen in asynchrone modus uit te voeren. De reden voor het porteren van Netlink is het ontbreken van een standaardmechanisme voor interactie met kernel-subsystemen, wat ertoe leidt dat verschillende subsystemen en stuurprogramma's hun eigen protocollen uitvinden.

Netlink biedt een uniforme communicatielaag en een uitbreidbaar berichtformaat dat kan fungeren als tussenpersoon die automatisch ongelijksoortige gegevens uit verschillende bronnen combineert tot één enkel verzoek. FreeBSD-subsystemen zoals devd, jail en pfilctl kunnen bijvoorbeeld worden gemigreerd naar Netlink, waarbij nu hun eigen ioctl-aanroepen worden gebruikt, wat het maken van applicaties voor het werken met deze subsystemen aanzienlijk zal vereenvoudigen. Bovendien zal het gebruik van Netlink om de nexthop-objecten en -groepen in de routeringsstack te wijzigen een efficiëntere interactie met routeringsprocessen in de gebruikersruimte mogelijk maken.

Functies die momenteel zijn geïmplementeerd:

  • Informatie krijgen over routes, nexthops-objecten en -groepen, netwerkinterfaces, adressen en naburige hosts (arp/ndp).
  • Vorming van meldingen over het verschijnen en verbreken van netwerkinterfaces, instellen en verwijderen van adressen, toevoegen en verwijderen van routes.
  • Routes toevoegen en verwijderen, nexthops-objecten en -groepen, gateways, netwerkinterfaces.
  • Integratie met de Rtsock-interface om de routeringstabel te beheren.

Bron: opennet.ru

Voeg een reactie