Dans le code source de FreeBSD, une implémentation du protocole de communication Netlink (RFC 3549) a été adoptée, utilisée dans Linux pour organiser l'interaction entre le noyau et les processus en espace utilisateur. Le projet se limite à la prise en charge de la famille d'opérations NETLINK_ROUTE pour gérer l'état de la sous-système réseau dans le noyau.
Dans sa forme actuelle, le niveau de support de Netlink permet d'utiliser l'utilitaire Linux ip du package iproute2 pour gérer les interfaces réseau, configurer des adresses IP, régler le routage et manipuler des objets nexthop, qui contiennent des informations sur l'état utilisé pour transmettre un paquet à la destination souhaitée. Après quelques modifications mineures des fichiers d'en-tête, il est possible d'utiliser Netlink dans le package de routage Bird.
L'implémentation de Netlink pour FreeBSD est présentée sous la forme d'un module noyau chargeable, limitant (dans la mesure du possible) son impact sur d'autres sous-systèmes du noyau et créant des files d'attente de tâches distinctes (tasqueue) pour traiter les messages reçus via le protocole et effectuer des opérations de manière asynchrone. La raison citée pour le portage de Netlink est l'absence d'un mécanisme standard pour interagir avec les sous-systèmes du noyau, ce qui conduit différentes sous-systèmes et pilotes à inventer leurs propres protocoles.
Netlink offre une couche de communication unifiée et un format de message extensible, permettant de faire office d'intermédiaire, combinant automatiquement des données disparates de différentes sources en une seule requête. Par exemple, les sous-systèmes de FreeBSD tels que devd, jail et pfilctl, qui utilisent actuellement leurs propres appels ioctl, pourraient être traduits en Netlink, ce qui simplifierait considérablement la création d'applications pour travailler avec ces sous-systèmes. De plus, l'utilisation de Netlink pour modifier des objets et des groupes nexthop dans la pile de routage permettra une interaction plus efficace avec les processus de routage en espace utilisateur.
Fonctionnalités actuellement mises en œuvre :
- Obtention d'informations sur les itinéraires, les objets et groupes de nexthops, les interfaces réseau, les adresses et les hôtes voisins (arp/ndp).
- Génération de notifications pour l'activation et la désactivation des interfaces réseau, l'ajout et la suppression d'adresses, ainsi que l'ajout et la suppression d'itinéraires.
- Ajout et suppression d'itinéraires, d'objets et de groupes de nexthops, de passerelles et d'interfaces réseau.
- Intégration avec l'interface Rtsock pour la gestion de la table de routage.
Source : opennet.ru
