rtnetlink

Autres langues

Langue: fr

Version: 14 mai 1999 (mandriva - 01/05/08)

Autres sections - même nom

Section: 3 (Bibliothèques de fonctions)

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

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(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_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)

TRADUCTION

Ce document est une traduction réalisée par Thierry Vignaud <tvignaud AT mandriva DOT com> en 2000 et révisée le 22 novembre 2007.

L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 3 rtnetlink ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.