Provided by: manpages-es-dev_4.18.1-1_all bug

NOMBRE

       rtnetlink - macros para manipular mensajes rtnetlink

BIBLIOTECA

       Biblioteca Estándar C (libc, -lc)

SINOPSIS

       #include <asm/types.h>
       #include <linux/netlink.h>
       #include <linux/rtnetlink.h>
       #include <sys/socket.h>

       rtnetlink_socket = socket(AF_NETLINK, int tipo_conector, 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 longitud);
       unsigned int RTA_SPACE(unsigned int longitud);

DESCRIPCIÓN

       Todos  los mensajes rtnetlink(7)  están formados por una cabecera de mensaje netlink(7)  y
       atributos añadidos.  Los  atributos  sólo  deberían  ser  manipulados  usando  las  macros
       suministradas aquí.

       RTA_OK(rta,  attrlen)  devuelve  verdadero  si  rta  apunta  a un atributo de enrutamiento
       válido.  attrlen es la longitud actual del buffer de  atributos.   Cuando  es  falso  debe
       asumir que no hay más atributos en el mensaje, aunque attrlen no sea cero.

       RTA_DATA(rta) devuelve un puntero al principio de los datos de este atributo.

       RTA_PAYLOAD(rta) devuelve la longitud de los datos de este atributo.

       RTA_NEXT(rta,  attrlen)  obtiene  el  siguiente atributo después de rta.  Al llamar a esta
       macro se actualizará attrlen.  Debería usar RTA_OK para comprobar la validez  del  puntero
       devuelto.

       RTA_LENGTH(len)  devuelve  la  longitud  que  se  necesita  para len bytes de datos más la
       cabecera.

       RTA_SPACE(len) devuelve la cantidad de espacio que se necesitarán en el  mensaje  con  len
       bytes de datos.

ESTÁNDARES

       Estas macros son extensiones no estándar de Linux

ERRORES

       Esta página de manual esta incompleta.

EJEMPLOS

       Crear un mensaje rtnetlink para configurar la MTU de un dispositivo:

           #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(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);

VÉASE TAMBIÉN

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

TRADUCCIÓN

       La  traducción  al  español  de  esta  página  del  manual  fue  creada  por  Juan Piernas
       <piernas@ditec.um.es> y Marcos Fouces <marcos@debian.org>

       Esta traducción es documentación libre; lea  la  GNU  General  Public  License  Version  3
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  o posterior con respecto a las condiciones de
       copyright.  No existe NINGUNA RESPONSABILIDAD.

       Si encuentra algún error en la traducción de esta  página  del  manual,  envíe  un  correo
       electrónico a ⟨debian-l10n-spanish@lists.debian.org⟩.