rtnetlink.h revision 5472ac6f9fab8632b89da31df56419c8423b020d
15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef __LINUX_RTNETLINK_H
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define __LINUX_RTNETLINK_H
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include <linux/netlink.h>
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include <linux/if_link.h>
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include <linux/if_addr.h>
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include <linux/neighbour.h>
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/****
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *		Routing/neighbour discovery messages.
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ****/
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* Types of messages */
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)enum {
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	RTM_BASE	= 16,
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define RTM_BASE	RTM_BASE
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	RTM_NEWLINK	= 16,
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define RTM_NEWLINK	RTM_NEWLINK
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	RTM_DELLINK,
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define RTM_DELLINK	RTM_DELLINK
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	RTM_GETLINK,
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define RTM_GETLINK	RTM_GETLINK
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	RTM_SETLINK,
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define RTM_SETLINK	RTM_SETLINK
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
288abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)	RTM_NEWADDR	= 20,
2953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#define RTM_NEWADDR	RTM_NEWADDR
30323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)	RTM_DELADDR,
31591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#define RTM_DELADDR	RTM_DELADDR
32591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch	RTM_GETADDR,
335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define RTM_GETADDR	RTM_GETADDR
34c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	RTM_NEWROUTE	= 24,
36df95704c49daea886ddad70775bda23618d6274dBen Murdoch#define RTM_NEWROUTE	RTM_NEWROUTE
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	RTM_DELROUTE,
38323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)#define RTM_DELROUTE	RTM_DELROUTE
39323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)	RTM_GETROUTE,
40323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)#define RTM_GETROUTE	RTM_GETROUTE
41323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)
42323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)	RTM_NEWNEIGH	= 28,
43323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)#define RTM_NEWNEIGH	RTM_NEWNEIGH
447242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci	RTM_DELNEIGH,
45323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)#define RTM_DELNEIGH	RTM_DELNEIGH
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	RTM_GETNEIGH,
47323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)#define RTM_GETNEIGH	RTM_GETNEIGH
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
49323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)	RTM_NEWRULE	= 32,
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define RTM_NEWRULE	RTM_NEWRULE
515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	RTM_DELRULE,
525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define RTM_DELRULE	RTM_DELRULE
53323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)	RTM_GETRULE,
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define RTM_GETRULE	RTM_GETRULE
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
56323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)	RTM_NEWQDISC	= 36,
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define RTM_NEWQDISC	RTM_NEWQDISC
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	RTM_DELQDISC,
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define RTM_DELQDISC	RTM_DELQDISC
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	RTM_GETQDISC,
61df95704c49daea886ddad70775bda23618d6274dBen Murdoch#define RTM_GETQDISC	RTM_GETQDISC
62df95704c49daea886ddad70775bda23618d6274dBen Murdoch
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	RTM_NEWTCLASS	= 40,
6409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#define RTM_NEWTCLASS	RTM_NEWTCLASS
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	RTM_DELTCLASS,
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define RTM_DELTCLASS	RTM_DELTCLASS
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	RTM_GETTCLASS,
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define RTM_GETTCLASS	RTM_GETTCLASS
69926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	RTM_NEWTFILTER	= 44,
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define RTM_NEWTFILTER	RTM_NEWTFILTER
72926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)	RTM_DELTFILTER,
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define RTM_DELTFILTER	RTM_DELTFILTER
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	RTM_GETTFILTER,
755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define RTM_GETTFILTER	RTM_GETTFILTER
765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	RTM_NEWACTION	= 48,
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define RTM_NEWACTION   RTM_NEWACTION
795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)	RTM_DELACTION,
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define RTM_DELACTION   RTM_DELACTION
81c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)	RTM_GETACTION,
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define RTM_GETACTION   RTM_GETACTION
835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
84	RTM_NEWPREFIX	= 52,
85#define RTM_NEWPREFIX	RTM_NEWPREFIX
86
87	RTM_GETMULTICAST = 58,
88#define RTM_GETMULTICAST RTM_GETMULTICAST
89
90	RTM_GETANYCAST	= 62,
91#define RTM_GETANYCAST	RTM_GETANYCAST
92
93	RTM_NEWNEIGHTBL	= 64,
94#define RTM_NEWNEIGHTBL	RTM_NEWNEIGHTBL
95	RTM_GETNEIGHTBL	= 66,
96#define RTM_GETNEIGHTBL	RTM_GETNEIGHTBL
97	RTM_SETNEIGHTBL,
98#define RTM_SETNEIGHTBL	RTM_SETNEIGHTBL
99
100	RTM_NEWNDUSEROPT = 68,
101#define RTM_NEWNDUSEROPT RTM_NEWNDUSEROPT
102
103	__RTM_MAX,
104#define RTM_MAX		(((__RTM_MAX + 3) & ~3) - 1)
105};
106
107#define RTM_NR_MSGTYPES	(RTM_MAX + 1 - RTM_BASE)
108#define RTM_NR_FAMILIES	(RTM_NR_MSGTYPES >> 2)
109#define RTM_FAM(cmd)	(((cmd) - RTM_BASE) >> 2)
110
111/*
112   Generic structure for encapsulation of optional route information.
113   It is reminiscent of sockaddr, but with sa_family replaced
114   with attribute type.
115 */
116
117struct rtattr
118{
119	unsigned short	rta_len;
120	unsigned short	rta_type;
121};
122
123/* Macros to handle rtattributes */
124
125#define RTA_ALIGNTO	4
126#define RTA_ALIGN(len) ( ((len)+RTA_ALIGNTO-1) & ~(RTA_ALIGNTO-1) )
127#define RTA_OK(rta,len) ((len) >= (int)sizeof(struct rtattr) && \
128			 (rta)->rta_len >= sizeof(struct rtattr) && \
129			 (rta)->rta_len <= (len))
130#define RTA_NEXT(rta,attrlen)	((attrlen) -= RTA_ALIGN((rta)->rta_len), \
131				 (struct rtattr*)(((char*)(rta)) + RTA_ALIGN((rta)->rta_len)))
132#define RTA_LENGTH(len)	(RTA_ALIGN(sizeof(struct rtattr)) + (len))
133#define RTA_SPACE(len)	RTA_ALIGN(RTA_LENGTH(len))
134#define RTA_DATA(rta)   ((void*)(((char*)(rta)) + RTA_LENGTH(0)))
135#define RTA_PAYLOAD(rta) ((int)((rta)->rta_len) - RTA_LENGTH(0))
136
137
138
139
140/******************************************************************************
141 *		Definitions used in routing table administration.
142 ****/
143
144struct rtmsg
145{
146	unsigned char		rtm_family;
147	unsigned char		rtm_dst_len;
148	unsigned char		rtm_src_len;
149	unsigned char		rtm_tos;
150
151	unsigned char		rtm_table;	/* Routing table id */
152	unsigned char		rtm_protocol;	/* Routing protocol; see below	*/
153	unsigned char		rtm_scope;	/* See below */
154	unsigned char		rtm_type;	/* See below	*/
155
156	unsigned		rtm_flags;
157};
158
159/* rtm_type */
160
161enum
162{
163	RTN_UNSPEC,
164	RTN_UNICAST,		/* Gateway or direct route	*/
165	RTN_LOCAL,		/* Accept locally		*/
166	RTN_BROADCAST,		/* Accept locally as broadcast,
167				   send as broadcast */
168	RTN_ANYCAST,		/* Accept locally as broadcast,
169				   but send as unicast */
170	RTN_MULTICAST,		/* Multicast route		*/
171	RTN_BLACKHOLE,		/* Drop				*/
172	RTN_UNREACHABLE,	/* Destination is unreachable   */
173	RTN_PROHIBIT,		/* Administratively prohibited	*/
174	RTN_THROW,		/* Not in this table		*/
175	RTN_NAT,		/* Translate this address	*/
176	RTN_XRESOLVE,		/* Use external resolver	*/
177	__RTN_MAX
178};
179
180#define RTN_MAX (__RTN_MAX - 1)
181
182
183/* rtm_protocol */
184
185#define RTPROT_UNSPEC	0
186#define RTPROT_REDIRECT	1	/* Route installed by ICMP redirects;
187				   not used by current IPv4 */
188#define RTPROT_KERNEL	2	/* Route installed by kernel		*/
189#define RTPROT_BOOT	3	/* Route installed during boot		*/
190#define RTPROT_STATIC	4	/* Route installed by administrator	*/
191
192/* Values of protocol >= RTPROT_STATIC are not interpreted by kernel;
193   they are just passed from user and back as is.
194   It will be used by hypothetical multiple routing daemons.
195   Note that protocol values should be standardized in order to
196   avoid conflicts.
197 */
198
199#define RTPROT_GATED	8	/* Apparently, GateD */
200#define RTPROT_RA	9	/* RDISC/ND router advertisements */
201#define RTPROT_MRT	10	/* Merit MRT */
202#define RTPROT_ZEBRA	11	/* Zebra */
203#define RTPROT_BIRD	12	/* BIRD */
204#define RTPROT_DNROUTED	13	/* DECnet routing daemon */
205#define RTPROT_XORP	14	/* XORP */
206#define RTPROT_NTK	15	/* Netsukuku */
207
208/* rtm_scope
209
210   Really it is not scope, but sort of distance to the destination.
211   NOWHERE are reserved for not existing destinations, HOST is our
212   local addresses, LINK are destinations, located on directly attached
213   link and UNIVERSE is everywhere in the Universe.
214
215   Intermediate values are also possible f.e. interior routes
216   could be assigned a value between UNIVERSE and LINK.
217*/
218
219enum rt_scope_t
220{
221	RT_SCOPE_UNIVERSE=0,
222/* User defined values  */
223	RT_SCOPE_SITE=200,
224	RT_SCOPE_LINK=253,
225	RT_SCOPE_HOST=254,
226	RT_SCOPE_NOWHERE=255
227};
228
229/* rtm_flags */
230
231#define RTM_F_NOTIFY		0x100	/* Notify user of route change	*/
232#define RTM_F_CLONED		0x200	/* This route is cloned		*/
233#define RTM_F_EQUALIZE		0x400	/* Multipath equalizer: NI	*/
234#define RTM_F_PREFIX		0x800	/* Prefix addresses		*/
235
236/* Reserved table identifiers */
237
238enum rt_class_t
239{
240	RT_TABLE_UNSPEC=0,
241/* User defined values */
242	RT_TABLE_DEFAULT=253,
243	RT_TABLE_MAIN=254,
244	RT_TABLE_LOCAL=255,
245	RT_TABLE_MAX=0xFFFFFFFF
246};
247
248
249/* Routing message attributes */
250
251enum rtattr_type_t
252{
253	RTA_UNSPEC,
254	RTA_DST,
255	RTA_SRC,
256	RTA_IIF,
257	RTA_OIF,
258	RTA_GATEWAY,
259	RTA_PRIORITY,
260	RTA_PREFSRC,
261	RTA_METRICS,
262	RTA_MULTIPATH,
263	RTA_PROTOINFO,
264	RTA_FLOW,
265	RTA_CACHEINFO,
266	RTA_SESSION,
267	RTA_MP_ALGO, /* no longer used */
268	RTA_TABLE,
269	__RTA_MAX
270};
271
272#define RTA_MAX (__RTA_MAX - 1)
273
274#define RTM_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct rtmsg))))
275#define RTM_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct rtmsg))
276
277/* RTM_MULTIPATH --- array of struct rtnexthop.
278 *
279 * "struct rtnexthop" describes all necessary nexthop information,
280 * i.e. parameters of path to a destination via this nexthop.
281 *
282 * At the moment it is impossible to set different prefsrc, mtu, window
283 * and rtt for different paths from multipath.
284 */
285
286struct rtnexthop
287{
288	unsigned short		rtnh_len;
289	unsigned char		rtnh_flags;
290	unsigned char		rtnh_hops;
291	int			rtnh_ifindex;
292};
293
294/* rtnh_flags */
295
296#define RTNH_F_DEAD		1	/* Nexthop is dead (used by multipath)	*/
297#define RTNH_F_PERVASIVE	2	/* Do recursive gateway lookup	*/
298#define RTNH_F_ONLINK		4	/* Gateway is forced on link	*/
299
300/* Macros to handle hexthops */
301
302#define RTNH_ALIGNTO	4
303#define RTNH_ALIGN(len) ( ((len)+RTNH_ALIGNTO-1) & ~(RTNH_ALIGNTO-1) )
304#define RTNH_OK(rtnh,len) ((rtnh)->rtnh_len >= sizeof(struct rtnexthop) && \
305			   ((int)(rtnh)->rtnh_len) <= (len))
306#define RTNH_NEXT(rtnh)	((struct rtnexthop*)(((char*)(rtnh)) + RTNH_ALIGN((rtnh)->rtnh_len)))
307#define RTNH_LENGTH(len) (RTNH_ALIGN(sizeof(struct rtnexthop)) + (len))
308#define RTNH_SPACE(len)	RTNH_ALIGN(RTNH_LENGTH(len))
309#define RTNH_DATA(rtnh)   ((struct rtattr*)(((char*)(rtnh)) + RTNH_LENGTH(0)))
310
311/* RTM_CACHEINFO */
312
313struct rta_cacheinfo
314{
315	__u32	rta_clntref;
316	__u32	rta_lastuse;
317	__s32	rta_expires;
318	__u32	rta_error;
319	__u32	rta_used;
320
321#define RTNETLINK_HAVE_PEERINFO 1
322	__u32	rta_id;
323	__u32	rta_ts;
324	__u32	rta_tsage;
325};
326
327/* RTM_METRICS --- array of struct rtattr with types of RTAX_* */
328
329enum
330{
331	RTAX_UNSPEC,
332#define RTAX_UNSPEC RTAX_UNSPEC
333	RTAX_LOCK,
334#define RTAX_LOCK RTAX_LOCK
335	RTAX_MTU,
336#define RTAX_MTU RTAX_MTU
337	RTAX_WINDOW,
338#define RTAX_WINDOW RTAX_WINDOW
339	RTAX_RTT,
340#define RTAX_RTT RTAX_RTT
341	RTAX_RTTVAR,
342#define RTAX_RTTVAR RTAX_RTTVAR
343	RTAX_SSTHRESH,
344#define RTAX_SSTHRESH RTAX_SSTHRESH
345	RTAX_CWND,
346#define RTAX_CWND RTAX_CWND
347	RTAX_ADVMSS,
348#define RTAX_ADVMSS RTAX_ADVMSS
349	RTAX_REORDERING,
350#define RTAX_REORDERING RTAX_REORDERING
351	RTAX_HOPLIMIT,
352#define RTAX_HOPLIMIT RTAX_HOPLIMIT
353	RTAX_INITCWND,
354#define RTAX_INITCWND RTAX_INITCWND
355	RTAX_FEATURES,
356#define RTAX_FEATURES RTAX_FEATURES
357	RTAX_RTO_MIN,
358#define RTAX_RTO_MIN RTAX_RTO_MIN
359	__RTAX_MAX
360};
361
362#define RTAX_MAX (__RTAX_MAX - 1)
363
364#define RTAX_FEATURE_ECN	0x00000001
365#define RTAX_FEATURE_SACK	0x00000002
366#define RTAX_FEATURE_TIMESTAMP	0x00000004
367#define RTAX_FEATURE_ALLFRAG	0x00000008
368
369struct rta_session
370{
371	__u8	proto;
372	__u8	pad1;
373	__u16	pad2;
374
375	union {
376		struct {
377			__u16	sport;
378			__u16	dport;
379		} ports;
380
381		struct {
382			__u8	type;
383			__u8	code;
384			__u16	ident;
385		} icmpt;
386
387		__u32		spi;
388	} u;
389};
390
391/****
392 *		General form of address family dependent message.
393 ****/
394
395struct rtgenmsg
396{
397	unsigned char		rtgen_family;
398};
399
400/*****************************************************************
401 *		Link layer specific messages.
402 ****/
403
404/* struct ifinfomsg
405 * passes link level specific information, not dependent
406 * on network protocol.
407 */
408
409struct ifinfomsg
410{
411	unsigned char	ifi_family;
412	unsigned char	__ifi_pad;
413	unsigned short	ifi_type;		/* ARPHRD_* */
414	int		ifi_index;		/* Link index	*/
415	unsigned	ifi_flags;		/* IFF_* flags	*/
416	unsigned	ifi_change;		/* IFF_* change mask */
417};
418
419/********************************************************************
420 *		prefix information
421 ****/
422
423struct prefixmsg
424{
425	unsigned char	prefix_family;
426	unsigned char	prefix_pad1;
427	unsigned short	prefix_pad2;
428	int		prefix_ifindex;
429	unsigned char	prefix_type;
430	unsigned char	prefix_len;
431	unsigned char	prefix_flags;
432	unsigned char	prefix_pad3;
433};
434
435enum
436{
437	PREFIX_UNSPEC,
438	PREFIX_ADDRESS,
439	PREFIX_CACHEINFO,
440	__PREFIX_MAX
441};
442
443#define PREFIX_MAX	(__PREFIX_MAX - 1)
444
445struct prefix_cacheinfo
446{
447	__u32	preferred_time;
448	__u32	valid_time;
449};
450
451
452/*****************************************************************
453 *		Traffic control messages.
454 ****/
455
456struct tcmsg
457{
458	unsigned char	tcm_family;
459	unsigned char	tcm__pad1;
460	unsigned short	tcm__pad2;
461	int		tcm_ifindex;
462	__u32		tcm_handle;
463	__u32		tcm_parent;
464	__u32		tcm_info;
465};
466
467enum
468{
469	TCA_UNSPEC,
470	TCA_KIND,
471	TCA_OPTIONS,
472	TCA_STATS,
473	TCA_XSTATS,
474	TCA_RATE,
475	TCA_FCNT,
476	TCA_STATS2,
477	__TCA_MAX
478};
479
480#define TCA_MAX (__TCA_MAX - 1)
481
482#define TCA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcmsg))))
483#define TCA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcmsg))
484
485/********************************************************************
486 *		Neighbor Discovery userland options
487 ****/
488
489struct nduseroptmsg
490{
491	unsigned char	nduseropt_family;
492	unsigned char	nduseropt_pad1;
493	unsigned short	nduseropt_opts_len;	/* Total length of options */
494	int		nduseropt_ifindex;
495	__u8		nduseropt_icmp_type;
496	__u8		nduseropt_icmp_code;
497	unsigned short	nduseropt_pad2;
498	unsigned int	nduseropt_pad3;
499	/* Followed by one or more ND options */
500};
501
502enum
503{
504	NDUSEROPT_UNSPEC,
505	NDUSEROPT_SRCADDR,
506	__NDUSEROPT_MAX
507};
508
509#define NDUSEROPT_MAX	(__NDUSEROPT_MAX - 1)
510
511/* RTnetlink multicast groups - backwards compatibility for userspace */
512#define RTMGRP_LINK		1
513#define RTMGRP_NOTIFY		2
514#define RTMGRP_NEIGH		4
515#define RTMGRP_TC		8
516
517#define RTMGRP_IPV4_IFADDR	0x10
518#define RTMGRP_IPV4_MROUTE	0x20
519#define RTMGRP_IPV4_ROUTE	0x40
520#define RTMGRP_IPV4_RULE	0x80
521
522#define RTMGRP_IPV6_IFADDR	0x100
523#define RTMGRP_IPV6_MROUTE	0x200
524#define RTMGRP_IPV6_ROUTE	0x400
525#define RTMGRP_IPV6_IFINFO	0x800
526
527#define RTMGRP_DECnet_IFADDR    0x1000
528#define RTMGRP_DECnet_ROUTE     0x4000
529
530#define RTMGRP_IPV6_PREFIX	0x20000
531
532/* RTnetlink multicast groups */
533enum rtnetlink_groups {
534	RTNLGRP_NONE,
535#define RTNLGRP_NONE		RTNLGRP_NONE
536	RTNLGRP_LINK,
537#define RTNLGRP_LINK		RTNLGRP_LINK
538	RTNLGRP_NOTIFY,
539#define RTNLGRP_NOTIFY		RTNLGRP_NOTIFY
540	RTNLGRP_NEIGH,
541#define RTNLGRP_NEIGH		RTNLGRP_NEIGH
542	RTNLGRP_TC,
543#define RTNLGRP_TC		RTNLGRP_TC
544	RTNLGRP_IPV4_IFADDR,
545#define RTNLGRP_IPV4_IFADDR	RTNLGRP_IPV4_IFADDR
546	RTNLGRP_IPV4_MROUTE,
547#define	RTNLGRP_IPV4_MROUTE	RTNLGRP_IPV4_MROUTE
548	RTNLGRP_IPV4_ROUTE,
549#define RTNLGRP_IPV4_ROUTE	RTNLGRP_IPV4_ROUTE
550	RTNLGRP_IPV4_RULE,
551#define RTNLGRP_IPV4_RULE	RTNLGRP_IPV4_RULE
552	RTNLGRP_IPV6_IFADDR,
553#define RTNLGRP_IPV6_IFADDR	RTNLGRP_IPV6_IFADDR
554	RTNLGRP_IPV6_MROUTE,
555#define RTNLGRP_IPV6_MROUTE	RTNLGRP_IPV6_MROUTE
556	RTNLGRP_IPV6_ROUTE,
557#define RTNLGRP_IPV6_ROUTE	RTNLGRP_IPV6_ROUTE
558	RTNLGRP_IPV6_IFINFO,
559#define RTNLGRP_IPV6_IFINFO	RTNLGRP_IPV6_IFINFO
560	RTNLGRP_DECnet_IFADDR,
561#define RTNLGRP_DECnet_IFADDR	RTNLGRP_DECnet_IFADDR
562	RTNLGRP_NOP2,
563	RTNLGRP_DECnet_ROUTE,
564#define RTNLGRP_DECnet_ROUTE	RTNLGRP_DECnet_ROUTE
565	RTNLGRP_DECnet_RULE,
566#define RTNLGRP_DECnet_RULE	RTNLGRP_DECnet_RULE
567	RTNLGRP_NOP4,
568	RTNLGRP_IPV6_PREFIX,
569#define RTNLGRP_IPV6_PREFIX	RTNLGRP_IPV6_PREFIX
570	RTNLGRP_IPV6_RULE,
571#define RTNLGRP_IPV6_RULE	RTNLGRP_IPV6_RULE
572	RTNLGRP_ND_USEROPT,
573#define RTNLGRP_ND_USEROPT	RTNLGRP_ND_USEROPT
574	__RTNLGRP_MAX
575};
576#define RTNLGRP_MAX	(__RTNLGRP_MAX - 1)
577
578/* TC action piece */
579struct tcamsg
580{
581	unsigned char	tca_family;
582	unsigned char	tca__pad1;
583	unsigned short	tca__pad2;
584};
585#define TA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcamsg))))
586#define TA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcamsg))
587#define TCA_ACT_TAB 1 /* attr type must be >=1 */
588#define TCAA_MAX 1
589
590/* End of information exported to user level */
591
592
593
594#endif	/* __LINUX_RTNETLINK_H */
595