Nella base di codice di FreeBSD è stata accettata l'implementazione del protocollo di comunicazione Netlink (RFC 3549), utilizzato in Linux per gestire l'interazione tra il kernel e i processi nello spazio utente. Il progetto si limita a supportare la famiglia di operazioni NETLINK_ROUTE per gestire lo stato del sottosistema di rete nel kernel.
Attualmente, il livello di supporto di Netlink consente di utilizzare in FreeBSD l'utilità Linux ip dal pacchetto iproute2 per gestire le interfacce di rete, impostare indirizzi IP, configurare il routing e manipolare gli oggetti nexthop, che contengono dati sullo stato utilizzato per inviare pacchetti al punto di destinazione desiderato. Dopo una leggera modifica dei file di intestazione, è possibile utilizzare Netlink nel pacchetto di routing Bird.
L'implementazione di Netlink per FreeBSD è strutturata come un modulo del kernel caricabile, cercando di non interferire con altri sottosistemi del kernel e creando code di attività separate (tasqueue) per elaborare i messaggi in arrivo tramite il protocollo e per eseguire operazioni in modo asincrono. Il motivo del porting di Netlink è l'assenza di un meccanismo standard per l'interazione con i sottosistemi del kernel, il che provoca l'invenzione di protocolli propri da parte di diversi sottosistemi e driver.
Netlink offre uno strato di comunicazione unificato e un formato di messaggi estensibile, che può fungere da intermediario, aggregando automaticamente in un'unica richiesta dati disomogenei provenienti da fonti diverse. Ad esempio, sottosistemi di FreeBSD come devd, jail e pfilctl, che attualmente utilizzano chiamate ioctl proprie, possono essere migrati a Netlink, semplificando notevolmente la creazione di applicazioni per lavorare con questi sottosistemi. Inoltre, l'uso di Netlink per modificare gli oggetti e i gruppi di nexthop nello stack di routing consentirà un'interazione più efficiente con i processi di routing nello spazio utente.
Funzionalità attualmente implementate:
- Ottimizzare informazioni su rotte, oggetti e gruppi di nexthop, interfacce di rete, indirizzi e host vicini (arp/ndp).
- Generare notifiche sull'emergere e la disconnessione delle interfacce di rete, sull'impostazione e la rimozione di indirizzi, sull'aggiunta e la rimozione di rotte.
- Aggiunta e rimozione di percorsi, oggetti e gruppi nexthops, gateway, interfacce di rete.
- Integrazione con l'interfaccia Rtsock per gestire la tabella di routing.
Fonte: opennet.ru
