RTNETLINK

Section: Manuel de l'administrateur Linux (7)
Updated: 25 juillet 2003
Index


NOM
SYNOPSIS
DESCRIPTION
ATTRIBUTS DE ROUTAGE
MESSAGES
VERSIONS
BOGUES
VOIR AUSSI
TRADUCTION

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 en 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. */
    unsigned int   ifi_change;  /* Masque modificat° */
};

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
struct net_device_stats
Statistiques interface.
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 éventullement 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 attribut 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_typeType route

RTN_UNSPECRoute inconnue
RTN_UNICASTPasserelle ou route directe
RTN_LOCALRoute interface locale
RTN_BROADCAST Route broadcast locale (envoi en broadcast)
RTN_ANYCAST Route broadcast locale (envoi en unicast)
RTN_MULTICASTRoute multicast
RTN_BLACKHOLERoute d'abandon de paquets
RTN_UNREACHABLEDestination unaccessible
RTN_PROHIBITRoute de rejet de paquets
RTN_THROWRoutage prolongé dans une autre table
RTN_NATRoute de traduction d'adresse
RTN_XRESOLVE Référence à une résolution externe (non implémenté)

rtm_protocolOrigine de la route.

RTPROT_UNSPECinconnue
RTPROT_REDIRECT redirection ICMP (inutilisé actuellement)
RTPROT_KERNELfixée par le noyau
RTPROT_BOOTobtenue pendant le boot
RTPROT_STATICfixée par l'administrateur

Les valeurs plus grande 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_UNIVERSEroute globale
RT_SCOPE_SITE route locale interne au système autonome
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 via rtnetlink
RTM_F_CLONEDla route est clonée depuis une autre route
RTM_F_EQUALIZErépartiteur multicast (pas encore implémenté)

rtm_table indique la table de routage
RT_TABLE_UNSPECtable de routage non spécifiée
RT_TABLE_DEFAULTla table par défaut
RT_TABLE_MAINla table principale
RT_TABLE_LOCALla 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 voisinage d'un élément de table (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_INCOMPLETEune entrée de cache non résolue.
NUD_REACHABLEune entrée de cache confirmée correcte.
NUD_STALEune entrée de cache expirée.
NUD_DELAYune entrée de cache en attente de timer.
NUD_PROBEune entrée de cache en vérification.
NUD_FAILEDune entrée de cache invalide.
NUD_NOARPun périphérique sans cache de destination.
NUD_PERMANENTune entrée statique.

Les valeurs valides pour ndm_flags sont :
NTF_PROXYnne entrée proxy Arp.
NTF_ROUTERun routeur IPv6.


La structure rtaddr prend les significations suivantes pour le champ rta_type :
NDA_UNSPECtype inconnu
NDA_DSTune adresse niveau réseau dans le cache de voisinage.
NDA_LLADDRune adresse niveau liaison dans le cache 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 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 flitre 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

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

TRADUCTION

Christophe Blaess, 2003.