FreeBSD aggiunge il supporto per il protocollo Netlink utilizzato nel kernel Linux

Il codice base di FreeBSD adotta un'implementazione del protocollo di comunicazione Netlink (RFC 3549), utilizzato in Linux per organizzare l'interazione del kernel con i processi nello spazio utente. Il progetto si limita a supportare la famiglia di operazioni NETLINK_ROUTE per la gestione dello stato del sottosistema di rete nel kernel.

Nella sua forma attuale, il supporto Netlink consente a FreeBSD di utilizzare l'utilità ip Linux dal pacchetto iproute2 per gestire le interfacce di rete, impostare indirizzi IP, configurare il routing e manipolare oggetti nexthop che memorizzano i dati di stato utilizzati per inoltrare un pacchetto alla destinazione desiderata. Dopo piccole modifiche ai file header è possibile utilizzare Netlink nel pacchetto di routing Bird.

L'implementazione Netlink per FreeBSD è progettata come un modulo del kernel caricabile che, se possibile, non influisce sugli altri sottosistemi del kernel e crea code di attività separate (tasqueues) per elaborare i messaggi che arrivano tramite il protocollo ed eseguire operazioni in modalità asincrona. Il motivo del porting di Netlink è la mancanza di un meccanismo standard per interagire con i sottosistemi del kernel, il che porta diversi sottosistemi e driver a inventare i propri protocolli.

Netlink offre un livello di comunicazione unificato e un formato di messaggio estensibile che può fungere da intermediario che combina automaticamente dati disparati provenienti da diverse fonti in un'unica richiesta. Ad esempio, i sottosistemi di FreeBSD come devd, jail e pfilctl, che attualmente utilizzano le proprie chiamate ioctl, possono essere trasferiti su Netlink, il che semplificherà notevolmente la creazione di applicazioni per lavorare con questi sottosistemi. Inoltre, l'utilizzo di Netlink per modificare oggetti e gruppi nexthop nello stack di routing consentirà un'interazione più efficiente con i processi di routing dello spazio utente.

Funzionalità attualmente implementate:

  • Ottenere informazioni su percorsi, oggetti e gruppi nexthops, interfacce di rete, indirizzi e host vicini (arp/ndp).
  • Generazione di notifiche sull'aspetto e la disconnessione delle interfacce di rete, impostazione ed eliminazione di indirizzi, aggiunta ed eliminazione di percorsi.
  • Aggiunta e rimozione di percorsi, oggetti e gruppi nexthops, gateway, interfacce di rete.
  • Integrazione con interfaccia Rtsock per la gestione delle tabelle di routing.

Fonte: opennet.ru

Aggiungi un commento