RTNETLINK(7)

NOM
rtnetlink – Socket de routage de Linux

SYNOPSIS
#include <asm/types.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_type | Type de valeur | Description
    IFLA_UNSPEC | - | non précisé
    IFLA_ADDRESS | adresse matérielle | adresse L2 d’interface
    IFLA_BROADCAST | adresse matérielle | adresse L2 de diffusion
    IFLA_IFNAME | chaîne ASCIIZ | nom de périphérique
    IFLA_MTU | entier non signé | MTU du périphérique
    IFLA_LINK | int | type de lien
    IFLA_QDISC | chaîne ASCIIZ | mécanismes de file d'attente
    IFLA_STATS | voir ci-dessous | statistiques d’interface

    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_type | Type de valeur | Description
    IFA_UNSPEC | - | non précisé
    IFA_ADDRESS | adresse brute de protocole | adresse d’interface
    IFA_LOCAL | adresse brute de protocole | adresse locale
    IFA_LABEL | chaîne ASCIIZ | nom de l'interface
    IFA_BROADCAST | adresse brute de protocole | adresse de diffusion
    IFA_ANYCAST | adresse brute de protocole | adresse anycast
    IFA_CACHEINFO | struct ifa_cacheinfo | informations 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;   /* Famille d'adresses de la route */
            unsigned char rtm_dst_len;  /* Longueur destination */
            unsigned char rtm_src_len;  /* Longueur source */
            unsigned char rtm_tos;      /* Filtre TOS */
            unsigned char rtm_table;    /* ID table de routage ;
                                           voir RTA_TABLE ci-dessous */
            unsigned char rtm_protocol; /* Protocole de routage ;
                                           voir ci-dessous */
            unsigned char rtm_scope;    /* Voir ci-dessous */
            unsigned char rtm_type;     /* Voir ci-dessous */
            unsigned int  rtm_flags;
        };
    rtm_type | Type de route
    RTN_UNSPEC | route inconnue
    RTN_UNICAST | passerelle ou route directe
    RTN_LOCAL | route d’interface locale
    RTN_BROADCAST | route de diffusion locale (envoi en broadcast)
    RTN_ANYCAST | route de diffusion locale (envoi en unicast)
    RTN_MULTICAST | route multicast
    RTN_BLACKHOLE | route d'abandon de paquets
    RTN_UNREACHABLE | destination inaccessible
    RTN_PROHIBIT | route de rejet de paquets
    RTN_THROW | continuer la recherche de routage dans une autre table
    RTN_NAT | règle de traduction d'adresse réseau
    RTN_XRESOLVE | référence à une résolution externe (non implémentée)
    rtm_protocol | Origine de la route
    RTPROT_UNSPEC | inconnue
    RTPROT_REDIRECT | définie par une redirection ICMP (inutilisée actuellement)
    RTPROT_KERNEL | définie par le noyau
    RTPROT_BOOT | obtenue pendant le démarrage
    RTPROT_STATIC | dé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_UNIVERSE | route globale
    RT_SCOPE_SITE | route interne dans le système autonome local
    RT_SCOPE_LINK | route sur ce lien
    RT_SCOPE_HOST | route sur l'hôte local
    RT_SCOPE_NOWHERE | destination 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_CLONED | la route est clonée depuis une autre route
    RTM_F_EQUALIZE | répartiteur multichemin (pas encore implémenté)

    rtm_table indique la table de routage
    RT_TABLE_UNSPEC | table de routage non spécifiée
    RT_TABLE_DEFAULT | table par défaut
    RT_TABLE_MAIN | table principale
    RT_TABLE_LOCAL | table 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;  /* Indice d’interface */
            __u16         ndm_state;    /* État */
            __u8          ndm_flags;    /* Indicateurs */
            __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_INCOMPLETE | une entrée de cache en cours de résolution
    NUD_REACHABLE | une entrée de cache en vigueur confirmée
    NUD_STALE | une entrée de cache expirée
    NUD_DELAY | une entrée de cache en attente de temporisateur
    NUD_PROBE | une entrée de cache en cours d’examen
    NUD_FAILED | une entrée de cache non valable
    NUD_NOARP | un périphérique sans cache de destination
    NUD_PERMANENT | une entrée statique

    Les valeurs autorisées pour ndm_flags sont :
    NTF_PROXY | une entrée ARP de mandataire
    NTF_ROUTER | un routeur IPv6

    La structure rtattr prend les significations suivantes pour le champ rta_type :
    NDA_UNSPEC | type inconnu
    NDA_DST | une adr. de dest. de la couche de réseau du cache de voisinage
    NDA_LLADDR | une adresse de couche de liaison du cache de voisinage
    NDA_CACHEINFO | statistiques 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)

COLOPHON
Cette page fait partie de la publication 5.13 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies et la dernière version de cette page peuvent être trouvées à l'adresse https://www.kernel.org/doc/man-pages/.

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 (https://www.gnu.org/licenses/gpl-3.0.html) 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 à debian-l10n-french@lists.debian.org.