Provided by: manpages-fr_1.67.0-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(PF_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);

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
       à cet 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  quantite  de  mémoire  nécessaire  pour  un
       message composé de len octets de données.

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(PF_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_longueurr = 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);

BOGUES

       Cette page de manuel est incomplète.

VOIR AUSSI

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

TRADUCTION

       Thierry Vignaud <tvignaud@mandrakesoft.com>, 2000
       Christophe Blaess, 2003.