NOM
rtnetlink - Macros manipulant des messages rtnetlink
SYNOPSIS
#include <asm/types.h>
#include <linux/netlink.h>
#include <linux/rtnetlink.h>
#include <sys/socket.h>
rtnetlink_socket = socket(AF_NETLINK, int socket_type, NETLINK_ROUTE);
int RTA_OK(struct rtattr *rta, int rtabuflen);
void *RTA_DATA(struct rtattr *rta);
unsigned int RTA_PAYLOAD(struct rtattr *rta);
struct rtattr *RTA_NEXT(struct rtattr *rta, unsigned int rtabuflen);
unsigned int RTA_LENGTH(unsigned int length);
unsigned int RTA_SPACE(unsigned int length);
Tous les messages rtnetlink(7) consistent en un en-tête de message
netlink(7) et des attributs. Ceux-ci ne devraient être manipulés que
par les macros fournies ici.
RTA_OK(rta, attrlen) renvoie vrai si rta pointe sur un attribut de
routage valide ; attrlen est la longueur courante du tampon
d’attributs. Si elle renvoie 0, vous devez supposer qu’il n’y a pas
d’autre attributs dans le message, même si attrlen n’est pas nulle.
RTA_DATA(rta) renvoie un pointeur sur le début des données de cet
attribut.
RTA_PAYLOAD(rta) renvoie la longueur des données de cet attribut.
RTA_NEXT(rta, attrlen) renvoie le premier attribut après rta. Un appel
à cette macro met à jour attrlen. Vous devriez utiliser RTA_OK pour
vérifier la validité du pointeur retourné.
RTA_LENGTH(len) renvoie la longueur requise pour len octets de données
plus l’en-tête.
RTA_SPACE(len) renvoie la quantité de mémoire nécessaire pour un
message composé de len octets de données.
CONFORMITÉ
Ces macros sont des extensions de Linux non standard.
BOGUES
Cette page de manuel est incomplète.
EXEMPLE
Créer un message rtnetlink pour choisir le MTU d’un périphérique.
struct {
struct nlmsghdr nh;
struct ifinfomsg if;
char attrbuf[512];
} req;
struct rtattr *rta;
unsigned int mtu = 1000;
int rtnetlink_sk = socket(AF_NETLINK, SOCK_DGRAM, NETLINK_ROUTE);
memset(&req, 0, sizeof(req));
req.nh.nlmsg_len = NLMSG_LENGTH(sizeof(struct ifinfomsg));
req.nh.nlmsg_flags = NLM_F_REQUEST;
req.nh.nlmsg_type = RTML_NEWLINK;
req.if.ifi_family = AF_UNSPEC;
req.if.ifi_index = INTERFACE_INDEX;
req.if.ifi_change = 0xffffffff; /* ???*/
rta = (struct rtattr *)(((char *) &req) +
NLMSG_ALIGN(n->nlmsg_len));
rta->rta_type = IFLA_MTU;
rta->rta_len = sizeof(unsigned int);
req.n.nlmsg_len = NLMSG_ALIGN(req.n.nlmsg_len) +
RTA_LENGTH(sizeof(mtu));
memcpy(RTA_DATA(rta), &mtu, sizeof(mtu));
send(rtnetlink_sk, &req, req.n.nlmsg_len);
VOIR AUSSI
netlink(3), netlink(7), rtnetlink(7)
COLOPHON
Cette page fait partie de la publication 3.23 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
Cette page de manuel a été traduite par Thierry Vignaud <tvignaud AT
mandriva DOT com> en 2002, puis a été mise à jour par Alain Portal
<aportal AT univ-montp2 DOT fr> jusqu’en 2006, et mise à disposition
sur http://manpagesfr.free.fr/.
Les mises à jour et corrections de la version présente dans Debian sont
directement gérées par Nicolas François
<nicolas.francois@centraliens.net> et l’équipe francophone de
traduction de Debian.
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> ».