125981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef _UAPI__LINUX_RTNETLINK_H
3224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define _UAPI__LINUX_RTNETLINK_H
4224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
5224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/types.h>
6224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/netlink.h>
7224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/if_link.h>
8224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/if_addr.h>
9224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/neighbour.h>
10224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
11224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* rtnetlink families. Values up to 127 are reserved for real address
12224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * families, values above 128 may be used arbitrarily.
13224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
14224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNL_FAMILY_IPMR		128
15224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNL_FAMILY_IP6MR		129
16224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNL_FAMILY_MAX			129
17224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
18224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/****
19224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *		Routing/neighbour discovery messages.
20224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng ****/
21224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
22224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Types of messages */
23224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
24224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
25224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_BASE	= 16,
26224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_BASE	RTM_BASE
27224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
28224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_NEWLINK	= 16,
29224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWLINK	RTM_NEWLINK
30224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_DELLINK,
31224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELLINK	RTM_DELLINK
32224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_GETLINK,
33224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETLINK	RTM_GETLINK
34224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_SETLINK,
35224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_SETLINK	RTM_SETLINK
36224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
37224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_NEWADDR	= 20,
38224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWADDR	RTM_NEWADDR
39224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_DELADDR,
40224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELADDR	RTM_DELADDR
41224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_GETADDR,
42224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETADDR	RTM_GETADDR
43224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
44224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_NEWROUTE	= 24,
45224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWROUTE	RTM_NEWROUTE
46224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_DELROUTE,
47224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELROUTE	RTM_DELROUTE
48224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_GETROUTE,
49224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETROUTE	RTM_GETROUTE
50224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
51224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_NEWNEIGH	= 28,
52224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWNEIGH	RTM_NEWNEIGH
53224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_DELNEIGH,
54224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELNEIGH	RTM_DELNEIGH
55224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_GETNEIGH,
56224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETNEIGH	RTM_GETNEIGH
57224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
58224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_NEWRULE	= 32,
59224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWRULE	RTM_NEWRULE
60224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_DELRULE,
61224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELRULE	RTM_DELRULE
62224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_GETRULE,
63224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETRULE	RTM_GETRULE
64224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
65224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_NEWQDISC	= 36,
66224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWQDISC	RTM_NEWQDISC
67224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_DELQDISC,
68224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELQDISC	RTM_DELQDISC
69224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_GETQDISC,
70224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETQDISC	RTM_GETQDISC
71224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
72224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_NEWTCLASS	= 40,
73224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWTCLASS	RTM_NEWTCLASS
74224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_DELTCLASS,
75224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELTCLASS	RTM_DELTCLASS
76224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_GETTCLASS,
77224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETTCLASS	RTM_GETTCLASS
78224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
79224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_NEWTFILTER	= 44,
80224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWTFILTER	RTM_NEWTFILTER
81224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_DELTFILTER,
82224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELTFILTER	RTM_DELTFILTER
83224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_GETTFILTER,
84224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETTFILTER	RTM_GETTFILTER
85224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
86224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_NEWACTION	= 48,
87224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWACTION   RTM_NEWACTION
88224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_DELACTION,
89224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELACTION   RTM_DELACTION
90224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_GETACTION,
91224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETACTION   RTM_GETACTION
92224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
93224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_NEWPREFIX	= 52,
94224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWPREFIX	RTM_NEWPREFIX
95224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
96224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_GETMULTICAST = 58,
97224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETMULTICAST RTM_GETMULTICAST
98224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
99224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_GETANYCAST	= 62,
100224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETANYCAST	RTM_GETANYCAST
101224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
102224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_NEWNEIGHTBL	= 64,
103224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWNEIGHTBL	RTM_NEWNEIGHTBL
104224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_GETNEIGHTBL	= 66,
105224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETNEIGHTBL	RTM_GETNEIGHTBL
106224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_SETNEIGHTBL,
107224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_SETNEIGHTBL	RTM_SETNEIGHTBL
108224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
109224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_NEWNDUSEROPT = 68,
110224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWNDUSEROPT RTM_NEWNDUSEROPT
111224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
112224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_NEWADDRLABEL = 72,
113224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWADDRLABEL RTM_NEWADDRLABEL
114224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_DELADDRLABEL,
115224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELADDRLABEL RTM_DELADDRLABEL
116224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_GETADDRLABEL,
117224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETADDRLABEL RTM_GETADDRLABEL
118224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
119224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_GETDCB = 78,
120224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETDCB RTM_GETDCB
121224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_SETDCB,
122224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_SETDCB RTM_SETDCB
123224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
124224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_NEWNETCONF = 80,
125224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWNETCONF RTM_NEWNETCONF
1260543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris	RTM_DELNETCONF,
1270543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris#define RTM_DELNETCONF RTM_DELNETCONF
128224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_GETNETCONF = 82,
129224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETNETCONF RTM_GETNETCONF
130224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
131224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_NEWMDB = 84,
132224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NEWMDB RTM_NEWMDB
133224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_DELMDB = 85,
134224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_DELMDB RTM_DELMDB
135224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTM_GETMDB = 86,
136224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_GETMDB RTM_GETMDB
137224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
13812e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	RTM_NEWNSID = 88,
13912e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define RTM_NEWNSID RTM_NEWNSID
14012e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	RTM_DELNSID = 89,
14112e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define RTM_DELNSID RTM_DELNSID
14212e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	RTM_GETNSID = 90,
14312e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define RTM_GETNSID RTM_GETNSID
14412e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris
145ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris	RTM_NEWSTATS = 92,
146ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris#define RTM_NEWSTATS RTM_NEWSTATS
147ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris	RTM_GETSTATS = 94,
148ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris#define RTM_GETSTATS RTM_GETSTATS
149ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris
15025981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris	RTM_NEWCACHEREPORT = 96,
15125981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris#define RTM_NEWCACHEREPORT RTM_NEWCACHEREPORT
15225981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris
153224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__RTM_MAX,
154224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_MAX		(((__RTM_MAX + 3) & ~3) - 1)
155224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
156224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
157224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NR_MSGTYPES	(RTM_MAX + 1 - RTM_BASE)
158224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_NR_FAMILIES	(RTM_NR_MSGTYPES >> 2)
159224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_FAM(cmd)	(((cmd) - RTM_BASE) >> 2)
160224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
161224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
162224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng   Generic structure for encapsulation of optional route information.
163224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng   It is reminiscent of sockaddr, but with sa_family replaced
164224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng   with attribute type.
165224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
166224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
167224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct rtattr {
168224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned short	rta_len;
169224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned short	rta_type;
170224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
171224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
172224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Macros to handle rtattributes */
173224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
17412e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define RTA_ALIGNTO	4U
175224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTA_ALIGN(len) ( ((len)+RTA_ALIGNTO-1) & ~(RTA_ALIGNTO-1) )
176224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTA_OK(rta,len) ((len) >= (int)sizeof(struct rtattr) && \
177224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng			 (rta)->rta_len >= sizeof(struct rtattr) && \
178224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng			 (rta)->rta_len <= (len))
179224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTA_NEXT(rta,attrlen)	((attrlen) -= RTA_ALIGN((rta)->rta_len), \
180224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng				 (struct rtattr*)(((char*)(rta)) + RTA_ALIGN((rta)->rta_len)))
181224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTA_LENGTH(len)	(RTA_ALIGN(sizeof(struct rtattr)) + (len))
182224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTA_SPACE(len)	RTA_ALIGN(RTA_LENGTH(len))
183224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTA_DATA(rta)   ((void*)(((char*)(rta)) + RTA_LENGTH(0)))
184224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTA_PAYLOAD(rta) ((int)((rta)->rta_len) - RTA_LENGTH(0))
185224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
186224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
187224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
188224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
189224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/******************************************************************************
190224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *		Definitions used in routing table administration.
191224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng ****/
192224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
193224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct rtmsg {
194224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char		rtm_family;
195224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char		rtm_dst_len;
196224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char		rtm_src_len;
197224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char		rtm_tos;
198224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
199224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char		rtm_table;	/* Routing table id */
200224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char		rtm_protocol;	/* Routing protocol; see below	*/
201224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char		rtm_scope;	/* See below */
202224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char		rtm_type;	/* See below	*/
203224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
204224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned		rtm_flags;
205224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
206224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
207224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* rtm_type */
208224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
209224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
210224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTN_UNSPEC,
211224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTN_UNICAST,		/* Gateway or direct route	*/
212224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTN_LOCAL,		/* Accept locally		*/
213224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTN_BROADCAST,		/* Accept locally as broadcast,
214224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng				   send as broadcast */
215224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTN_ANYCAST,		/* Accept locally as broadcast,
216224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng				   but send as unicast */
217224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTN_MULTICAST,		/* Multicast route		*/
218224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTN_BLACKHOLE,		/* Drop				*/
219224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTN_UNREACHABLE,	/* Destination is unreachable   */
220224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTN_PROHIBIT,		/* Administratively prohibited	*/
221224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTN_THROW,		/* Not in this table		*/
222224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTN_NAT,		/* Translate this address	*/
223224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTN_XRESOLVE,		/* Use external resolver	*/
224224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__RTN_MAX
225224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
226224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
227224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTN_MAX (__RTN_MAX - 1)
228224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
229224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
230224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* rtm_protocol */
231224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
232224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_UNSPEC	0
233224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_REDIRECT	1	/* Route installed by ICMP redirects;
234224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng				   not used by current IPv4 */
235224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_KERNEL	2	/* Route installed by kernel		*/
236224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_BOOT	3	/* Route installed during boot		*/
237224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_STATIC	4	/* Route installed by administrator	*/
238224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
239224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Values of protocol >= RTPROT_STATIC are not interpreted by kernel;
240224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng   they are just passed from user and back as is.
241224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng   It will be used by hypothetical multiple routing daemons.
242224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng   Note that protocol values should be standardized in order to
243224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng   avoid conflicts.
244224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
245224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
246224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_GATED	8	/* Apparently, GateD */
247224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_RA	9	/* RDISC/ND router advertisements */
248224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_MRT	10	/* Merit MRT */
249224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_ZEBRA	11	/* Zebra */
250224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_BIRD	12	/* BIRD */
251224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_DNROUTED	13	/* DECnet routing daemon */
252224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_XORP	14	/* XORP */
253224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_NTK	15	/* Netsukuku */
254224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_DHCP	16      /* DHCP client */
255224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTPROT_MROUTED	17      /* Multicast daemon */
25612e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define RTPROT_BABEL	42      /* Babel daemon */
257224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
258224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* rtm_scope
259224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
260224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng   Really it is not scope, but sort of distance to the destination.
261224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng   NOWHERE are reserved for not existing destinations, HOST is our
262224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng   local addresses, LINK are destinations, located on directly attached
263224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng   link and UNIVERSE is everywhere in the Universe.
264224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
265224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng   Intermediate values are also possible f.e. interior routes
266224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng   could be assigned a value between UNIVERSE and LINK.
267224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng*/
268224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
269224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum rt_scope_t {
270224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RT_SCOPE_UNIVERSE=0,
271224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* User defined values  */
272224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RT_SCOPE_SITE=200,
273224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RT_SCOPE_LINK=253,
274224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RT_SCOPE_HOST=254,
275224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RT_SCOPE_NOWHERE=255
276224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
277224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
278224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* rtm_flags */
279224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
280224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_F_NOTIFY		0x100	/* Notify user of route change	*/
281224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_F_CLONED		0x200	/* This route is cloned		*/
282224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_F_EQUALIZE		0x400	/* Multipath equalizer: NI	*/
283224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_F_PREFIX		0x800	/* Prefix addresses		*/
28412e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define RTM_F_LOOKUP_TABLE	0x1000	/* set rtm_table to FIB lookup result */
28525981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris#define RTM_F_FIB_MATCH	        0x2000	/* return full fib lookup match */
286224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
287224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Reserved table identifiers */
288224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
289224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum rt_class_t {
290224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RT_TABLE_UNSPEC=0,
291224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* User defined values */
292224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RT_TABLE_COMPAT=252,
293224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RT_TABLE_DEFAULT=253,
294224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RT_TABLE_MAIN=254,
295224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RT_TABLE_LOCAL=255,
296224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RT_TABLE_MAX=0xFFFFFFFF
297224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
298224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
299224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
300224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Routing message attributes */
301224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
302224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum rtattr_type_t {
303224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTA_UNSPEC,
304224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTA_DST,
305224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTA_SRC,
306224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTA_IIF,
307224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTA_OIF,
308224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTA_GATEWAY,
309224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTA_PRIORITY,
310224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTA_PREFSRC,
311224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTA_METRICS,
312224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTA_MULTIPATH,
313224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTA_PROTOINFO, /* no longer used */
314224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTA_FLOW,
315224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTA_CACHEINFO,
316224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTA_SESSION, /* no longer used */
317224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTA_MP_ALGO, /* no longer used */
318224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTA_TABLE,
319224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTA_MARK,
320224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTA_MFC_STATS,
32112e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	RTA_VIA,
32212e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	RTA_NEWDST,
32312e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	RTA_PREF,
32412e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	RTA_ENCAP_TYPE,
32512e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	RTA_ENCAP,
326ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris	RTA_EXPIRES,
327ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris	RTA_PAD,
3282fd4b3cf888b560db61afa9e50dd42039e07a8b2Christopher Ferris	RTA_UID,
3290543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris	RTA_TTL_PROPAGATE,
330224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__RTA_MAX
331224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
332224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
333224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTA_MAX (__RTA_MAX - 1)
334224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
335224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct rtmsg))))
336224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTM_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct rtmsg))
337224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
338224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* RTM_MULTIPATH --- array of struct rtnexthop.
339224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
340224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * "struct rtnexthop" describes all necessary nexthop information,
341224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * i.e. parameters of path to a destination via this nexthop.
342224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
343224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * At the moment it is impossible to set different prefsrc, mtu, window
344224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * and rtt for different paths from multipath.
345224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
346224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
347224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct rtnexthop {
348224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned short		rtnh_len;
349224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char		rtnh_flags;
350224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char		rtnh_hops;
351224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	int			rtnh_ifindex;
352224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
353224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
354224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* rtnh_flags */
355224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
356224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNH_F_DEAD		1	/* Nexthop is dead (used by multipath)	*/
357224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNH_F_PERVASIVE	2	/* Do recursive gateway lookup	*/
358224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNH_F_ONLINK		4	/* Gateway is forced on link	*/
35912e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define RTNH_F_OFFLOAD		8	/* offloaded route */
36012e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define RTNH_F_LINKDOWN		16	/* carrier-down on nexthop */
3610543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris#define RTNH_F_UNRESOLVED	32	/* The entry is unresolved (ipmr) */
36212e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris
3636e3550f2a1c3909fb75be068f7ae9009f7e8622aChristopher Ferris#define RTNH_COMPARE_MASK	(RTNH_F_DEAD | RTNH_F_LINKDOWN | RTNH_F_OFFLOAD)
364224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
365224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Macros to handle hexthops */
366224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
367224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNH_ALIGNTO	4
368224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNH_ALIGN(len) ( ((len)+RTNH_ALIGNTO-1) & ~(RTNH_ALIGNTO-1) )
369224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNH_OK(rtnh,len) ((rtnh)->rtnh_len >= sizeof(struct rtnexthop) && \
370224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng			   ((int)(rtnh)->rtnh_len) <= (len))
371224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNH_NEXT(rtnh)	((struct rtnexthop*)(((char*)(rtnh)) + RTNH_ALIGN((rtnh)->rtnh_len)))
372224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNH_LENGTH(len) (RTNH_ALIGN(sizeof(struct rtnexthop)) + (len))
373224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNH_SPACE(len)	RTNH_ALIGN(RTNH_LENGTH(len))
374224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNH_DATA(rtnh)   ((struct rtattr*)(((char*)(rtnh)) + RTNH_LENGTH(0)))
375224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
37612e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris/* RTA_VIA */
37712e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferrisstruct rtvia {
37812e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	__kernel_sa_family_t	rtvia_family;
37912e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	__u8			rtvia_addr[0];
38012e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris};
38112e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris
382224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* RTM_CACHEINFO */
383224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
384224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct rta_cacheinfo {
385224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32	rta_clntref;
386224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32	rta_lastuse;
387224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__s32	rta_expires;
388224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32	rta_error;
389224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32	rta_used;
390224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
391224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNETLINK_HAVE_PEERINFO 1
392224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32	rta_id;
393224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32	rta_ts;
394224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32	rta_tsage;
395224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
396224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
397224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* RTM_METRICS --- array of struct rtattr with types of RTAX_* */
398224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
399224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
400224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTAX_UNSPEC,
401224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_UNSPEC RTAX_UNSPEC
402224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTAX_LOCK,
403224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_LOCK RTAX_LOCK
404224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTAX_MTU,
405224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_MTU RTAX_MTU
406224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTAX_WINDOW,
407224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_WINDOW RTAX_WINDOW
408224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTAX_RTT,
409224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_RTT RTAX_RTT
410224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTAX_RTTVAR,
411224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_RTTVAR RTAX_RTTVAR
412224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTAX_SSTHRESH,
413224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_SSTHRESH RTAX_SSTHRESH
414224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTAX_CWND,
415224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_CWND RTAX_CWND
416224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTAX_ADVMSS,
417224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_ADVMSS RTAX_ADVMSS
418224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTAX_REORDERING,
419224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_REORDERING RTAX_REORDERING
420224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTAX_HOPLIMIT,
421224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_HOPLIMIT RTAX_HOPLIMIT
422224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTAX_INITCWND,
423224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_INITCWND RTAX_INITCWND
424224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTAX_FEATURES,
425224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_FEATURES RTAX_FEATURES
426224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTAX_RTO_MIN,
427224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_RTO_MIN RTAX_RTO_MIN
428224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTAX_INITRWND,
429224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_INITRWND RTAX_INITRWND
430e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris	RTAX_QUICKACK,
431e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#define RTAX_QUICKACK RTAX_QUICKACK
43212e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	RTAX_CC_ALGO,
43312e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define RTAX_CC_ALGO RTAX_CC_ALGO
434a1a109eed086336ef38a07b9f90e3d7c786f850eChristopher Ferris	RTAX_FASTOPEN_NO_COOKIE,
435a1a109eed086336ef38a07b9f90e3d7c786f850eChristopher Ferris#define RTAX_FASTOPEN_NO_COOKIE RTAX_FASTOPEN_NO_COOKIE
436224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__RTAX_MAX
437224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
438224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
439224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTAX_MAX (__RTAX_MAX - 1)
440224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
44112e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define RTAX_FEATURE_ECN	(1 << 0)
44212e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define RTAX_FEATURE_SACK	(1 << 1)
44312e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define RTAX_FEATURE_TIMESTAMP	(1 << 2)
44412e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define RTAX_FEATURE_ALLFRAG	(1 << 3)
44512e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris
44612e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define RTAX_FEATURE_MASK	(RTAX_FEATURE_ECN | RTAX_FEATURE_SACK | \
44712e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris				 RTAX_FEATURE_TIMESTAMP | RTAX_FEATURE_ALLFRAG)
448224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
449224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct rta_session {
450224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8	proto;
451224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8	pad1;
452224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u16	pad2;
453224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
454224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	union {
455224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng		struct {
456224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng			__u16	sport;
457224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng			__u16	dport;
458224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng		} ports;
459224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
460224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng		struct {
461224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng			__u8	type;
462224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng			__u8	code;
463224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng			__u16	ident;
464224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng		} icmpt;
465224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
466224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng		__u32		spi;
467224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	} u;
468224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
469224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
470224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct rta_mfc_stats {
471224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64	mfcs_packets;
472224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64	mfcs_bytes;
473224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64	mfcs_wrong_if;
474224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
475224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
476224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/****
477224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *		General form of address family dependent message.
478224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng ****/
479224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
480224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct rtgenmsg {
481224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char		rtgen_family;
482224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
483224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
484224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*****************************************************************
485224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *		Link layer specific messages.
486224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng ****/
487224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
488224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* struct ifinfomsg
489224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * passes link level specific information, not dependent
490224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * on network protocol.
491224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
492224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
493224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct ifinfomsg {
494224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char	ifi_family;
495224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char	__ifi_pad;
496224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned short	ifi_type;		/* ARPHRD_* */
497224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	int		ifi_index;		/* Link index	*/
498224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned	ifi_flags;		/* IFF_* flags	*/
499224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned	ifi_change;		/* IFF_* change mask */
500224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
501224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
502224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/********************************************************************
503224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *		prefix information
504224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng ****/
505224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
506224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct prefixmsg {
507224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char	prefix_family;
508224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char	prefix_pad1;
509224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned short	prefix_pad2;
510224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	int		prefix_ifindex;
511224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char	prefix_type;
512224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char	prefix_len;
513224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char	prefix_flags;
514224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char	prefix_pad3;
515224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
516224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
517224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum
518224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng{
519224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	PREFIX_UNSPEC,
520224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	PREFIX_ADDRESS,
521224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	PREFIX_CACHEINFO,
522224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__PREFIX_MAX
523224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
524224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
525224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define PREFIX_MAX	(__PREFIX_MAX - 1)
526224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
527224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct prefix_cacheinfo {
528224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32	preferred_time;
529224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32	valid_time;
530224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
531224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
532224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
533224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*****************************************************************
534224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *		Traffic control messages.
535224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng ****/
536224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
537224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tcmsg {
538224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char	tcm_family;
539224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char	tcm__pad1;
540224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned short	tcm__pad2;
541224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	int		tcm_ifindex;
542224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32		tcm_handle;
543224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32		tcm_parent;
544224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32		tcm_info;
545224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
546224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
547224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
548224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_UNSPEC,
549224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_KIND,
550224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_OPTIONS,
551224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_STATS,
552224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_XSTATS,
553224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_RATE,
554224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_FCNT,
555224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_STATS2,
556224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_STAB,
557ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris	TCA_PAD,
5580543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris	TCA_DUMP_INVISIBLE,
55925981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris	TCA_CHAIN,
560a1a109eed086336ef38a07b9f90e3d7c786f850eChristopher Ferris	TCA_HW_OFFLOAD,
561224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__TCA_MAX
562224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
563224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
564224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_MAX (__TCA_MAX - 1)
565224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
566224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcmsg))))
567224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcmsg))
568224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
569224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/********************************************************************
570224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *		Neighbor Discovery userland options
571224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng ****/
572224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
573224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct nduseroptmsg {
574224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char	nduseropt_family;
575224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char	nduseropt_pad1;
576224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned short	nduseropt_opts_len;	/* Total length of options */
577224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	int		nduseropt_ifindex;
578224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8		nduseropt_icmp_type;
579224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8		nduseropt_icmp_code;
580224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned short	nduseropt_pad2;
581224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned int	nduseropt_pad3;
582224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	/* Followed by one or more ND options */
583224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
584224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
585224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
586224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	NDUSEROPT_UNSPEC,
587224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	NDUSEROPT_SRCADDR,
588224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__NDUSEROPT_MAX
589224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
590224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
591224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define NDUSEROPT_MAX	(__NDUSEROPT_MAX - 1)
592224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
593224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef __KERNEL__
594224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* RTnetlink multicast groups - backwards compatibility for userspace */
595224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_LINK		1
596224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_NOTIFY		2
597224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_NEIGH		4
598224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_TC		8
599224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
600224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_IPV4_IFADDR	0x10
601224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_IPV4_MROUTE	0x20
602224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_IPV4_ROUTE	0x40
603224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_IPV4_RULE	0x80
604224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
605224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_IPV6_IFADDR	0x100
606224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_IPV6_MROUTE	0x200
607224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_IPV6_ROUTE	0x400
608224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_IPV6_IFINFO	0x800
609224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
610224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_DECnet_IFADDR    0x1000
611224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_DECnet_ROUTE     0x4000
612224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
613224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTMGRP_IPV6_PREFIX	0x20000
614224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
615224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
616224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* RTnetlink multicast groups */
617224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum rtnetlink_groups {
618224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_NONE,
619224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_NONE		RTNLGRP_NONE
620224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_LINK,
621224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_LINK		RTNLGRP_LINK
622224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_NOTIFY,
623224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_NOTIFY		RTNLGRP_NOTIFY
624224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_NEIGH,
625224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_NEIGH		RTNLGRP_NEIGH
626224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_TC,
627224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_TC		RTNLGRP_TC
628224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_IPV4_IFADDR,
629224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV4_IFADDR	RTNLGRP_IPV4_IFADDR
630224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_IPV4_MROUTE,
631224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define	RTNLGRP_IPV4_MROUTE	RTNLGRP_IPV4_MROUTE
632224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_IPV4_ROUTE,
633224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV4_ROUTE	RTNLGRP_IPV4_ROUTE
634224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_IPV4_RULE,
635224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV4_RULE	RTNLGRP_IPV4_RULE
636224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_IPV6_IFADDR,
637224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV6_IFADDR	RTNLGRP_IPV6_IFADDR
638224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_IPV6_MROUTE,
639224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV6_MROUTE	RTNLGRP_IPV6_MROUTE
640224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_IPV6_ROUTE,
641224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV6_ROUTE	RTNLGRP_IPV6_ROUTE
642224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_IPV6_IFINFO,
643224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV6_IFINFO	RTNLGRP_IPV6_IFINFO
644224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_DECnet_IFADDR,
645224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_DECnet_IFADDR	RTNLGRP_DECnet_IFADDR
646224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_NOP2,
647224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_DECnet_ROUTE,
648224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_DECnet_ROUTE	RTNLGRP_DECnet_ROUTE
649224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_DECnet_RULE,
650224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_DECnet_RULE	RTNLGRP_DECnet_RULE
651224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_NOP4,
652224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_IPV6_PREFIX,
653224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV6_PREFIX	RTNLGRP_IPV6_PREFIX
654224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_IPV6_RULE,
655224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV6_RULE	RTNLGRP_IPV6_RULE
656224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_ND_USEROPT,
657224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_ND_USEROPT	RTNLGRP_ND_USEROPT
658224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_PHONET_IFADDR,
659224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_PHONET_IFADDR	RTNLGRP_PHONET_IFADDR
660224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_PHONET_ROUTE,
661224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_PHONET_ROUTE	RTNLGRP_PHONET_ROUTE
662224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_DCB,
663224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_DCB		RTNLGRP_DCB
664224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_IPV4_NETCONF,
665224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV4_NETCONF	RTNLGRP_IPV4_NETCONF
666224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_IPV6_NETCONF,
667224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_IPV6_NETCONF	RTNLGRP_IPV6_NETCONF
668224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	RTNLGRP_MDB,
669224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_MDB		RTNLGRP_MDB
67012e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	RTNLGRP_MPLS_ROUTE,
67112e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define RTNLGRP_MPLS_ROUTE	RTNLGRP_MPLS_ROUTE
67212e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris	RTNLGRP_NSID,
67312e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define RTNLGRP_NSID		RTNLGRP_NSID
6740543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris	RTNLGRP_MPLS_NETCONF,
6750543f743b6f5bc5c0652568c763e6dfb9ddce647Christopher Ferris#define RTNLGRP_MPLS_NETCONF	RTNLGRP_MPLS_NETCONF
67625981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris	RTNLGRP_IPV4_MROUTE_R,
67725981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris#define RTNLGRP_IPV4_MROUTE_R	RTNLGRP_IPV4_MROUTE_R
67825981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris	RTNLGRP_IPV6_MROUTE_R,
67925981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris#define RTNLGRP_IPV6_MROUTE_R	RTNLGRP_IPV6_MROUTE_R
680224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__RTNLGRP_MAX
681224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
682224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTNLGRP_MAX	(__RTNLGRP_MAX - 1)
683224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
684224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* TC action piece */
685224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct tcamsg {
686224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char	tca_family;
687224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char	tca__pad1;
688224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned short	tca__pad2;
689224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
69025981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris
69125981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferrisenum {
69225981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris	TCA_ROOT_UNSPEC,
69325981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris	TCA_ROOT_TAB,
69425981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris#define TCA_ACT_TAB TCA_ROOT_TAB
69525981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris#define TCAA_MAX TCA_ROOT_TAB
69625981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris	TCA_ROOT_FLAGS,
69725981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris	TCA_ROOT_COUNT,
69825981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris	TCA_ROOT_TIME_DELTA, /* in msecs */
69925981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris	__TCA_ROOT_MAX,
70025981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris#define	TCA_ROOT_MAX (__TCA_ROOT_MAX - 1)
70125981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris};
70225981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris
703224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcamsg))))
704224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcamsg))
70525981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris/* tcamsg flags stored in attribute TCA_ROOT_FLAGS
70625981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris *
70725981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris * TCA_FLAG_LARGE_DUMP_ON user->kernel to request for larger than TCA_ACT_MAX_PRIO
70825981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris * actions in a dump. All dump responses will contain the number of actions
70925981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris * being dumped stored in for user app's consumption in TCA_ROOT_COUNT
71025981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris *
71125981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris */
71225981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris#define TCA_FLAG_LARGE_DUMP_ON		(1 << 0)
713224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
714224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* New extended info filters for IFLA_EXT_MASK */
715224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTEXT_FILTER_VF		(1 << 0)
716224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define RTEXT_FILTER_BRVLAN	(1 << 1)
71712e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define RTEXT_FILTER_BRVLAN_COMPRESSED	(1 << 2)
71812e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define	RTEXT_FILTER_SKIP_STATS	(1 << 3)
719224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
720224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* End of information exported to user level */
721224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
722224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
723224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
724224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif /* _UAPI__LINUX_RTNETLINK_H */
725