RTNETLINK(7)

NOM
rtnetlink, NETLINK_ROUTE - Socket de routage Linux IPv4

SYNOPSIS
#include <asm/types.h>
#include <linux/netlink.h>
#include <linux/rtnetlink.h>
#include <sys/socket.h> rtnetlink_socket = socket(PF_NETLINK, int socket_type, NETLINK_ROUTE);

DESCRIPTION
Rtnetlink permet de lire et modifier les tables de routage du noyau. Cela permet des communications entre divers sous-systèmes du noyau, bien que cette utilisation ne soit pas documentée ici, et pour les communications avec les programmes de l'espace utilisateur. Les routes réseau, les adresses IP, les paramètres de liaison, la configuration du voisinage, les files, les classes de trafic et les classes de paquets peuvent être configurés par le biais des sockets NETLINK_ROUTE. Elles sont basées sur des messages netlink, voir netlink(7) pour plus d'informations.

  Attributs de routage
Certains messages netlink ont des attributs supplémentaires après l'en-tête initial :
struct rtattr {
    unsigned short rta_len;    /* Longueur 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, voir rtnetlink(3).

  Messages
Rtnetlink est constitué de trois types de messages (en plus des messages netlink standards) :

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;  /* Index Interface */
        unsigned int   ifi_flags;  /* Attributs périphérique. */
        unsigned int   ifi_change; /* Masque modification */
    };
    ifi_flags contient les attributs du périphérique, voir netdevice(7) ; ifi_index est l'index unique de l'interface ; ifi_change est réservé pour un usage ultérieur et doit toujours valoir 0xFFFFFFFF.
    Attributs de routage
    rta_type | type valeur | description
    IFLA_UNSPEC | - | non-spécifié.
    IFLA_ADDRESS | adresse matérielle | Adresse L2 interface.
    IFLA_BROADCAST | adresse matérielle | Adresse L2 Broadcast.
    IFLA_IFNAME | chaîne AsciiZ | Nom périphérique.
    IFLA_MTU | unsigned int | MTU du périphérique.
    IFLA_LINK | int | Type liaison.
    IFLA_QDISC | chaîne AsciiZ | Mécanismes files.
    IFLA_STATS | Voir ci-dessous | Statistiques interface.

    Le type de valeur de IFLA_STATS est struct net_device_stats.

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 Linux 2.0. Dans Linux 2.2., ces messages supportent les adresses IPv4 et IPv6. Ils contiennent une structure ifaddrmsg, suivie éventuellement par des attributs de routage rtaddr.
    struct ifaddrmsg {
        unsigned char ifa_family;    /* Type adresse */
        unsigned char ifa_prefixlen; /* Lg préfixe adresse */
        unsigned char ifa_flags;     /* Attributs adresse */
        unsigned char ifa_scope;     /* Portée adresse */
        int           ifa_index;     /* Index interface */
    };
    ifa_family est le type de famille d'adresse (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'index 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 fixée par l'utilisateur, et d'autres attributs non documentés.
    Attributes
    rta_type | type valeur | description
    IFA_UNSPEC | - | non-spécifié.
    IFA_ADDRESS | Adresse protocole raw | Adresse interface.
    IFA_LOCAL | Adresse protocole raw | Adresse locale.
    IFA_LABEL | Chaîne AsciiZ | Nom de l'interface.
    IFA_BROADCAST | Adresse protocole raw | Adresse broadcast.
    IFA_ANYCAST | Adresse protocole raw | Adresse anycast.
    IFA_CACHEINFO | struct ifa_cacheinfo | Informations 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'adresse de la route */
        unsigned char rtm_dst_len;  /* Longueur source */
        unsigned char rtm_src_len;  /* Longueur destination */
        unsigned char rtm_tos;      /* Filtre TOS */
        unsigned char rtm_table;    /* ID table routage */
        unsigned char rtm_protocol; /* Protocole route, cf plus bas */
        unsigned char rtm_scope;    /* Cf plus bas */
        unsigned char rtm_type;     /* Cf plus bas */
        unsigned int rtm_flags;
    };
    rtm_type | Type route
    RTN_UNSPEC | Route inconnue
    RTN_UNICAST | Passerelle ou route directe
    RTN_LOCAL | Route interface locale
    RTN_BROADCAST | Route broadcast locale (envoi en broadcast)
    RTN_ANYCAST | Route broadcast 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 | Routage prolongé dans une autre table
    RTN_NAT | Route de traduction d'adresse
    RTN_XRESOLVE | Référence à une résolution externe (non implémenté)
    rtm_protocol | Origine de la route.
    RTPROT_UNSPEC | inconnue
    RTPROT_REDIRECT | redirection ICMP (inutilisé actuellement)
    RTPROT_KERNEL | fixée par le noyau
    RTPROT_BOOT | obtenue pendant le démarrage
    RTPROT_STATIC | fixée 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 la route ou de faire une distinction entre plusieurs démons de routage. Voir <linux/rtnetlink.h> pour les identificateurs de démons de routage déjà affectés. rtm_scope est la distance à la destination :
    RT_SCOPE_UNIVERSE | route globale
    RT_SCOPE_SITE | route locale interne au système autonome
    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 via rtnetlink
    RTM_F_CLONED | la route est clonée depuis une autre route
    RTM_F_EQUALIZE | répartiteur multicast (pas encore implémenté)
    rtm_table indique la table de routage
    RT_TABLE_UNSPEC | table de routage non spécifiée
    RT_TABLE_DEFAULT | la table par défaut
    RT_TABLE_MAIN | la table principale
    RT_TABLE_LOCAL | la table locale
    L'utilisateur peut affecter à son gré les valeurs entre RT_TABLE_UNSPEC et RT_TABLE_DEFAULT.
    Attributes
    rta_type | type de valeur | description
    RTA_UNSPEC | - | ignoré.
    RTA_DST | Adresse protocole | Adresse de la route destination.
    RTA_SRC | Adresse protocole | Adresse de la route source.
    RTA_IIF | int | Index interface d'entrée.
    RTA_OIF | int | Index interface de sortie.
    RTA_GATEWAY | Adresse protocole | Passerelle de la route.
    RTA_PRIORITY | int | Priorité de la route.
    RTA_PREFSRC |  |
    RTA_METRICS | int | Métrique de la route.
    RTA_MULTIPATH |  |
    RTA_PROTOINFO |  |
    RTA_FLOW |  |
    RTA_CACHEINFO |  |

