|
|
RTNETLINK
Section: Manuel de l'administrateur Linux (7) Updated: 25 juillet 2003 Index
Return to Main Contents
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_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 unaccessible
|
| 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 | fixée par le noyau
|
| RTPROT_BOOT | obtenue pendant le boot
|
| RTPROT_STATIC | fixé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_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 multicast (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
|
|
|
- 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_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
rtaddr
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
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.
Index
- NOM
-
- SYNOPSIS
-
- DESCRIPTION
-
- ATTRIBUTS DE ROUTAGE
-
- MESSAGES
-
- VERSIONS
-
- BOGUES
-
- VOIR AUSSI
-
- TRADUCTION
-
|