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