rtnetlink(3)

NOM
rtnetlink - Macros manipulant des messages rtnetlink

BIBLIOTHÈQUE
Bibliothèque C standard (libc, -lc)

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 size);

void *RTA_DATA(struct rtattr *rta);
unsigned int RTA_PAYLOAD(struct rtattr *rta);

struct rtattr *RTA_NEXT(struct rtattr *rta, unsigned int size);

unsigned int RTA_LENGTH(unsigned int size);
unsigned int RTA_SPACE(unsigned int size);

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, size) renvoie vrai si rta pointe sur un attribut de routage valide ; size est la taille 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 size 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 taille des données de cet attribut.

RTA_NEXT(rta, size) renvoie le premier attribut après rta. Un appel à cette macro met à jour size. Vous devriez utiliser RTA_OK pour vérifier la validité du pointeur renvoyé.

RTA_LENGTH(size) renvoie la taille requise pour size octets de données plus l'en-tête.

RTA_SPACE(size) renvoie la quantité de mémoire nécessaire pour un message composé de size octets de données.

NORMES
Linux.

BOGUES
Cette page de manuel est incomplète.

EXEMPLES
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;

    memset(&req, 0, sizeof(req));
    req.nh.nlmsg_len = NLMSG_LENGTH(sizeof(req.if));
    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(mtu));
    req.nh.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, 0);

VOIR AUSSI
netlink(3), netlink(7), rtnetlink(7)

TRADUCTION
La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org> et Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 (https://www.gnu.org/licenses/gpl-3.0.html) concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org.