rtnetlink(7) -- Linux man page



rtnetlink, NETLINK_ROUTE - Linux IPv4 routing socket  


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



Rtnetlink allows the kernel's routing tables to be read and altered. It is used within the kernel to communicate between various subsystems, though this usage is not documented here, and for communication with user-space programs. Network routes, ip addresses, link parameters, neighbour setups, queueing disciplines, traffic classes and packet classifiers may all be controlled through NETLINK_ROUTE sockets. It is based on netlink messages, see netlink(7) for more information.



Some rtnetlink messages have optional attributes after the initial header:

struct rtattr
    unsigned short rta_len;     /* Length of option */
    unsigned short rta_type;    /* Type of option */
    /* Data follows */ 

These attributes should be only manipulated using the RTA_* macros or libnetlink, see rtnetlink(3).



Rtnetlink consists of these message types (in addition to standard netlink messages):
Create, remove or get information about a specific network interface. These messages contain an ifinfomsg structure followed by a series of rtattr structures.

struct ifinfomsg
    unsigned char  ifi_family;  /* AF_UNSPEC */
    unsigned short ifi_type;    /* Device type */ 
    int            ifi_index;   /* Interface index   */
    unsigned int   ifi_flags;   /* Device flags  */
    unsigned int   ifi_change;  /* change mask */

ifi_flags contains the device flags, see netdevice(7); ifi_index is the unique interface index, ifi_change is reserved for future use and should be always set to 0xFFFFFFFF.

Routing attributes
value type