NETLINK

Section : Manuel de l'administrateur Linux (7)
Mise à jour de la version anglaise : 27 décembre 2005
Index Menu principal  

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 le noyau et les processus de l'espace utilisateur. Il consiste en une interface basée sur les sockets standard 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ées sont :

NETLINK_ROUTE
Reçoit les modifications de routage et de liens et peut être utilisé pour mettre à jour les tables de routage (IPv4 et IPv6), les adresses IP, les paramètres de liens, les configurations voisines, les disciplines de mise en file d'attente, les classes de trafic, et les classificateurs de paquets (voir rtnetlink(7)).
NETLINK_W1
Messages de sous-systèmes 1-fil.
NETLINK_ARPD
Pour gérer la table Arp dans l'espace utilisateur.
NETLINK_USERSOCK
Réservé pour les futurs protocoles dans l'espace utilisateur.
NETLINK_FIREWALL
Transport de paquets IPv4 de netfilter vers l'espace utilisateur. Utilisé par le module noyau ip_queue.
NETLINK_INET_DIAG
Surveillance de socket.
NETLINK_NFLOG
Netfilter/iptables ULOG.
NETLINK_XFRM
IPsec.
NETLINK_SELINUX
Notifications d'événements SELinux.
NETLINK_AUDIT
Audit.
NETLINK_FIB_LOOKUP
Accès à la consultation FIB de l'espace utilisateur.
NETLINK_CONNECTOR
Connecteur noyau. Voir Documentation/connector/* dans les sources du noyau pour plus d'informations.
NETLINK_NETFILTER
Sous-système Netfilter.
NETLINK_IP6_FW
Transports des paquets IPv6 de netfilter vers l'espace utilisateur. Utilisé par le module noyau ip6_queue.
NETLINK_DNRTMSG
Routage DECnet des messages.
NETLINK_KOBJECT_UEVENT
Messages noyau vers espace utilisateur.
NETLINK_GENERIC
Famille générique netlink pour simplifier l'utilisation netlink.

Les messages netlink consistent en un flux d'octets avec un ou plusieurs entêtes nlmsghdr et les contenus associés. Le flux d'octets ne doit être accédé qu'à travers les macros standard NLMSG_*. Voir netlink(3) pour plus d'informations.

Dans les messages multiparties (entêtes nlmsghdr multiples avec données utiles associées dans un flux d'octets) le premier et tous les entêtes suivants ont l'attribut NLM_F_MULTI actif, sauf le dernier entête qui a le type NLMSG_DONE.

Après chaque nlmsghdr, les données utiles suivent.

struct nlmsghdr {
    __u32 nlmsg_len;    /* Longueur y compris entê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     */
};

nlmsg_type peut être l'un des types standard 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.

struct nlmsgerr
{
    int error;        /* errno négatif ou 0 pour acquittement */
    struct nlmsghdr msg;  /* entête message causant l'erreur  */
};

Une famille netlink contient des types supplémentaires de message, voir la page de manuel appropriée, par exemple rtnetlink