GNU/Linux >> Linux Esercitazione >  >> Linux

aggiunta di un nuovo protocollo di rete nel kernel Linux

Per gestire la comunicazione dallo spazio utente al tuo protocollo, registra il tuo protocollo con l'API dei socket del kernel. Questo ti permette di creare un normale socket dallo spazio utente.

Dai un'occhiata all'implementazione del socket bluetooth/RFCOM per esempi di codice pertinenti.

static const struct proto_ops rfcomm_sock_ops = {
     .family         = PF_BLUETOOTH,
     .owner          = THIS_MODULE,
     .bind           = rfcomm_sock_bind,
     .connect        = rfcomm_sock_connect,
     .listen         = rfcomm_sock_listen,
     .
     .
     .
     .accept         = rfcomm_sock_accept,

};
 
static const struct net_proto_family rfcomm_sock_family_ops = {
     .family         = PF_BLUETOOTH,
     .owner          = THIS_MODULE,
     .create         = rfcomm_sock_create
};

Per registrare un protocollo dovrai compilare la struttura proto_ops. Questa struttura segue il modello orientato agli oggetti osservato altrove all'interno del kernel. Questa struttura definisce un'interfaccia da seguire per gli sviluppatori che implementano la propria interfaccia socket.

Implementa le funzioni definite dall'interfaccia come bind, connect, listen e assegna il puntatore di funzione alla voce della struttura. Definisci ioctl per funzionalità non coperte dall'interfaccia delle operazioni.

Ti ritroverai con una struttura che in seguito incorporerai nella struttura socket restituita dalla funzione create.

Struct net_proto_family definisce una nuova famiglia di protocolli. Questa struttura include la funzione create in cui l'implementazione della funzione dovrebbe popolare una struttura socket riempita con la struttura proto_ops.

Dopodiché registra la famiglia con sock_register, e se tutto va bene dovresti essere in grado di creare un socket appropriato dallo spazio utente.

Internamente il protocollo dovrebbe probabilmente utilizzare skbuff (vedi qui e qui) per comunicare con i dispositivi di rete.

Gli skbuff sono il modo universale di gestire i pacchetti di rete nel kernel Linux. I pacchetti vengono ricevuti dalla scheda di rete, inseriti in alcuni skbuff e quindi passati allo stack di rete, che utilizza sempre lo skbuff.

Questa è la struttura dati di base e il percorso io per implementare un protocollo di rete all'interno del kernel Linux.

Non sono a conoscenza di un documento che descriva questa procedura dall'inizio alla fine. La fonte è con te su questo.


Linux
  1. Come usare il comando mtr di Linux

  2. In attesa della configurazione della rete Linux nel ramdisk iniziale (initrd)

  3. Consenti il ​​protocollo X sulla tua rete?

  4. Linux – Partecipare alla mailing list del kernel?

  5. Linux:perché il kernel non può eseguire Init?

Come il kernel Linux gestisce gli interrupt

Come controllare la versione del kernel in Linux

Come usare il comando netstat in Linux

Rilascio del kernel Linux 5.0, nuove funzionalità e miglioramenti!

disabilitando il protocollo ARP nella casella linux

Come viene aggiunto il nuovo supporto hardware al kernel Linux?