oracular (3) rtnetlink.3.gz

Provided by: manpages-es-dev_4.23.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

       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⟩.