.\" -*- coding: UTF-8 -*- '\" t .\" This man page is Copyright (c) 1998 by Andi Kleen. .\" .\" SPDX-License-Identifier: GPL-1.0-or-later .\" .\" Based on the original comments from Alexey Kuznetsov .\" Modified 2005-12-27 by Hasso Tepper .\" $Id: netlink.7,v 1.8 2000/06/22 13:23:00 ak Exp $ .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH netlink 7 "5 février 2023" "Pages du manuel de Linux 6.03" .SH NOM netlink – Communication entre noyau et espace utilisateur (AF_NETLINK) .SH SYNOPSIS .nf \fB#include \fP \fB#include \fP \fB#include \fP .PP \fBnetlink_socket = socket(AF_NETLINK, \fP\fItype_socket\fP\fB, \fP\fIfamille_netlink\fP\fB);\fP .fi .SH DESCRIPTION Netlink sert à transférer des informations entre les modules du noyau et les processus de l'espace utilisateur. Il consiste en une interface standard basée sur les sockets pour les processus en espace utilisateur et d'une API interne du noyau pour les modules du noyau. Cette interface du noyau n'est pas documentée dans cette page de manuel. Il existe aussi une interface netlink obsolète utilisant les périphériques caractère netlink, fournie uniquement pour rétrocompatibilité et non documentée ici. .PP Netlink est un service orienté datagramme. Les deux types \fBSOCK_RAW\fP et \fBSOCK_DGRAM\fP sont des valeurs possibles pour \fItype_socket\fP. Toutefois, le protocole netlink ne distingue pas les sockets raw et datagramme. .PP \fIfamille_netlink\fP sélectionne le module du noyau ou le groupe netlink avec qui communiquer. Les familles netlink actuellement déterminées sont\ : .TP \fBNETLINK_ROUTE\fP Réception des modifications de routage et de lien et utilisation possible pour mettre à jour les tables de routage (IPv4 et IPv6), les adresses IP, les paramètres de lien, les configurations de voisinage, les politiques d'ordonnancement, les classes de trafic et les classificateurs de paquets (consultez \fBrtnetlink\fP(7)). .TP \fBNETLINK_W1\fP (Linux 2.6.13 to Linux 2.16.17) Messages du sous\-système 1\-Wire. .TP \fBNETLINK_USERSOCK\fP Réservé pour les protocoles de socket dans l'espace utilisateur. .TP \fBNETLINK_FIREWALL\fP (jusqu’à Linux 3.4 inclus) .\" removed by commit d16cf20e2f2f13411eece7f7fb72c17d141c4a84 Transport des paquets IPv4 de netfilter vers l’espace utilisateur. Utilisé par le module de noyau \fIip_queue\fP. Après une longue période pendant laquelle il a été considéré comme obsolète (en faveur de la fonctionnalité plus moderne \fInfnetlink_queue\fP), \fBNETLINK_FIREWALL\fP a été retiré dans Linux\ 3.5. .TP \fBNETLINK_SOCK_DIAG\fP (depuis Linux 3.3) .\" commit 7f1fb60c4fc9fb29fbb406ac8c4cfb4e59e168d6 Recherche d’informations sur les sockets de diverses familles de protocoles du noyau (consultez \fBsock_diag\fP(7)). .TP \fBNETLINK_INET_DIAG\fP (depuis Linux 2.6.14) Synonyme obsolète pour \fBNETLINK_SOCK_DIAG\fP. .TP \fBNETLINK_NFLOG\fP (jusqu’à Linux 3.16 inclus) Messages ULOG de netfilter/iptables. .TP \fBNETLINK_XFRM\fP .\" FIXME More details on NETLINK_XFRM needed. IPsec. .TP \fBNETLINK_SELINUX\fP (depuis Linux 2.6.4) Notifications d'événements SELinux. .TP \fBNETLINK_ISCSI\fP (depuis Linux 2.6.15) .\" FIXME More details on NETLINK_ISCSI needed. Open\-iSCSI. .TP \fBNETLINK_AUDIT\fP (depuis Linux 2.6.6) .\" FIXME More details on NETLINK_AUDIT needed. Audit. .TP \fBNETLINK_FIB_LOOKUP\fP (depuis Linux 2.6.13) .\" FIXME More details on NETLINK_FIB_LOOKUP needed. Accès à la recherche dans la FIB depuis l'espace utilisateur. .TP \fBNETLINK_CONNECTOR\fP (depuis Linux 2.6.14) .\" commit baa293e9544bea71361950d071579f0e4d5713ed Kernel connector. See \fIDocumentation/driver\-api/connector.rst\fP (or \fI/Documentation/connector/connector.*\fP in Linux 5.2 and earlier) in the Linux kernel source tree for further information. .TP \fBNETLINK_NETFILTER\fP (depuis Linux 2.6.14) .\" FIXME More details on NETLINK_NETFILTER needed. Sous\-système netfilter. .TP \fBNETLINK_SCSITRANSPORT\fP (depuis Linux 2.6.19) .\" commit 84314fd4740ad73550c76dee4a9578979d84af48 .\" FIXME More details on NETLINK_SCSITRANSPORT needed. Transports SCSI. .TP \fBNETLINK_RDMA\fP (depuis Linux 3.0) .\" commit b2cbae2c248776d81cc265ff7d48405b6a4cc463 .\" FIXME More details on NETLINK_RDMA needed. RDMA Infiniband. .TP \fBNETLINK_IP6_FW\fP (jusqu’à Linux 3.4 inclus) Transport des paquets IPv6 de netfilter vers l'espace utilisateur. Utilisé par le module noyau \fIip6_queue\fP. .TP \fBNETLINK_DNRTMSG\fP Messages de routage DECnet. .TP \fBNETLINK_KOBJECT_UEVENT\fP (depuis Linux 2.6.10) .\" FIXME More details on NETLINK_KOBJECT_UEVENT needed. Messages du noyau vers l'espace utilisateur. .TP \fBNETLINK_GENERIC\fP (depuis Linux 2.6.15) Famille netlink générique pour une utilisation simplifiée de netlink. .TP \fBNETLINK_CRYPTO\fP (depuis Linux 3.2) .\" commit a38f7907b926e4c6c7d389ad96cc38cec2e5a9e9 .\" Author: Steffen Klassert Interface netlink pour obtenir des informations à propos des chiffrements enregistrés avec l’API de chiffrement du noyau et pour permettre la configuration de l’API Crypto du noyau. .PP Les messages netlink consistent en un flux d'octets avec un ou plusieurs en\-têtes \fInlmsghdr\fP et les contenus associés. Le flux d'octets ne doit être accédé qu'à travers les macros standards \fBNLMSG_*\fP. Consultez \fBnetlink\fP(3) pour plus d'informations. .PP Pour les messages multiparties, (plusieurs en\(hytêtes \fInlmsghdr\fP avec contenus associés dans un même flux d'octets), tous les en\-têtes ont l'attribut \fBNLM_F_MULTI\fP actif, sauf le dernier en\-tête qui a le type \fBNLMSG_DONE\fP. .PP Le contenu suit chaque \fInlmsghdr\fP. .PP .in +4n .EX struct nlmsghdr { __u32 nlmsg_len; /* Longueur du message en\-tête compris. */ __u16 nlmsg_type; /* Type de contenu du message. */ __u16 nlmsg_flags; /* Attributs supplémentaires. */ __u32 nlmsg_seq; /* Numéro de séquence. */ __u32 nlmsg_pid; /* Identifiant du port émetteur. */ }; .EE .in .PP \fInlmsg_type\fP can be one of the standard message types: \fBNLMSG_NOOP\fP message is to be ignored, \fBNLMSG_ERROR\fP message signals an error and the payload contains an \fInlmsgerr\fP structure, \fBNLMSG_DONE\fP message terminates a multipart message. Error messages get the original request appended, unless the user requests to cap the error message, and get extra error data if requested. .PP .in +4n .EX struct nlmsgerr { int error; /* Negative errno or 0 for acknowledgements */ struct nlmsghdr msg; /* Message header that caused the error */ /* * followed by the message contents * unless NETLINK_CAP_ACK was set * or the ACK indicates success (error == 0). * For example Generic Netlink message with attributes. * message length is aligned with NLMSG_ALIGN() */ /* * followed by TLVs defined in enum nlmsgerr_attrs * if NETLINK_EXT_ACK was set */ }; .EE .in .PP Une famille netlink contient généralement plus de types de message, consultez les pages de manuel appropriées, par exemple \fBrtnetlink\fP(7) pour \fBNETLINK_ROUTE\fP. .nh .ad l .TS tab(:); l s lB lx. Bits d’attribut standard dans \fInlmsg_flags\fP _ NLM_F_REQUEST:T{ À positionner pour tous les messages de requête. T} NLM_F_MULTI:T{ Le message est une partie d’un message multipartie terminé par \fBNLMSG_DONE\fP. T} NLM_F_ACK:T{ Requête d’un acquittement en cas de réussite. T} NLM_F_ECHO:T{ Répéter cette requête. T} .TE .ad .hy .\" No right adjustment for text blocks in tables .nh .ad l .TS tab(:); l s lB lx. Bits d’attribut supplémentaires pour les requêtes GET _ NLM_F_ROOT:T{ Renvoyer toute la table plutôt qu'une seule entrée. T} NLM_F_MATCH:T{ Renvoyer toutes les entrées correspondant au critère passé dans le contenu du message. Pas encore implémenté. T} NLM_F_ATOMIC:T{ Renvoyer un instantané atomique de la table. T} NLM_F_DUMP:T{ Macro pratique ; équivalente à (NLM_F_ROOT|NLM_F_MATCH). T} .TE .ad .hy .\" FIXME NLM_F_ATOMIC is not used anymore? .PP Notez que \fBNLM_F_ATOMIC\fP nécessite la capacité \fBCAP_NET_ADMIN\fP ou un UID effectif de zéro. .nh .ad l .TS tab(:); l s lB lx. Bits d’attribut supplémentaires pour requêtes NEW _ NLM_F_REPLACE:T{ Remplacer l'objet existant correspondant. T} NLM_F_EXCL:T{ Ne pas remplacer l'objet s'il existe déjà. T} NLM_F_CREATE:T{ Créer un objet s'il n'existe pas déjà. T} NLM_F_APPEND:T{ Ajouter à la fin de la liste d'objets. T} .TE .ad .hy .PP \fInlmsg_seq\fP et \fInlmsg_pid\fP sont utilisés pour suivre les messages. \fInlmsg_pid\fP montre l'origine du message. Remarquez qu'il n'y a pas de relation d'équivalence entre \fInlmsg_pid\fP et le PID du processus si le message vient d'un socket netlink. Consultez la section \fBFORMAT D'ADRESSE\fP pour plus d'informations. .PP .\" FIXME Explain more about nlmsg_seq and nlmsg_pid. \fInlmsg_seq\fP et \fInlmsg_pid\fP sont opaques pour le noyau de netlink. .PP 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 au récepteur en activant l'attribut \fBNLM_F_ACK\fP. Un acquittement est un paquet \fBNLMSG_ERROR\fP avec le champ erreur à zéro. L'application doit envoyer des acquittements pour les messages elle\-même. Le noyau essaie d'envoyer un message \fBNLMSG_ERROR\fP pour chaque paquet défectueux. Le processus utilisateur doit aussi suivre cette convention. .PP Cependant, garantir des transmissions fiables entre le noyau et l'espace utilisateur est impossible. Le noyau ne peut pas envoyer de message netlink si le tampon du socket est plein\ : le message sera abandonné et le noyau et le processus utilisateur n'auront pas la même information sur l'état du noyau. C'est à l'application de détecter cette condition (via l'erreur \fBENOBUFS\fP renvoyée par \fBrecvmsg\fP(2)) et de resynchroniser. .SS "Formats d'adresse" La structure \fIsockaddr_nl\fP décrit un client netlink dans l'espace utilisateur ou dans le noyau. Une \fIsockaddr_nl\fP peut être soit unicast (un seul destinataire) soit envoyée à des groupes multicast netlink (\fInl_groups\fP différent de 0). .PP .in +4n .EX struct sockaddr_nl { sa_family_t nl_family; /* AF_NETLINK */ unsigned short nl_pad; /* Zéro */ pid_t nl_pid; /* ID de port */ __u32 nl_groups; /* Masque de groupes multicast */ }; .EE .in .PP \fInl_pid\fP est l'adresse unicast du socket netlink. Elle vaut toujours zéro si la destination est dans le noyau. Pour un processus utilisateur, \fInl_pid\fP est généralement le PID du processus auquel appartient le socket de destination. Cependant, \fInl_pid\fP identifie un socket netlink, pas un processus. Si un processus a plusieurs sockets netlink, \fInl_pid\fP ne peut être égal au PID de ce processus que pour un socket au plus. Il y a deux façons d'assigner \fInl_pid\fP à un socket netlink. Si l'application définit \fInl_pid\fP avant d'appeler \fBbind\fP(2), c'est à l'application de s'assurer que \fInl_pid\fP est unique. Si l'application le définit à zéro, le noyau se charge de lui donner une valeur. Le noyau donne le PID au premier socket netlink ouvert par le processus et donne une valeur de \fInl_pid\fP unique à chaque socket netlink créé par la suite. .PP .\" commit d629b836d151d43332492651dd841d32e57ebe3b \fInl_groups\fP est un masque de bits représentant un ensemble de groupes netlink. Chaque famille netlink a un ensemble de 32\ groupes multicast. Quand on appelle \fBbind\fP(2) sur le socket, le champ \fInl_groups\fP de la structure \fIsockaddr_nl\fP 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. Un socket peut envoyer un message sur n'importe quel groupe multicast en remplissant le champ \fInl_groups\fP avec un masque de bits des groupes visés, lors de l'appel \fBsendmsg\fP(2) ou lors du \fBconnect\fP(2). Seuls les processus avec un UID effectif de zéro ou ayant la capacité \fBCAP_NET_ADMIN\fP peuvent envoyer ou recevoir sur un groupe multicast netlink. Depuis Linux\ 2.6.13, les messages ne peuvent être envoyés en broadcast vers plusieurs groupes. Toute réponse pour un message reçu sur un groupe multicast doit être renvoyée au PID émetteur et au groupe multicast. Certains sous\-systèmes du noyau Linux peuvent en plus autoriser d'autres utilisateurs à envoyer des messages. Dans Linux\ 3.0, les groupes \fBNETLINK_KOBJECT_UEVENT\fP, \fBNETLINK_GENERIC\fP, \fBNETLINK_ROUTE\fP et \fBNETLINK_SELINUX\fP autorisent d'autres utilisateurs à recevoir des messages. Aucun groupe ne permet à d'autres utilisateurs d'envoyer des messages. .SS "Options de socket" Pour définir ou obtenir une option du socket netlink, appeler \fBgetsockopt\fP(2) pour lire ou \fBsetsockopt\fP(2) pour écrire l’argument d’option de niveau défini à \fBSOL_NETLINK\fP. À moins d’être noté autre part, \fIoptval\fP est un pointeur vers un \fIint\fP. .TP \fBNETLINK_PKTINFO\fP (depuis Linux 2.6.14) .\" commit 9a4595bc7e67962f13232ee55a64e063062c3a99 .\" Author: Patrick McHardy Activer les messages de contrôle \fBnl_pktinfo\fP pour recevoir des paquets pour obtenir le numéro de groupe de destination étendu. .TP \fBNETLINK_ADD_MEMBERSHIP\fP,\ \fBNETLINK_DROP_MEMBERSHIP\fP (depuis Linux 2.6.14) .\" commit 9a4595bc7e67962f13232ee55a64e063062c3a99 .\" Author: Patrick McHardy Joindre ou quitter un groupe spécifié par \fIoptval\fP. .TP \fBNETLINK_LIST_MEMBERSHIPS\fP (depuis Linux 4.2) .\" commit b42be38b2778eda2237fc759e55e3b698b05b315 .\" Author: David Herrmann Retrouver tous les groupes desquels un socket est membre. \fIoptval\fP est un pointeur vers \fB__u32\fP et \fIoptlen\fP est la taille du tableau. Le tableau est rempli avec l’ensemble complet d’appartenances du socket et la taille de tableau nécessaire est renvoyée dans \fIoptlen\fP. .TP \fBNETLINK_BROADCAST_ERROR\fP (depuis Linux 2.6.30) .\" commit be0c22a46cfb79ab2342bb28fde99afa94ef868e .\" Author: Pablo Neira Ayuso S'il n'est pas défini, \fBnetlink_broadcast()\fP rapporte seulement les erreurs \fBESRCH\fP et ignore silencieusement les erreurs \fBENOBUFS\fP. .TP \fBNETLINK_NO_ENOBUFS\fP (depuis Linux 2.6.30) .\" commit 38938bfe3489394e2eed5e40c9bb8f66a2ce1405 .\" Author: Pablo Neira Ayuso Cet indicateur peut être utilisé par les modules d’écoute (listener) unicast et broadcast pour éviter de recevoir des erreurs \fBENOBUFS\fP. .TP \fBNETLINK_LISTEN_ALL_NSID\fP (depuis Linux 4.2) .\" commit 59324cf35aba5336b611074028777838a963d03b .\" Author: Nicolas Dichtel S'il est défini, ce socket recevra des notifications netlink de tous les espaces de noms réseau qui ont un \fInsid\fP assigné dans l’espace de noms réseau où le socket a été ouvert. Le \fInsid\fP est envoyé vers l’espace utilisateur à l’aide de données auxiliaires. .TP \fBNETLINK_CAP_ACK\fP (depuis Linux 4.3) .\" commit 0a6a3a23ea6efde079a5b77688541a98bf202721 .\" Author: Christophe Ricard Le noyau peut échouer à allouer la place nécessaire pour le message d’acquittement dans l’espace utilisateur. Cette option tronque le contenu du message netlink originel. L’en\-tête du message netlink est toujours inclus, aussi l’utilisateur peut estimer à partir du numéro de séquence quel message a déclenché l’acquittement. .SH VERSIONS L'interface socket pour netlink est une nouveauté dans Linux\ 2.2. .PP Linux\ 2.0 avait une interface netlink plus primitive, basée sur un périphérique caractère (toujours disponible sous forme d’option de compatibilité). Cette interface obsolète n'est pas décrite ici. .SH NOTES Il est souvent plus facile d'utiliser netlink à travers la bibliothèque \fIlibnetlink\fP ou \fIlibnl\fP qu’à l’aide de l'interface bas niveau du noyau. .SH BOGUES Cette page de manuel n'est pas complète. .SH EXEMPLES L'exemple suivant crée un socket netlink \fBNETLINK_ROUTE\fP qui écoute les groupes multicast \fBRTMGRP_LINK\fP (événements de création/suppression/configuration/déconfiguration d'interface réseau) et \fBRTMGRP_IPV4_IFADDR\fP (évènements d'ajout/suppression d'adresses IPv4). .PP .in +4n .EX struct sockaddr_nl sa; memset(&sa, 0, sizeof(sa)); sa.nl_family = AF_NETLINK; sa.nl_groups = RTMGRP_LINK | RTMGRP_IPV4_IFADDR; fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE); bind(fd, (struct sockaddr *) &sa, sizeof(sa)); .EE .in .PP L'exemple suivant montre comment envoyer un message netlink au noyau (PID\ 0). Notez que l'application doit gérer les numéros de séquence des messages pour correctement prendre en compte les acquittements. .PP .in +4n .EX struct nlmsghdr *nh; /* Le nlmsghdr avec le contenu à envoyer */ struct sockaddr_nl sa; struct iovec iov = { nh, nh\->nlmsg_len }; struct msghdr msg; msg = { &sa, sizeof(sa), &iov, 1, NULL, 0, 0 }; memset(&sa, 0, sizeof(sa)); sa.nl_family = AF_NETLINK; nh\->nlmsg_pid = 0; nh\->nlmsg_seq = ++sequence_number; /* Requête d’un acquittement par le noyau en définissant NLM_F_ACK */ nh\->nlmsg_flags |= NLM_F_ACK; sendmsg(fd, &msg, 0); .EE .in .PP Le dernier exemple montre comment lire un message netlink. .PP .in +4n .EX int len; /* 8192 pour éviter la troncature sur les plateformes avec une taille de page > 4096 */ struct nlmsghdr buf[8192/sizeof(struct nlmsghdr)]; struct iovec iov = { buf, sizeof(buf) }; struct sockaddr_nl sa; struct msghdr msg; struct nlmsghdr *nh; msg = { &sa, sizeof(sa), &iov, 1, NULL, 0, 0 }; len = recvmsg(fd, &msg, 0); for (nh = (struct nlmsghdr *) buf; NLMSG_OK (nh, len); nh = NLMSG_NEXT (nh, len)) { /* La fin d’un message multipartie */ if (nh\->nlmsg_type == NLMSG_DONE) return; if (nh\->nlmsg_type == NLMSG_ERROR) /* Réaliser une certaine gestion d’erreur */ ... /* Continuer par l’analyse du contenu */ ... } .EE .in .SH "VOIR AUSSI" \fBcmsg\fP(3), \fBnetlink\fP(3), \fBcapabilities\fP(7), \fBrtnetlink\fP(7), \fBsock_diag\fP(7) .PP .UR ftp://ftp.inr.ac.ru\:/ip\-routing\:/iproute2* Informations sur libnetlink .UE .PP .UR http://www.infradead.org\:/\[ti]tgr\:/libnl/ information about libnl .UE .PP RFC\ 3549 «\ Linux Netlink as an IP Services Protocol\ » .PP .SH TRADUCTION La traduction française de cette page de manuel a été créée par Christophe Blaess , Stéphan Rafin , Thierry Vignaud , François Micaux, Alain Portal , Jean-Philippe Guérard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas François , Florentin Duneau , Simon Paillard , Denis Barbier , David Prévot et Jean-Paul Guillonneau . .PP Cette traduction est une documentation libre ; veuillez vous reporter à la .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License version 3 .UE concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE. .PP Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à .MT debian-l10n-french@lists.debian.org .ME .