Manpages

NOM

rtnetlink − Socket de routage Linux IPv4

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 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, consultez 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, consultez 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, consultez netdevice(7) ; ifi_index est l’index unique de l’interface (depuis Linux 3.7, il est possible de fournir une valeur non−nulle au message RTM_NEWLINK, créant un lien d’index ifindex) ; ifi_change est réservé pour un usage ultérieur et doit toujours valoir 0xFFFFFFFF.

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 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; /* 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 configurée par l’utilisateur, et d’autres attributs non documentés.

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 destination */
unsigned char rtm_src_len; /* Longueur source */
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;
};

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. Consultez <linux/rtnetlink.h> pour les identificateurs de démons de routage déjà affectés.

rtm_scope est la distance à la destination :

Les valeurs entre RT_SCOPE_UNIVERSE et RT_SCOPE_SITE sont disponibles pour l’utilisateur.

Le champ rtm_flags prend les significations suivantes :

rtm_table indique la table de routage

L’utilisateur peut affecter à son gré les valeurs entre RT_TABLE_UNSPEC et RT_TABLE_DEFAULT.

Remplir ces valeurs !

RTM_NEWNEIGH, RTM_DELNEIGH, RTM_GETNEIGH

Ajouter, supprimer ou obtenir des informations sur les voisinage 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 :

Les valeurs valides pour ndm_flags sont :

La structure rtattr prend les significations suivantes pour le champ rta_type :

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 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;
};

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é 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 3.65 du projet man−pages Linux. Une description du projet et des instructions pour signaler des anomalies peuvent être trouvées à l’adresse http://www.kernel.org/doc/man−pages/.

TRADUCTION

Depuis 2010, cette traduction est maintenue à l’aide de l’outil po4a <http://po4a.alioth.debian.org/>; par l’équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>;.

Christophe Blaess <http://www.blaess.fr/christophe/>; (1996-2003), Alain Portal <http://manpagesfr.free.fr/>; (2003-2006). Julien Cristau et l’équipe francophone de traduction de Debian (2006-2009).

Veuillez signaler toute erreur de traduction en écrivant à <debian−l10n−french [AT] lists.org> ou par un rapport de bogue sur le paquet manpages−fr.

Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « man −L C <section> <page_de_man> ».

COMMENTS