10633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#ifndef __LINUX_RTNETLINK_H
20633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define __LINUX_RTNETLINK_H
30633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
467881151423f1173ddc31e4f27d736044c2c9a96Stephen Hemminger#include <linux/types.h>
50633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#include <linux/netlink.h>
6ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger#include <linux/if_link.h>
75a8ba228620604880f47d9087d7c5cdbebb12ffdStephen Hemminger#include <linux/if_addr.h>
85a8ba228620604880f47d9087d7c5cdbebb12ffdStephen Hemminger#include <linux/neighbour.h>
90633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
10b4397f580e6eb3f20e8c433833be20283b44a3bcStephen Hemminger/* rtnetlink families. Values up to 127 are reserved for real address
11b4397f580e6eb3f20e8c433833be20283b44a3bcStephen Hemminger * families, values above 128 may be used arbitrarily.
12b4397f580e6eb3f20e8c433833be20283b44a3bcStephen Hemminger */
13b4397f580e6eb3f20e8c433833be20283b44a3bcStephen Hemminger#define RTNL_FAMILY_IPMR		128
14b4397f580e6eb3f20e8c433833be20283b44a3bcStephen Hemminger#define RTNL_FAMILY_IP6MR		129
15b4397f580e6eb3f20e8c433833be20283b44a3bcStephen Hemminger#define RTNL_FAMILY_MAX			129
16b4397f580e6eb3f20e8c433833be20283b44a3bcStephen Hemminger
170633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger/****
180633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger *		Routing/neighbour discovery messages.
190633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger ****/
200633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
210633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger/* Types of messages */
220633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
23091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemmingerenum {
24091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger	RTM_BASE	= 16,
25091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger#define RTM_BASE	RTM_BASE
26091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger
27091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger	RTM_NEWLINK	= 16,
28091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger#define RTM_NEWLINK	RTM_NEWLINK
29091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger	RTM_DELLINK,
30091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger#define RTM_DELLINK	RTM_DELLINK
31091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger	RTM_GETLINK,
32091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger#define RTM_GETLINK	RTM_GETLINK
33091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger	RTM_SETLINK,
34091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger#define RTM_SETLINK	RTM_SETLINK
35091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger
36091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger	RTM_NEWADDR	= 20,
37091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger#define RTM_NEWADDR	RTM_NEWADDR
38091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger	RTM_DELADDR,
39091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger#define RTM_DELADDR	RTM_DELADDR
40091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger	RTM_GETADDR,
41091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger#define RTM_GETADDR	RTM_GETADDR
42091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger
43091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger	RTM_NEWROUTE	= 24,
44091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger#define RTM_NEWROUTE	RTM_NEWROUTE
45091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger	RTM_DELROUTE,
46091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger#define RTM_DELROUTE	RTM_DELROUTE
47091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger	RTM_GETROUTE,
48091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger#define RTM_GETROUTE	RTM_GETROUTE
49091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger
50091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger	RTM_NEWNEIGH	= 28,
51091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger#define RTM_NEWNEIGH	RTM_NEWNEIGH
52091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger	RTM_DELNEIGH,
53091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger#define RTM_DELNEIGH	RTM_DELNEIGH
54091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger	RTM_GETNEIGH,
55091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger#define RTM_GETNEIGH	RTM_GETNEIGH
56091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger
57091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger	RTM_NEWRULE	= 32,
58091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger#define RTM_NEWRULE	RTM_NEWRULE
59091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger	RTM_DELRULE,
60091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger#define RTM_DELRULE	RTM_DELRULE
61091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger	RTM_GETRULE,
62091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger#define RTM_GETRULE	RTM_GETRULE
63091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger
64091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger	RTM_NEWQDISC	= 36,
65091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger#define RTM_NEWQDISC	RTM_NEWQDISC
66091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger	RTM_DELQDISC,
67091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger#define RTM_DELQDISC	RTM_DELQDISC
68091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger	RTM_GETQDISC,
69091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger#define RTM_GETQDISC	RTM_GETQDISC
70091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger
71091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger	RTM_NEWTCLASS	= 40,
72091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger#define RTM_NEWTCLASS	RTM_NEWTCLASS
73091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger	RTM_DELTCLASS,
74091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger#define RTM_DELTCLASS	RTM_DELTCLASS
75091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger	RTM_GETTCLASS,
76091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger#define RTM_GETTCLASS	RTM_GETTCLASS
77091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger
78091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger	RTM_NEWTFILTER	= 44,
79091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger#define RTM_NEWTFILTER	RTM_NEWTFILTER
80091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger	RTM_DELTFILTER,
81091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger#define RTM_DELTFILTER	RTM_DELTFILTER
82091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger	RTM_GETTFILTER,
83091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger#define RTM_GETTFILTER	RTM_GETTFILTER
84091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger
85091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger	RTM_NEWACTION	= 48,
86091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger#define RTM_NEWACTION   RTM_NEWACTION
87091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger	RTM_DELACTION,
88091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger#define RTM_DELACTION   RTM_DELACTION
89091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger	RTM_GETACTION,
90091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger#define RTM_GETACTION   RTM_GETACTION
91091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger
92091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger	RTM_NEWPREFIX	= 52,
93091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger#define RTM_NEWPREFIX	RTM_NEWPREFIX
94091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger
95091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger	RTM_GETMULTICAST = 58,
96091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger#define RTM_GETMULTICAST RTM_GETMULTICAST
97091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger
98091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger	RTM_GETANYCAST	= 62,
99091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger#define RTM_GETANYCAST	RTM_GETANYCAST
100091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger
101ea8fc1047d2b88ae1d123e3f79dbffbc2a3fa70cshemminger	RTM_NEWNEIGHTBL	= 64,
102ea8fc1047d2b88ae1d123e3f79dbffbc2a3fa70cshemminger#define RTM_NEWNEIGHTBL	RTM_NEWNEIGHTBL
103ea8fc1047d2b88ae1d123e3f79dbffbc2a3fa70cshemminger	RTM_GETNEIGHTBL	= 66,
104ea8fc1047d2b88ae1d123e3f79dbffbc2a3fa70cshemminger#define RTM_GETNEIGHTBL	RTM_GETNEIGHTBL
105ea8fc1047d2b88ae1d123e3f79dbffbc2a3fa70cshemminger	RTM_SETNEIGHTBL,
106ea8fc1047d2b88ae1d123e3f79dbffbc2a3fa70cshemminger#define RTM_SETNEIGHTBL	RTM_SETNEIGHTBL
107ea8fc1047d2b88ae1d123e3f79dbffbc2a3fa70cshemminger
1085472ac6f9fab8632b89da31df56419c8423b020dStephen Hemminger	RTM_NEWNDUSEROPT = 68,
1095472ac6f9fab8632b89da31df56419c8423b020dStephen Hemminger#define RTM_NEWNDUSEROPT RTM_NEWNDUSEROPT
1105472ac6f9fab8632b89da31df56419c8423b020dStephen Hemminger
11170e6e38aadab8cf5b619e0a691d6103fcf5fac48Stephen Hemminger	RTM_NEWADDRLABEL = 72,
11270e6e38aadab8cf5b619e0a691d6103fcf5fac48Stephen Hemminger#define RTM_NEWADDRLABEL RTM_NEWADDRLABEL
11370e6e38aadab8cf5b619e0a691d6103fcf5fac48Stephen Hemminger	RTM_DELADDRLABEL,
1148007bfb5adc596030a92607c9c2ef9dc053cf39fStephen Hemminger#define RTM_DELADDRLABEL RTM_DELADDRLABEL
11570e6e38aadab8cf5b619e0a691d6103fcf5fac48Stephen Hemminger	RTM_GETADDRLABEL,
11670e6e38aadab8cf5b619e0a691d6103fcf5fac48Stephen Hemminger#define RTM_GETADDRLABEL RTM_GETADDRLABEL
11770e6e38aadab8cf5b619e0a691d6103fcf5fac48Stephen Hemminger
11867881151423f1173ddc31e4f27d736044c2c9a96Stephen Hemminger	RTM_GETDCB = 78,
11967881151423f1173ddc31e4f27d736044c2c9a96Stephen Hemminger#define RTM_GETDCB RTM_GETDCB
12067881151423f1173ddc31e4f27d736044c2c9a96Stephen Hemminger	RTM_SETDCB,
12167881151423f1173ddc31e4f27d736044c2c9a96Stephen Hemminger#define RTM_SETDCB RTM_SETDCB
12267881151423f1173ddc31e4f27d736044c2c9a96Stephen Hemminger
123ea8fc1047d2b88ae1d123e3f79dbffbc2a3fa70cshemminger	__RTM_MAX,
124ea8fc1047d2b88ae1d123e3f79dbffbc2a3fa70cshemminger#define RTM_MAX		(((__RTM_MAX + 3) & ~3) - 1)
125091ed219973108c83f1947f8d3b71018e3f1567eosdl.net!shemminger};
1260633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
127ea8fc1047d2b88ae1d123e3f79dbffbc2a3fa70cshemminger#define RTM_NR_MSGTYPES	(RTM_MAX + 1 - RTM_BASE)
128ea8fc1047d2b88ae1d123e3f79dbffbc2a3fa70cshemminger#define RTM_NR_FAMILIES	(RTM_NR_MSGTYPES >> 2)
129ea8fc1047d2b88ae1d123e3f79dbffbc2a3fa70cshemminger#define RTM_FAM(cmd)	(((cmd) - RTM_BASE) >> 2)
130ea8fc1047d2b88ae1d123e3f79dbffbc2a3fa70cshemminger
1310633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger/*
1320633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger   Generic structure for encapsulation of optional route information.
1330633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger   It is reminiscent of sockaddr, but with sa_family replaced
1340633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger   with attribute type.
1350633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger */
1360633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
137ab322673298bd0b8927cdd9d11f3d36af5941b93Stephen Hemmingerstruct rtattr {
1380633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	unsigned short	rta_len;
1390633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	unsigned short	rta_type;
1400633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger};
1410633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
1420633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger/* Macros to handle rtattributes */
1430633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
1440633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTA_ALIGNTO	4
1450633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTA_ALIGN(len) ( ((len)+RTA_ALIGNTO-1) & ~(RTA_ALIGNTO-1) )
1460633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTA_OK(rta,len) ((len) >= (int)sizeof(struct rtattr) && \
1470633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger			 (rta)->rta_len >= sizeof(struct rtattr) && \
1480633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger			 (rta)->rta_len <= (len))
1490633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTA_NEXT(rta,attrlen)	((attrlen) -= RTA_ALIGN((rta)->rta_len), \
1500633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger				 (struct rtattr*)(((char*)(rta)) + RTA_ALIGN((rta)->rta_len)))
1510633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTA_LENGTH(len)	(RTA_ALIGN(sizeof(struct rtattr)) + (len))
1520633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTA_SPACE(len)	RTA_ALIGN(RTA_LENGTH(len))
1530633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTA_DATA(rta)   ((void*)(((char*)(rta)) + RTA_LENGTH(0)))
1540633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTA_PAYLOAD(rta) ((int)((rta)->rta_len) - RTA_LENGTH(0))
1550633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
1560633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
1570633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
1580633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
1590633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger/******************************************************************************
1600633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger *		Definitions used in routing table administration.
1610633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger ****/
1620633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
163ab322673298bd0b8927cdd9d11f3d36af5941b93Stephen Hemmingerstruct rtmsg {
1640633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	unsigned char		rtm_family;
1650633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	unsigned char		rtm_dst_len;
1660633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	unsigned char		rtm_src_len;
1670633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	unsigned char		rtm_tos;
1680633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
1690633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	unsigned char		rtm_table;	/* Routing table id */
1700633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	unsigned char		rtm_protocol;	/* Routing protocol; see below	*/
1710633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	unsigned char		rtm_scope;	/* See below */
1720633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	unsigned char		rtm_type;	/* See below	*/
1730633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
1740633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	unsigned		rtm_flags;
1750633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger};
1760633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
1770633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger/* rtm_type */
1780633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
179ab322673298bd0b8927cdd9d11f3d36af5941b93Stephen Hemmingerenum {
1800633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RTN_UNSPEC,
1810633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RTN_UNICAST,		/* Gateway or direct route	*/
1820633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RTN_LOCAL,		/* Accept locally		*/
1830633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RTN_BROADCAST,		/* Accept locally as broadcast,
1840633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger				   send as broadcast */
1850633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RTN_ANYCAST,		/* Accept locally as broadcast,
1860633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger				   but send as unicast */
1870633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RTN_MULTICAST,		/* Multicast route		*/
1880633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RTN_BLACKHOLE,		/* Drop				*/
1890633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RTN_UNREACHABLE,	/* Destination is unreachable   */
1900633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RTN_PROHIBIT,		/* Administratively prohibited	*/
1910633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RTN_THROW,		/* Not in this table		*/
1920633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RTN_NAT,		/* Translate this address	*/
1930633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RTN_XRESOLVE,		/* Use external resolver	*/
1940633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	__RTN_MAX
1950633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger};
1960633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
1970633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTN_MAX (__RTN_MAX - 1)
1980633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
1990633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
2000633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger/* rtm_protocol */
2010633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
2020633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTPROT_UNSPEC	0
2030633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTPROT_REDIRECT	1	/* Route installed by ICMP redirects;
2040633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger				   not used by current IPv4 */
2050633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTPROT_KERNEL	2	/* Route installed by kernel		*/
2060633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTPROT_BOOT	3	/* Route installed during boot		*/
2070633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTPROT_STATIC	4	/* Route installed by administrator	*/
2080633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
2090633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger/* Values of protocol >= RTPROT_STATIC are not interpreted by kernel;
2100633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger   they are just passed from user and back as is.
2110633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger   It will be used by hypothetical multiple routing daemons.
2120633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger   Note that protocol values should be standardized in order to
2130633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger   avoid conflicts.
2140633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger */
2150633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
2160633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTPROT_GATED	8	/* Apparently, GateD */
2170633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTPROT_RA	9	/* RDISC/ND router advertisements */
2180633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTPROT_MRT	10	/* Merit MRT */
2190633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTPROT_ZEBRA	11	/* Zebra */
2200633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTPROT_BIRD	12	/* BIRD */
2210633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTPROT_DNROUTED	13	/* DECnet routing daemon */
2220633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTPROT_XORP	14	/* XORP */
22340b6c62c6373a4dd4191078fdc6a2994792b2cb6shemminger#define RTPROT_NTK	15	/* Netsukuku */
22467881151423f1173ddc31e4f27d736044c2c9a96Stephen Hemminger#define RTPROT_DHCP	16      /* DHCP client */
2250633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
2260633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger/* rtm_scope
2270633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
2280633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger   Really it is not scope, but sort of distance to the destination.
2290633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger   NOWHERE are reserved for not existing destinations, HOST is our
2300633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger   local addresses, LINK are destinations, located on directly attached
2310633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger   link and UNIVERSE is everywhere in the Universe.
2320633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
2330633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger   Intermediate values are also possible f.e. interior routes
2340633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger   could be assigned a value between UNIVERSE and LINK.
2350633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger*/
2360633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
237ab322673298bd0b8927cdd9d11f3d36af5941b93Stephen Hemmingerenum rt_scope_t {
2380633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RT_SCOPE_UNIVERSE=0,
2390633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger/* User defined values  */
2400633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RT_SCOPE_SITE=200,
2410633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RT_SCOPE_LINK=253,
2420633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RT_SCOPE_HOST=254,
2430633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RT_SCOPE_NOWHERE=255
2440633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger};
2450633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
2460633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger/* rtm_flags */
2470633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
2480633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTM_F_NOTIFY		0x100	/* Notify user of route change	*/
2490633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTM_F_CLONED		0x200	/* This route is cloned		*/
2500633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTM_F_EQUALIZE		0x400	/* Multipath equalizer: NI	*/
2510633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTM_F_PREFIX		0x800	/* Prefix addresses		*/
2520633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
2530633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger/* Reserved table identifiers */
2540633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
255ab322673298bd0b8927cdd9d11f3d36af5941b93Stephen Hemmingerenum rt_class_t {
2560633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RT_TABLE_UNSPEC=0,
2570633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger/* User defined values */
2583ea2fb985f3aa979a2b270d01fa651a5ef814464Stephen Hemminger	RT_TABLE_COMPAT=252,
2590633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RT_TABLE_DEFAULT=253,
2600633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RT_TABLE_MAIN=254,
2610633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RT_TABLE_LOCAL=255,
262ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger	RT_TABLE_MAX=0xFFFFFFFF
2630633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger};
2640633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
2650633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
2660633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger/* Routing message attributes */
2670633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
268ab322673298bd0b8927cdd9d11f3d36af5941b93Stephen Hemmingerenum rtattr_type_t {
2690633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RTA_UNSPEC,
2700633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RTA_DST,
2710633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RTA_SRC,
2720633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RTA_IIF,
2730633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RTA_OIF,
2740633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RTA_GATEWAY,
2750633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RTA_PRIORITY,
2760633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RTA_PREFSRC,
2770633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RTA_METRICS,
2780633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RTA_MULTIPATH,
2793ea2fb985f3aa979a2b270d01fa651a5ef814464Stephen Hemminger	RTA_PROTOINFO, /* no longer used */
2800633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RTA_FLOW,
2810633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RTA_CACHEINFO,
2823ea2fb985f3aa979a2b270d01fa651a5ef814464Stephen Hemminger	RTA_SESSION, /* no longer used */
283a6ffa8b00d60c1fff5d197575c2e5a896e2e15b0Stephen Hemminger	RTA_MP_ALGO, /* no longer used */
28434e9564753075c756f96597e7aa57f969a403aafPatrick McHardy	RTA_TABLE,
28504a9fc0a50f9a7677f22c9746cf2f4aadc2c8257Stephen Hemminger	RTA_MARK,
286b7a3df0f3c56c10587e926307daaa87fc3b854bfLorenzo Colitti	RTA_MFC_STATS, /* not used - backported from the future */
287b7a3df0f3c56c10587e926307daaa87fc3b854bfLorenzo Colitti	RTA_UID,
2880633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	__RTA_MAX
2890633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger};
2900633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
2910633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTA_MAX (__RTA_MAX - 1)
2920633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
2930633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTM_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct rtmsg))))
2940633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTM_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct rtmsg))
2950633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
2960633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger/* RTM_MULTIPATH --- array of struct rtnexthop.
2970633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger *
2980633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger * "struct rtnexthop" describes all necessary nexthop information,
2990633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger * i.e. parameters of path to a destination via this nexthop.
3000633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger *
3010633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger * At the moment it is impossible to set different prefsrc, mtu, window
3020633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger * and rtt for different paths from multipath.
3030633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger */
3040633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
305ab322673298bd0b8927cdd9d11f3d36af5941b93Stephen Hemmingerstruct rtnexthop {
3060633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	unsigned short		rtnh_len;
3070633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	unsigned char		rtnh_flags;
3080633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	unsigned char		rtnh_hops;
3090633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	int			rtnh_ifindex;
3100633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger};
3110633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
3120633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger/* rtnh_flags */
3130633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
3140633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTNH_F_DEAD		1	/* Nexthop is dead (used by multipath)	*/
3150633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTNH_F_PERVASIVE	2	/* Do recursive gateway lookup	*/
3160633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTNH_F_ONLINK		4	/* Gateway is forced on link	*/
3170633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
3180633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger/* Macros to handle hexthops */
3190633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
3200633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTNH_ALIGNTO	4
3210633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTNH_ALIGN(len) ( ((len)+RTNH_ALIGNTO-1) & ~(RTNH_ALIGNTO-1) )
3220633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTNH_OK(rtnh,len) ((rtnh)->rtnh_len >= sizeof(struct rtnexthop) && \
3230633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger			   ((int)(rtnh)->rtnh_len) <= (len))
3240633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTNH_NEXT(rtnh)	((struct rtnexthop*)(((char*)(rtnh)) + RTNH_ALIGN((rtnh)->rtnh_len)))
3250633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTNH_LENGTH(len) (RTNH_ALIGN(sizeof(struct rtnexthop)) + (len))
3260633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTNH_SPACE(len)	RTNH_ALIGN(RTNH_LENGTH(len))
3270633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTNH_DATA(rtnh)   ((struct rtattr*)(((char*)(rtnh)) + RTNH_LENGTH(0)))
3280633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
3290633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger/* RTM_CACHEINFO */
3300633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
331ab322673298bd0b8927cdd9d11f3d36af5941b93Stephen Hemmingerstruct rta_cacheinfo {
3320633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	__u32	rta_clntref;
3330633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	__u32	rta_lastuse;
3340633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	__s32	rta_expires;
3350633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	__u32	rta_error;
3360633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	__u32	rta_used;
3370633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
3380633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTNETLINK_HAVE_PEERINFO 1
3390633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	__u32	rta_id;
3400633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	__u32	rta_ts;
3410633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	__u32	rta_tsage;
3420633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger};
3430633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
3440633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger/* RTM_METRICS --- array of struct rtattr with types of RTAX_* */
3450633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
346ab322673298bd0b8927cdd9d11f3d36af5941b93Stephen Hemmingerenum {
3470633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RTAX_UNSPEC,
3480633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTAX_UNSPEC RTAX_UNSPEC
3490633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RTAX_LOCK,
3500633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTAX_LOCK RTAX_LOCK
3510633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RTAX_MTU,
3520633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTAX_MTU RTAX_MTU
3530633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RTAX_WINDOW,
3540633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTAX_WINDOW RTAX_WINDOW
3550633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RTAX_RTT,
3560633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTAX_RTT RTAX_RTT
3570633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RTAX_RTTVAR,
3580633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTAX_RTTVAR RTAX_RTTVAR
3590633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RTAX_SSTHRESH,
3600633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTAX_SSTHRESH RTAX_SSTHRESH
3610633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RTAX_CWND,
3620633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTAX_CWND RTAX_CWND
3630633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RTAX_ADVMSS,
3640633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTAX_ADVMSS RTAX_ADVMSS
3650633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RTAX_REORDERING,
3660633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTAX_REORDERING RTAX_REORDERING
3670633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RTAX_HOPLIMIT,
3680633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTAX_HOPLIMIT RTAX_HOPLIMIT
3690633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RTAX_INITCWND,
3700633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTAX_INITCWND RTAX_INITCWND
3710633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	RTAX_FEATURES,
3720633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTAX_FEATURES RTAX_FEATURES
373dfd26e1c4c6a1cae65adb4ca473efb32d6d9297bStephen Hemminger	RTAX_RTO_MIN,
374dfd26e1c4c6a1cae65adb4ca473efb32d6d9297bStephen Hemminger#define RTAX_RTO_MIN RTAX_RTO_MIN
3758ecdcce08319d0e39b0d32c1d17db3f69d85a35cStephen Hemminger	RTAX_INITRWND,
3768ecdcce08319d0e39b0d32c1d17db3f69d85a35cStephen Hemminger#define RTAX_INITRWND RTAX_INITRWND
3770633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	__RTAX_MAX
3780633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger};
3790633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
3800633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTAX_MAX (__RTAX_MAX - 1)
3810633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
3820633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTAX_FEATURE_ECN	0x00000001
3830633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTAX_FEATURE_SACK	0x00000002
3840633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTAX_FEATURE_TIMESTAMP	0x00000004
385206a04411c9dec5651243efe4c3d0c237f4e780dosdl.net!shemminger#define RTAX_FEATURE_ALLFRAG	0x00000008
3860633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
387ab322673298bd0b8927cdd9d11f3d36af5941b93Stephen Hemmingerstruct rta_session {
3880633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	__u8	proto;
3896864c1e7890c65dd2ee037809f772790b04792b4shemminger	__u8	pad1;
3906864c1e7890c65dd2ee037809f772790b04792b4shemminger	__u16	pad2;
3910633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
3920633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	union {
3930633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger		struct {
3940633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger			__u16	sport;
3950633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger			__u16	dport;
3960633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger		} ports;
3970633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
3980633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger		struct {
3990633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger			__u8	type;
4000633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger			__u8	code;
4010633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger			__u16	ident;
4020633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger		} icmpt;
4030633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
4040633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger		__u32		spi;
4050633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	} u;
4060633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger};
4070633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
4080633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger/****
4090633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger *		General form of address family dependent message.
4100633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger ****/
4110633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
412ab322673298bd0b8927cdd9d11f3d36af5941b93Stephen Hemmingerstruct rtgenmsg {
4130633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	unsigned char		rtgen_family;
4140633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger};
4150633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
4160633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger/*****************************************************************
4170633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger *		Link layer specific messages.
4180633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger ****/
4190633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
4200633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger/* struct ifinfomsg
4210633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger * passes link level specific information, not dependent
4220633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger * on network protocol.
4230633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger */
4240633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
425ab322673298bd0b8927cdd9d11f3d36af5941b93Stephen Hemmingerstruct ifinfomsg {
4260633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	unsigned char	ifi_family;
4270633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	unsigned char	__ifi_pad;
4280633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	unsigned short	ifi_type;		/* ARPHRD_* */
4290633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	int		ifi_index;		/* Link index	*/
4300633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	unsigned	ifi_flags;		/* IFF_* flags	*/
4310633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	unsigned	ifi_change;		/* IFF_* change mask */
4320633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger};
4330633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
4340633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger/********************************************************************
4350633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger *		prefix information
4360633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger ****/
4370633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
438ab322673298bd0b8927cdd9d11f3d36af5941b93Stephen Hemmingerstruct prefixmsg {
4390633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	unsigned char	prefix_family;
4406864c1e7890c65dd2ee037809f772790b04792b4shemminger	unsigned char	prefix_pad1;
4416864c1e7890c65dd2ee037809f772790b04792b4shemminger	unsigned short	prefix_pad2;
4420633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	int		prefix_ifindex;
4430633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	unsigned char	prefix_type;
4440633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	unsigned char	prefix_len;
4450633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	unsigned char	prefix_flags;
4466864c1e7890c65dd2ee037809f772790b04792b4shemminger	unsigned char	prefix_pad3;
4470633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger};
4480633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
4490633baa17231b777e75b813439c237e3de380cc8osdl.net!shemmingerenum
4500633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger{
4510633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	PREFIX_UNSPEC,
4520633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	PREFIX_ADDRESS,
4530633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	PREFIX_CACHEINFO,
4540633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	__PREFIX_MAX
4550633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger};
4560633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
4570633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define PREFIX_MAX	(__PREFIX_MAX - 1)
4580633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
459ab322673298bd0b8927cdd9d11f3d36af5941b93Stephen Hemmingerstruct prefix_cacheinfo {
4600633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	__u32	preferred_time;
4610633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	__u32	valid_time;
4620633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger};
4630633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
4640633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
4650633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger/*****************************************************************
4660633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger *		Traffic control messages.
4670633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger ****/
4680633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
469ab322673298bd0b8927cdd9d11f3d36af5941b93Stephen Hemmingerstruct tcmsg {
4700633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	unsigned char	tcm_family;
4710633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	unsigned char	tcm__pad1;
4720633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	unsigned short	tcm__pad2;
4730633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	int		tcm_ifindex;
4740633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	__u32		tcm_handle;
4750633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	__u32		tcm_parent;
4760633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	__u32		tcm_info;
4770633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger};
4780633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
479ab322673298bd0b8927cdd9d11f3d36af5941b93Stephen Hemmingerenum {
4800633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	TCA_UNSPEC,
4810633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	TCA_KIND,
4820633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	TCA_OPTIONS,
4830633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	TCA_STATS,
4840633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	TCA_XSTATS,
4850633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	TCA_RATE,
4860633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	TCA_FCNT,
487e5879dc603ca2e9f27ca6d754fdf5e20f8072344ch[shemminger]!tgraf	TCA_STATS2,
48819ecc16d72bb5767b1427a7579e5884813f2c9e8Stephen Hemminger	TCA_STAB,
4890633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	__TCA_MAX
4900633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger};
4910633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
4920633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define TCA_MAX (__TCA_MAX - 1)
4930633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
4940633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define TCA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcmsg))))
4950633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define TCA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcmsg))
4960633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
4975472ac6f9fab8632b89da31df56419c8423b020dStephen Hemminger/********************************************************************
4985472ac6f9fab8632b89da31df56419c8423b020dStephen Hemminger *		Neighbor Discovery userland options
4995472ac6f9fab8632b89da31df56419c8423b020dStephen Hemminger ****/
5005472ac6f9fab8632b89da31df56419c8423b020dStephen Hemminger
501ab322673298bd0b8927cdd9d11f3d36af5941b93Stephen Hemmingerstruct nduseroptmsg {
5025472ac6f9fab8632b89da31df56419c8423b020dStephen Hemminger	unsigned char	nduseropt_family;
5035472ac6f9fab8632b89da31df56419c8423b020dStephen Hemminger	unsigned char	nduseropt_pad1;
5045472ac6f9fab8632b89da31df56419c8423b020dStephen Hemminger	unsigned short	nduseropt_opts_len;	/* Total length of options */
5055472ac6f9fab8632b89da31df56419c8423b020dStephen Hemminger	int		nduseropt_ifindex;
5065472ac6f9fab8632b89da31df56419c8423b020dStephen Hemminger	__u8		nduseropt_icmp_type;
5075472ac6f9fab8632b89da31df56419c8423b020dStephen Hemminger	__u8		nduseropt_icmp_code;
5085472ac6f9fab8632b89da31df56419c8423b020dStephen Hemminger	unsigned short	nduseropt_pad2;
5095472ac6f9fab8632b89da31df56419c8423b020dStephen Hemminger	unsigned int	nduseropt_pad3;
5105472ac6f9fab8632b89da31df56419c8423b020dStephen Hemminger	/* Followed by one or more ND options */
5115472ac6f9fab8632b89da31df56419c8423b020dStephen Hemminger};
5125472ac6f9fab8632b89da31df56419c8423b020dStephen Hemminger
513ab322673298bd0b8927cdd9d11f3d36af5941b93Stephen Hemmingerenum {
5145472ac6f9fab8632b89da31df56419c8423b020dStephen Hemminger	NDUSEROPT_UNSPEC,
5155472ac6f9fab8632b89da31df56419c8423b020dStephen Hemminger	NDUSEROPT_SRCADDR,
5165472ac6f9fab8632b89da31df56419c8423b020dStephen Hemminger	__NDUSEROPT_MAX
5175472ac6f9fab8632b89da31df56419c8423b020dStephen Hemminger};
5185472ac6f9fab8632b89da31df56419c8423b020dStephen Hemminger
5195472ac6f9fab8632b89da31df56419c8423b020dStephen Hemminger#define NDUSEROPT_MAX	(__NDUSEROPT_MAX - 1)
5205472ac6f9fab8632b89da31df56419c8423b020dStephen Hemminger
521351efcde4e62967362a10b29f3b701cfecd7cdfcshemminger/* RTnetlink multicast groups - backwards compatibility for userspace */
5220633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTMGRP_LINK		1
5230633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTMGRP_NOTIFY		2
5240633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTMGRP_NEIGH		4
5250633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTMGRP_TC		8
5260633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
5270633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTMGRP_IPV4_IFADDR	0x10
5280633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTMGRP_IPV4_MROUTE	0x20
5290633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTMGRP_IPV4_ROUTE	0x40
5308f8a36487119a3cd1afe86a9649704aca088567bStephen Hemminger#define RTMGRP_IPV4_RULE	0x80
5310633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
5320633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTMGRP_IPV6_IFADDR	0x100
5330633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTMGRP_IPV6_MROUTE	0x200
5340633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTMGRP_IPV6_ROUTE	0x400
5350633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTMGRP_IPV6_IFINFO	0x800
5360633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
5370633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTMGRP_DECnet_IFADDR    0x1000
5380633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTMGRP_DECnet_ROUTE     0x4000
5390633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
5400633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define RTMGRP_IPV6_PREFIX	0x20000
5410633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
542351efcde4e62967362a10b29f3b701cfecd7cdfcshemminger/* RTnetlink multicast groups */
543351efcde4e62967362a10b29f3b701cfecd7cdfcshemmingerenum rtnetlink_groups {
544351efcde4e62967362a10b29f3b701cfecd7cdfcshemminger	RTNLGRP_NONE,
545351efcde4e62967362a10b29f3b701cfecd7cdfcshemminger#define RTNLGRP_NONE		RTNLGRP_NONE
546351efcde4e62967362a10b29f3b701cfecd7cdfcshemminger	RTNLGRP_LINK,
547351efcde4e62967362a10b29f3b701cfecd7cdfcshemminger#define RTNLGRP_LINK		RTNLGRP_LINK
548351efcde4e62967362a10b29f3b701cfecd7cdfcshemminger	RTNLGRP_NOTIFY,
549351efcde4e62967362a10b29f3b701cfecd7cdfcshemminger#define RTNLGRP_NOTIFY		RTNLGRP_NOTIFY
550351efcde4e62967362a10b29f3b701cfecd7cdfcshemminger	RTNLGRP_NEIGH,
551351efcde4e62967362a10b29f3b701cfecd7cdfcshemminger#define RTNLGRP_NEIGH		RTNLGRP_NEIGH
552351efcde4e62967362a10b29f3b701cfecd7cdfcshemminger	RTNLGRP_TC,
553351efcde4e62967362a10b29f3b701cfecd7cdfcshemminger#define RTNLGRP_TC		RTNLGRP_TC
554351efcde4e62967362a10b29f3b701cfecd7cdfcshemminger	RTNLGRP_IPV4_IFADDR,
555351efcde4e62967362a10b29f3b701cfecd7cdfcshemminger#define RTNLGRP_IPV4_IFADDR	RTNLGRP_IPV4_IFADDR
556351efcde4e62967362a10b29f3b701cfecd7cdfcshemminger	RTNLGRP_IPV4_MROUTE,
557351efcde4e62967362a10b29f3b701cfecd7cdfcshemminger#define	RTNLGRP_IPV4_MROUTE	RTNLGRP_IPV4_MROUTE
558351efcde4e62967362a10b29f3b701cfecd7cdfcshemminger	RTNLGRP_IPV4_ROUTE,
559351efcde4e62967362a10b29f3b701cfecd7cdfcshemminger#define RTNLGRP_IPV4_ROUTE	RTNLGRP_IPV4_ROUTE
5608f8a36487119a3cd1afe86a9649704aca088567bStephen Hemminger	RTNLGRP_IPV4_RULE,
5618f8a36487119a3cd1afe86a9649704aca088567bStephen Hemminger#define RTNLGRP_IPV4_RULE	RTNLGRP_IPV4_RULE
562351efcde4e62967362a10b29f3b701cfecd7cdfcshemminger	RTNLGRP_IPV6_IFADDR,
563351efcde4e62967362a10b29f3b701cfecd7cdfcshemminger#define RTNLGRP_IPV6_IFADDR	RTNLGRP_IPV6_IFADDR
564351efcde4e62967362a10b29f3b701cfecd7cdfcshemminger	RTNLGRP_IPV6_MROUTE,
565351efcde4e62967362a10b29f3b701cfecd7cdfcshemminger#define RTNLGRP_IPV6_MROUTE	RTNLGRP_IPV6_MROUTE
566351efcde4e62967362a10b29f3b701cfecd7cdfcshemminger	RTNLGRP_IPV6_ROUTE,
567351efcde4e62967362a10b29f3b701cfecd7cdfcshemminger#define RTNLGRP_IPV6_ROUTE	RTNLGRP_IPV6_ROUTE
568351efcde4e62967362a10b29f3b701cfecd7cdfcshemminger	RTNLGRP_IPV6_IFINFO,
569351efcde4e62967362a10b29f3b701cfecd7cdfcshemminger#define RTNLGRP_IPV6_IFINFO	RTNLGRP_IPV6_IFINFO
570351efcde4e62967362a10b29f3b701cfecd7cdfcshemminger	RTNLGRP_DECnet_IFADDR,
571351efcde4e62967362a10b29f3b701cfecd7cdfcshemminger#define RTNLGRP_DECnet_IFADDR	RTNLGRP_DECnet_IFADDR
57209954dc61adc3051cbb2127e2bfcf692502c8306shemminger	RTNLGRP_NOP2,
573351efcde4e62967362a10b29f3b701cfecd7cdfcshemminger	RTNLGRP_DECnet_ROUTE,
574351efcde4e62967362a10b29f3b701cfecd7cdfcshemminger#define RTNLGRP_DECnet_ROUTE	RTNLGRP_DECnet_ROUTE
575ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger	RTNLGRP_DECnet_RULE,
576ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger#define RTNLGRP_DECnet_RULE	RTNLGRP_DECnet_RULE
57709954dc61adc3051cbb2127e2bfcf692502c8306shemminger	RTNLGRP_NOP4,
578351efcde4e62967362a10b29f3b701cfecd7cdfcshemminger	RTNLGRP_IPV6_PREFIX,
579351efcde4e62967362a10b29f3b701cfecd7cdfcshemminger#define RTNLGRP_IPV6_PREFIX	RTNLGRP_IPV6_PREFIX
580ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger	RTNLGRP_IPV6_RULE,
581ead2ba7008c9db02954dae6f180aed8770a0560dStephen Hemminger#define RTNLGRP_IPV6_RULE	RTNLGRP_IPV6_RULE
5825472ac6f9fab8632b89da31df56419c8423b020dStephen Hemminger	RTNLGRP_ND_USEROPT,
5835472ac6f9fab8632b89da31df56419c8423b020dStephen Hemminger#define RTNLGRP_ND_USEROPT	RTNLGRP_ND_USEROPT
58405bfd165958d1859275b0158fedcb00cea58ad0dStephen Hemminger	RTNLGRP_PHONET_IFADDR,
58505bfd165958d1859275b0158fedcb00cea58ad0dStephen Hemminger#define RTNLGRP_PHONET_IFADDR	RTNLGRP_PHONET_IFADDR
58605bfd165958d1859275b0158fedcb00cea58ad0dStephen Hemminger	RTNLGRP_PHONET_ROUTE,
58705bfd165958d1859275b0158fedcb00cea58ad0dStephen Hemminger#define RTNLGRP_PHONET_ROUTE	RTNLGRP_PHONET_ROUTE
588707f612c00a91fe3c17d7af5319e423545a496c5Stephen Hemminger	RTNLGRP_DCB,
589707f612c00a91fe3c17d7af5319e423545a496c5Stephen Hemminger#define RTNLGRP_DCB		RTNLGRP_DCB
590351efcde4e62967362a10b29f3b701cfecd7cdfcshemminger	__RTNLGRP_MAX
591351efcde4e62967362a10b29f3b701cfecd7cdfcshemminger};
592351efcde4e62967362a10b29f3b701cfecd7cdfcshemminger#define RTNLGRP_MAX	(__RTNLGRP_MAX - 1)
593351efcde4e62967362a10b29f3b701cfecd7cdfcshemminger
5940633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger/* TC action piece */
595ab322673298bd0b8927cdd9d11f3d36af5941b93Stephen Hemmingerstruct tcamsg {
5960633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	unsigned char	tca_family;
5970633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	unsigned char	tca__pad1;
5980633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger	unsigned short	tca__pad2;
5990633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger};
6000633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define TA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcamsg))))
6010633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define TA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcamsg))
6020633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define TCA_ACT_TAB 1 /* attr type must be >=1 */
6030633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#define TCAA_MAX 1
6040633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
605c23abafbdcdd3754bea50f1452fed36da5515379Stephen Hemminger/* New extended info filters for IFLA_EXT_MASK */
606c23abafbdcdd3754bea50f1452fed36da5515379Stephen Hemminger#define RTEXT_FILTER_VF		(1 << 0)
607c23abafbdcdd3754bea50f1452fed36da5515379Stephen Hemminger
6080633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger/* End of information exported to user level */
6090633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
6100633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
6110633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger
6120633baa17231b777e75b813439c237e3de380cc8osdl.net!shemminger#endif	/* __LINUX_RTNETLINK_H */
613