rtnetlink

Table des matières
Retour à l'index

 

NOM

rtnetlink – Socket de routage de Linux  

SYNOPSIS

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

rtnetlink_socket = socket(AF_NETLINK, int type_socket, NETLINK_ROUTE);
 

DESCRIPTION

rtnetlink permet de lire et modifier les tables de routage du noyau. Cela permet à divers sous-systèmes du noyau de communiquer entre eux, bien que cette utilisation ne soit pas documentée ici, et de communiquer avec les programmes de l'espace utilisateur. Les routes réseau, les adresses IP, les paramètres de liaison, la configuration du voisinage, la discipline de file d’attente, les classes de trafic et les classes de paquet peuvent être configurés par le biais des sockets NETLINK_ROUTE. Cela est basé sur des messages netlink ; consultez netlink(7) pour plus d'informations.  

Attributs de routage

Certains messages rtnetlink ont des attributs facultatifs après l'en-tête initial :

struct rtattr {
    unsigned short rta_len;    /* Longueur d’option */
    unsigned short rta_type;   /* Type d'option */
    /* Les données suivent... */ };

Ces attributs ne doivent être manipulés qu'en utilisant les macros RTA_* ou libnetlink. Consultez rtnetlink(3).  

Messages

rtnetlink est constitué de trois types de messages (en plus des messages netlink standard) :
RTM_NEWLINK
RTM_DELLINK RTM_GETLINK Créer, supprimer ou obtenir des informations à propos d'une interface réseau spécifique. Ces messages contiennent une structure ifinfomsg suivie d'une série de structures rtattr.
struct ifinfomsg {
    unsigned char  ifi_family; /* AF_UNSPEC */
    unsigned short ifi_type;   /* Type périphérique */
    int            ifi_index;  /* Indice interface */
    unsigned int   ifi_flags;  /* Attributs périphérique */
    unsigned int   ifi_change; /* Masque modificateur */ };
ifi_flags contient les attributs du périphérique ; consultez netdevice(7). ifi_index est l'indice unique de l'interface (depuis Linux 3.7, il est possible de fournir une valeur non nulle avec le message RTM_NEWLINK, créant un lien avec l’ifindex) donné. ifi_change est réservé pour un usage ultérieur et doit toujours valoir 0xFFFFFFFF.
Attributs de routage
rta_typeType de valeurDescription

IFLA_UNSPEC-non précisé
IFLA_ADDRESSadresse matérielleadresse L2 d’interface
IFLA_BROADCASTadresse matérielleadresse L2 de diffusion
IFLA_IFNAMEchaîne ASCIIZnom de périphérique
IFLA_MTUentier non signéMTU du périphérique
IFLA_LINKinttype de lien
IFLA_QDISCchaîne ASCIIZmécanismes de file d'attente
IFLA_STATS voir ci-dessous statistiques d’interface
IFLA_PERM_ADDRESSadresse matérielle hardware address provided by device (since Linux 5.5)
Le type de données pour IFLA_STATS est struct rtnl_link_stats (struct net_device_stats dans les noyaux Linux 2.4 et antérieurs).
RTM_NEWADDR
RTM_DELADDR RTM_GETADDR Ajouter, supprimer ou obtenir des informations sur une adresse IP associée à une interface. Sous Linux 2.2, une interface peut gérer plusieurs adresses IP, ce qui remplace le concept d'alias de périphérique de Linux 2.0. Dans Linux 2.2, ces messages prennent en charge les adresses IPv4 et IPv6. Ils contiennent une structure ifaddrmsg, suivie éventuellement par des attributs de routage rtattr.
struct ifaddrmsg {
    unsigned char ifa_family;    /* Type adresse */
    unsigned char ifa_prefixlen; /* Longueur préfixe adresse */
    unsigned char ifa_flags;     /* Attributs adresse */
    unsigned char ifa_scope;     /* Portée adresse */
    unsigned int  ifa_index;     /* Indice interface */ };
