1224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef _UAPI__LINUX_RTNETLINK_H
2224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define _UAPI__LINUX_RTNETLINK_H
3224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
4224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/types.h>
5224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/netlink.h>
6224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/if_link.h>
7224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/if_addr.h>
8224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/neighbour.h>
9224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
10224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* rtnetlink families. Values up to 127 are reserved for real address
11224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * families, values above 128 may be used arbitrarily.
12224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
13224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNL_FAMILY_IPMR		128
14224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNL_FAMILY_IP6MR		129
15224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNL_FAMILY_MAX			129
16224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
17224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/****
18224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *		Routing/neighbour discovery messages.
19224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng ****/
20224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
21224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Types of messages */
22224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
23224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
24224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_BASE	= 16,
25224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_BASE	RTM_BASE
26224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
27224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_NEWLINK	= 16,
28224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWLINK	RTM_NEWLINK
29224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_DELLINK,
30224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELLINK	RTM_DELLINK
31224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_GETLINK,
32224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETLINK	RTM_GETLINK
33224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_SETLINK,
34224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_SETLINK	RTM_SETLINK
35224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
36224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_NEWADDR	= 20,
37224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWADDR	RTM_NEWADDR
38224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_DELADDR,
39224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELADDR	RTM_DELADDR
40224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_GETADDR,
41224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETADDR	RTM_GETADDR
42224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
43224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_NEWROUTE	= 24,
44224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWROUTE	RTM_NEWROUTE
45224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_DELROUTE,
46224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELROUTE	RTM_DELROUTE
47224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_GETROUTE,
48224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETROUTE	RTM_GETROUTE
49224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
50224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_NEWNEIGH	= 28,
51224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWNEIGH	RTM_NEWNEIGH
52224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_DELNEIGH,
53224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELNEIGH	RTM_DELNEIGH
54224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_GETNEIGH,
55224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETNEIGH	RTM_GETNEIGH
56224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
57224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_NEWRULE	= 32,
58224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWRULE	RTM_NEWRULE
59224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_DELRULE,
60224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELRULE	RTM_DELRULE
61224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_GETRULE,
62224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETRULE	RTM_GETRULE
63224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
64224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_NEWQDISC	= 36,
65224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWQDISC	RTM_NEWQDISC
66224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_DELQDISC,
67224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELQDISC	RTM_DELQDISC
68224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_GETQDISC,
69224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETQDISC	RTM_GETQDISC
70224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
71224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_NEWTCLASS	= 40,
72224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWTCLASS	RTM_NEWTCLASS
73224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_DELTCLASS,
74224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELTCLASS	RTM_DELTCLASS
75224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_GETTCLASS,
76224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETTCLASS	RTM_GETTCLASS
77224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
78224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_NEWTFILTER	= 44,
79224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWTFILTER	RTM_NEWTFILTER
80224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_DELTFILTER,
81224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELTFILTER	RTM_DELTFILTER
82224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_GETTFILTER,
83224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETTFILTER	RTM_GETTFILTER
84224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
85224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_NEWACTION	= 48,
86224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWACTION   RTM_NEWACTION
87224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_DELACTION,
88224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELACTION   RTM_DELACTION
89224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_GETACTION,
90224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETACTION   RTM_GETACTION
91224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
92224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_NEWPREFIX	= 52,
93224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWPREFIX	RTM_NEWPREFIX
94224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
95224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_GETMULTICAST = 58,
96224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETMULTICAST RTM_GETMULTICAST
97224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
98224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_GETANYCAST	= 62,
99224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETANYCAST	RTM_GETANYCAST
100224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
101224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_NEWNEIGHTBL	= 64,
102224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWNEIGHTBL	RTM_NEWNEIGHTBL
103224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_GETNEIGHTBL	= 66,
104224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETNEIGHTBL	RTM_GETNEIGHTBL
105224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_SETNEIGHTBL,
106224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_SETNEIGHTBL	RTM_SETNEIGHTBL
107224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
108224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_NEWNDUSEROPT = 68,
109224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWNDUSEROPT RTM_NEWNDUSEROPT
110224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
111224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_NEWADDRLABEL = 72,
112224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWADDRLABEL RTM_NEWADDRLABEL
113224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_DELADDRLABEL,
114224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELADDRLABEL RTM_DELADDRLABEL
115224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_GETADDRLABEL,
116224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETADDRLABEL RTM_GETADDRLABEL
117224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
118224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_GETDCB = 78,
119224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETDCB RTM_GETDCB
120224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_SETDCB,
121224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_SETDCB RTM_SETDCB
122224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
123224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_NEWNETCONF = 80,
124224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWNETCONF RTM_NEWNETCONF
125224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_GETNETCONF = 82,
126224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETNETCONF RTM_GETNETCONF
127224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
128224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_NEWMDB = 84,
129224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWMDB RTM_NEWMDB
130224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_DELMDB = 85,
131224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELMDB RTM_DELMDB
132224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_GETMDB = 86,
133224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETMDB RTM_GETMDB
134224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
135224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__RTM_MAX,
136224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_MAX		(((__RTM_MAX + 3) & ~3) - 1)
137224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
138224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
139224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NR_MSGTYPES	(RTM_MAX + 1 - RTM_BASE)
140224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NR_FAMILIES	(RTM_NR_MSGTYPES >> 2)
141224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_FAM(cmd)	(((cmd) - RTM_BASE) >> 2)
142224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
143224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
144224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng   Generic structure for encapsulation of optional route information.
145224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng   It is reminiscent of sockaddr, but with sa_family replaced
146224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng   with attribute type.
147224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
148224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
149224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct rtattr {
150224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned short	rta_len;
151224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned short	rta_type;
152224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
153224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
154224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Macros to handle rtattributes */
155224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
156224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTA_ALIGNTO	4
157224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTA_ALIGN(len) ( ((len)+RTA_ALIGNTO-1) & ~(RTA_ALIGNTO-1) )
158224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTA_OK(rta,len) ((len) >= (int)sizeof(struct rtattr) && \
159224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng			 (rta)->rta_len >= sizeof(struct rtattr) && \
160224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng			 (rta)->rta_len <= (len))
161224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTA_NEXT(rta,attrlen)	((attrlen) -= RTA_ALIGN((rta)->rta_len), \
162224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng				 (struct rtattr*)(((char*)(rta)) + RTA_ALIGN((rta)->rta_len)))
163224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTA_LENGTH(len)	(RTA_ALIGN(sizeof(struct rtattr)) + (len))
164224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTA_SPACE(len)	RTA_ALIGN(RTA_LENGTH(len))
165224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTA_DATA(rta)   ((void*)(((char*)(rta)) + RTA_LENGTH(0)))
166224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTA_PAYLOAD(rta) ((int)((rta)->rta_len) - RTA_LENGTH(0))
167224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
168224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
169224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
170224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
171224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/******************************************************************************
172224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *		Definitions used in routing table administration.
173224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng ****/
174224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
175224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct rtmsg {
176224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char		rtm_family;
177224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char		rtm_dst_len;
178224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char		rtm_src_len;
179224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char		rtm_tos;
180224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
181224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char		rtm_table;	/* Routing table id */
182224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char		rtm_protocol;	/* Routing protocol; see below	*/
183224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char		rtm_scope;	/* See below */
184224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char		rtm_type;	/* See below	*/
185224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
186224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned		rtm_flags;
187224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
188224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
189224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* rtm_type */
190224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
191224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
192224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTN_UNSPEC,
193224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTN_UNICAST,		/* Gateway or direct route	*/
194224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTN_LOCAL,		/* Accept locally		*/
195224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTN_BROADCAST,		/* Accept locally as broadcast,
196224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng				   send as broadcast */
197224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTN_ANYCAST,		/* Accept locally as broadcast,
198224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng				   but send as unicast */
199224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTN_MULTICAST,		/* Multicast route		*/
200224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTN_BLACKHOLE,		/* Drop				*/
201224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTN_UNREACHABLE,	/* Destination is unreachable   */
202224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTN_PROHIBIT,		/* Administratively prohibited	*/
203224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTN_THROW,		/* Not in this table		*/
204224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTN_NAT,		/* Translate this address	*/
205224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTN_XRESOLVE,		/* Use external resolver	*/
206224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__RTN_MAX
207224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
208224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
209224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTN_MAX (__RTN_MAX - 1)
210224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
211224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
212224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* rtm_protocol */
213224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
214224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_UNSPEC	0
215224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_REDIRECT	1	/* Route installed by ICMP redirects;
216224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng				   not used by current IPv4 */
217224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_KERNEL	2	/* Route installed by kernel		*/
218224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_BOOT	3	/* Route installed during boot		*/
219224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_STATIC	4	/* Route installed by administrator	*/
220224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
221224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Values of protocol >= RTPROT_STATIC are not interpreted by kernel;
222224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng   they are just passed from user and back as is.
223224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng   It will be used by hypothetical multiple routing daemons.
224224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng   Note that protocol values should be standardized in order to
225224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng   avoid conflicts.
226224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
227224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
228224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_GATED	8	/* Apparently, GateD */
229224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_RA	9	/* RDISC/ND router advertisements */
230224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_MRT	10	/* Merit MRT */
231224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_ZEBRA	11	/* Zebra */
232224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_BIRD	12	/* BIRD */
233224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_DNROUTED	13	/* DECnet routing daemon */
234224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_XORP	14	/* XORP */
235224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_NTK	15	/* Netsukuku */
236224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_DHCP	16      /* DHCP client */
237224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_MROUTED	17      /* Multicast daemon */
238224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
239224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* rtm_scope
240224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
241224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng   Really it is not scope, but sort of distance to the destination.
242224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng   NOWHERE are reserved for not existing destinations, HOST is our
243224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng   local addresses, LINK are destinations, located on directly attached
244224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng   link and UNIVERSE is everywhere in the Universe.
245224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
246224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng   Intermediate values are also possible f.e. interior routes
247224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng   could be assigned a value between UNIVERSE and LINK.
248224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng*/
249224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
250224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum rt_scope_t {
251224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RT_SCOPE_UNIVERSE=0,
252224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* User defined values  */
253224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RT_SCOPE_SITE=200,
254224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RT_SCOPE_LINK=253,
255224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RT_SCOPE_HOST=254,
256224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RT_SCOPE_NOWHERE=255
257224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
258224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
259224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* rtm_flags */
260224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
261224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_F_NOTIFY		0x100	/* Notify user of route change	*/
262224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_F_CLONED		0x200	/* This route is cloned		*/
263224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_F_EQUALIZE		0x400	/* Multipath equalizer: NI	*/
264224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_F_PREFIX		0x800	/* Prefix addresses		*/
265224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
266224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Reserved table identifiers */
267224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
268224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum rt_class_t {
269224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RT_TABLE_UNSPEC=0,
270224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* User defined values */
271224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RT_TABLE_COMPAT=252,
272224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RT_TABLE_DEFAULT=253,
273224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RT_TABLE_MAIN=254,
274224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RT_TABLE_LOCAL=255,
275224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RT_TABLE_MAX=0xFFFFFFFF
276224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
277224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
278224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
279224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Routing message attributes */
280224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
281224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum rtattr_type_t {
282224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTA_UNSPEC,
283224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTA_DST,
284224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTA_SRC,
285224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTA_IIF,
286224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTA_OIF,
287224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTA_GATEWAY,
288224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTA_PRIORITY,
289224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTA_PREFSRC,
290224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTA_METRICS,
291224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTA_MULTIPATH,
292224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTA_PROTOINFO, /* no longer used */
293224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTA_FLOW,
294224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTA_CACHEINFO,
295224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTA_SESSION, /* no longer used */
296224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTA_MP_ALGO, /* no longer used */
297224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTA_TABLE,
298224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTA_MARK,
299224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTA_MFC_STATS,
300224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__RTA_MAX
301224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
302224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
303224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTA_MAX (__RTA_MAX - 1)
304224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
305224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct rtmsg))))
306224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct rtmsg))
307224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
308224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* RTM_MULTIPATH --- array of struct rtnexthop.
309224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
310224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * "struct rtnexthop" describes all necessary nexthop information,
311224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * i.e. parameters of path to a destination via this nexthop.
312224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
313224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * At the moment it is impossible to set different prefsrc, mtu, window
314224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * and rtt for different paths from multipath.
315224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
316224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
317224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct rtnexthop {
318224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned short		rtnh_len;
319224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char		rtnh_flags;
320224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char		rtnh_hops;
321224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	int			rtnh_ifindex;
322224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
323224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
324224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* rtnh_flags */
325224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
326224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNH_F_DEAD		1	/* Nexthop is dead (used by multipath)	*/
327224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNH_F_PERVASIVE	2	/* Do recursive gateway lookup	*/
328224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNH_F_ONLINK		4	/* Gateway is forced on link	*/
329224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
330224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Macros to handle hexthops */
331224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
332224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNH_ALIGNTO	4
333224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNH_ALIGN(len) ( ((len)+RTNH_ALIGNTO-1) & ~(RTNH_ALIGNTO-1) )
334224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNH_OK(rtnh,len) ((rtnh)->rtnh_len >= sizeof(struct rtnexthop) && \
335224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng			   ((int)(rtnh)->rtnh_len) <= (len))
336224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNH_NEXT(rtnh)	((struct rtnexthop*)(((char*)(rtnh)) + RTNH_ALIGN((rtnh)->rtnh_len)))
337224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNH_LENGTH(len) (RTNH_ALIGN(sizeof(struct rtnexthop)) + (len))
338224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNH_SPACE(len)	RTNH_ALIGN(RTNH_LENGTH(len))
339224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNH_DATA(rtnh)   ((struct rtattr*)(((char*)(rtnh)) + RTNH_LENGTH(0)))
340224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
341224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* RTM_CACHEINFO */
342224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
343224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct rta_cacheinfo {
344224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32	rta_clntref;
345224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32	rta_lastuse;
346224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__s32	rta_expires;
347224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32	rta_error;
348224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32	rta_used;
349224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
350224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNETLINK_HAVE_PEERINFO 1
351224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32	rta_id;
352224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32	rta_ts;
353224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32	rta_tsage;
354224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
355224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
356224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* RTM_METRICS --- array of struct rtattr with types of RTAX_* */
357224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
358224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
359224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTAX_UNSPEC,
360224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_UNSPEC RTAX_UNSPEC
361224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTAX_LOCK,
362224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_LOCK RTAX_LOCK
363224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTAX_MTU,
364224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_MTU RTAX_MTU
365224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTAX_WINDOW,
366224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_WINDOW RTAX_WINDOW
367224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTAX_RTT,
368224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_RTT RTAX_RTT
369224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTAX_RTTVAR,
370224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_RTTVAR RTAX_RTTVAR
371224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTAX_SSTHRESH,
372224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_SSTHRESH RTAX_SSTHRESH
373224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTAX_CWND,
374224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_CWND RTAX_CWND
375224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTAX_ADVMSS,
376224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_ADVMSS RTAX_ADVMSS
377224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTAX_REORDERING,
378224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_REORDERING RTAX_REORDERING
379224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTAX_HOPLIMIT,
380224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_HOPLIMIT RTAX_HOPLIMIT
381224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTAX_INITCWND,
382224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_INITCWND RTAX_INITCWND
383224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTAX_FEATURES,
384224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_FEATURES RTAX_FEATURES
385224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTAX_RTO_MIN,
386224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_RTO_MIN RTAX_RTO_MIN
387224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTAX_INITRWND,
388224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_INITRWND RTAX_INITRWND
389e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl	RTAX_QUICKACK,
390e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define RTAX_QUICKACK RTAX_QUICKACK
391224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__RTAX_MAX
392224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
393224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
394224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_MAX (__RTAX_MAX - 1)
395224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
396224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_FEATURE_ECN	0x00000001
397224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_FEATURE_SACK	0x00000002
398224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_FEATURE_TIMESTAMP	0x00000004
399224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_FEATURE_ALLFRAG	0x00000008
400224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
401224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct rta_session {
402224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8	proto;
403224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8	pad1;
404224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u16	pad2;
405224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
406224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	union {
407224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng		struct {
408224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng			__u16	sport;
409224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng			__u16	dport;
410224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng		} ports;
411224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
412224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng		struct {
413224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng			__u8	type;
414224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng			__u8	code;
415224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng			__u16	ident;
416224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng		} icmpt;
417224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
418224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng		__u32		spi;
419224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	} u;
420224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
421224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
422224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct rta_mfc_stats {
423224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64	mfcs_packets;
424224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64	mfcs_bytes;
425224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64	mfcs_wrong_if;
426224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
427224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
428224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/****
429224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *		General form of address family dependent message.
430224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng ****/
431224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
432224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct rtgenmsg {
433224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char		rtgen_family;
434224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
435224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
436224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*****************************************************************
437224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *		Link layer specific messages.
438224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng ****/
439224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
440224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* struct ifinfomsg
441224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * passes link level specific information, not dependent
442224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * on network protocol.
443224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
444224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
445224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct ifinfomsg {
446224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char	ifi_family;
447224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char	__ifi_pad;
448224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned short	ifi_type;		/* ARPHRD_* */
449224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	int		ifi_index;		/* Link index	*/
450224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned	ifi_flags;		/* IFF_* flags	*/
451224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned	ifi_change;		/* IFF_* change mask */
452224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
453224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
454224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/********************************************************************
455224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *		prefix information
456224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng ****/
457224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
458224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct prefixmsg {
459224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char	prefix_family;
460224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char	prefix_pad1;
461224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned short	prefix_pad2;
462224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	int		prefix_ifindex;
463224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char	prefix_type;
464224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char	prefix_len;
465224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char	prefix_flags;
466224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char	prefix_pad3;
467224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
468224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
469224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum
470224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng{
471224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	PREFIX_UNSPEC,
472224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	PREFIX_ADDRESS,
473224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	PREFIX_CACHEINFO,
474224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__PREFIX_MAX
475224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
476224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
477224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define PREFIX_MAX	(__PREFIX_MAX - 1)
478224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
479224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct prefix_cacheinfo {
480224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32	preferred_time;
481224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32	valid_time;
482224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
483224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
484224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
485224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*****************************************************************
486224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *		Traffic control messages.
487224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng ****/
488224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
489224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tcmsg {
490224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char	tcm_family;
491224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char	tcm__pad1;
492224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned short	tcm__pad2;
493224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	int		tcm_ifindex;
494224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32		tcm_handle;
495224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32		tcm_parent;
496224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32		tcm_info;
497224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
498224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
499224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
500224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_UNSPEC,
501224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_KIND,
502224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_OPTIONS,
503224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_STATS,
504224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_XSTATS,
505224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_RATE,
506224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_FCNT,
507224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_STATS2,
508224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_STAB,
509224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__TCA_MAX
510224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
511224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
512224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_MAX (__TCA_MAX - 1)
513224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
514224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcmsg))))
515224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcmsg))
516224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
517224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/********************************************************************
518224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *		Neighbor Discovery userland options
519224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng ****/
520224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
521224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct nduseroptmsg {
522224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char	nduseropt_family;
523224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char	nduseropt_pad1;
524224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned short	nduseropt_opts_len;	/* Total length of options */
525224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	int		nduseropt_ifindex;
526224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8		nduseropt_icmp_type;
527224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8		nduseropt_icmp_code;
528224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned short	nduseropt_pad2;
529224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned int	nduseropt_pad3;
530224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	/* Followed by one or more ND options */
531224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
532224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
533224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
534224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	NDUSEROPT_UNSPEC,
535224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	NDUSEROPT_SRCADDR,
536224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__NDUSEROPT_MAX
537224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
538224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
539224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define NDUSEROPT_MAX	(__NDUSEROPT_MAX - 1)
540224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
541224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef __KERNEL__
542224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* RTnetlink multicast groups - backwards compatibility for userspace */
543224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_LINK		1
544224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_NOTIFY		2
545224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_NEIGH		4
546224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_TC		8
547224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
548224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_IPV4_IFADDR	0x10
549224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_IPV4_MROUTE	0x20
550224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_IPV4_ROUTE	0x40
551224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_IPV4_RULE	0x80
552224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
553224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_IPV6_IFADDR	0x100
554224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_IPV6_MROUTE	0x200
555224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_IPV6_ROUTE	0x400
556224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_IPV6_IFINFO	0x800
557224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
558224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_DECnet_IFADDR    0x1000
559224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_DECnet_ROUTE     0x4000
560224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
561224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_IPV6_PREFIX	0x20000
562224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
563224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
564224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* RTnetlink multicast groups */
565224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum rtnetlink_groups {
566224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_NONE,
567224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_NONE		RTNLGRP_NONE
568224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_LINK,
569224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_LINK		RTNLGRP_LINK
570224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_NOTIFY,
571224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_NOTIFY		RTNLGRP_NOTIFY
572224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_NEIGH,
573224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_NEIGH		RTNLGRP_NEIGH
574224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_TC,
575224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_TC		RTNLGRP_TC
576224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_IPV4_IFADDR,
577224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV4_IFADDR	RTNLGRP_IPV4_IFADDR
578224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_IPV4_MROUTE,
579224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define	RTNLGRP_IPV4_MROUTE	RTNLGRP_IPV4_MROUTE
580224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_IPV4_ROUTE,
581224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV4_ROUTE	RTNLGRP_IPV4_ROUTE
582224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_IPV4_RULE,
583224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV4_RULE	RTNLGRP_IPV4_RULE
584224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_IPV6_IFADDR,
585224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV6_IFADDR	RTNLGRP_IPV6_IFADDR
586224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_IPV6_MROUTE,
587224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV6_MROUTE	RTNLGRP_IPV6_MROUTE
588224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_IPV6_ROUTE,
589224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV6_ROUTE	RTNLGRP_IPV6_ROUTE
590224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_IPV6_IFINFO,
591224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV6_IFINFO	RTNLGRP_IPV6_IFINFO
592224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_DECnet_IFADDR,
593224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_DECnet_IFADDR	RTNLGRP_DECnet_IFADDR
594224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_NOP2,
595224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_DECnet_ROUTE,
596224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_DECnet_ROUTE	RTNLGRP_DECnet_ROUTE
597224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_DECnet_RULE,
598224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_DECnet_RULE	RTNLGRP_DECnet_RULE
599224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_NOP4,
600224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_IPV6_PREFIX,
601224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV6_PREFIX	RTNLGRP_IPV6_PREFIX
602224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_IPV6_RULE,
603224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV6_RULE	RTNLGRP_IPV6_RULE
604224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_ND_USEROPT,
605224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_ND_USEROPT	RTNLGRP_ND_USEROPT
606224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_PHONET_IFADDR,
607224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_PHONET_IFADDR	RTNLGRP_PHONET_IFADDR
608224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_PHONET_ROUTE,
609224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_PHONET_ROUTE	RTNLGRP_PHONET_ROUTE
610224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_DCB,
611224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_DCB		RTNLGRP_DCB
612224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_IPV4_NETCONF,
613224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV4_NETCONF	RTNLGRP_IPV4_NETCONF
614224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_IPV6_NETCONF,
615224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV6_NETCONF	RTNLGRP_IPV6_NETCONF
616224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_MDB,
617224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_MDB		RTNLGRP_MDB
618224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__RTNLGRP_MAX
619224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
620224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_MAX	(__RTNLGRP_MAX - 1)
621224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
622224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* TC action piece */
623224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tcamsg {
624224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char	tca_family;
625224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char	tca__pad1;
626224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned short	tca__pad2;
627224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
628224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcamsg))))
629224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcamsg))
630224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_ACT_TAB 1 /* attr type must be >=1 */
631224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCAA_MAX 1
632224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
633224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* New extended info filters for IFLA_EXT_MASK */
634224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTEXT_FILTER_VF		(1 << 0)
635224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTEXT_FILTER_BRVLAN	(1 << 1)
636224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
637224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* End of information exported to user level */
638224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
639224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
640224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
641224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif /* _UAPI__LINUX_RTNETLINK_H */
642