NOM
rtnetlink – Socket de routage de LinuxSYNOPSIS
#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
- 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
- Add, remove, or receive information about an IP address associated with an interface. In Linux 2.2, an interface can carry multiple IP addresses, this replaces the alias device concept in Linux 2.0. In Linux 2.2, these messages support IPv4 and IPv6 addresses. They contain an ifaddrmsg structure, optionally followed by rtattr routing attributes.
-
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; /* Famille d'adresses 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 de routage ; voir RTA_TABLE ci-dessous */ unsigned char rtm_protocol; /* Protocole de routage ; voir ci-dessous */ unsigned char rtm_scope; /* Voir ci-dessous */ unsigned char rtm_type; /* Voir ci-dessous */ 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
-
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
- 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é) 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 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; /* Indice d’interface */ __u16 ndm_state; /* État */ __u8 ndm_flags; /* Indicateurs */ __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 NTF_PROXY une entrée ARP de mandataire NTF_ROUTER un routeur IPv6 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
- 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
- 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 <[email protected]>, Thierry Vignaud <[email protected]>, François Micaux, Alain Portal <[email protected]>, Jean-Philippe Guérard <[email protected]>, Jean-Luc Coulon (f5ibh) <[email protected]>, Julien Cristau <[email protected]>, Thomas Huriaux <[email protected]>, Nicolas François <[email protected]>, Florentin Duneau <[email protected]>, Simon Paillard <[email protected]>, Denis Barbier <[email protected]>, David Prévot <[email protected]> et Jean-Paul Guillonneau <[email protected]> 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 à [email protected]15 décembre 2022 | Pages du manuel de Linux 6.03 |