ifa_family est le type de famille d'adresses (actuellement AF_INET ou AF_INET6), ifa_prefixlen est la longueur du masque d'adresse s'il est défini pour la famille (comme avec IPv4), ifa_scope est la portée de l'adresse, ifa_index est l'indice de l'interface associée à l'adresse. ifa_flags est un attribut composé de IFA_F_SECONDARY pour une adresse secondaire (les anciens alias d'interface), IFA_F_PERMANENT pour une adresse permanente configurée par l'utilisateur et d'autres indicateurs non documentés.
Attributs
rta_typeType de valeurDescription

IFA_UNSPEC-non précisé
IFA_ADDRESSadresse brute de protocoleadresse d’interface
IFA_LOCALadresse brute de protocoleadresse locale
IFA_LABELchaîne ASCIIZnom de l'interface
IFA_BROADCASTadresse brute de protocoleadresse de diffusion
IFA_ANYCASTadresse brute de protocoleadresse anycast
IFA_CACHEINFOstruct ifa_cacheinfoinformations d’adresse
RTM_NEWROUTE
RTM_DELROUTE RTM_GETROUTE Créer, supprimer ou obtenir des informations à propos d'une route réseau. Ces messages contiennent une structure rtmsg suivie d'une séquence éventuelle de structures rtattr. Pour RTM_GETROUTE, mettre rtm_dst_len et rtm_src_len à 0 signifie obtenir toutes les entrées pour la table de routage indiquée. Pour les autres champs, sauf rtm_table et rtm_protocol, 0 est le symbole générique signifiant « toutes valeurs ».
struct rtmsg {
    unsigned char rtm_family;   /* Address family of route */
    unsigned char rtm_dst_len;  /* Length of destination */
    unsigned char rtm_src_len;  /* Length of source */
    unsigned char rtm_tos;      /* TOS filter */
    unsigned char rtm_table;    /* Routing table ID;
                                   see RTA_TABLE below */
    unsigned char rtm_protocol; /* Routing protocol; see below */
    unsigned char rtm_scope;    /* See below */
    unsigned char rtm_type;     /* See below */
    unsigned int  rtm_flags; };
rtm_typeType de route

RTN_UNSPECroute inconnue
RTN_UNICASTpasserelle ou route directe
RTN_LOCALroute d’interface locale
RTN_BROADCAST route de diffusion locale (envoi en broadcast)
RTN_ANYCAST route de diffusion locale (envoi en unicast)
RTN_MULTICASTroute multicast
RTN_BLACKHOLEroute d'abandon de paquets
RTN_UNREACHABLEdestination inaccessible
RTN_PROHIBITroute de rejet de paquets
RTN_THROWcontinuer la recherche de routage dans une autre table
RTN_NATrègle de traduction d'adresse réseau
RTN_XRESOLVE référence à une résolution externe (non implémentée)
rtm_protocolOrigine de la route

RTPROT_UNSPECinconnue
RTPROT_REDIRECT définie par une redirection ICMP (inutilisée actuellement)
RTPROT_KERNELdéfinie par le noyau
RTPROT_BOOTobtenue pendant le démarrage
RTPROT_STATICdéfinie par l'administrateur
Les valeurs plus grandes que RTPROT_STATIC ne sont pas interprétées par le noyau et servent d'information utilisateur. Elles permettent de marquer la source de l’information de routage ou de faire une distinction entre plusieurs démons de routage. Consultez <linux/rtnetlink.h> pour les identificateurs des démons de routage déjà affectés.
rtm_scope est la distance à la destination :
RT_SCOPE_UNIVERSEroute globale
RT_SCOPE_SITE route interne dans le système autonome local
RT_SCOPE_LINKroute sur ce lien
RT_SCOPE_HOSTroute sur l'hôte local
RT_SCOPE_NOWHEREdestination inexistante
Les valeurs entre RT_SCOPE_UNIVERSE et RT_SCOPE_SITE sont disponibles pour l'utilisateur.
Le champ rtm_flags prend les significations suivantes :
RTM_F_NOTIFY si la route change, notifier l'utilisateur à l’aide de rtnetlink
RTM_F_CLONEDla route est clonée depuis une autre route
RTM_F_EQUALIZErépartiteur multichemin (pas encore implémenté)
rtm_table indique la table de routage
RT_TABLE_UNSPECtable de routage non spécifiée
RT_TABLE_DEFAULTtable par défaut
RT_TABLE_MAINtable principale
RT_TABLE_LOCALtable locale
L'utilisateur peut affecter à son gré les valeurs entre RT_TABLE_UNSPEC et RT_TABLE_DEFAULT.
Attributs
rta_type  Type de valeur  Description

