Content-type: text/html; charset=UTF-8
rtnetlink_socket = socket(AF_NETLINK, int socket_type, NETLINK_ROUTE);
struct rtattr {
    unsigned short rta_len;    /* Length of option */
    unsigned short rta_type;   /* Type of option */
    /* Data follows */
};
These attributes should be manipulated using only the RTA_* macros or libnetlink, see rtnetlink(3).
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 (since Linux 3.7, it is possible to feed a nonzero value with the RTM_NEWLINK message, thus creating a link with the given ifindex); ifi_change is reserved for future use and should be always set to 0xFFFFFFFF.
| Routing attributes | ||
| rta_type | value type | description | 
| IFLA_UNSPEC | - | unspecified. | 
| IFLA_ADDRESS | hardware address | interface L2 address | 
| IFLA_BROADCAST | hardware address | L2 broadcast address. | 
| IFLA_IFNAME | asciiz string | Device name. | 
| IFLA_MTU | unsigned int | MTU of the device. | 
| IFLA_LINK | int | Link type. | 
| IFLA_QDISC | asciiz string | Queueing discipline. | 
| IFLA_STATS | see below | Interface Statistics. | 
The value type for IFLA_STATS is struct rtnl_link_stats (struct net_device_stats in Linux 2.4 and earlier).
struct ifaddrmsg {
    unsigned char ifa_family;    /* Address type */
    unsigned char ifa_prefixlen; /* Prefixlength of address */
    unsigned char ifa_flags;     /* Address flags */
    unsigned char ifa_scope;     /* Address scope */
    int           ifa_index;     /* Interface index */
};
ifa_family is the address family type (currently AF_INET or AF_INET6), ifa_prefixlen is the length of the address mask of the address if defined for the family (like for IPv4), ifa_scope is the address scope, ifa_index is the interface index of the interface the address is associated with. ifa_flags is a flag word of IFA_F_SECONDARY for secondary address (old alias interface), IFA_F_PERMANENT for a permanent address set by the user and other undocumented flags.
| Attributes | ||
| rta_type | value type | description | 
| IFA_UNSPEC | - | unspecified. | 
| IFA_ADDRESS | raw protocol address | interface address | 
| IFA_LOCAL | raw protocol address | local address | 
| IFA_LABEL | asciiz string | name of the interface | 
| IFA_BROADCAST | raw protocol address | broadcast address. | 
| IFA_ANYCAST | raw protocol address | anycast address | 
| IFA_CACHEINFO | struct ifa_cacheinfo | Address information. | 
struct rtmsg {
    unsigned char rtm_family;   /* Address family of route */
    unsigned char rtm_dst_len;  /* Length of destination */
    unsigned char rtm_src_len;  /* Length of source */
    unsigned char rtm_tos;      /* TOS filter */
    unsigned char rtm_table;    /* Routing table ID */
    unsigned char rtm_protocol; /* Routing protocol; see below */
    unsigned char rtm_scope;    /* See below */
    unsigned char rtm_type;     /* See below */
    unsigned int  rtm_flags;
};
| rtm_type | Route type | 
| RTN_UNSPEC | unknown route | 
| RTN_UNICAST | a gateway or direct route | 
| RTN_LOCAL | a local interface route | 
| RTN_BROADCAST | a local broadcast route (sent as a broadcast) | 
| RTN_ANYCAST | a local broadcast route (sent as a unicast) | 
| RTN_MULTICAST | a multicast route | 
| RTN_BLACKHOLE | a packet dropping route | 
| RTN_UNREACHABLE | an unreachable destination | 
| RTN_PROHIBIT | a packet rejection route | 
| RTN_THROW | continue routing lookup in another table | 
| RTN_NAT | a network address translation rule | 
| RTN_XRESOLVE | refer to an external resolver (not implemented) | 
| rtm_protocol | Route origin. | 
| RTPROT_UNSPEC | unknown | 
| RTPROT_REDIRECT | by an ICMP redirect (currently unused) | 
| RTPROT_KERNEL | by the kernel | 
| RTPROT_BOOT | during boot | 
| RTPROT_STATIC | by the administrator | 
Values larger than RTPROT_STATIC are not interpreted by the kernel, they are just for user information. They may be used to tag the source of a routing information or to distinguish between multiple routing daemons. See <linux/rtnetlink.h> for the routing daemon identifiers which are already assigned.
rtm_scope is the distance to the destination:
| RT_SCOPE_UNIVERSE | global route | 
| RT_SCOPE_SITE | interior route in the local autonomous system | 
| RT_SCOPE_LINK | route on this link | 
| RT_SCOPE_HOST | route on the local host | 
| RT_SCOPE_NOWHERE | destination doesn't exist | 
The values between RT_SCOPE_UNIVERSE and RT_SCOPE_SITE are available to the user.
The rtm_flags have the following meanings:
| RTM_F_NOTIFY | if the route changes, notify the user via rtnetlink | 
| RTM_F_CLONED | route is cloned from another route | 
| RTM_F_EQUALIZE | a multipath equalizer (not yet implemented) | 
rtm_table specifies the routing table
| RT_TABLE_UNSPEC | an unspecified routing table | 
| RT_TABLE_DEFAULT | the default table | 
| RT_TABLE_MAIN | the main table | 
| RT_TABLE_LOCAL | the local table | 
The user may assign arbitrary values between RT_TABLE_UNSPEC and RT_TABLE_DEFAULT.
| Attributes | ||
| rta_type | value type | description | 
| RTA_UNSPEC | - | ignored. | 
| RTA_DST | protocol address | Route destination address. | 
| RTA_SRC | protocol address | Route source address. | 
| RTA_IIF | int | Input interface index. | 
| RTA_OIF | int | Output interface index. | 
| RTA_GATEWAY | protocol address | The gateway of the route | 
| RTA_PRIORITY | int | Priority of route. | 
| RTA_PREFSRC | ||
| RTA_METRICS | int | Route metric | 
| RTA_MULTIPATH | ||
| RTA_PROTOINFO | ||
| RTA_FLOW | ||
| RTA_CACHEINFO | ||
Fill these values in!
struct ndmsg {
    unsigned char ndm_family;
    int           ndm_ifindex;  /* Interface index */
    __u16         ndm_state;    /* State */
    __u8          ndm_flags;    /* Flags */
    __u8          ndm_type;
};
struct nda_cacheinfo {
    __u32         ndm_confirmed;
    __u32         ndm_used;
    __u32         ndm_updated;
    __u32         ndm_refcnt;
};
ndm_state is a bit mask of the following states:
| NUD_INCOMPLETE | a currently resolving cache entry | 
| NUD_REACHABLE | a confirmed working cache entry | 
| NUD_STALE | an expired cache entry | 
| NUD_DELAY | an entry waiting for a timer | 
| NUD_PROBE | a cache entry that is currently reprobed | 
| NUD_FAILED | an invalid cache entry | 
| NUD_NOARP | a device with no destination cache | 
| NUD_PERMANENT | a static entry | 
Valid ndm_flags are:
| NTF_PROXY | a proxy arp entry | 
| NTF_ROUTER | an IPv6 router | 
The rtattr struct has the following meanings for the rta_type field:
| NDA_UNSPEC | unknown type | 
| NDA_DST | a neighbor cache n/w layer destination address | 
| NDA_LLADDR | a neighbor cache link layer address | 
| NDA_CACHEINFO | cache statistics. | 
If the rta_type field is NDA_CACHEINFO, then a struct nda_cacheinfo header follows
struct tcmsg {
    unsigned char    tcm_family;
    int              tcm_ifindex;   /* interface index */
    __u32            tcm_handle;    /* Qdisc handle */
    __u32            tcm_parent;    /* Parent qdisc */
    __u32            tcm_info;
};
| Attributes | ||
| rta_type | value type | Description | 
| TCA_UNSPEC | - | unspecified | 
| TCA_KIND | asciiz string | Name of queueing discipline | 
| TCA_OPTIONS | byte sequence | Qdisc-specific options follow | 
| TCA_STATS | struct tc_stats | Qdisc statistics. | 
| TCA_XSTATS | qdisc-specific | Module-specific statistics. | 
| TCA_RATE | struct tc_estimator | Rate limit. | 
In addition, various other qdisc-module-specific attributes are allowed. For more information see the appropriate include files.