Provided by: manpages-fr_1.67.0-1_all bug

NOM

       netlink, PF_NETLINK - Communication entre noyau et utilisateur.

SYNOPSIS

       #include <asm/types.h>
       #include <sys/socket.h>
       #include <linux/netlink.h>

       netlink_socket = socket(PF_NETLINK, socket_type, netlink_family);

DESCRIPTION

       Netlink  sert  à transférer des informations entre les modules du noyau
       et les processus de l’espace utilisateur. Il consiste en une  interface
       basée sur les sockets standards pour les processus utilisateur et d’une
       API interne pour les  modules  du  noyau.  Cette  interface  n’est  pas
       documentée  dans  cette  page  de manuel. Il existe aussi une interface
       obsolète  via  un  périphérique  caractère   netlink,   réservée   pour
       compatibilité et non documentée ici.

       Netlink  est  un service orienté datagramme. Les deux types SOCK_RAW et
       SOCK_DGRAM sont des valeurs possibles pour socket_type ; toutefois,  le
       protocole netlink ne distingue pas les sockets raw et datagrammes.

       netlink_family sélectionne le module du noyau ou le groupe netlink avec
       qui communiquer.  Les familles netlink actuellement affectée sont :

       NETLINK_ROUTE
              Reçoit les modifications de routage et peut  être  utilisé  pour
              mettre à jour les tables de routage IPv4 (voir rtnetlink(7)).

       NETLINK_FIREWALL
              Reçoit les paquets envoyés par le code du firewall IPv4.

       NETLINK_ARPD
              Pour gérer la table Arp dans l’espace utilisateur.

       NETLINK_ROUTE6
              Reçoit et envoie les mise à jour de la table de routage IPv6.

       NETLINK_IP6_FW
              Pour  recevoir  les  paquets  rejetés  par le firewall IPv6 (pas
              encore implémenté).

       NETLINK_TAPBASE...NETLINK_TAPBASE+15
              sont les instances du périphérique  ethertap.   Ce  périphérique
              est un tunnel pour pseudo-réseau qui permet de simuler un pilote
              Ethernet depuis l’espace utilisateur.

       NETLINK_SKIP
              Réservé pour ENskip.

       NETLINK_USERSOCK
              Réservé pour les futurs protocoles dans l’espace utilisateur.

       Les messages  netlink  consistent  en  un  flux  d’octets  avec  un  ou
       plusieurs en-têtes nlmsghdr et les contenus associés. Pour les messages
       multi-parties, tous les en-têtes ont l’attribut NLM_F_MULTI actif, sauf
       le  dernier en-tête qui a le type NLMSG_DONE.  Le flux d’octets ne doit
       être accédé qu’à travers les macros standards NLMSG_* voir  netlink(3).

       Netlink  n’est  pas  un  protocole  fiable.  Il  fait de son mieux pour
       conduire les messages à destination, mais peut abandonner des  messages
       s’il  n’a  pas  assez  de  mémoire ou si une erreur se produit. Pour un
       transfert fiable, l’émetteur peut demander un acquittement du récepteur
       en  activant  l’attribut  NLM_F_ACK.   Un  acquittement  est  un paquet
       NLMSG_ERROR avec le champ erreur à zéro. L’application doit envoyer des
       acquittements  pour les messages eux-même. Le noyau essaye d’envoyer un
       message NLMSG_ERROR pour chaque paquet échoué. Le processus utilisateur
       devrait suivre aussi cette convention.

       Chaque famille netlink a un ensemble de 32 groupes multicast.  Quand on
       appelle bind(2) sur la socket,  le  champ  nl_groups  de  la  structure
       sockaddr_nl doit contenir un masque de bits des groupes que l’on désire
       écouter.  La valeur par défaut pour ce champ est zéro, ce qui  signifie
       qu’aucun  groupe  multicast  ne  sera reçu.  Une socket peut envoyer un
       message sur n’importe quel groupe multicast  en  remplissant  le  champ
       nl_groups  avec  un  masque  de  bit des groupes visés, lors de l’appel
       sendmsg(2) ou lors du connect(2).   Seul  les  processus  avec  un  UID
       effectif  nul  ou la capacité CAP_NET_ADMIN peuvent envoyer ou recevoir
       sur un groupe multicast netlink.  Toute réponse pour  un  message  reçu
       sur un groupe multicast doit être renvoyée au PID émetteur et au groupe
       multicast.

              struct nlmsghdr
              {
                  __u32    nlmsg_len;  /* Longueur y compris en-tête */
                  __u16    nlmsg_type; /* Contenu message            */
                  __u16    nlmsg_flags;/* Attributs supplémentaires  */
                  __u32    nlmsg_seq;  /* Numéro de séquence         */
                  __u32    nlmsg_pid;  /* PID du créateur socket     */
              };

              struct nlmsgerr
              {
                  int      error;      /* errno négatif ou 0 pour acquit. */
                  struct nlmsghdr msg; /* en-tête message causant l’erreur */
              };

       Après chaque nlmsghdr le contenu du message suit.  nlmsg_type peut être
       l’un  des  types  standards  de message : NLMSG_NOOP message à ignorer,
       NLMSG_ERROR message indiquant une erreur, son contenu est une structure
       nlmsgerr, NLMSG_DONE message final d’un ensemble multiparties.

       Une famille netlink contient des types supplémentaires de message, voir
       la  page  de  manuel   apprpriée,   par   exemple   rtnetlink(7)   pour
       NETLINK_ROUTE.

       Attribut standards dans nlmsg_flags
       NLM_F_REQUEST   pour toutes les requêtes
       NLM_F_MULTI     le   message   est   multi-parties,
                       temrinée par NLMSG_DONE
       NLM_F_ACK       envoyer un acquittement de réussite
       NLM_F_ECHO      renvoyer cette requête

       Attributs supplémentaires pour requêtes GET
       NLM_F_ROOT     Renvoyer toute la table plutôt qu’une seule entrée.
       NLM_F_MATCH    Pas encore implémenté.
       NLM_F_ATOMIC   Renvoyer une image instantanée de la table.
       NLM_F_DUMP     Pas encore documenté.

       Attributs supplémentaires pour requêtes NEW
       NLM_F_REPLACE   Ecraser l’objet existant.
       NLM_F_EXCL      Ne pas remplacer l’objet s’il existe déjà.

       NLM_F_CREATE    Créer un objet s’il n’existe pas.
       NLM_F_APPEND    Ajouter à la fin de la liste d’objets.

       Notez que NLM_F_ATOMIC  nécessite  la  capacité  CAP_NET_ADMIN  ou  les
       droits root.

