Provided by: manpages-fr-dev_3.57d1p1-1_all bug

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 type_socket, 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);

DESCRIPTION

       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.
           #include <linux/rtnetlink.h>

           ...

           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 = RTM_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(req.nh.nlmsg_len));
           rta->rta_type = IFLA_MTU;
           rta->rta_len = RTA_LENGTH(sizeof(unsigned int));
           req.n.nlmsg_len = NLMSG_ALIGN(req.nh.nlmsg_len) +
                                         RTA_LENGTH(sizeof(mtu));
           memcpy(RTA_DATA(rta), &mtu, sizeof(mtu));
           send(rtnetlink_sk, &req, req.nh.nlmsg_len);

VOIR AUSSI

       netlink(3), netlink(7), rtnetlink(7)

COLOPHON

       Cette page fait partie de la publication 3.57 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

       Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par
       l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.

       Thierry  Vignaud  (2002),  Alain Portal <http://manpagesfr.free.fr/> (2006). Nicolas François et l'équipe
       francophone de traduction de Debian (2006-2009).

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

GNU                                               24 mars 2012                                      RTNETLINK(3)