RTM_NEWNEIGH, RTM_DELNEIGH, RTM_GETNEIGH
    Ajouter, supprimer ou obtenir des informations sur les voisinages d'un élément de table (p.ex. : entrée ARP). Le message contient une structure ndmsg.
    struct ndmsg {
        unsigned char ndm_family;
        int           ndm_ifindex;  /* Index interface */
        __u16         ndm_state;    /* États */
        __u8          ndm_flags;    /* Attributs */
        __u8          ndm_type;
    };
    struct nda_cacheinfo {
        __u32         ndm_confirmed;
        __u32         ndm_used;
        __u32         ndm_updated;
        __u32         ndm_refcnt;
    };
    ndm_state est un masque contenant les bits suivants :
    NUD_INCOMPLETE | une entrée de cache non résolue.
    NUD_REACHABLE | une entrée de cache confirmée correcte.
    NUD_STALE | une entrée de cache expirée.
    NUD_DELAY | une entrée de cache en attente de timer.
    NUD_PROBE | une entrée de cache en vérification.
    NUD_FAILED | une entrée de cache invalide.
    NUD_NOARP | un périphérique sans cache de destination.
    NUD_PERMANENT | une entrée statique.
    Les valeurs valides pour ndm_flags sont :
    NTF_PROXY | nne entrée proxy Arp.
    NTF_ROUTER | un routeur IPv6.
    La structure rtaddr prend les significations suivantes pour le champ rta_type :
    NDA_UNSPEC | type inconnu
    NDA_DST | une adresse niveau réseau dans le cache de voisinage.
    NDA_LLADDR | une adresse niveau liaison dans le cache 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 structure structrtmsg.

RTM_NEWQDISC, RTM_DELQDISC, RTM_GETQDISC
    Ajouter, supprimer ou rechercher une displine de file d'attente. Le message contient une structure struct tcmsg et peut être suivi par une série d'attributs.
    struct tcmsg {
        unsigned char tcm_family;
        int           tcm_ifindex;   /* Index interface */
        __u32         tcm_handle;    /* Handle Qdisc    */
        __u32         tcm_parent;    /* Parent Qdisc    */
        __u32         tcm_info;
    };
    Attributes
    rta_type | Type valeur | Description
    TCA_UNSPEC | - | unspecified
    TCA_KIND | Chaîne AsciiZ | Nom de la discipline de file
    TCA_OPTIONS | Séquence octets | Options spécifiques Qdisc suivent
    TCA_STATS | struct tc_stats | Statistiques Qdisc
    TCA_XSTATS | Spécifique Qdisc | Statistiques spécifiques module
    TCA_RATE | struct tc_estimator | Limitation taux
    De plus, d'autres attributs spécifiques au module Qdisc sont possibles. Pour plus d'information, 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é Linux 2.2.

BOGUES
Cette page de manuel est très incomplète.

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

TRADUCTION

Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 25 juillet 2003 et révisée le 22 décembre 2007.

L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 7 rtnetlink ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.