rtnetlink
Table des matières
Retour à l'index
NOM
rtnetlink – Socket de routage de Linux
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 à 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
|
| IFLA_PERM_ADDRESS | adresse matérielle |
hardware address provided by device (since Linux 5.5)
|
-
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; /* Address family of route */
unsigned char rtm_dst_len; /* Length of destination */
unsigned char rtm_src_len; /* Length of source */
unsigned char rtm_tos; /* TOS filter */
unsigned char rtm_table; /* Routing table ID;
see RTA_TABLE below */
unsigned char rtm_protocol; /* Routing protocol; see below */
unsigned char rtm_scope; /* See below */
unsigned char rtm_type; /* See below */
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; /* Interface index */
__u16 ndm_state; /* State */
__u8 ndm_flags; /* Flags */
__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)
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
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 à
Index
- NOM
-
- SYNOPSIS
-
- DESCRIPTION
-
- Attributs de routage
-
- Messages
-
- VERSIONS
-
- BOGUES
-
- VOIR AUSSI
-
- TRADUCTION
-
This document was created by
man2html,
using the manual pages.
Time: 05:06:38 GMT, September 19, 2025