Loading

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> ».