Pegasus InfoCorp: Web site design and web software development company

RTNETLINK (3)

Macros to manipuate rtnetlink messages

SYNOPSIS

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

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

DESCRIPTION

    All rtnetlink (7) messages consist of a netlink (7) message header and appended attributes. The attributes should be only manipulated using the macros provided here.

    RTA_OK( rta , attrlen ) returns true if rta points to a valid routing attribute; attrlen is the running length of the attribute buffer. When not true then you must assume there are no more attributes in the message, even if attrlen is non-zero. RTA_DATA( rta ) returns a pointer to the start of this attribute's data. RTA_PAYLOAD( rta ) returns the length of this attribute's data. RTA_NEXT( rta , attrlen ) gets the next attribute after rta . Calling this macro will update attrlen . You should use RTA_OK to check for the validity of the returned pointer. RTA_LENGTH( len ) returns the length which is required for len bytes of data plus the header. RTA_SPACE( len ) returns the amount of space which will be needed in the message with len bytes of data.

EXAMPLE