FORMAT DADRESSE
       La  structure  sockaddr_nl  décrit  un  client  netlink  dans  l’espace
       utilisateur ou dans le noyau.  une sockaddr_nl peut être  soit  unicast
       (un   seul  destinataire)  ou  décrire  un  groupe  netlink  (nl_groups
       différent de 0).

              struct sockaddr_nl
              {
                  sa_family_t nl_family;    /* AF_NETLINK               */
                  unsigned short nl_pad;    /* zéro                     */
                  pid_t       nl_pid;       /* PID                      */
                  __u32       nl_groups;    /* masque groupes multicast */
              };

       nl_pid est le PID du processus propriétaire de la socket de destination
       ou  zéro  si la destination est dans le noyau.  nl_groups est un masque
       de bits représentant les groupes netlink.

BOGUES

       Cette page de manuel n’est pas complète.

NOTES

       Il est souvent plus facile d’utiliser netlink à travers la bibliothèque
       libnetlink que vial l’interface bas-niveau du noyau.

VERSIONS

       L’interface par socket de netlink est une nouveauté dans Linux 2.2.

       Linux   2.0  supporte  une  interface  plus  primitive,  basée  sur  un
       périphérique caractère (toujours  valable  pour  compatibilité).  Cette
       interface obsolète n’est pas décrite ici.

VOIR AUSSI

       cmsg(3), rtnetlink(7), netlink(3)

       ftp://ftp.inr.ac.ru/ip-routing/iproute2* pour libnetlink

TRADUCTION

       Christophe Blaess, 2003.