RTA_UNSPEC  -  ignoré
RTA_DST  adresse de protocole  adresse de destination de la route
RTA_SRC  adresse de protocole  adresse de source de la route
RTA_IIF  int  indice de l’interface d'entrée
RTA_OIF  int  indice de l’interface de sortie
RTA_GATEWAY  adresse de protocole  passerelle de la route
RTA_PRIORITY  int  priorité de la route
RTA_PREFSRC  adresse de protocole  adresse de la route préférée
RTA_METRICS  int  métrique de la route
RTA_MULTIPATH     données multichemin nexthop (voir ci-dessous)
RTA_PROTOINFO    abandonné
RTA_FLOW  int  domaine de route
RTA_CACHEINFO  struct rta_cacheinfo  (voir linux/rtnetlink.h)
RTA_SESSION    abandonné
RTA_MP_ALGO    abandonné
RTA_TABLE  int   ID de table de routage ; si défini
rtm_table est ignoré
RTA_MARK  int  
RTA_MFC_STATS  struct rta_mfc_stats  (voir linux/rtnetlink.h)
RTA_VIA  struct rtvia   passerelle dans un AF différent (voir ci-dessous)
RTA_NEWDST  adresse de protocole   modification adresse de destination de paquet
RTA_PREF  char   préférence de routeur IPv6 RFC4191 (voir ci-dessous)
RTA_ENCAP_TYPE  short   type d’encapsulation pour
lwtunnels (voir ci-dessous)
RTA_ENCAP    défini par RTA_ENCAP_TYPE
RTA_EXPIRES  int   délai d’expiration de routes IPv6 (en seconde)
RTA_MULTIPATH contient plusieurs instances groupées de struct rtnexthop avec des RTA imbriqués (RTA_GATEWAY) :
struct rtnexthop {
    unsigned short rtnh_len;     /* Long. de struct. + long.
                                    de RTA */
    unsigned char  rtnh_flags;   /* Indicateurs (voir
                                    linux/rtnetlink.h) */
    unsigned char  rtnh_hops;    /* Priorité nexthop */
    int            rtnh_ifindex; /* Indice interface pour
                                    ce nexthop */ }
Il existe un tas de macros RTNH_* similaires aux macros RTA_* et NLHDR_* utiles pour gérer ces structures.
struct rtvia {
    unsigned short rtvia_family;
    unsigned char  rtvia_addr[0]; };
rtvia_addr est l’adresse, rtvia_family est son type de famille.
RTA_PREF peut contenir les valeurs ICMPV6_ROUTER_PREF_LOW, ICMPV6_ROUTER_PREF_MEDIUM et ICMPV6_ROUTER_PREF_HIGH définies dans <linux/icmpv6.h>.
RTA_ENCAP_TYPE peut contenir les valeurs LWTUNNEL_ENCAP_MPLS, LWTUNNEL_ENCAP_IP, LWTUNNEL_ENCAP_ILA ou LWTUNNEL_ENCAP_IP6 définies dans <linux/lwtunnel.h>.
Fournissez ces valeurs !
RTM_NEWNEIGH
RTM_DELNEIGH RTM_GETNEIGH Ajouter, supprimer ou obtenir des informations sur le voisinage d'un élément de table (p.ex. : une entrée ARP). Le message contient une structure ndmsg.
struct ndmsg {
    unsigned char ndm_family;
    int           ndm_ifindex;  /* Interface index */
    __u16         ndm_state;    /* State */
    __u8          ndm_flags;    /* Flags */
    __u8          ndm_type; }; struct nda_cacheinfo {
    __u32         ndm_confirmed;
    __u32         ndm_used;
    __u32         ndm_updated;
    __u32         ndm_refcnt; };
