xref: /aosp_15_r20/external/iproute2/include/uapi/linux/rtnetlink.h (revision de1e4e894b0c224df933550f0afdecc354b238c4)
1*de1e4e89SAndroid Build Coastguard Worker /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2*de1e4e89SAndroid Build Coastguard Worker #ifndef __LINUX_RTNETLINK_H
3*de1e4e89SAndroid Build Coastguard Worker #define __LINUX_RTNETLINK_H
4*de1e4e89SAndroid Build Coastguard Worker 
5*de1e4e89SAndroid Build Coastguard Worker #include <linux/types.h>
6*de1e4e89SAndroid Build Coastguard Worker #include <linux/netlink.h>
7*de1e4e89SAndroid Build Coastguard Worker #include <linux/if_link.h>
8*de1e4e89SAndroid Build Coastguard Worker #include <linux/if_addr.h>
9*de1e4e89SAndroid Build Coastguard Worker #include <linux/neighbour.h>
10*de1e4e89SAndroid Build Coastguard Worker 
11*de1e4e89SAndroid Build Coastguard Worker /* rtnetlink families. Values up to 127 are reserved for real address
12*de1e4e89SAndroid Build Coastguard Worker  * families, values above 128 may be used arbitrarily.
13*de1e4e89SAndroid Build Coastguard Worker  */
14*de1e4e89SAndroid Build Coastguard Worker #define RTNL_FAMILY_IPMR		128
15*de1e4e89SAndroid Build Coastguard Worker #define RTNL_FAMILY_IP6MR		129
16*de1e4e89SAndroid Build Coastguard Worker #define RTNL_FAMILY_MAX			129
17*de1e4e89SAndroid Build Coastguard Worker 
18*de1e4e89SAndroid Build Coastguard Worker /****
19*de1e4e89SAndroid Build Coastguard Worker  *		Routing/neighbour discovery messages.
20*de1e4e89SAndroid Build Coastguard Worker  ****/
21*de1e4e89SAndroid Build Coastguard Worker 
22*de1e4e89SAndroid Build Coastguard Worker /* Types of messages */
23*de1e4e89SAndroid Build Coastguard Worker 
24*de1e4e89SAndroid Build Coastguard Worker enum {
25*de1e4e89SAndroid Build Coastguard Worker 	RTM_BASE	= 16,
26*de1e4e89SAndroid Build Coastguard Worker #define RTM_BASE	RTM_BASE
27*de1e4e89SAndroid Build Coastguard Worker 
28*de1e4e89SAndroid Build Coastguard Worker 	RTM_NEWLINK	= 16,
29*de1e4e89SAndroid Build Coastguard Worker #define RTM_NEWLINK	RTM_NEWLINK
30*de1e4e89SAndroid Build Coastguard Worker 	RTM_DELLINK,
31*de1e4e89SAndroid Build Coastguard Worker #define RTM_DELLINK	RTM_DELLINK
32*de1e4e89SAndroid Build Coastguard Worker 	RTM_GETLINK,
33*de1e4e89SAndroid Build Coastguard Worker #define RTM_GETLINK	RTM_GETLINK
34*de1e4e89SAndroid Build Coastguard Worker 	RTM_SETLINK,
35*de1e4e89SAndroid Build Coastguard Worker #define RTM_SETLINK	RTM_SETLINK
36*de1e4e89SAndroid Build Coastguard Worker 
37*de1e4e89SAndroid Build Coastguard Worker 	RTM_NEWADDR	= 20,
38*de1e4e89SAndroid Build Coastguard Worker #define RTM_NEWADDR	RTM_NEWADDR
39*de1e4e89SAndroid Build Coastguard Worker 	RTM_DELADDR,
40*de1e4e89SAndroid Build Coastguard Worker #define RTM_DELADDR	RTM_DELADDR
41*de1e4e89SAndroid Build Coastguard Worker 	RTM_GETADDR,
42*de1e4e89SAndroid Build Coastguard Worker #define RTM_GETADDR	RTM_GETADDR
43*de1e4e89SAndroid Build Coastguard Worker 
44*de1e4e89SAndroid Build Coastguard Worker 	RTM_NEWROUTE	= 24,
45*de1e4e89SAndroid Build Coastguard Worker #define RTM_NEWROUTE	RTM_NEWROUTE
46*de1e4e89SAndroid Build Coastguard Worker 	RTM_DELROUTE,
47*de1e4e89SAndroid Build Coastguard Worker #define RTM_DELROUTE	RTM_DELROUTE
48*de1e4e89SAndroid Build Coastguard Worker 	RTM_GETROUTE,
49*de1e4e89SAndroid Build Coastguard Worker #define RTM_GETROUTE	RTM_GETROUTE
50*de1e4e89SAndroid Build Coastguard Worker 
51*de1e4e89SAndroid Build Coastguard Worker 	RTM_NEWNEIGH	= 28,
52*de1e4e89SAndroid Build Coastguard Worker #define RTM_NEWNEIGH	RTM_NEWNEIGH
53*de1e4e89SAndroid Build Coastguard Worker 	RTM_DELNEIGH,
54*de1e4e89SAndroid Build Coastguard Worker #define RTM_DELNEIGH	RTM_DELNEIGH
55*de1e4e89SAndroid Build Coastguard Worker 	RTM_GETNEIGH,
56*de1e4e89SAndroid Build Coastguard Worker #define RTM_GETNEIGH	RTM_GETNEIGH
57*de1e4e89SAndroid Build Coastguard Worker 
58*de1e4e89SAndroid Build Coastguard Worker 	RTM_NEWRULE	= 32,
59*de1e4e89SAndroid Build Coastguard Worker #define RTM_NEWRULE	RTM_NEWRULE
60*de1e4e89SAndroid Build Coastguard Worker 	RTM_DELRULE,
61*de1e4e89SAndroid Build Coastguard Worker #define RTM_DELRULE	RTM_DELRULE
62*de1e4e89SAndroid Build Coastguard Worker 	RTM_GETRULE,
63*de1e4e89SAndroid Build Coastguard Worker #define RTM_GETRULE	RTM_GETRULE
64*de1e4e89SAndroid Build Coastguard Worker 
65*de1e4e89SAndroid Build Coastguard Worker 	RTM_NEWQDISC	= 36,
66*de1e4e89SAndroid Build Coastguard Worker #define RTM_NEWQDISC	RTM_NEWQDISC
67*de1e4e89SAndroid Build Coastguard Worker 	RTM_DELQDISC,
68*de1e4e89SAndroid Build Coastguard Worker #define RTM_DELQDISC	RTM_DELQDISC
69*de1e4e89SAndroid Build Coastguard Worker 	RTM_GETQDISC,
70*de1e4e89SAndroid Build Coastguard Worker #define RTM_GETQDISC	RTM_GETQDISC
71*de1e4e89SAndroid Build Coastguard Worker 
72*de1e4e89SAndroid Build Coastguard Worker 	RTM_NEWTCLASS	= 40,
73*de1e4e89SAndroid Build Coastguard Worker #define RTM_NEWTCLASS	RTM_NEWTCLASS
74*de1e4e89SAndroid Build Coastguard Worker 	RTM_DELTCLASS,
75*de1e4e89SAndroid Build Coastguard Worker #define RTM_DELTCLASS	RTM_DELTCLASS
76*de1e4e89SAndroid Build Coastguard Worker 	RTM_GETTCLASS,
77*de1e4e89SAndroid Build Coastguard Worker #define RTM_GETTCLASS	RTM_GETTCLASS
78*de1e4e89SAndroid Build Coastguard Worker 
79*de1e4e89SAndroid Build Coastguard Worker 	RTM_NEWTFILTER	= 44,
80*de1e4e89SAndroid Build Coastguard Worker #define RTM_NEWTFILTER	RTM_NEWTFILTER
81*de1e4e89SAndroid Build Coastguard Worker 	RTM_DELTFILTER,
82*de1e4e89SAndroid Build Coastguard Worker #define RTM_DELTFILTER	RTM_DELTFILTER
83*de1e4e89SAndroid Build Coastguard Worker 	RTM_GETTFILTER,
84*de1e4e89SAndroid Build Coastguard Worker #define RTM_GETTFILTER	RTM_GETTFILTER
85*de1e4e89SAndroid Build Coastguard Worker 
86*de1e4e89SAndroid Build Coastguard Worker 	RTM_NEWACTION	= 48,
87*de1e4e89SAndroid Build Coastguard Worker #define RTM_NEWACTION   RTM_NEWACTION
88*de1e4e89SAndroid Build Coastguard Worker 	RTM_DELACTION,
89*de1e4e89SAndroid Build Coastguard Worker #define RTM_DELACTION   RTM_DELACTION
90*de1e4e89SAndroid Build Coastguard Worker 	RTM_GETACTION,
91*de1e4e89SAndroid Build Coastguard Worker #define RTM_GETACTION   RTM_GETACTION
92*de1e4e89SAndroid Build Coastguard Worker 
93*de1e4e89SAndroid Build Coastguard Worker 	RTM_NEWPREFIX	= 52,
94*de1e4e89SAndroid Build Coastguard Worker #define RTM_NEWPREFIX	RTM_NEWPREFIX
95*de1e4e89SAndroid Build Coastguard Worker 
96*de1e4e89SAndroid Build Coastguard Worker 	RTM_GETMULTICAST = 58,
97*de1e4e89SAndroid Build Coastguard Worker #define RTM_GETMULTICAST RTM_GETMULTICAST
98*de1e4e89SAndroid Build Coastguard Worker 
99*de1e4e89SAndroid Build Coastguard Worker 	RTM_GETANYCAST	= 62,
100*de1e4e89SAndroid Build Coastguard Worker #define RTM_GETANYCAST	RTM_GETANYCAST
101*de1e4e89SAndroid Build Coastguard Worker 
102*de1e4e89SAndroid Build Coastguard Worker 	RTM_NEWNEIGHTBL	= 64,
103*de1e4e89SAndroid Build Coastguard Worker #define RTM_NEWNEIGHTBL	RTM_NEWNEIGHTBL
104*de1e4e89SAndroid Build Coastguard Worker 	RTM_GETNEIGHTBL	= 66,
105*de1e4e89SAndroid Build Coastguard Worker #define RTM_GETNEIGHTBL	RTM_GETNEIGHTBL
106*de1e4e89SAndroid Build Coastguard Worker 	RTM_SETNEIGHTBL,
107*de1e4e89SAndroid Build Coastguard Worker #define RTM_SETNEIGHTBL	RTM_SETNEIGHTBL
108*de1e4e89SAndroid Build Coastguard Worker 
109*de1e4e89SAndroid Build Coastguard Worker 	RTM_NEWNDUSEROPT = 68,
110*de1e4e89SAndroid Build Coastguard Worker #define RTM_NEWNDUSEROPT RTM_NEWNDUSEROPT
111*de1e4e89SAndroid Build Coastguard Worker 
112*de1e4e89SAndroid Build Coastguard Worker 	RTM_NEWADDRLABEL = 72,
113*de1e4e89SAndroid Build Coastguard Worker #define RTM_NEWADDRLABEL RTM_NEWADDRLABEL
114*de1e4e89SAndroid Build Coastguard Worker 	RTM_DELADDRLABEL,
115*de1e4e89SAndroid Build Coastguard Worker #define RTM_DELADDRLABEL RTM_DELADDRLABEL
116*de1e4e89SAndroid Build Coastguard Worker 	RTM_GETADDRLABEL,
117*de1e4e89SAndroid Build Coastguard Worker #define RTM_GETADDRLABEL RTM_GETADDRLABEL
118*de1e4e89SAndroid Build Coastguard Worker 
119*de1e4e89SAndroid Build Coastguard Worker 	RTM_GETDCB = 78,
120*de1e4e89SAndroid Build Coastguard Worker #define RTM_GETDCB RTM_GETDCB
121*de1e4e89SAndroid Build Coastguard Worker 	RTM_SETDCB,
122*de1e4e89SAndroid Build Coastguard Worker #define RTM_SETDCB RTM_SETDCB
123*de1e4e89SAndroid Build Coastguard Worker 
124*de1e4e89SAndroid Build Coastguard Worker 	RTM_NEWNETCONF = 80,
125*de1e4e89SAndroid Build Coastguard Worker #define RTM_NEWNETCONF RTM_NEWNETCONF
126*de1e4e89SAndroid Build Coastguard Worker 	RTM_DELNETCONF,
127*de1e4e89SAndroid Build Coastguard Worker #define RTM_DELNETCONF RTM_DELNETCONF
128*de1e4e89SAndroid Build Coastguard Worker 	RTM_GETNETCONF = 82,
129*de1e4e89SAndroid Build Coastguard Worker #define RTM_GETNETCONF RTM_GETNETCONF
130*de1e4e89SAndroid Build Coastguard Worker 
131*de1e4e89SAndroid Build Coastguard Worker 	RTM_NEWMDB = 84,
132*de1e4e89SAndroid Build Coastguard Worker #define RTM_NEWMDB RTM_NEWMDB
133*de1e4e89SAndroid Build Coastguard Worker 	RTM_DELMDB = 85,
134*de1e4e89SAndroid Build Coastguard Worker #define RTM_DELMDB RTM_DELMDB
135*de1e4e89SAndroid Build Coastguard Worker 	RTM_GETMDB = 86,
136*de1e4e89SAndroid Build Coastguard Worker #define RTM_GETMDB RTM_GETMDB
137*de1e4e89SAndroid Build Coastguard Worker 
138*de1e4e89SAndroid Build Coastguard Worker 	RTM_NEWNSID = 88,
139*de1e4e89SAndroid Build Coastguard Worker #define RTM_NEWNSID RTM_NEWNSID
140*de1e4e89SAndroid Build Coastguard Worker 	RTM_DELNSID = 89,
141*de1e4e89SAndroid Build Coastguard Worker #define RTM_DELNSID RTM_DELNSID
142*de1e4e89SAndroid Build Coastguard Worker 	RTM_GETNSID = 90,
143*de1e4e89SAndroid Build Coastguard Worker #define RTM_GETNSID RTM_GETNSID
144*de1e4e89SAndroid Build Coastguard Worker 
145*de1e4e89SAndroid Build Coastguard Worker 	RTM_NEWSTATS = 92,
146*de1e4e89SAndroid Build Coastguard Worker #define RTM_NEWSTATS RTM_NEWSTATS
147*de1e4e89SAndroid Build Coastguard Worker 	RTM_GETSTATS = 94,
148*de1e4e89SAndroid Build Coastguard Worker #define RTM_GETSTATS RTM_GETSTATS
149*de1e4e89SAndroid Build Coastguard Worker 
150*de1e4e89SAndroid Build Coastguard Worker 	RTM_NEWCACHEREPORT = 96,
151*de1e4e89SAndroid Build Coastguard Worker #define RTM_NEWCACHEREPORT RTM_NEWCACHEREPORT
152*de1e4e89SAndroid Build Coastguard Worker 
153*de1e4e89SAndroid Build Coastguard Worker 	__RTM_MAX,
154*de1e4e89SAndroid Build Coastguard Worker #define RTM_MAX		(((__RTM_MAX + 3) & ~3) - 1)
155*de1e4e89SAndroid Build Coastguard Worker };
156*de1e4e89SAndroid Build Coastguard Worker 
157*de1e4e89SAndroid Build Coastguard Worker #define RTM_NR_MSGTYPES	(RTM_MAX + 1 - RTM_BASE)
158*de1e4e89SAndroid Build Coastguard Worker #define RTM_NR_FAMILIES	(RTM_NR_MSGTYPES >> 2)
159*de1e4e89SAndroid Build Coastguard Worker #define RTM_FAM(cmd)	(((cmd) - RTM_BASE) >> 2)
160*de1e4e89SAndroid Build Coastguard Worker 
161*de1e4e89SAndroid Build Coastguard Worker /*
162*de1e4e89SAndroid Build Coastguard Worker    Generic structure for encapsulation of optional route information.
163*de1e4e89SAndroid Build Coastguard Worker    It is reminiscent of sockaddr, but with sa_family replaced
164*de1e4e89SAndroid Build Coastguard Worker    with attribute type.
165*de1e4e89SAndroid Build Coastguard Worker  */
166*de1e4e89SAndroid Build Coastguard Worker 
167*de1e4e89SAndroid Build Coastguard Worker struct rtattr {
168*de1e4e89SAndroid Build Coastguard Worker 	unsigned short	rta_len;
169*de1e4e89SAndroid Build Coastguard Worker 	unsigned short	rta_type;
170*de1e4e89SAndroid Build Coastguard Worker };
171*de1e4e89SAndroid Build Coastguard Worker 
172*de1e4e89SAndroid Build Coastguard Worker /* Macros to handle rtattributes */
173*de1e4e89SAndroid Build Coastguard Worker 
174*de1e4e89SAndroid Build Coastguard Worker #define RTA_ALIGNTO	4U
175*de1e4e89SAndroid Build Coastguard Worker #define RTA_ALIGN(len) ( ((len)+RTA_ALIGNTO-1) & ~(RTA_ALIGNTO-1) )
176*de1e4e89SAndroid Build Coastguard Worker #define RTA_OK(rta,len) ((len) >= (int)sizeof(struct rtattr) && \
177*de1e4e89SAndroid Build Coastguard Worker 			 (rta)->rta_len >= sizeof(struct rtattr) && \
178*de1e4e89SAndroid Build Coastguard Worker 			 (rta)->rta_len <= (len))
179*de1e4e89SAndroid Build Coastguard Worker #define RTA_NEXT(rta,attrlen)	((attrlen) -= RTA_ALIGN((rta)->rta_len), \
180*de1e4e89SAndroid Build Coastguard Worker 				 (struct rtattr*)(((char*)(rta)) + RTA_ALIGN((rta)->rta_len)))
181*de1e4e89SAndroid Build Coastguard Worker #define RTA_LENGTH(len)	(RTA_ALIGN(sizeof(struct rtattr)) + (len))
182*de1e4e89SAndroid Build Coastguard Worker #define RTA_SPACE(len)	RTA_ALIGN(RTA_LENGTH(len))
183*de1e4e89SAndroid Build Coastguard Worker #define RTA_DATA(rta)   ((void*)(((char*)(rta)) + RTA_LENGTH(0)))
184*de1e4e89SAndroid Build Coastguard Worker #define RTA_PAYLOAD(rta) ((int)((rta)->rta_len) - RTA_LENGTH(0))
185*de1e4e89SAndroid Build Coastguard Worker 
186*de1e4e89SAndroid Build Coastguard Worker 
187*de1e4e89SAndroid Build Coastguard Worker 
188*de1e4e89SAndroid Build Coastguard Worker 
189*de1e4e89SAndroid Build Coastguard Worker /******************************************************************************
190*de1e4e89SAndroid Build Coastguard Worker  *		Definitions used in routing table administration.
191*de1e4e89SAndroid Build Coastguard Worker  ****/
192*de1e4e89SAndroid Build Coastguard Worker 
193*de1e4e89SAndroid Build Coastguard Worker struct rtmsg {
194*de1e4e89SAndroid Build Coastguard Worker 	unsigned char		rtm_family;
195*de1e4e89SAndroid Build Coastguard Worker 	unsigned char		rtm_dst_len;
196*de1e4e89SAndroid Build Coastguard Worker 	unsigned char		rtm_src_len;
197*de1e4e89SAndroid Build Coastguard Worker 	unsigned char		rtm_tos;
198*de1e4e89SAndroid Build Coastguard Worker 
199*de1e4e89SAndroid Build Coastguard Worker 	unsigned char		rtm_table;	/* Routing table id */
200*de1e4e89SAndroid Build Coastguard Worker 	unsigned char		rtm_protocol;	/* Routing protocol; see below	*/
201*de1e4e89SAndroid Build Coastguard Worker 	unsigned char		rtm_scope;	/* See below */
202*de1e4e89SAndroid Build Coastguard Worker 	unsigned char		rtm_type;	/* See below	*/
203*de1e4e89SAndroid Build Coastguard Worker 
204*de1e4e89SAndroid Build Coastguard Worker 	unsigned		rtm_flags;
205*de1e4e89SAndroid Build Coastguard Worker };
206*de1e4e89SAndroid Build Coastguard Worker 
207*de1e4e89SAndroid Build Coastguard Worker /* rtm_type */
208*de1e4e89SAndroid Build Coastguard Worker 
209*de1e4e89SAndroid Build Coastguard Worker enum {
210*de1e4e89SAndroid Build Coastguard Worker 	RTN_UNSPEC,
211*de1e4e89SAndroid Build Coastguard Worker 	RTN_UNICAST,		/* Gateway or direct route	*/
212*de1e4e89SAndroid Build Coastguard Worker 	RTN_LOCAL,		/* Accept locally		*/
213*de1e4e89SAndroid Build Coastguard Worker 	RTN_BROADCAST,		/* Accept locally as broadcast,
214*de1e4e89SAndroid Build Coastguard Worker 				   send as broadcast */
215*de1e4e89SAndroid Build Coastguard Worker 	RTN_ANYCAST,		/* Accept locally as broadcast,
216*de1e4e89SAndroid Build Coastguard Worker 				   but send as unicast */
217*de1e4e89SAndroid Build Coastguard Worker 	RTN_MULTICAST,		/* Multicast route		*/
218*de1e4e89SAndroid Build Coastguard Worker 	RTN_BLACKHOLE,		/* Drop				*/
219*de1e4e89SAndroid Build Coastguard Worker 	RTN_UNREACHABLE,	/* Destination is unreachable   */
220*de1e4e89SAndroid Build Coastguard Worker 	RTN_PROHIBIT,		/* Administratively prohibited	*/
221*de1e4e89SAndroid Build Coastguard Worker 	RTN_THROW,		/* Not in this table		*/
222*de1e4e89SAndroid Build Coastguard Worker 	RTN_NAT,		/* Translate this address	*/
223*de1e4e89SAndroid Build Coastguard Worker 	RTN_XRESOLVE,		/* Use external resolver	*/
224*de1e4e89SAndroid Build Coastguard Worker 	__RTN_MAX
225*de1e4e89SAndroid Build Coastguard Worker };
226*de1e4e89SAndroid Build Coastguard Worker 
227*de1e4e89SAndroid Build Coastguard Worker #define RTN_MAX (__RTN_MAX - 1)
228*de1e4e89SAndroid Build Coastguard Worker 
229*de1e4e89SAndroid Build Coastguard Worker 
230*de1e4e89SAndroid Build Coastguard Worker /* rtm_protocol */
231*de1e4e89SAndroid Build Coastguard Worker 
232*de1e4e89SAndroid Build Coastguard Worker #define RTPROT_UNSPEC	0
233*de1e4e89SAndroid Build Coastguard Worker #define RTPROT_REDIRECT	1	/* Route installed by ICMP redirects;
234*de1e4e89SAndroid Build Coastguard Worker 				   not used by current IPv4 */
235*de1e4e89SAndroid Build Coastguard Worker #define RTPROT_KERNEL	2	/* Route installed by kernel		*/
236*de1e4e89SAndroid Build Coastguard Worker #define RTPROT_BOOT	3	/* Route installed during boot		*/
237*de1e4e89SAndroid Build Coastguard Worker #define RTPROT_STATIC	4	/* Route installed by administrator	*/
238*de1e4e89SAndroid Build Coastguard Worker 
239*de1e4e89SAndroid Build Coastguard Worker /* Values of protocol >= RTPROT_STATIC are not interpreted by kernel;
240*de1e4e89SAndroid Build Coastguard Worker    they are just passed from user and back as is.
241*de1e4e89SAndroid Build Coastguard Worker    It will be used by hypothetical multiple routing daemons.
242*de1e4e89SAndroid Build Coastguard Worker    Note that protocol values should be standardized in order to
243*de1e4e89SAndroid Build Coastguard Worker    avoid conflicts.
244*de1e4e89SAndroid Build Coastguard Worker  */
245*de1e4e89SAndroid Build Coastguard Worker 
246*de1e4e89SAndroid Build Coastguard Worker #define RTPROT_GATED	8	/* Apparently, GateD */
247*de1e4e89SAndroid Build Coastguard Worker #define RTPROT_RA	9	/* RDISC/ND router advertisements */
248*de1e4e89SAndroid Build Coastguard Worker #define RTPROT_MRT	10	/* Merit MRT */
249*de1e4e89SAndroid Build Coastguard Worker #define RTPROT_ZEBRA	11	/* Zebra */
250*de1e4e89SAndroid Build Coastguard Worker #define RTPROT_BIRD	12	/* BIRD */
251*de1e4e89SAndroid Build Coastguard Worker #define RTPROT_DNROUTED	13	/* DECnet routing daemon */
252*de1e4e89SAndroid Build Coastguard Worker #define RTPROT_XORP	14	/* XORP */
253*de1e4e89SAndroid Build Coastguard Worker #define RTPROT_NTK	15	/* Netsukuku */
254*de1e4e89SAndroid Build Coastguard Worker #define RTPROT_DHCP	16      /* DHCP client */
255*de1e4e89SAndroid Build Coastguard Worker #define RTPROT_MROUTED	17      /* Multicast daemon */
256*de1e4e89SAndroid Build Coastguard Worker #define RTPROT_BABEL	42      /* Babel daemon */
257*de1e4e89SAndroid Build Coastguard Worker 
258*de1e4e89SAndroid Build Coastguard Worker /* rtm_scope
259*de1e4e89SAndroid Build Coastguard Worker 
260*de1e4e89SAndroid Build Coastguard Worker    Really it is not scope, but sort of distance to the destination.
261*de1e4e89SAndroid Build Coastguard Worker    NOWHERE are reserved for not existing destinations, HOST is our
262*de1e4e89SAndroid Build Coastguard Worker    local addresses, LINK are destinations, located on directly attached
263*de1e4e89SAndroid Build Coastguard Worker    link and UNIVERSE is everywhere in the Universe.
264*de1e4e89SAndroid Build Coastguard Worker 
265*de1e4e89SAndroid Build Coastguard Worker    Intermediate values are also possible f.e. interior routes
266*de1e4e89SAndroid Build Coastguard Worker    could be assigned a value between UNIVERSE and LINK.
267*de1e4e89SAndroid Build Coastguard Worker */
268*de1e4e89SAndroid Build Coastguard Worker 
269*de1e4e89SAndroid Build Coastguard Worker enum rt_scope_t {
270*de1e4e89SAndroid Build Coastguard Worker 	RT_SCOPE_UNIVERSE=0,
271*de1e4e89SAndroid Build Coastguard Worker /* User defined values  */
272*de1e4e89SAndroid Build Coastguard Worker 	RT_SCOPE_SITE=200,
273*de1e4e89SAndroid Build Coastguard Worker 	RT_SCOPE_LINK=253,
274*de1e4e89SAndroid Build Coastguard Worker 	RT_SCOPE_HOST=254,
275*de1e4e89SAndroid Build Coastguard Worker 	RT_SCOPE_NOWHERE=255
276*de1e4e89SAndroid Build Coastguard Worker };
277*de1e4e89SAndroid Build Coastguard Worker 
278*de1e4e89SAndroid Build Coastguard Worker /* rtm_flags */
279*de1e4e89SAndroid Build Coastguard Worker 
280*de1e4e89SAndroid Build Coastguard Worker #define RTM_F_NOTIFY		0x100	/* Notify user of route change	*/
281*de1e4e89SAndroid Build Coastguard Worker #define RTM_F_CLONED		0x200	/* This route is cloned		*/
282*de1e4e89SAndroid Build Coastguard Worker #define RTM_F_EQUALIZE		0x400	/* Multipath equalizer: NI	*/
283*de1e4e89SAndroid Build Coastguard Worker #define RTM_F_PREFIX		0x800	/* Prefix addresses		*/
284*de1e4e89SAndroid Build Coastguard Worker #define RTM_F_LOOKUP_TABLE	0x1000	/* set rtm_table to FIB lookup result */
285*de1e4e89SAndroid Build Coastguard Worker #define RTM_F_FIB_MATCH	        0x2000	/* return full fib lookup match */
286*de1e4e89SAndroid Build Coastguard Worker 
287*de1e4e89SAndroid Build Coastguard Worker /* Reserved table identifiers */
288*de1e4e89SAndroid Build Coastguard Worker 
289*de1e4e89SAndroid Build Coastguard Worker enum rt_class_t {
290*de1e4e89SAndroid Build Coastguard Worker 	RT_TABLE_UNSPEC=0,
291*de1e4e89SAndroid Build Coastguard Worker /* User defined values */
292*de1e4e89SAndroid Build Coastguard Worker 	RT_TABLE_COMPAT=252,
293*de1e4e89SAndroid Build Coastguard Worker 	RT_TABLE_DEFAULT=253,
294*de1e4e89SAndroid Build Coastguard Worker 	RT_TABLE_MAIN=254,
295*de1e4e89SAndroid Build Coastguard Worker 	RT_TABLE_LOCAL=255,
296*de1e4e89SAndroid Build Coastguard Worker 	RT_TABLE_MAX=0xFFFFFFFF
297*de1e4e89SAndroid Build Coastguard Worker };
298*de1e4e89SAndroid Build Coastguard Worker 
299*de1e4e89SAndroid Build Coastguard Worker 
300*de1e4e89SAndroid Build Coastguard Worker /* Routing message attributes */
301*de1e4e89SAndroid Build Coastguard Worker 
302*de1e4e89SAndroid Build Coastguard Worker enum rtattr_type_t {
303*de1e4e89SAndroid Build Coastguard Worker 	RTA_UNSPEC,
304*de1e4e89SAndroid Build Coastguard Worker 	RTA_DST,
305*de1e4e89SAndroid Build Coastguard Worker 	RTA_SRC,
306*de1e4e89SAndroid Build Coastguard Worker 	RTA_IIF,
307*de1e4e89SAndroid Build Coastguard Worker 	RTA_OIF,
308*de1e4e89SAndroid Build Coastguard Worker 	RTA_GATEWAY,
309*de1e4e89SAndroid Build Coastguard Worker 	RTA_PRIORITY,
310*de1e4e89SAndroid Build Coastguard Worker 	RTA_PREFSRC,
311*de1e4e89SAndroid Build Coastguard Worker 	RTA_METRICS,
312*de1e4e89SAndroid Build Coastguard Worker 	RTA_MULTIPATH,
313*de1e4e89SAndroid Build Coastguard Worker 	RTA_PROTOINFO, /* no longer used */
314*de1e4e89SAndroid Build Coastguard Worker 	RTA_FLOW,
315*de1e4e89SAndroid Build Coastguard Worker 	RTA_CACHEINFO,
316*de1e4e89SAndroid Build Coastguard Worker 	RTA_SESSION, /* no longer used */
317*de1e4e89SAndroid Build Coastguard Worker 	RTA_MP_ALGO, /* no longer used */
318*de1e4e89SAndroid Build Coastguard Worker 	RTA_TABLE,
319*de1e4e89SAndroid Build Coastguard Worker 	RTA_MARK,
320*de1e4e89SAndroid Build Coastguard Worker 	RTA_MFC_STATS,
321*de1e4e89SAndroid Build Coastguard Worker 	RTA_VIA,
322*de1e4e89SAndroid Build Coastguard Worker 	RTA_NEWDST,
323*de1e4e89SAndroid Build Coastguard Worker 	RTA_PREF,
324*de1e4e89SAndroid Build Coastguard Worker 	RTA_ENCAP_TYPE,
325*de1e4e89SAndroid Build Coastguard Worker 	RTA_ENCAP,
326*de1e4e89SAndroid Build Coastguard Worker 	RTA_EXPIRES,
327*de1e4e89SAndroid Build Coastguard Worker 	RTA_PAD,
328*de1e4e89SAndroid Build Coastguard Worker 	RTA_UID,
329*de1e4e89SAndroid Build Coastguard Worker 	RTA_TTL_PROPAGATE,
330*de1e4e89SAndroid Build Coastguard Worker 	__RTA_MAX
331*de1e4e89SAndroid Build Coastguard Worker };
332*de1e4e89SAndroid Build Coastguard Worker 
333*de1e4e89SAndroid Build Coastguard Worker #define RTA_MAX (__RTA_MAX - 1)
334*de1e4e89SAndroid Build Coastguard Worker 
335*de1e4e89SAndroid Build Coastguard Worker #define RTM_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct rtmsg))))
336*de1e4e89SAndroid Build Coastguard Worker #define RTM_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct rtmsg))
337*de1e4e89SAndroid Build Coastguard Worker 
338*de1e4e89SAndroid Build Coastguard Worker /* RTM_MULTIPATH --- array of struct rtnexthop.
339*de1e4e89SAndroid Build Coastguard Worker  *
340*de1e4e89SAndroid Build Coastguard Worker  * "struct rtnexthop" describes all necessary nexthop information,
341*de1e4e89SAndroid Build Coastguard Worker  * i.e. parameters of path to a destination via this nexthop.
342*de1e4e89SAndroid Build Coastguard Worker  *
343*de1e4e89SAndroid Build Coastguard Worker  * At the moment it is impossible to set different prefsrc, mtu, window
344*de1e4e89SAndroid Build Coastguard Worker  * and rtt for different paths from multipath.
345*de1e4e89SAndroid Build Coastguard Worker  */
346*de1e4e89SAndroid Build Coastguard Worker 
347*de1e4e89SAndroid Build Coastguard Worker struct rtnexthop {
348*de1e4e89SAndroid Build Coastguard Worker 	unsigned short		rtnh_len;
349*de1e4e89SAndroid Build Coastguard Worker 	unsigned char		rtnh_flags;
350*de1e4e89SAndroid Build Coastguard Worker 	unsigned char		rtnh_hops;
351*de1e4e89SAndroid Build Coastguard Worker 	int			rtnh_ifindex;
352*de1e4e89SAndroid Build Coastguard Worker };
353*de1e4e89SAndroid Build Coastguard Worker 
354*de1e4e89SAndroid Build Coastguard Worker /* rtnh_flags */
355*de1e4e89SAndroid Build Coastguard Worker 
356*de1e4e89SAndroid Build Coastguard Worker #define RTNH_F_DEAD		1	/* Nexthop is dead (used by multipath)	*/
357*de1e4e89SAndroid Build Coastguard Worker #define RTNH_F_PERVASIVE	2	/* Do recursive gateway lookup	*/
358*de1e4e89SAndroid Build Coastguard Worker #define RTNH_F_ONLINK		4	/* Gateway is forced on link	*/
359*de1e4e89SAndroid Build Coastguard Worker #define RTNH_F_OFFLOAD		8	/* offloaded route */
360*de1e4e89SAndroid Build Coastguard Worker #define RTNH_F_LINKDOWN		16	/* carrier-down on nexthop */
361*de1e4e89SAndroid Build Coastguard Worker #define RTNH_F_UNRESOLVED	32	/* The entry is unresolved (ipmr) */
362*de1e4e89SAndroid Build Coastguard Worker 
363*de1e4e89SAndroid Build Coastguard Worker #define RTNH_COMPARE_MASK	(RTNH_F_DEAD | RTNH_F_LINKDOWN | RTNH_F_OFFLOAD)
364*de1e4e89SAndroid Build Coastguard Worker 
365*de1e4e89SAndroid Build Coastguard Worker /* Macros to handle hexthops */
366*de1e4e89SAndroid Build Coastguard Worker 
367*de1e4e89SAndroid Build Coastguard Worker #define RTNH_ALIGNTO	4
368*de1e4e89SAndroid Build Coastguard Worker #define RTNH_ALIGN(len) ( ((len)+RTNH_ALIGNTO-1) & ~(RTNH_ALIGNTO-1) )
369*de1e4e89SAndroid Build Coastguard Worker #define RTNH_OK(rtnh,len) ((rtnh)->rtnh_len >= sizeof(struct rtnexthop) && \
370*de1e4e89SAndroid Build Coastguard Worker 			   ((int)(rtnh)->rtnh_len) <= (len))
371*de1e4e89SAndroid Build Coastguard Worker #define RTNH_NEXT(rtnh)	((struct rtnexthop*)(((char*)(rtnh)) + RTNH_ALIGN((rtnh)->rtnh_len)))
372*de1e4e89SAndroid Build Coastguard Worker #define RTNH_LENGTH(len) (RTNH_ALIGN(sizeof(struct rtnexthop)) + (len))
373*de1e4e89SAndroid Build Coastguard Worker #define RTNH_SPACE(len)	RTNH_ALIGN(RTNH_LENGTH(len))
374*de1e4e89SAndroid Build Coastguard Worker #define RTNH_DATA(rtnh)   ((struct rtattr*)(((char*)(rtnh)) + RTNH_LENGTH(0)))
375*de1e4e89SAndroid Build Coastguard Worker 
376*de1e4e89SAndroid Build Coastguard Worker /* RTA_VIA */
377*de1e4e89SAndroid Build Coastguard Worker struct rtvia {
378*de1e4e89SAndroid Build Coastguard Worker 	__kernel_sa_family_t	rtvia_family;
379*de1e4e89SAndroid Build Coastguard Worker 	__u8			rtvia_addr[0];
380*de1e4e89SAndroid Build Coastguard Worker };
381*de1e4e89SAndroid Build Coastguard Worker 
382*de1e4e89SAndroid Build Coastguard Worker /* RTM_CACHEINFO */
383*de1e4e89SAndroid Build Coastguard Worker 
384*de1e4e89SAndroid Build Coastguard Worker struct rta_cacheinfo {
385*de1e4e89SAndroid Build Coastguard Worker 	__u32	rta_clntref;
386*de1e4e89SAndroid Build Coastguard Worker 	__u32	rta_lastuse;
387*de1e4e89SAndroid Build Coastguard Worker 	__s32	rta_expires;
388*de1e4e89SAndroid Build Coastguard Worker 	__u32	rta_error;
389*de1e4e89SAndroid Build Coastguard Worker 	__u32	rta_used;
390*de1e4e89SAndroid Build Coastguard Worker 
391*de1e4e89SAndroid Build Coastguard Worker #define RTNETLINK_HAVE_PEERINFO 1
392*de1e4e89SAndroid Build Coastguard Worker 	__u32	rta_id;
393*de1e4e89SAndroid Build Coastguard Worker 	__u32	rta_ts;
394*de1e4e89SAndroid Build Coastguard Worker 	__u32	rta_tsage;
395*de1e4e89SAndroid Build Coastguard Worker };
396*de1e4e89SAndroid Build Coastguard Worker 
397*de1e4e89SAndroid Build Coastguard Worker /* RTM_METRICS --- array of struct rtattr with types of RTAX_* */
398*de1e4e89SAndroid Build Coastguard Worker 
399*de1e4e89SAndroid Build Coastguard Worker enum {
400*de1e4e89SAndroid Build Coastguard Worker 	RTAX_UNSPEC,
401*de1e4e89SAndroid Build Coastguard Worker #define RTAX_UNSPEC RTAX_UNSPEC
402*de1e4e89SAndroid Build Coastguard Worker 	RTAX_LOCK,
403*de1e4e89SAndroid Build Coastguard Worker #define RTAX_LOCK RTAX_LOCK
404*de1e4e89SAndroid Build Coastguard Worker 	RTAX_MTU,
405*de1e4e89SAndroid Build Coastguard Worker #define RTAX_MTU RTAX_MTU
406*de1e4e89SAndroid Build Coastguard Worker 	RTAX_WINDOW,
407*de1e4e89SAndroid Build Coastguard Worker #define RTAX_WINDOW RTAX_WINDOW
408*de1e4e89SAndroid Build Coastguard Worker 	RTAX_RTT,
409*de1e4e89SAndroid Build Coastguard Worker #define RTAX_RTT RTAX_RTT
410*de1e4e89SAndroid Build Coastguard Worker 	RTAX_RTTVAR,
411*de1e4e89SAndroid Build Coastguard Worker #define RTAX_RTTVAR RTAX_RTTVAR
412*de1e4e89SAndroid Build Coastguard Worker 	RTAX_SSTHRESH,
413*de1e4e89SAndroid Build Coastguard Worker #define RTAX_SSTHRESH RTAX_SSTHRESH
414*de1e4e89SAndroid Build Coastguard Worker 	RTAX_CWND,
415*de1e4e89SAndroid Build Coastguard Worker #define RTAX_CWND RTAX_CWND
416*de1e4e89SAndroid Build Coastguard Worker 	RTAX_ADVMSS,
417*de1e4e89SAndroid Build Coastguard Worker #define RTAX_ADVMSS RTAX_ADVMSS
418*de1e4e89SAndroid Build Coastguard Worker 	RTAX_REORDERING,
419*de1e4e89SAndroid Build Coastguard Worker #define RTAX_REORDERING RTAX_REORDERING
420*de1e4e89SAndroid Build Coastguard Worker 	RTAX_HOPLIMIT,
421*de1e4e89SAndroid Build Coastguard Worker #define RTAX_HOPLIMIT RTAX_HOPLIMIT
422*de1e4e89SAndroid Build Coastguard Worker 	RTAX_INITCWND,
423*de1e4e89SAndroid Build Coastguard Worker #define RTAX_INITCWND RTAX_INITCWND
424*de1e4e89SAndroid Build Coastguard Worker 	RTAX_FEATURES,
425*de1e4e89SAndroid Build Coastguard Worker #define RTAX_FEATURES RTAX_FEATURES
426*de1e4e89SAndroid Build Coastguard Worker 	RTAX_RTO_MIN,
427*de1e4e89SAndroid Build Coastguard Worker #define RTAX_RTO_MIN RTAX_RTO_MIN
428*de1e4e89SAndroid Build Coastguard Worker 	RTAX_INITRWND,
429*de1e4e89SAndroid Build Coastguard Worker #define RTAX_INITRWND RTAX_INITRWND
430*de1e4e89SAndroid Build Coastguard Worker 	RTAX_QUICKACK,
431*de1e4e89SAndroid Build Coastguard Worker #define RTAX_QUICKACK RTAX_QUICKACK
432*de1e4e89SAndroid Build Coastguard Worker 	RTAX_CC_ALGO,
433*de1e4e89SAndroid Build Coastguard Worker #define RTAX_CC_ALGO RTAX_CC_ALGO
434*de1e4e89SAndroid Build Coastguard Worker 	__RTAX_MAX
435*de1e4e89SAndroid Build Coastguard Worker };
436*de1e4e89SAndroid Build Coastguard Worker 
437*de1e4e89SAndroid Build Coastguard Worker #define RTAX_MAX (__RTAX_MAX - 1)
438*de1e4e89SAndroid Build Coastguard Worker 
439*de1e4e89SAndroid Build Coastguard Worker #define RTAX_FEATURE_ECN	(1 << 0)
440*de1e4e89SAndroid Build Coastguard Worker #define RTAX_FEATURE_SACK	(1 << 1)
441*de1e4e89SAndroid Build Coastguard Worker #define RTAX_FEATURE_TIMESTAMP	(1 << 2)
442*de1e4e89SAndroid Build Coastguard Worker #define RTAX_FEATURE_ALLFRAG	(1 << 3)
443*de1e4e89SAndroid Build Coastguard Worker 
444*de1e4e89SAndroid Build Coastguard Worker #define RTAX_FEATURE_MASK	(RTAX_FEATURE_ECN | RTAX_FEATURE_SACK | \
445*de1e4e89SAndroid Build Coastguard Worker 				 RTAX_FEATURE_TIMESTAMP | RTAX_FEATURE_ALLFRAG)
446*de1e4e89SAndroid Build Coastguard Worker 
447*de1e4e89SAndroid Build Coastguard Worker struct rta_session {
448*de1e4e89SAndroid Build Coastguard Worker 	__u8	proto;
449*de1e4e89SAndroid Build Coastguard Worker 	__u8	pad1;
450*de1e4e89SAndroid Build Coastguard Worker 	__u16	pad2;
451*de1e4e89SAndroid Build Coastguard Worker 
452*de1e4e89SAndroid Build Coastguard Worker 	union {
453*de1e4e89SAndroid Build Coastguard Worker 		struct {
454*de1e4e89SAndroid Build Coastguard Worker 			__u16	sport;
455*de1e4e89SAndroid Build Coastguard Worker 			__u16	dport;
456*de1e4e89SAndroid Build Coastguard Worker 		} ports;
457*de1e4e89SAndroid Build Coastguard Worker 
458*de1e4e89SAndroid Build Coastguard Worker 		struct {
459*de1e4e89SAndroid Build Coastguard Worker 			__u8	type;
460*de1e4e89SAndroid Build Coastguard Worker 			__u8	code;
461*de1e4e89SAndroid Build Coastguard Worker 			__u16	ident;
462*de1e4e89SAndroid Build Coastguard Worker 		} icmpt;
463*de1e4e89SAndroid Build Coastguard Worker 
464*de1e4e89SAndroid Build Coastguard Worker 		__u32		spi;
465*de1e4e89SAndroid Build Coastguard Worker 	} u;
466*de1e4e89SAndroid Build Coastguard Worker };
467*de1e4e89SAndroid Build Coastguard Worker 
468*de1e4e89SAndroid Build Coastguard Worker struct rta_mfc_stats {
469*de1e4e89SAndroid Build Coastguard Worker 	__u64	mfcs_packets;
470*de1e4e89SAndroid Build Coastguard Worker 	__u64	mfcs_bytes;
471*de1e4e89SAndroid Build Coastguard Worker 	__u64	mfcs_wrong_if;
472*de1e4e89SAndroid Build Coastguard Worker };
473*de1e4e89SAndroid Build Coastguard Worker 
474*de1e4e89SAndroid Build Coastguard Worker /****
475*de1e4e89SAndroid Build Coastguard Worker  *		General form of address family dependent message.
476*de1e4e89SAndroid Build Coastguard Worker  ****/
477*de1e4e89SAndroid Build Coastguard Worker 
478*de1e4e89SAndroid Build Coastguard Worker struct rtgenmsg {
479*de1e4e89SAndroid Build Coastguard Worker 	unsigned char		rtgen_family;
480*de1e4e89SAndroid Build Coastguard Worker };
481*de1e4e89SAndroid Build Coastguard Worker 
482*de1e4e89SAndroid Build Coastguard Worker /*****************************************************************
483*de1e4e89SAndroid Build Coastguard Worker  *		Link layer specific messages.
484*de1e4e89SAndroid Build Coastguard Worker  ****/
485*de1e4e89SAndroid Build Coastguard Worker 
486*de1e4e89SAndroid Build Coastguard Worker /* struct ifinfomsg
487*de1e4e89SAndroid Build Coastguard Worker  * passes link level specific information, not dependent
488*de1e4e89SAndroid Build Coastguard Worker  * on network protocol.
489*de1e4e89SAndroid Build Coastguard Worker  */
490*de1e4e89SAndroid Build Coastguard Worker 
491*de1e4e89SAndroid Build Coastguard Worker struct ifinfomsg {
492*de1e4e89SAndroid Build Coastguard Worker 	unsigned char	ifi_family;
493*de1e4e89SAndroid Build Coastguard Worker 	unsigned char	__ifi_pad;
494*de1e4e89SAndroid Build Coastguard Worker 	unsigned short	ifi_type;		/* ARPHRD_* */
495*de1e4e89SAndroid Build Coastguard Worker 	int		ifi_index;		/* Link index	*/
496*de1e4e89SAndroid Build Coastguard Worker 	unsigned	ifi_flags;		/* IFF_* flags	*/
497*de1e4e89SAndroid Build Coastguard Worker 	unsigned	ifi_change;		/* IFF_* change mask */
498*de1e4e89SAndroid Build Coastguard Worker };
499*de1e4e89SAndroid Build Coastguard Worker 
500*de1e4e89SAndroid Build Coastguard Worker /********************************************************************
501*de1e4e89SAndroid Build Coastguard Worker  *		prefix information
502*de1e4e89SAndroid Build Coastguard Worker  ****/
503*de1e4e89SAndroid Build Coastguard Worker 
504*de1e4e89SAndroid Build Coastguard Worker struct prefixmsg {
505*de1e4e89SAndroid Build Coastguard Worker 	unsigned char	prefix_family;
506*de1e4e89SAndroid Build Coastguard Worker 	unsigned char	prefix_pad1;
507*de1e4e89SAndroid Build Coastguard Worker 	unsigned short	prefix_pad2;
508*de1e4e89SAndroid Build Coastguard Worker 	int		prefix_ifindex;
509*de1e4e89SAndroid Build Coastguard Worker 	unsigned char	prefix_type;
510*de1e4e89SAndroid Build Coastguard Worker 	unsigned char	prefix_len;
511*de1e4e89SAndroid Build Coastguard Worker 	unsigned char	prefix_flags;
512*de1e4e89SAndroid Build Coastguard Worker 	unsigned char	prefix_pad3;
513*de1e4e89SAndroid Build Coastguard Worker };
514*de1e4e89SAndroid Build Coastguard Worker 
515*de1e4e89SAndroid Build Coastguard Worker enum
516*de1e4e89SAndroid Build Coastguard Worker {
517*de1e4e89SAndroid Build Coastguard Worker 	PREFIX_UNSPEC,
518*de1e4e89SAndroid Build Coastguard Worker 	PREFIX_ADDRESS,
519*de1e4e89SAndroid Build Coastguard Worker 	PREFIX_CACHEINFO,
520*de1e4e89SAndroid Build Coastguard Worker 	__PREFIX_MAX
521*de1e4e89SAndroid Build Coastguard Worker };
522*de1e4e89SAndroid Build Coastguard Worker 
523*de1e4e89SAndroid Build Coastguard Worker #define PREFIX_MAX	(__PREFIX_MAX - 1)
524*de1e4e89SAndroid Build Coastguard Worker 
525*de1e4e89SAndroid Build Coastguard Worker struct prefix_cacheinfo {
526*de1e4e89SAndroid Build Coastguard Worker 	__u32	preferred_time;
527*de1e4e89SAndroid Build Coastguard Worker 	__u32	valid_time;
528*de1e4e89SAndroid Build Coastguard Worker };
529*de1e4e89SAndroid Build Coastguard Worker 
530*de1e4e89SAndroid Build Coastguard Worker 
531*de1e4e89SAndroid Build Coastguard Worker /*****************************************************************
532*de1e4e89SAndroid Build Coastguard Worker  *		Traffic control messages.
533*de1e4e89SAndroid Build Coastguard Worker  ****/
534*de1e4e89SAndroid Build Coastguard Worker 
535*de1e4e89SAndroid Build Coastguard Worker struct tcmsg {
536*de1e4e89SAndroid Build Coastguard Worker 	unsigned char	tcm_family;
537*de1e4e89SAndroid Build Coastguard Worker 	unsigned char	tcm__pad1;
538*de1e4e89SAndroid Build Coastguard Worker 	unsigned short	tcm__pad2;
539*de1e4e89SAndroid Build Coastguard Worker 	int		tcm_ifindex;
540*de1e4e89SAndroid Build Coastguard Worker 	__u32		tcm_handle;
541*de1e4e89SAndroid Build Coastguard Worker 	__u32		tcm_parent;
542*de1e4e89SAndroid Build Coastguard Worker 	__u32		tcm_info;
543*de1e4e89SAndroid Build Coastguard Worker };
544*de1e4e89SAndroid Build Coastguard Worker 
545*de1e4e89SAndroid Build Coastguard Worker enum {
546*de1e4e89SAndroid Build Coastguard Worker 	TCA_UNSPEC,
547*de1e4e89SAndroid Build Coastguard Worker 	TCA_KIND,
548*de1e4e89SAndroid Build Coastguard Worker 	TCA_OPTIONS,
549*de1e4e89SAndroid Build Coastguard Worker 	TCA_STATS,
550*de1e4e89SAndroid Build Coastguard Worker 	TCA_XSTATS,
551*de1e4e89SAndroid Build Coastguard Worker 	TCA_RATE,
552*de1e4e89SAndroid Build Coastguard Worker 	TCA_FCNT,
553*de1e4e89SAndroid Build Coastguard Worker 	TCA_STATS2,
554*de1e4e89SAndroid Build Coastguard Worker 	TCA_STAB,
555*de1e4e89SAndroid Build Coastguard Worker 	TCA_PAD,
556*de1e4e89SAndroid Build Coastguard Worker 	TCA_DUMP_INVISIBLE,
557*de1e4e89SAndroid Build Coastguard Worker 	TCA_CHAIN,
558*de1e4e89SAndroid Build Coastguard Worker 	__TCA_MAX
559*de1e4e89SAndroid Build Coastguard Worker };
560*de1e4e89SAndroid Build Coastguard Worker 
561*de1e4e89SAndroid Build Coastguard Worker #define TCA_MAX (__TCA_MAX - 1)
562*de1e4e89SAndroid Build Coastguard Worker 
563*de1e4e89SAndroid Build Coastguard Worker #define TCA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcmsg))))
564*de1e4e89SAndroid Build Coastguard Worker #define TCA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcmsg))
565*de1e4e89SAndroid Build Coastguard Worker 
566*de1e4e89SAndroid Build Coastguard Worker /********************************************************************
567*de1e4e89SAndroid Build Coastguard Worker  *		Neighbor Discovery userland options
568*de1e4e89SAndroid Build Coastguard Worker  ****/
569*de1e4e89SAndroid Build Coastguard Worker 
570*de1e4e89SAndroid Build Coastguard Worker struct nduseroptmsg {
571*de1e4e89SAndroid Build Coastguard Worker 	unsigned char	nduseropt_family;
572*de1e4e89SAndroid Build Coastguard Worker 	unsigned char	nduseropt_pad1;
573*de1e4e89SAndroid Build Coastguard Worker 	unsigned short	nduseropt_opts_len;	/* Total length of options */
574*de1e4e89SAndroid Build Coastguard Worker 	int		nduseropt_ifindex;
575*de1e4e89SAndroid Build Coastguard Worker 	__u8		nduseropt_icmp_type;
576*de1e4e89SAndroid Build Coastguard Worker 	__u8		nduseropt_icmp_code;
577*de1e4e89SAndroid Build Coastguard Worker 	unsigned short	nduseropt_pad2;
578*de1e4e89SAndroid Build Coastguard Worker 	unsigned int	nduseropt_pad3;
579*de1e4e89SAndroid Build Coastguard Worker 	/* Followed by one or more ND options */
580*de1e4e89SAndroid Build Coastguard Worker };
581*de1e4e89SAndroid Build Coastguard Worker 
582*de1e4e89SAndroid Build Coastguard Worker enum {
583*de1e4e89SAndroid Build Coastguard Worker 	NDUSEROPT_UNSPEC,
584*de1e4e89SAndroid Build Coastguard Worker 	NDUSEROPT_SRCADDR,
585*de1e4e89SAndroid Build Coastguard Worker 	__NDUSEROPT_MAX
586*de1e4e89SAndroid Build Coastguard Worker };
587*de1e4e89SAndroid Build Coastguard Worker 
588*de1e4e89SAndroid Build Coastguard Worker #define NDUSEROPT_MAX	(__NDUSEROPT_MAX - 1)
589*de1e4e89SAndroid Build Coastguard Worker 
590*de1e4e89SAndroid Build Coastguard Worker /* RTnetlink multicast groups - backwards compatibility for userspace */
591*de1e4e89SAndroid Build Coastguard Worker #define RTMGRP_LINK		1
592*de1e4e89SAndroid Build Coastguard Worker #define RTMGRP_NOTIFY		2
593*de1e4e89SAndroid Build Coastguard Worker #define RTMGRP_NEIGH		4
594*de1e4e89SAndroid Build Coastguard Worker #define RTMGRP_TC		8
595*de1e4e89SAndroid Build Coastguard Worker 
596*de1e4e89SAndroid Build Coastguard Worker #define RTMGRP_IPV4_IFADDR	0x10
597*de1e4e89SAndroid Build Coastguard Worker #define RTMGRP_IPV4_MROUTE	0x20
598*de1e4e89SAndroid Build Coastguard Worker #define RTMGRP_IPV4_ROUTE	0x40
599*de1e4e89SAndroid Build Coastguard Worker #define RTMGRP_IPV4_RULE	0x80
600*de1e4e89SAndroid Build Coastguard Worker 
601*de1e4e89SAndroid Build Coastguard Worker #define RTMGRP_IPV6_IFADDR	0x100
602*de1e4e89SAndroid Build Coastguard Worker #define RTMGRP_IPV6_MROUTE	0x200
603*de1e4e89SAndroid Build Coastguard Worker #define RTMGRP_IPV6_ROUTE	0x400
604*de1e4e89SAndroid Build Coastguard Worker #define RTMGRP_IPV6_IFINFO	0x800
605*de1e4e89SAndroid Build Coastguard Worker 
606*de1e4e89SAndroid Build Coastguard Worker #define RTMGRP_DECnet_IFADDR    0x1000
607*de1e4e89SAndroid Build Coastguard Worker #define RTMGRP_DECnet_ROUTE     0x4000
608*de1e4e89SAndroid Build Coastguard Worker 
609*de1e4e89SAndroid Build Coastguard Worker #define RTMGRP_IPV6_PREFIX	0x20000
610*de1e4e89SAndroid Build Coastguard Worker 
611*de1e4e89SAndroid Build Coastguard Worker /* RTnetlink multicast groups */
612*de1e4e89SAndroid Build Coastguard Worker enum rtnetlink_groups {
613*de1e4e89SAndroid Build Coastguard Worker 	RTNLGRP_NONE,
614*de1e4e89SAndroid Build Coastguard Worker #define RTNLGRP_NONE		RTNLGRP_NONE
615*de1e4e89SAndroid Build Coastguard Worker 	RTNLGRP_LINK,
616*de1e4e89SAndroid Build Coastguard Worker #define RTNLGRP_LINK		RTNLGRP_LINK
617*de1e4e89SAndroid Build Coastguard Worker 	RTNLGRP_NOTIFY,
618*de1e4e89SAndroid Build Coastguard Worker #define RTNLGRP_NOTIFY		RTNLGRP_NOTIFY
619*de1e4e89SAndroid Build Coastguard Worker 	RTNLGRP_NEIGH,
620*de1e4e89SAndroid Build Coastguard Worker #define RTNLGRP_NEIGH		RTNLGRP_NEIGH
621*de1e4e89SAndroid Build Coastguard Worker 	RTNLGRP_TC,
622*de1e4e89SAndroid Build Coastguard Worker #define RTNLGRP_TC		RTNLGRP_TC
623*de1e4e89SAndroid Build Coastguard Worker 	RTNLGRP_IPV4_IFADDR,
624*de1e4e89SAndroid Build Coastguard Worker #define RTNLGRP_IPV4_IFADDR	RTNLGRP_IPV4_IFADDR
625*de1e4e89SAndroid Build Coastguard Worker 	RTNLGRP_IPV4_MROUTE,
626*de1e4e89SAndroid Build Coastguard Worker #define	RTNLGRP_IPV4_MROUTE	RTNLGRP_IPV4_MROUTE
627*de1e4e89SAndroid Build Coastguard Worker 	RTNLGRP_IPV4_ROUTE,
628*de1e4e89SAndroid Build Coastguard Worker #define RTNLGRP_IPV4_ROUTE	RTNLGRP_IPV4_ROUTE
629*de1e4e89SAndroid Build Coastguard Worker 	RTNLGRP_IPV4_RULE,
630*de1e4e89SAndroid Build Coastguard Worker #define RTNLGRP_IPV4_RULE	RTNLGRP_IPV4_RULE
631*de1e4e89SAndroid Build Coastguard Worker 	RTNLGRP_IPV6_IFADDR,
632*de1e4e89SAndroid Build Coastguard Worker #define RTNLGRP_IPV6_IFADDR	RTNLGRP_IPV6_IFADDR
633*de1e4e89SAndroid Build Coastguard Worker 	RTNLGRP_IPV6_MROUTE,
634*de1e4e89SAndroid Build Coastguard Worker #define RTNLGRP_IPV6_MROUTE	RTNLGRP_IPV6_MROUTE
635*de1e4e89SAndroid Build Coastguard Worker 	RTNLGRP_IPV6_ROUTE,
636*de1e4e89SAndroid Build Coastguard Worker #define RTNLGRP_IPV6_ROUTE	RTNLGRP_IPV6_ROUTE
637*de1e4e89SAndroid Build Coastguard Worker 	RTNLGRP_IPV6_IFINFO,
638*de1e4e89SAndroid Build Coastguard Worker #define RTNLGRP_IPV6_IFINFO	RTNLGRP_IPV6_IFINFO
639*de1e4e89SAndroid Build Coastguard Worker 	RTNLGRP_DECnet_IFADDR,
640*de1e4e89SAndroid Build Coastguard Worker #define RTNLGRP_DECnet_IFADDR	RTNLGRP_DECnet_IFADDR
641*de1e4e89SAndroid Build Coastguard Worker 	RTNLGRP_NOP2,
642*de1e4e89SAndroid Build Coastguard Worker 	RTNLGRP_DECnet_ROUTE,
643*de1e4e89SAndroid Build Coastguard Worker #define RTNLGRP_DECnet_ROUTE	RTNLGRP_DECnet_ROUTE
644*de1e4e89SAndroid Build Coastguard Worker 	RTNLGRP_DECnet_RULE,
645*de1e4e89SAndroid Build Coastguard Worker #define RTNLGRP_DECnet_RULE	RTNLGRP_DECnet_RULE
646*de1e4e89SAndroid Build Coastguard Worker 	RTNLGRP_NOP4,
647*de1e4e89SAndroid Build Coastguard Worker 	RTNLGRP_IPV6_PREFIX,
648*de1e4e89SAndroid Build Coastguard Worker #define RTNLGRP_IPV6_PREFIX	RTNLGRP_IPV6_PREFIX
649*de1e4e89SAndroid Build Coastguard Worker 	RTNLGRP_IPV6_RULE,
650*de1e4e89SAndroid Build Coastguard Worker #define RTNLGRP_IPV6_RULE	RTNLGRP_IPV6_RULE
651*de1e4e89SAndroid Build Coastguard Worker 	RTNLGRP_ND_USEROPT,
652*de1e4e89SAndroid Build Coastguard Worker #define RTNLGRP_ND_USEROPT	RTNLGRP_ND_USEROPT
653*de1e4e89SAndroid Build Coastguard Worker 	RTNLGRP_PHONET_IFADDR,
654*de1e4e89SAndroid Build Coastguard Worker #define RTNLGRP_PHONET_IFADDR	RTNLGRP_PHONET_IFADDR
655*de1e4e89SAndroid Build Coastguard Worker 	RTNLGRP_PHONET_ROUTE,
656*de1e4e89SAndroid Build Coastguard Worker #define RTNLGRP_PHONET_ROUTE	RTNLGRP_PHONET_ROUTE
657*de1e4e89SAndroid Build Coastguard Worker 	RTNLGRP_DCB,
658*de1e4e89SAndroid Build Coastguard Worker #define RTNLGRP_DCB		RTNLGRP_DCB
659*de1e4e89SAndroid Build Coastguard Worker 	RTNLGRP_IPV4_NETCONF,
660*de1e4e89SAndroid Build Coastguard Worker #define RTNLGRP_IPV4_NETCONF	RTNLGRP_IPV4_NETCONF
661*de1e4e89SAndroid Build Coastguard Worker 	RTNLGRP_IPV6_NETCONF,
662*de1e4e89SAndroid Build Coastguard Worker #define RTNLGRP_IPV6_NETCONF	RTNLGRP_IPV6_NETCONF
663*de1e4e89SAndroid Build Coastguard Worker 	RTNLGRP_MDB,
664*de1e4e89SAndroid Build Coastguard Worker #define RTNLGRP_MDB		RTNLGRP_MDB
665*de1e4e89SAndroid Build Coastguard Worker 	RTNLGRP_MPLS_ROUTE,
666*de1e4e89SAndroid Build Coastguard Worker #define RTNLGRP_MPLS_ROUTE	RTNLGRP_MPLS_ROUTE
667*de1e4e89SAndroid Build Coastguard Worker 	RTNLGRP_NSID,
668*de1e4e89SAndroid Build Coastguard Worker #define RTNLGRP_NSID		RTNLGRP_NSID
669*de1e4e89SAndroid Build Coastguard Worker 	RTNLGRP_MPLS_NETCONF,
670*de1e4e89SAndroid Build Coastguard Worker #define RTNLGRP_MPLS_NETCONF	RTNLGRP_MPLS_NETCONF
671*de1e4e89SAndroid Build Coastguard Worker 	RTNLGRP_IPV4_MROUTE_R,
672*de1e4e89SAndroid Build Coastguard Worker #define RTNLGRP_IPV4_MROUTE_R	RTNLGRP_IPV4_MROUTE_R
673*de1e4e89SAndroid Build Coastguard Worker 	RTNLGRP_IPV6_MROUTE_R,
674*de1e4e89SAndroid Build Coastguard Worker #define RTNLGRP_IPV6_MROUTE_R	RTNLGRP_IPV6_MROUTE_R
675*de1e4e89SAndroid Build Coastguard Worker 	__RTNLGRP_MAX
676*de1e4e89SAndroid Build Coastguard Worker };
677*de1e4e89SAndroid Build Coastguard Worker #define RTNLGRP_MAX	(__RTNLGRP_MAX - 1)
678*de1e4e89SAndroid Build Coastguard Worker 
679*de1e4e89SAndroid Build Coastguard Worker /* TC action piece */
680*de1e4e89SAndroid Build Coastguard Worker struct tcamsg {
681*de1e4e89SAndroid Build Coastguard Worker 	unsigned char	tca_family;
682*de1e4e89SAndroid Build Coastguard Worker 	unsigned char	tca__pad1;
683*de1e4e89SAndroid Build Coastguard Worker 	unsigned short	tca__pad2;
684*de1e4e89SAndroid Build Coastguard Worker };
685*de1e4e89SAndroid Build Coastguard Worker 
686*de1e4e89SAndroid Build Coastguard Worker enum {
687*de1e4e89SAndroid Build Coastguard Worker 	TCA_ROOT_UNSPEC,
688*de1e4e89SAndroid Build Coastguard Worker 	TCA_ROOT_TAB,
689*de1e4e89SAndroid Build Coastguard Worker #define TCA_ACT_TAB TCA_ROOT_TAB
690*de1e4e89SAndroid Build Coastguard Worker #define TCAA_MAX TCA_ROOT_TAB
691*de1e4e89SAndroid Build Coastguard Worker 	TCA_ROOT_FLAGS,
692*de1e4e89SAndroid Build Coastguard Worker 	TCA_ROOT_COUNT,
693*de1e4e89SAndroid Build Coastguard Worker 	TCA_ROOT_TIME_DELTA, /* in msecs */
694*de1e4e89SAndroid Build Coastguard Worker 	__TCA_ROOT_MAX,
695*de1e4e89SAndroid Build Coastguard Worker #define	TCA_ROOT_MAX (__TCA_ROOT_MAX - 1)
696*de1e4e89SAndroid Build Coastguard Worker };
697*de1e4e89SAndroid Build Coastguard Worker 
698*de1e4e89SAndroid Build Coastguard Worker #define TA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcamsg))))
699*de1e4e89SAndroid Build Coastguard Worker #define TA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcamsg))
700*de1e4e89SAndroid Build Coastguard Worker /* tcamsg flags stored in attribute TCA_ROOT_FLAGS
701*de1e4e89SAndroid Build Coastguard Worker  *
702*de1e4e89SAndroid Build Coastguard Worker  * TCA_FLAG_LARGE_DUMP_ON user->kernel to request for larger than TCA_ACT_MAX_PRIO
703*de1e4e89SAndroid Build Coastguard Worker  * actions in a dump. All dump responses will contain the number of actions
704*de1e4e89SAndroid Build Coastguard Worker  * being dumped stored in for user app's consumption in TCA_ROOT_COUNT
705*de1e4e89SAndroid Build Coastguard Worker  *
706*de1e4e89SAndroid Build Coastguard Worker  */
707*de1e4e89SAndroid Build Coastguard Worker #define TCA_FLAG_LARGE_DUMP_ON		(1 << 0)
708*de1e4e89SAndroid Build Coastguard Worker 
709*de1e4e89SAndroid Build Coastguard Worker /* New extended info filters for IFLA_EXT_MASK */
710*de1e4e89SAndroid Build Coastguard Worker #define RTEXT_FILTER_VF		(1 << 0)
711*de1e4e89SAndroid Build Coastguard Worker #define RTEXT_FILTER_BRVLAN	(1 << 1)
712*de1e4e89SAndroid Build Coastguard Worker #define RTEXT_FILTER_BRVLAN_COMPRESSED	(1 << 2)
713*de1e4e89SAndroid Build Coastguard Worker #define	RTEXT_FILTER_SKIP_STATS	(1 << 3)
714*de1e4e89SAndroid Build Coastguard Worker 
715*de1e4e89SAndroid Build Coastguard Worker /* End of information exported to user level */
716*de1e4e89SAndroid Build Coastguard Worker 
717*de1e4e89SAndroid Build Coastguard Worker 
718*de1e4e89SAndroid Build Coastguard Worker 
719*de1e4e89SAndroid Build Coastguard Worker #endif /* __LINUX_RTNETLINK_H */
720