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