Rechercher une page de manuel
rtnetlink
Langue: fr
Version: 14 mai 1999 (mandriva - 01/05/08)
Section: 3 (Bibliothèques de fonctions)
NOM
rtnetlink - Macros manipulant des messages rtnetlinkSYNOPSIS
#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.
Contenus ©2006-2024 Benjamin Poulain
Design ©2006-2024 Maxime Vantorre