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.
| Attributs de routage |
|
|
| rta_type |
type de 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 ACSIIZ |
Nom périphérique. |
| IFLA_MTU |
unsigned int |
MTU du périphérique. |
| IFLA_LINK |
int |
Type liaison. |
| IFLA_QDISC |
chaîne ACSIIZ |
Mécanismes files. |
| IFLA_STATS |
voir ci‐dessous |
Statistiques 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 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.
| Attributes |
|
|
| rta_type |
type de 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 ACSIIZ |
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 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;
};
| 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 |
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 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 :
| 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 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 |
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 |
|
|
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 :
| 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 rtattr 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
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;
};
| Attributes |
|
|
| rta_type |
Type valeur |
Description |
|
| TCA_UNSPEC |
- |
unspecified |
| TCA_KIND |
Chaîne ACSIIZ |
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'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@lists.debian.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> ».