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
16enum {
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)
135struct 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))
150struct 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};
161enum {
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
198enum 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
211enum 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};
219enum 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))
255struct 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)))
276struct rtvia {
277	__kernel_sa_family_t	rtvia_family;
278	__u8			rtvia_addr[0];
279};
280struct 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};
291enum {
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)
337struct 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};
354struct rta_mfc_stats {
355	__u64	mfcs_packets;
356	__u64	mfcs_bytes;
357	__u64	mfcs_wrong_if;
358};
359struct rtgenmsg {
360	unsigned char		rtgen_family;
361};
362struct 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};
370struct 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};
380enum
381{
382	PREFIX_UNSPEC,
383	PREFIX_ADDRESS,
384	PREFIX_CACHEINFO,
385	__PREFIX_MAX
386};
387#define PREFIX_MAX	(__PREFIX_MAX - 1)
388struct prefix_cacheinfo {
389	__u32	preferred_time;
390	__u32	valid_time;
391};
392struct 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)
403enum {
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))
424struct 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};
435enum {
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
458enum 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)
524struct tcamsg {
525	unsigned char	tca_family;
526	unsigned char	tca__pad1;
527	unsigned short	tca__pad2;
528};
529enum {
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