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