rtnetlink(3) Library Functions Manual rtnetlink(3) NOMBRE rtnetlink - macros para manipular mensajes rtnetlink BIBLIOTECA Biblioteca Estandar C (libc, -lc) SINOPSIS #include #include #include #include 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); DESCRIPCION Todos los mensajes rtnetlink(7) estan formados por una cabecera de mensaje netlink(7) y atributos anadidos. Los atributos solo deberian ser manipulados usando las macros suministradas aqui. RTA_OK(rta, attrlen) devuelve verdadero si rta apunta a un atributo de enrutamiento valido. attrlen es la longitud actual del buffer de atributos. Cuando es falso debe asumir que no hay mas 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 despues de rta. Al llamar a esta macro se actualizara attrlen. Deberia usar RTA_OK para comprobar la validez del puntero devuelto. RTA_LENGTH(len) devuelve la longitud que se necesita para len bytes de datos mas la cabecera. RTA_SPACE(len) devuelve la cantidad de espacio que se necesitaran en el mensaje con len bytes de datos. ESTANDARES Linux. ERRORES Esta pagina de manual esta incompleta. EJEMPLOS Crear un mensaje rtnetlink para configurar la MTU de un dispositivo: #include ... 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); VEASE TAMBIEN netlink(3), netlink(7), rtnetlink(7) TRADUCCION La traduccion al espanol de esta pagina del manual fue creada por Juan Piernas y Marcos Fouces Esta traduccion es documentacion libre; lea la GNU General Public License Version 3 o posterior con respecto a las condiciones de copyright. No existe NINGUNA RESPONSABILIDAD. Si encuentra algun error en la traduccion de esta pagina del manual, envie un correo electronico a . Paginas de manual de Linux 6.06 31 Octubre 2023 rtnetlink(3)