1 /*
2  * This header was generated from the Linux kernel headers by update_headers.py,
3  * to provide necessary information from kernel to userspace, such as constants,
4  * structures, and macros, and thus, contains no copyrightable information.
5  */
6 #ifndef _UAPI__LINUX_RTNETLINK_H
7 #define _UAPI__LINUX_RTNETLINK_H
8 #include <linux/types.h>
9 #include <linux/netlink.h>
10 #include <linux/if_link.h>
11 #include <linux/if_addr.h>
12 #include <linux/neighbour.h>
13 #define RTNL_FAMILY_IPMR		128
14 #define RTNL_FAMILY_IP6MR		129
15 #define RTNL_FAMILY_MAX			129
16 enum {
17 	RTM_BASE	= 16,
18 #define RTM_BASE	RTM_BASE
19 	RTM_NEWLINK	= 16,
20 #define RTM_NEWLINK	RTM_NEWLINK
21 	RTM_DELLINK,
22 #define RTM_DELLINK	RTM_DELLINK
23 	RTM_GETLINK,
24 #define RTM_GETLINK	RTM_GETLINK
25 	RTM_SETLINK,
26 #define RTM_SETLINK	RTM_SETLINK
27 	RTM_NEWADDR	= 20,
28 #define RTM_NEWADDR	RTM_NEWADDR
29 	RTM_DELADDR,
30 #define RTM_DELADDR	RTM_DELADDR
31 	RTM_GETADDR,
32 #define RTM_GETADDR	RTM_GETADDR
33 	RTM_NEWROUTE	= 24,
34 #define RTM_NEWROUTE	RTM_NEWROUTE
35 	RTM_DELROUTE,
36 #define RTM_DELROUTE	RTM_DELROUTE
37 	RTM_GETROUTE,
38 #define RTM_GETROUTE	RTM_GETROUTE
39 	RTM_NEWNEIGH	= 28,
40 #define RTM_NEWNEIGH	RTM_NEWNEIGH
41 	RTM_DELNEIGH,
42 #define RTM_DELNEIGH	RTM_DELNEIGH
43 	RTM_GETNEIGH,
44 #define RTM_GETNEIGH	RTM_GETNEIGH
45 	RTM_NEWRULE	= 32,
46 #define RTM_NEWRULE	RTM_NEWRULE
47 	RTM_DELRULE,
48 #define RTM_DELRULE	RTM_DELRULE
49 	RTM_GETRULE,
50 #define RTM_GETRULE	RTM_GETRULE
51 	RTM_NEWQDISC	= 36,
52 #define RTM_NEWQDISC	RTM_NEWQDISC
53 	RTM_DELQDISC,
54 #define RTM_DELQDISC	RTM_DELQDISC
55 	RTM_GETQDISC,
56 #define RTM_GETQDISC	RTM_GETQDISC
57 	RTM_NEWTCLASS	= 40,
58 #define RTM_NEWTCLASS	RTM_NEWTCLASS
59 	RTM_DELTCLASS,
60 #define RTM_DELTCLASS	RTM_DELTCLASS
61 	RTM_GETTCLASS,
62 #define RTM_GETTCLASS	RTM_GETTCLASS
63 	RTM_NEWTFILTER	= 44,
64 #define RTM_NEWTFILTER	RTM_NEWTFILTER
65 	RTM_DELTFILTER,
66 #define RTM_DELTFILTER	RTM_DELTFILTER
67 	RTM_GETTFILTER,
68 #define RTM_GETTFILTER	RTM_GETTFILTER
69 	RTM_NEWACTION	= 48,
70 #define RTM_NEWACTION   RTM_NEWACTION
71 	RTM_DELACTION,
72 #define RTM_DELACTION   RTM_DELACTION
73 	RTM_GETACTION,
74 #define RTM_GETACTION   RTM_GETACTION
75 	RTM_NEWPREFIX	= 52,
76 #define RTM_NEWPREFIX	RTM_NEWPREFIX
77 	RTM_GETMULTICAST = 58,
78 #define RTM_GETMULTICAST RTM_GETMULTICAST
79 	RTM_GETANYCAST	= 62,
80 #define RTM_GETANYCAST	RTM_GETANYCAST
81 	RTM_NEWNEIGHTBL	= 64,
82 #define RTM_NEWNEIGHTBL	RTM_NEWNEIGHTBL
83 	RTM_GETNEIGHTBL	= 66,
84 #define RTM_GETNEIGHTBL	RTM_GETNEIGHTBL
85 	RTM_SETNEIGHTBL,
86 #define RTM_SETNEIGHTBL	RTM_SETNEIGHTBL
87 	RTM_NEWNDUSEROPT = 68,
88 #define RTM_NEWNDUSEROPT RTM_NEWNDUSEROPT
89 	RTM_NEWADDRLABEL = 72,
90 #define RTM_NEWADDRLABEL RTM_NEWADDRLABEL
91 	RTM_DELADDRLABEL,
92 #define RTM_DELADDRLABEL RTM_DELADDRLABEL
93 	RTM_GETADDRLABEL,
94 #define RTM_GETADDRLABEL RTM_GETADDRLABEL
95 	RTM_GETDCB = 78,
96 #define RTM_GETDCB RTM_GETDCB
97 	RTM_SETDCB,
98 #define RTM_SETDCB RTM_SETDCB
99 	RTM_NEWNETCONF = 80,
100 #define RTM_NEWNETCONF RTM_NEWNETCONF
101 	RTM_DELNETCONF,
102 #define RTM_DELNETCONF RTM_DELNETCONF
103 	RTM_GETNETCONF = 82,
104 #define RTM_GETNETCONF RTM_GETNETCONF
105 	RTM_NEWMDB = 84,
106 #define RTM_NEWMDB RTM_NEWMDB
107 	RTM_DELMDB = 85,
108 #define RTM_DELMDB RTM_DELMDB
109 	RTM_GETMDB = 86,
110 #define RTM_GETMDB RTM_GETMDB
111 	RTM_NEWNSID = 88,
112 #define RTM_NEWNSID RTM_NEWNSID
113 	RTM_DELNSID = 89,
114 #define RTM_DELNSID RTM_DELNSID
115 	RTM_GETNSID = 90,
116 #define RTM_GETNSID RTM_GETNSID
117 	RTM_NEWSTATS = 92,
118 #define RTM_NEWSTATS RTM_NEWSTATS
119 	RTM_GETSTATS = 94,
120 #define RTM_GETSTATS RTM_GETSTATS
121 	RTM_NEWCACHEREPORT = 96,
122 #define RTM_NEWCACHEREPORT RTM_NEWCACHEREPORT
123 	RTM_NEWCHAIN = 100,
124 #define RTM_NEWCHAIN RTM_NEWCHAIN
125 	RTM_DELCHAIN,
126 #define RTM_DELCHAIN RTM_DELCHAIN
127 	RTM_GETCHAIN,
128 #define RTM_GETCHAIN RTM_GETCHAIN
129 	__RTM_MAX,
130 #define RTM_MAX		(((__RTM_MAX + 3) & ~3) - 1)
131 };
132 #define RTM_NR_MSGTYPES	(RTM_MAX + 1 - RTM_BASE)
133 #define RTM_NR_FAMILIES	(RTM_NR_MSGTYPES >> 2)
134 #define RTM_FAM(cmd)	(((cmd) - RTM_BASE) >> 2)
135 struct rtattr {
136 	unsigned short	rta_len;
137 	unsigned short	rta_type;
138 };
139 #define RTA_ALIGNTO	4U
140 #define RTA_ALIGN(len) ( ((len)+RTA_ALIGNTO-1) & ~(RTA_ALIGNTO-1) )
141 #define RTA_OK(rta,len) ((len) >= (int)sizeof(struct rtattr) && \
142 			 (rta)->rta_len >= sizeof(struct rtattr) && \
143 			 (rta)->rta_len <= (len))
144 #define RTA_NEXT(rta,attrlen)	((attrlen) -= RTA_ALIGN((rta)->rta_len), \
145 				 (struct rtattr*)(((char*)(rta)) + RTA_ALIGN((rta)->rta_len)))
146 #define RTA_LENGTH(len)	(RTA_ALIGN(sizeof(struct rtattr)) + (len))
147 #define RTA_SPACE(len)	RTA_ALIGN(RTA_LENGTH(len))
148 #define RTA_DATA(rta)   ((void*)(((char*)(rta)) + RTA_LENGTH(0)))
149 #define RTA_PAYLOAD(rta) ((int)((rta)->rta_len) - RTA_LENGTH(0))
150 struct rtmsg {
151 	unsigned char		rtm_family;
152 	unsigned char		rtm_dst_len;
153 	unsigned char		rtm_src_len;
154 	unsigned char		rtm_tos;
155 	unsigned char		rtm_table;
156 	unsigned char		rtm_protocol;
157 	unsigned char		rtm_scope;
158 	unsigned char		rtm_type;
159 	unsigned		rtm_flags;
160 };
161 enum {
162 	RTN_UNSPEC,
163 	RTN_UNICAST,
164 	RTN_LOCAL,
165 	RTN_BROADCAST,
166 	RTN_ANYCAST,
167 	RTN_MULTICAST,
168 	RTN_BLACKHOLE,
169 	RTN_UNREACHABLE,
170 	RTN_PROHIBIT,
171 	RTN_THROW,
172 	RTN_NAT,
173 	RTN_XRESOLVE,
174 	__RTN_MAX
175 };
176 #define RTN_MAX (__RTN_MAX - 1)
177 #define RTPROT_UNSPEC	0
178 #define RTPROT_REDIRECT	1
179 #define RTPROT_KERNEL	2
180 #define RTPROT_BOOT	3
181 #define RTPROT_STATIC	4
182 #define RTPROT_GATED	8
183 #define RTPROT_RA	9
184 #define RTPROT_MRT	10
185 #define RTPROT_ZEBRA	11
186 #define RTPROT_BIRD	12
187 #define RTPROT_DNROUTED	13
188 #define RTPROT_XORP	14
189 #define RTPROT_NTK	15
190 #define RTPROT_DHCP	16
191 #define RTPROT_MROUTED	17
192 #define RTPROT_BABEL	42
193 #define RTPROT_BGP	186
194 #define RTPROT_ISIS	187
195 #define RTPROT_OSPF	188
196 #define RTPROT_RIP	189
197 #define RTPROT_EIGRP	192
198 enum rt_scope_t {
199 	RT_SCOPE_UNIVERSE=0,
200 	RT_SCOPE_SITE=200,
201 	RT_SCOPE_LINK=253,
202 	RT_SCOPE_HOST=254,
203 	RT_SCOPE_NOWHERE=255
204 };
205 #define RTM_F_NOTIFY		0x100
206 #define RTM_F_CLONED		0x200
207 #define RTM_F_EQUALIZE		0x400
208 #define RTM_F_PREFIX		0x800
209 #define RTM_F_LOOKUP_TABLE	0x1000
210 #define RTM_F_FIB_MATCH	        0x2000
211 enum rt_class_t {
212 	RT_TABLE_UNSPEC=0,
213 	RT_TABLE_COMPAT=252,
214 	RT_TABLE_DEFAULT=253,
215 	RT_TABLE_MAIN=254,
216 	RT_TABLE_LOCAL=255,
217 	RT_TABLE_MAX=0xFFFFFFFF
218 };
219 enum rtattr_type_t {
220 	RTA_UNSPEC,
221 	RTA_DST,
222 	RTA_SRC,
223 	RTA_IIF,
224 	RTA_OIF,
225 	RTA_GATEWAY,
226 	RTA_PRIORITY,
227 	RTA_PREFSRC,
228 	RTA_METRICS,
229 	RTA_MULTIPATH,
230 	RTA_PROTOINFO,
231 	RTA_FLOW,
232 	RTA_CACHEINFO,
233 	RTA_SESSION,
234 	RTA_MP_ALGO,
235 	RTA_TABLE,
236 	RTA_MARK,
237 	RTA_MFC_STATS,
238 	RTA_VIA,
239 	RTA_NEWDST,
240 	RTA_PREF,
241 	RTA_ENCAP_TYPE,
242 	RTA_ENCAP,
243 	RTA_EXPIRES,
244 	RTA_PAD,
245 	RTA_UID,
246 	RTA_TTL_PROPAGATE,
247 	RTA_IP_PROTO,
248 	RTA_SPORT,
249 	RTA_DPORT,
250 	__RTA_MAX
251 };
252 #define RTA_MAX (__RTA_MAX - 1)
253 #define RTM_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct rtmsg))))
254 #define RTM_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct rtmsg))
255 struct rtnexthop {
256 	unsigned short		rtnh_len;
257 	unsigned char		rtnh_flags;
258 	unsigned char		rtnh_hops;
259 	int			rtnh_ifindex;
260 };
261 #define RTNH_F_DEAD		1
262 #define RTNH_F_PERVASIVE	2
263 #define RTNH_F_ONLINK		4
264 #define RTNH_F_OFFLOAD		8
265 #define RTNH_F_LINKDOWN		16
266 #define RTNH_F_UNRESOLVED	32
267 #define RTNH_COMPARE_MASK	(RTNH_F_DEAD | RTNH_F_LINKDOWN | RTNH_F_OFFLOAD)
268 #define RTNH_ALIGNTO	4
269 #define RTNH_ALIGN(len) ( ((len)+RTNH_ALIGNTO-1) & ~(RTNH_ALIGNTO-1) )
270 #define RTNH_OK(rtnh,len) ((rtnh)->rtnh_len >= sizeof(struct rtnexthop) && \
271 			   ((int)(rtnh)->rtnh_len) <= (len))
272 #define RTNH_NEXT(rtnh)	((struct rtnexthop*)(((char*)(rtnh)) + RTNH_ALIGN((rtnh)->rtnh_len)))
273 #define RTNH_LENGTH(len) (RTNH_ALIGN(sizeof(struct rtnexthop)) + (len))
274 #define RTNH_SPACE(len)	RTNH_ALIGN(RTNH_LENGTH(len))
275 #define RTNH_DATA(rtnh)   ((struct rtattr*)(((char*)(rtnh)) + RTNH_LENGTH(0)))
276 struct rtvia {
277 	__kernel_sa_family_t	rtvia_family;
278 	__u8			rtvia_addr[0];
279 };
280 struct rta_cacheinfo {
281 	__u32	rta_clntref;
282 	__u32	rta_lastuse;
283 	__s32	rta_expires;
284 	__u32	rta_error;
285 	__u32	rta_used;
286 #define RTNETLINK_HAVE_PEERINFO 1
287 	__u32	rta_id;
288 	__u32	rta_ts;
289 	__u32	rta_tsage;
290 };
291 enum {
292 	RTAX_UNSPEC,
293 #define RTAX_UNSPEC RTAX_UNSPEC
294 	RTAX_LOCK,
295 #define RTAX_LOCK RTAX_LOCK
296 	RTAX_MTU,
297 #define RTAX_MTU RTAX_MTU
298 	RTAX_WINDOW,
299 #define RTAX_WINDOW RTAX_WINDOW
300 	RTAX_RTT,
301 #define RTAX_RTT RTAX_RTT
302 	RTAX_RTTVAR,
303 #define RTAX_RTTVAR RTAX_RTTVAR
304 	RTAX_SSTHRESH,
305 #define RTAX_SSTHRESH RTAX_SSTHRESH
306 	RTAX_CWND,
307 #define RTAX_CWND RTAX_CWND
308 	RTAX_ADVMSS,
309 #define RTAX_ADVMSS RTAX_ADVMSS
310 	RTAX_REORDERING,
311 #define RTAX_REORDERING RTAX_REORDERING
312 	RTAX_HOPLIMIT,
313 #define RTAX_HOPLIMIT RTAX_HOPLIMIT
314 	RTAX_INITCWND,
315 #define RTAX_INITCWND RTAX_INITCWND
316 	RTAX_FEATURES,
317 #define RTAX_FEATURES RTAX_FEATURES
318 	RTAX_RTO_MIN,
319 #define RTAX_RTO_MIN RTAX_RTO_MIN
320 	RTAX_INITRWND,
321 #define RTAX_INITRWND RTAX_INITRWND
322 	RTAX_QUICKACK,
323 #define RTAX_QUICKACK RTAX_QUICKACK
324 	RTAX_CC_ALGO,
325 #define RTAX_CC_ALGO RTAX_CC_ALGO
326 	RTAX_FASTOPEN_NO_COOKIE,
327 #define RTAX_FASTOPEN_NO_COOKIE RTAX_FASTOPEN_NO_COOKIE
328 	__RTAX_MAX
329 };
330 #define RTAX_MAX (__RTAX_MAX - 1)
331 #define RTAX_FEATURE_ECN	(1 << 0)
332 #define RTAX_FEATURE_SACK	(1 << 1)
333 #define RTAX_FEATURE_TIMESTAMP	(1 << 2)
334 #define RTAX_FEATURE_ALLFRAG	(1 << 3)
335 #define RTAX_FEATURE_MASK	(RTAX_FEATURE_ECN | RTAX_FEATURE_SACK | \
336 				 RTAX_FEATURE_TIMESTAMP | RTAX_FEATURE_ALLFRAG)
337 struct rta_session {
338 	__u8	proto;
339 	__u8	pad1;
340 	__u16	pad2;
341 	union {
342 		struct {
343 			__u16	sport;
344 			__u16	dport;
345 		} ports;
346 		struct {
347 			__u8	type;
348 			__u8	code;
349 			__u16	ident;
350 		} icmpt;
351 		__u32		spi;
352 	} u;
353 };
354 struct rta_mfc_stats {
355 	__u64	mfcs_packets;
356 	__u64	mfcs_bytes;
357 	__u64	mfcs_wrong_if;
358 };
359 struct rtgenmsg {
360 	unsigned char		rtgen_family;
361 };
362 struct ifinfomsg {
363 	unsigned char	ifi_family;
364 	unsigned char	__ifi_pad;
365 	unsigned short	ifi_type;
366 	int		ifi_index;
367 	unsigned	ifi_flags;
368 	unsigned	ifi_change;
369 };
370 struct prefixmsg {
371 	unsigned char	prefix_family;
372 	unsigned char	prefix_pad1;
373 	unsigned short	prefix_pad2;
374 	int		prefix_ifindex;
375 	unsigned char	prefix_type;
376 	unsigned char	prefix_len;
377 	unsigned char	prefix_flags;
378 	unsigned char	prefix_pad3;
379 };
380 enum
381 {
382 	PREFIX_UNSPEC,
383 	PREFIX_ADDRESS,
384 	PREFIX_CACHEINFO,
385 	__PREFIX_MAX
386 };
387 #define PREFIX_MAX	(__PREFIX_MAX - 1)
388 struct prefix_cacheinfo {
389 	__u32	preferred_time;
390 	__u32	valid_time;
391 };
392 struct tcmsg {
393 	unsigned char	tcm_family;
394 	unsigned char	tcm__pad1;
395 	unsigned short	tcm__pad2;
396 	int		tcm_ifindex;
397 	__u32		tcm_handle;
398 	__u32		tcm_parent;
399 #define tcm_block_index tcm_parent
400 	__u32		tcm_info;
401 };
402 #define TCM_IFINDEX_MAGIC_BLOCK (0xFFFFFFFFU)
403 enum {
404 	TCA_UNSPEC,
405 	TCA_KIND,
406 	TCA_OPTIONS,
407 	TCA_STATS,
408 	TCA_XSTATS,
409 	TCA_RATE,
410 	TCA_FCNT,
411 	TCA_STATS2,
412 	TCA_STAB,
413 	TCA_PAD,
414 	TCA_DUMP_INVISIBLE,
415 	TCA_CHAIN,
416 	TCA_HW_OFFLOAD,
417 	TCA_INGRESS_BLOCK,
418 	TCA_EGRESS_BLOCK,
419 	__TCA_MAX
420 };
421 #define TCA_MAX (__TCA_MAX - 1)
422 #define TCA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcmsg))))
423 #define TCA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcmsg))
424 struct nduseroptmsg {
425 	unsigned char	nduseropt_family;
426 	unsigned char	nduseropt_pad1;
427 	unsigned short	nduseropt_opts_len;
428 	int		nduseropt_ifindex;
429 	__u8		nduseropt_icmp_type;
430 	__u8		nduseropt_icmp_code;
431 	unsigned short	nduseropt_pad2;
432 	unsigned int	nduseropt_pad3;
433 
434 };
435 enum {
436 	NDUSEROPT_UNSPEC,
437 	NDUSEROPT_SRCADDR,
438 	__NDUSEROPT_MAX
439 };
440 #define NDUSEROPT_MAX	(__NDUSEROPT_MAX - 1)
441 #ifndef __KERNEL__
442 #define RTMGRP_LINK		1
443 #define RTMGRP_NOTIFY		2
444 #define RTMGRP_NEIGH		4
445 #define RTMGRP_TC		8
446 #define RTMGRP_IPV4_IFADDR	0x10
447 #define RTMGRP_IPV4_MROUTE	0x20
448 #define RTMGRP_IPV4_ROUTE	0x40
449 #define RTMGRP_IPV4_RULE	0x80
450 #define RTMGRP_IPV6_IFADDR	0x100
451 #define RTMGRP_IPV6_MROUTE	0x200
452 #define RTMGRP_IPV6_ROUTE	0x400
453 #define RTMGRP_IPV6_IFINFO	0x800
454 #define RTMGRP_DECnet_IFADDR    0x1000
455 #define RTMGRP_DECnet_ROUTE     0x4000
456 #define RTMGRP_IPV6_PREFIX	0x20000
457 #endif
458 enum rtnetlink_groups {
459 	RTNLGRP_NONE,
460 #define RTNLGRP_NONE		RTNLGRP_NONE
461 	RTNLGRP_LINK,
462 #define RTNLGRP_LINK		RTNLGRP_LINK
463 	RTNLGRP_NOTIFY,
464 #define RTNLGRP_NOTIFY		RTNLGRP_NOTIFY
465 	RTNLGRP_NEIGH,
466 #define RTNLGRP_NEIGH		RTNLGRP_NEIGH
467 	RTNLGRP_TC,
468 #define RTNLGRP_TC		RTNLGRP_TC
469 	RTNLGRP_IPV4_IFADDR,
470 #define RTNLGRP_IPV4_IFADDR	RTNLGRP_IPV4_IFADDR
471 	RTNLGRP_IPV4_MROUTE,
472 #define	RTNLGRP_IPV4_MROUTE	RTNLGRP_IPV4_MROUTE
473 	RTNLGRP_IPV4_ROUTE,
474 #define RTNLGRP_IPV4_ROUTE	RTNLGRP_IPV4_ROUTE
475 	RTNLGRP_IPV4_RULE,
476 #define RTNLGRP_IPV4_RULE	RTNLGRP_IPV4_RULE
477 	RTNLGRP_IPV6_IFADDR,
478 #define RTNLGRP_IPV6_IFADDR	RTNLGRP_IPV6_IFADDR
479 	RTNLGRP_IPV6_MROUTE,
480 #define RTNLGRP_IPV6_MROUTE	RTNLGRP_IPV6_MROUTE
481 	RTNLGRP_IPV6_ROUTE,
482 #define RTNLGRP_IPV6_ROUTE	RTNLGRP_IPV6_ROUTE
483 	RTNLGRP_IPV6_IFINFO,
484 #define RTNLGRP_IPV6_IFINFO	RTNLGRP_IPV6_IFINFO
485 	RTNLGRP_DECnet_IFADDR,
486 #define RTNLGRP_DECnet_IFADDR	RTNLGRP_DECnet_IFADDR
487 	RTNLGRP_NOP2,
488 	RTNLGRP_DECnet_ROUTE,
489 #define RTNLGRP_DECnet_ROUTE	RTNLGRP_DECnet_ROUTE
490 	RTNLGRP_DECnet_RULE,
491 #define RTNLGRP_DECnet_RULE	RTNLGRP_DECnet_RULE
492 	RTNLGRP_NOP4,
493 	RTNLGRP_IPV6_PREFIX,
494 #define RTNLGRP_IPV6_PREFIX	RTNLGRP_IPV6_PREFIX
495 	RTNLGRP_IPV6_RULE,
496 #define RTNLGRP_IPV6_RULE	RTNLGRP_IPV6_RULE
497 	RTNLGRP_ND_USEROPT,
498 #define RTNLGRP_ND_USEROPT	RTNLGRP_ND_USEROPT
499 	RTNLGRP_PHONET_IFADDR,
500 #define RTNLGRP_PHONET_IFADDR	RTNLGRP_PHONET_IFADDR
501 	RTNLGRP_PHONET_ROUTE,
502 #define RTNLGRP_PHONET_ROUTE	RTNLGRP_PHONET_ROUTE
503 	RTNLGRP_DCB,
504 #define RTNLGRP_DCB		RTNLGRP_DCB
505 	RTNLGRP_IPV4_NETCONF,
506 #define RTNLGRP_IPV4_NETCONF	RTNLGRP_IPV4_NETCONF
507 	RTNLGRP_IPV6_NETCONF,
508 #define RTNLGRP_IPV6_NETCONF	RTNLGRP_IPV6_NETCONF
509 	RTNLGRP_MDB,
510 #define RTNLGRP_MDB		RTNLGRP_MDB
511 	RTNLGRP_MPLS_ROUTE,
512 #define RTNLGRP_MPLS_ROUTE	RTNLGRP_MPLS_ROUTE
513 	RTNLGRP_NSID,
514 #define RTNLGRP_NSID		RTNLGRP_NSID
515 	RTNLGRP_MPLS_NETCONF,
516 #define RTNLGRP_MPLS_NETCONF	RTNLGRP_MPLS_NETCONF
517 	RTNLGRP_IPV4_MROUTE_R,
518 #define RTNLGRP_IPV4_MROUTE_R	RTNLGRP_IPV4_MROUTE_R
519 	RTNLGRP_IPV6_MROUTE_R,
520 #define RTNLGRP_IPV6_MROUTE_R	RTNLGRP_IPV6_MROUTE_R
521 	__RTNLGRP_MAX
522 };
523 #define RTNLGRP_MAX	(__RTNLGRP_MAX - 1)
524 struct tcamsg {
525 	unsigned char	tca_family;
526 	unsigned char	tca__pad1;
527 	unsigned short	tca__pad2;
528 };
529 enum {
530 	TCA_ROOT_UNSPEC,
531 	TCA_ROOT_TAB,
532 #define TCA_ACT_TAB TCA_ROOT_TAB
533 #define TCAA_MAX TCA_ROOT_TAB
534 	TCA_ROOT_FLAGS,
535 	TCA_ROOT_COUNT,
536 	TCA_ROOT_TIME_DELTA,
537 	__TCA_ROOT_MAX,
538 #define	TCA_ROOT_MAX (__TCA_ROOT_MAX - 1)
539 };
540 #define TA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcamsg))))
541 #define TA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcamsg))
542 #define TCA_FLAG_LARGE_DUMP_ON		(1 << 0)
543 #define RTEXT_FILTER_VF		(1 << 0)
544 #define RTEXT_FILTER_BRVLAN	(1 << 1)
545 #define RTEXT_FILTER_BRVLAN_COMPRESSED	(1 << 2)
546 #define	RTEXT_FILTER_SKIP_STATS	(1 << 3)
547 #endif
548