GNU/Linux >> Tutoriels Linux >  >> Linux

ajout d'un nouveau protocole réseau dans le noyau Linux

Pour gérer la communication entre l'espace utilisateur et votre protocole, enregistrez votre protocole auprès de l'API des sockets du noyau. Cela vous permet de créer une socket normale à partir de l'espace utilisateur.

Jetez un œil à l'implémentation du socket Bluetooth/RFCOM pour des exemples de code pertinents.

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
};

Pour enregistrer un protocole, vous devrez remplir la structure proto_ops. Cette structure suit le modèle orienté objet observé ailleurs à l'intérieur du noyau. Cette structure définit une interface à suivre pour les développeurs implémentant leur propre interface socket.

Implémentez les fonctions définies par l'interface telles que lier, connecter, écouter et affecter le pointeur de fonction à l'entrée de structure. Définissez les ioctl pour les fonctionnalités non couvertes par l'interface des opérations.

Vous vous retrouvez avec une structure que vous intégrez plus tard à la structure de socket que nous renvoyons de la fonction de création.

La structure net_proto_family définit une nouvelle famille de protocoles. Cette structure inclut la fonction de création où votre implémentation de fonction doit remplir une structure de socket remplie avec la structure proto_ops.

Après cela, enregistrez la famille avec sock_register, et si tout va bien, vous devriez pouvoir créer un socket approprié à partir de l'espace utilisateur.

En interne, le protocole devrait probablement utiliser des skbuffs (voir ici et ici) pour communiquer avec les périphériques réseau.

skbuffs est le moyen universel de gérer les paquets réseau dans le noyau Linux. Les paquets sont reçus par la carte réseau, placés dans certains skbuffs puis transmis à la pile réseau, qui utilise le skbuff tout le temps.

Il s'agit de la structure de données de base et du chemin io pour implémenter un protocole réseau dans le noyau Linux.

Je n'ai pas connaissance d'un document qui décrit cette procédure du début à la fin. La source est avec vous sur celui-ci.


Linux
  1. Tests d'intégration continue pour le noyau Linux

  2. Le jeu des noms :nommer les interfaces réseau sous Linux

  3. Comment utiliser la commande Linux mtr

  4. Dans l'attente de la configuration du réseau Linux dans le disque virtuel initial (initrd)

  5. Autorisez-vous le protocole X sur votre réseau ?

Analyser le noyau Linux avec ftrace

Comment le noyau Linux gère les interruptions

Comment vérifier la version du noyau sous Linux

Comment utiliser la commande netstat sous Linux

Lancement du noyau Linux 5.0, nouvelles fonctionnalités et améliorations !

désactiver le protocole ARP dans la boîte Linux