ndm_state est un masque de bits des états suivants :
NUD_INCOMPLETEune entrée de cache en cours de résolution
NUD_REACHABLEune entrée de cache en vigueur confirmée
NUD_STALEune entrée de cache expirée
NUD_DELAYune entrée de cache en attente de temporisateur
NUD_PROBEune entrée de cache en cours d’examen
NUD_FAILEDune entrée de cache non valable
NUD_NOARPun périphérique sans cache de destination
NUD_PERMANENTune entrée statique
Les valeurs autorisées pour ndm_flags sont :
NTF_PROXYune entrée ARP de mandataire
NTF_ROUTERun routeur IPv6
La structure rtattr prend les significations suivantes pour le champ rta_type :
NDA_UNSPECtype inconnu
NDA_DSTune adr. de dest. de la couche de réseau du cache de voisinage
NDA_LLADDRune adresse de couche de liaison du cache de voisinage
NDA_CACHEINFOstatistiques sur le cache
Si le champ rta_type vaut NDA_CACHEINFO, alors un en-tête struct nda_cacheinfo suit.
RTM_NEWRULE
RTM_DELRULE RTM_GETRULE Ajouter, supprimer ou rechercher une règle de routage. Utilise une struct rtmsg.
RTM_NEWQDISC
RTM_DELQDISC RTM_GETQDISC Ajouter, supprimer ou rechercher une discipline de file d'attente. Le message contient une structure struct tcmsg qui peut être suivie par une série d'attributs.
struct tcmsg {
    unsigned char    tcm_family;
    int              tcm_ifindex;   /* Indice d’interface */
    __u32            tcm_handle;    /* Gestion qdisc */
    __u32            tcm_parent;    /* Qdisc parent */
    __u32            tcm_info; };
Attributs
rta_type  Type de valeur  Description

TCA_UNSPEC  -  non précisé
TCA_KIND  chaîne ASCIIZ  nom de la discipline de file d'attente
TCA_OPTIONS  séquence d’octets  options spécifiques qdisc suivent
TCA_STATS  struct tc_stats  statistiques qdisc
TCA_XSTATS  spécifique qdisc  statistiques spécifiques au module
TCA_RATE  struct tc_estimator  limite de taux
De plus, d'autres attributs spécifiques au module Qdisc sont possibles. Pour plus d'informations, voir les fichiers d'en-tête appropriés.
RTM_NEWTCLASS
RTM_DELTCLASS RTM_GETTCLASS Ajouter, supprimer ou rechercher une classe de trafic. Ces messages contiennent une struct tcmsg décrite plus haut.
RTM_NEWTFILTER
RTM_DELTFILTER RTM_GETTFILTER Ajouter, supprimer ou obtenir des informations sur un filtre de trafic. Ces messages contiennent une struct tcmsg décrite plus haut.
 

VERSIONS

rtnetlink est une nouveauté de Linux 2.2.  

BOGUES

Cette page de manuel est incomplète.  

VOIR AUSSI

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

 

TRADUCTION

La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org> et Jean-Paul Guillonneau <guillonneau.jeanpaul@free.fr>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à


 

Index

NOM
SYNOPSIS
DESCRIPTION
Attributs de routage
Messages
VERSIONS
BOGUES
VOIR AUSSI
TRADUCTION

This document was created by man2html, using the manual pages.
Time: 05:06:38 GMT, September 19, 2025