Section: Manual del Programador de Linux (3)
Updated: 14 mayo 1999
Index Return to Main
Contents
rtnetlink - Macros para manipular mensajes rtnetlink
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);
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.
Crear un mensaje rtnetlink para configurar la MTU de un dispositivo.
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);
Esta página de manual es escasa e incompleta.
This document was created by man2html, using
the manual pages.
Time: 06:16:25 GMT, January 22, 2005