144d362409d5469aed47d19e7908d19bd194493aThomas Graf#ifndef __LINUX_RTNETLINK_H
244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define __LINUX_RTNETLINK_H
344d362409d5469aed47d19e7908d19bd194493aThomas Graf
444d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <linux/netlink.h>
544d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <linux/if_link.h>
644d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <linux/if_addr.h>
744d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <linux/neighbour.h>
844d362409d5469aed47d19e7908d19bd194493aThomas Graf
944d362409d5469aed47d19e7908d19bd194493aThomas Graf/****
1044d362409d5469aed47d19e7908d19bd194493aThomas Graf *		Routing/neighbour discovery messages.
1144d362409d5469aed47d19e7908d19bd194493aThomas Graf ****/
1244d362409d5469aed47d19e7908d19bd194493aThomas Graf
1344d362409d5469aed47d19e7908d19bd194493aThomas Graf/* Types of messages */
1444d362409d5469aed47d19e7908d19bd194493aThomas Graf
1544d362409d5469aed47d19e7908d19bd194493aThomas Grafenum {
1644d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTM_BASE	= 16,
1744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_BASE	RTM_BASE
1844d362409d5469aed47d19e7908d19bd194493aThomas Graf
1944d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTM_NEWLINK	= 16,
2044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_NEWLINK	RTM_NEWLINK
2144d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTM_DELLINK,
2244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_DELLINK	RTM_DELLINK
2344d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTM_GETLINK,
2444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_GETLINK	RTM_GETLINK
2544d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTM_SETLINK,
2644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_SETLINK	RTM_SETLINK
2744d362409d5469aed47d19e7908d19bd194493aThomas Graf
2844d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTM_NEWADDR	= 20,
2944d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_NEWADDR	RTM_NEWADDR
3044d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTM_DELADDR,
3144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_DELADDR	RTM_DELADDR
3244d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTM_GETADDR,
3344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_GETADDR	RTM_GETADDR
3444d362409d5469aed47d19e7908d19bd194493aThomas Graf
3544d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTM_NEWROUTE	= 24,
3644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_NEWROUTE	RTM_NEWROUTE
3744d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTM_DELROUTE,
3844d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_DELROUTE	RTM_DELROUTE
3944d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTM_GETROUTE,
4044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_GETROUTE	RTM_GETROUTE
4144d362409d5469aed47d19e7908d19bd194493aThomas Graf
4244d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTM_NEWNEIGH	= 28,
4344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_NEWNEIGH	RTM_NEWNEIGH
4444d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTM_DELNEIGH,
4544d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_DELNEIGH	RTM_DELNEIGH
4644d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTM_GETNEIGH,
4744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_GETNEIGH	RTM_GETNEIGH
4844d362409d5469aed47d19e7908d19bd194493aThomas Graf
4944d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTM_NEWRULE	= 32,
5044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_NEWRULE	RTM_NEWRULE
5144d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTM_DELRULE,
5244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_DELRULE	RTM_DELRULE
5344d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTM_GETRULE,
5444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_GETRULE	RTM_GETRULE
5544d362409d5469aed47d19e7908d19bd194493aThomas Graf
5644d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTM_NEWQDISC	= 36,
5744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_NEWQDISC	RTM_NEWQDISC
5844d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTM_DELQDISC,
5944d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_DELQDISC	RTM_DELQDISC
6044d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTM_GETQDISC,
6144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_GETQDISC	RTM_GETQDISC
6244d362409d5469aed47d19e7908d19bd194493aThomas Graf
6344d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTM_NEWTCLASS	= 40,
6444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_NEWTCLASS	RTM_NEWTCLASS
6544d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTM_DELTCLASS,
6644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_DELTCLASS	RTM_DELTCLASS
6744d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTM_GETTCLASS,
6844d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_GETTCLASS	RTM_GETTCLASS
6944d362409d5469aed47d19e7908d19bd194493aThomas Graf
7044d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTM_NEWTFILTER	= 44,
7144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_NEWTFILTER	RTM_NEWTFILTER
7244d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTM_DELTFILTER,
7344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_DELTFILTER	RTM_DELTFILTER
7444d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTM_GETTFILTER,
7544d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_GETTFILTER	RTM_GETTFILTER
7644d362409d5469aed47d19e7908d19bd194493aThomas Graf
7744d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTM_NEWACTION	= 48,
7844d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_NEWACTION   RTM_NEWACTION
7944d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTM_DELACTION,
8044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_DELACTION   RTM_DELACTION
8144d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTM_GETACTION,
8244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_GETACTION   RTM_GETACTION
8344d362409d5469aed47d19e7908d19bd194493aThomas Graf
8444d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTM_NEWPREFIX	= 52,
8544d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_NEWPREFIX	RTM_NEWPREFIX
8644d362409d5469aed47d19e7908d19bd194493aThomas Graf
8744d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTM_GETMULTICAST = 58,
8844d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_GETMULTICAST RTM_GETMULTICAST
8944d362409d5469aed47d19e7908d19bd194493aThomas Graf
9044d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTM_GETANYCAST	= 62,
9144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_GETANYCAST	RTM_GETANYCAST
9244d362409d5469aed47d19e7908d19bd194493aThomas Graf
9344d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTM_NEWNEIGHTBL	= 64,
9444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_NEWNEIGHTBL	RTM_NEWNEIGHTBL
9544d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTM_GETNEIGHTBL	= 66,
9644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_GETNEIGHTBL	RTM_GETNEIGHTBL
9744d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTM_SETNEIGHTBL,
9844d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_SETNEIGHTBL	RTM_SETNEIGHTBL
9944d362409d5469aed47d19e7908d19bd194493aThomas Graf
100639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf	RTM_NEWNDUSEROPT = 68,
101639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf#define RTM_NEWNDUSEROPT RTM_NEWNDUSEROPT
102639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf
103639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf	RTM_NEWADDRLABEL = 72,
104639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf#define RTM_NEWADDRLABEL RTM_NEWADDRLABEL
105639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf	RTM_DELADDRLABEL,
106639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf#define RTM_NEWADDRLABEL RTM_NEWADDRLABEL
107639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf	RTM_GETADDRLABEL,
108639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf#define RTM_GETADDRLABEL RTM_GETADDRLABEL
109639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf
11044d362409d5469aed47d19e7908d19bd194493aThomas Graf	__RTM_MAX,
11144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_MAX		(((__RTM_MAX + 3) & ~3) - 1)
11244d362409d5469aed47d19e7908d19bd194493aThomas Graf};
11344d362409d5469aed47d19e7908d19bd194493aThomas Graf
11444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_NR_MSGTYPES	(RTM_MAX + 1 - RTM_BASE)
11544d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_NR_FAMILIES	(RTM_NR_MSGTYPES >> 2)
11644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_FAM(cmd)	(((cmd) - RTM_BASE) >> 2)
11744d362409d5469aed47d19e7908d19bd194493aThomas Graf
11844d362409d5469aed47d19e7908d19bd194493aThomas Graf/*
11944d362409d5469aed47d19e7908d19bd194493aThomas Graf   Generic structure for encapsulation of optional route information.
12044d362409d5469aed47d19e7908d19bd194493aThomas Graf   It is reminiscent of sockaddr, but with sa_family replaced
12144d362409d5469aed47d19e7908d19bd194493aThomas Graf   with attribute type.
12244d362409d5469aed47d19e7908d19bd194493aThomas Graf */
12344d362409d5469aed47d19e7908d19bd194493aThomas Graf
12444d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtattr
12544d362409d5469aed47d19e7908d19bd194493aThomas Graf{
12644d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned short	rta_len;
12744d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned short	rta_type;
12844d362409d5469aed47d19e7908d19bd194493aThomas Graf};
12944d362409d5469aed47d19e7908d19bd194493aThomas Graf
13044d362409d5469aed47d19e7908d19bd194493aThomas Graf/* Macros to handle rtattributes */
13144d362409d5469aed47d19e7908d19bd194493aThomas Graf
13244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTA_ALIGNTO	4
13344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTA_ALIGN(len) ( ((len)+RTA_ALIGNTO-1) & ~(RTA_ALIGNTO-1) )
13444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTA_OK(rta,len) ((len) >= (int)sizeof(struct rtattr) && \
13544d362409d5469aed47d19e7908d19bd194493aThomas Graf			 (rta)->rta_len >= sizeof(struct rtattr) && \
13644d362409d5469aed47d19e7908d19bd194493aThomas Graf			 (rta)->rta_len <= (len))
13744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTA_NEXT(rta,attrlen)	((attrlen) -= RTA_ALIGN((rta)->rta_len), \
13844d362409d5469aed47d19e7908d19bd194493aThomas Graf				 (struct rtattr*)(((char*)(rta)) + RTA_ALIGN((rta)->rta_len)))
13944d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTA_LENGTH(len)	(RTA_ALIGN(sizeof(struct rtattr)) + (len))
14044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTA_SPACE(len)	RTA_ALIGN(RTA_LENGTH(len))
14144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTA_DATA(rta)   ((void*)(((char*)(rta)) + RTA_LENGTH(0)))
14244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTA_PAYLOAD(rta) ((int)((rta)->rta_len) - RTA_LENGTH(0))
14344d362409d5469aed47d19e7908d19bd194493aThomas Graf
14444d362409d5469aed47d19e7908d19bd194493aThomas Graf
14544d362409d5469aed47d19e7908d19bd194493aThomas Graf
14644d362409d5469aed47d19e7908d19bd194493aThomas Graf
14744d362409d5469aed47d19e7908d19bd194493aThomas Graf/******************************************************************************
14844d362409d5469aed47d19e7908d19bd194493aThomas Graf *		Definitions used in routing table administration.
14944d362409d5469aed47d19e7908d19bd194493aThomas Graf ****/
15044d362409d5469aed47d19e7908d19bd194493aThomas Graf
15144d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtmsg
15244d362409d5469aed47d19e7908d19bd194493aThomas Graf{
15344d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char		rtm_family;
15444d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char		rtm_dst_len;
15544d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char		rtm_src_len;
15644d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char		rtm_tos;
15744d362409d5469aed47d19e7908d19bd194493aThomas Graf
15844d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char		rtm_table;	/* Routing table id */
15944d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char		rtm_protocol;	/* Routing protocol; see below	*/
16044d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char		rtm_scope;	/* See below */
16144d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char		rtm_type;	/* See below	*/
16244d362409d5469aed47d19e7908d19bd194493aThomas Graf
16344d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned		rtm_flags;
16444d362409d5469aed47d19e7908d19bd194493aThomas Graf};
16544d362409d5469aed47d19e7908d19bd194493aThomas Graf
16644d362409d5469aed47d19e7908d19bd194493aThomas Graf/* rtm_type */
16744d362409d5469aed47d19e7908d19bd194493aThomas Graf
16844d362409d5469aed47d19e7908d19bd194493aThomas Grafenum
16944d362409d5469aed47d19e7908d19bd194493aThomas Graf{
17044d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTN_UNSPEC,
17144d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTN_UNICAST,		/* Gateway or direct route	*/
17244d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTN_LOCAL,		/* Accept locally		*/
17344d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTN_BROADCAST,		/* Accept locally as broadcast,
17444d362409d5469aed47d19e7908d19bd194493aThomas Graf				   send as broadcast */
17544d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTN_ANYCAST,		/* Accept locally as broadcast,
17644d362409d5469aed47d19e7908d19bd194493aThomas Graf				   but send as unicast */
17744d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTN_MULTICAST,		/* Multicast route		*/
17844d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTN_BLACKHOLE,		/* Drop				*/
17944d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTN_UNREACHABLE,	/* Destination is unreachable   */
18044d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTN_PROHIBIT,		/* Administratively prohibited	*/
18144d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTN_THROW,		/* Not in this table		*/
18244d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTN_NAT,		/* Translate this address	*/
18344d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTN_XRESOLVE,		/* Use external resolver	*/
18444d362409d5469aed47d19e7908d19bd194493aThomas Graf	__RTN_MAX
18544d362409d5469aed47d19e7908d19bd194493aThomas Graf};
18644d362409d5469aed47d19e7908d19bd194493aThomas Graf
18744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTN_MAX (__RTN_MAX - 1)
18844d362409d5469aed47d19e7908d19bd194493aThomas Graf
18944d362409d5469aed47d19e7908d19bd194493aThomas Graf
19044d362409d5469aed47d19e7908d19bd194493aThomas Graf/* rtm_protocol */
19144d362409d5469aed47d19e7908d19bd194493aThomas Graf
19244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTPROT_UNSPEC	0
19344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTPROT_REDIRECT	1	/* Route installed by ICMP redirects;
19444d362409d5469aed47d19e7908d19bd194493aThomas Graf				   not used by current IPv4 */
19544d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTPROT_KERNEL	2	/* Route installed by kernel		*/
19644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTPROT_BOOT	3	/* Route installed during boot		*/
19744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTPROT_STATIC	4	/* Route installed by administrator	*/
19844d362409d5469aed47d19e7908d19bd194493aThomas Graf
19944d362409d5469aed47d19e7908d19bd194493aThomas Graf/* Values of protocol >= RTPROT_STATIC are not interpreted by kernel;
20044d362409d5469aed47d19e7908d19bd194493aThomas Graf   they are just passed from user and back as is.
20144d362409d5469aed47d19e7908d19bd194493aThomas Graf   It will be used by hypothetical multiple routing daemons.
20244d362409d5469aed47d19e7908d19bd194493aThomas Graf   Note that protocol values should be standardized in order to
20344d362409d5469aed47d19e7908d19bd194493aThomas Graf   avoid conflicts.
20444d362409d5469aed47d19e7908d19bd194493aThomas Graf */
20544d362409d5469aed47d19e7908d19bd194493aThomas Graf
20644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTPROT_GATED	8	/* Apparently, GateD */
20744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTPROT_RA	9	/* RDISC/ND router advertisements */
20844d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTPROT_MRT	10	/* Merit MRT */
20944d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTPROT_ZEBRA	11	/* Zebra */
21044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTPROT_BIRD	12	/* BIRD */
21144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTPROT_DNROUTED	13	/* DECnet routing daemon */
21244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTPROT_XORP	14	/* XORP */
21344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTPROT_NTK	15	/* Netsukuku */
21444d362409d5469aed47d19e7908d19bd194493aThomas Graf
21544d362409d5469aed47d19e7908d19bd194493aThomas Graf/* rtm_scope
21644d362409d5469aed47d19e7908d19bd194493aThomas Graf
21744d362409d5469aed47d19e7908d19bd194493aThomas Graf   Really it is not scope, but sort of distance to the destination.
21844d362409d5469aed47d19e7908d19bd194493aThomas Graf   NOWHERE are reserved for not existing destinations, HOST is our
21944d362409d5469aed47d19e7908d19bd194493aThomas Graf   local addresses, LINK are destinations, located on directly attached
22044d362409d5469aed47d19e7908d19bd194493aThomas Graf   link and UNIVERSE is everywhere in the Universe.
22144d362409d5469aed47d19e7908d19bd194493aThomas Graf
22244d362409d5469aed47d19e7908d19bd194493aThomas Graf   Intermediate values are also possible f.e. interior routes
22344d362409d5469aed47d19e7908d19bd194493aThomas Graf   could be assigned a value between UNIVERSE and LINK.
22444d362409d5469aed47d19e7908d19bd194493aThomas Graf*/
22544d362409d5469aed47d19e7908d19bd194493aThomas Graf
22644d362409d5469aed47d19e7908d19bd194493aThomas Grafenum rt_scope_t
22744d362409d5469aed47d19e7908d19bd194493aThomas Graf{
22844d362409d5469aed47d19e7908d19bd194493aThomas Graf	RT_SCOPE_UNIVERSE=0,
22944d362409d5469aed47d19e7908d19bd194493aThomas Graf/* User defined values  */
23044d362409d5469aed47d19e7908d19bd194493aThomas Graf	RT_SCOPE_SITE=200,
23144d362409d5469aed47d19e7908d19bd194493aThomas Graf	RT_SCOPE_LINK=253,
23244d362409d5469aed47d19e7908d19bd194493aThomas Graf	RT_SCOPE_HOST=254,
23344d362409d5469aed47d19e7908d19bd194493aThomas Graf	RT_SCOPE_NOWHERE=255
23444d362409d5469aed47d19e7908d19bd194493aThomas Graf};
23544d362409d5469aed47d19e7908d19bd194493aThomas Graf
23644d362409d5469aed47d19e7908d19bd194493aThomas Graf/* rtm_flags */
23744d362409d5469aed47d19e7908d19bd194493aThomas Graf
23844d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_F_NOTIFY		0x100	/* Notify user of route change	*/
23944d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_F_CLONED		0x200	/* This route is cloned		*/
24044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_F_EQUALIZE		0x400	/* Multipath equalizer: NI	*/
24144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_F_PREFIX		0x800	/* Prefix addresses		*/
24244d362409d5469aed47d19e7908d19bd194493aThomas Graf
24344d362409d5469aed47d19e7908d19bd194493aThomas Graf/* Reserved table identifiers */
24444d362409d5469aed47d19e7908d19bd194493aThomas Graf
24544d362409d5469aed47d19e7908d19bd194493aThomas Grafenum rt_class_t
24644d362409d5469aed47d19e7908d19bd194493aThomas Graf{
24744d362409d5469aed47d19e7908d19bd194493aThomas Graf	RT_TABLE_UNSPEC=0,
24844d362409d5469aed47d19e7908d19bd194493aThomas Graf/* User defined values */
24944d362409d5469aed47d19e7908d19bd194493aThomas Graf	RT_TABLE_DEFAULT=253,
25044d362409d5469aed47d19e7908d19bd194493aThomas Graf	RT_TABLE_MAIN=254,
25144d362409d5469aed47d19e7908d19bd194493aThomas Graf	RT_TABLE_LOCAL=255,
25244d362409d5469aed47d19e7908d19bd194493aThomas Graf	RT_TABLE_MAX=0xFFFFFFFF
25344d362409d5469aed47d19e7908d19bd194493aThomas Graf};
25444d362409d5469aed47d19e7908d19bd194493aThomas Graf
25544d362409d5469aed47d19e7908d19bd194493aThomas Graf
25644d362409d5469aed47d19e7908d19bd194493aThomas Graf/* Routing message attributes */
25744d362409d5469aed47d19e7908d19bd194493aThomas Graf
25844d362409d5469aed47d19e7908d19bd194493aThomas Grafenum rtattr_type_t
25944d362409d5469aed47d19e7908d19bd194493aThomas Graf{
26044d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTA_UNSPEC,
26144d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTA_DST,
26244d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTA_SRC,
26344d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTA_IIF,
26444d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTA_OIF,
26544d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTA_GATEWAY,
26644d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTA_PRIORITY,
26744d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTA_PREFSRC,
26844d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTA_METRICS,
26944d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTA_MULTIPATH,
270b145f63312d887ef08ff5372516d52096e182917Thomas Graf	RTA_PROTOINFO, /* no longer used */
27144d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTA_FLOW,
27244d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTA_CACHEINFO,
273b145f63312d887ef08ff5372516d52096e182917Thomas Graf	RTA_SESSION, /* no longer used */
274639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf	RTA_MP_ALGO, /* no longer used */
27544d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTA_TABLE,
276b145f63312d887ef08ff5372516d52096e182917Thomas Graf	RTA_GENERATION,
27744d362409d5469aed47d19e7908d19bd194493aThomas Graf	__RTA_MAX
27844d362409d5469aed47d19e7908d19bd194493aThomas Graf};
27944d362409d5469aed47d19e7908d19bd194493aThomas Graf
28044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTA_MAX (__RTA_MAX - 1)
28144d362409d5469aed47d19e7908d19bd194493aThomas Graf
28244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct rtmsg))))
28344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTM_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct rtmsg))
28444d362409d5469aed47d19e7908d19bd194493aThomas Graf
28544d362409d5469aed47d19e7908d19bd194493aThomas Graf/* RTM_MULTIPATH --- array of struct rtnexthop.
28644d362409d5469aed47d19e7908d19bd194493aThomas Graf *
28744d362409d5469aed47d19e7908d19bd194493aThomas Graf * "struct rtnexthop" describes all necessary nexthop information,
28844d362409d5469aed47d19e7908d19bd194493aThomas Graf * i.e. parameters of path to a destination via this nexthop.
28944d362409d5469aed47d19e7908d19bd194493aThomas Graf *
29044d362409d5469aed47d19e7908d19bd194493aThomas Graf * At the moment it is impossible to set different prefsrc, mtu, window
29144d362409d5469aed47d19e7908d19bd194493aThomas Graf * and rtt for different paths from multipath.
29244d362409d5469aed47d19e7908d19bd194493aThomas Graf */
29344d362409d5469aed47d19e7908d19bd194493aThomas Graf
29444d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnexthop
29544d362409d5469aed47d19e7908d19bd194493aThomas Graf{
29644d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned short		rtnh_len;
29744d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char		rtnh_flags;
29844d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char		rtnh_hops;
29944d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			rtnh_ifindex;
30044d362409d5469aed47d19e7908d19bd194493aThomas Graf};
30144d362409d5469aed47d19e7908d19bd194493aThomas Graf
30244d362409d5469aed47d19e7908d19bd194493aThomas Graf/* rtnh_flags */
30344d362409d5469aed47d19e7908d19bd194493aThomas Graf
30444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNH_F_DEAD		1	/* Nexthop is dead (used by multipath)	*/
30544d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNH_F_PERVASIVE	2	/* Do recursive gateway lookup	*/
30644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNH_F_ONLINK		4	/* Gateway is forced on link	*/
30744d362409d5469aed47d19e7908d19bd194493aThomas Graf
30844d362409d5469aed47d19e7908d19bd194493aThomas Graf/* Macros to handle hexthops */
30944d362409d5469aed47d19e7908d19bd194493aThomas Graf
31044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNH_ALIGNTO	4
31144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNH_ALIGN(len) ( ((len)+RTNH_ALIGNTO-1) & ~(RTNH_ALIGNTO-1) )
31244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNH_OK(rtnh,len) ((rtnh)->rtnh_len >= sizeof(struct rtnexthop) && \
31344d362409d5469aed47d19e7908d19bd194493aThomas Graf			   ((int)(rtnh)->rtnh_len) <= (len))
31444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNH_NEXT(rtnh)	((struct rtnexthop*)(((char*)(rtnh)) + RTNH_ALIGN((rtnh)->rtnh_len)))
31544d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNH_LENGTH(len) (RTNH_ALIGN(sizeof(struct rtnexthop)) + (len))
31644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNH_SPACE(len)	RTNH_ALIGN(RTNH_LENGTH(len))
31744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNH_DATA(rtnh)   ((struct rtattr*)(((char*)(rtnh)) + RTNH_LENGTH(0)))
31844d362409d5469aed47d19e7908d19bd194493aThomas Graf
31944d362409d5469aed47d19e7908d19bd194493aThomas Graf/* RTM_CACHEINFO */
32044d362409d5469aed47d19e7908d19bd194493aThomas Graf
32144d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rta_cacheinfo
32244d362409d5469aed47d19e7908d19bd194493aThomas Graf{
32344d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	rta_clntref;
32444d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	rta_lastuse;
32544d362409d5469aed47d19e7908d19bd194493aThomas Graf	__s32	rta_expires;
32644d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	rta_error;
32744d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	rta_used;
32844d362409d5469aed47d19e7908d19bd194493aThomas Graf
32944d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNETLINK_HAVE_PEERINFO 1
33044d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	rta_id;
33144d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	rta_ts;
33244d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	rta_tsage;
33344d362409d5469aed47d19e7908d19bd194493aThomas Graf};
33444d362409d5469aed47d19e7908d19bd194493aThomas Graf
33544d362409d5469aed47d19e7908d19bd194493aThomas Graf/* RTM_METRICS --- array of struct rtattr with types of RTAX_* */
33644d362409d5469aed47d19e7908d19bd194493aThomas Graf
33744d362409d5469aed47d19e7908d19bd194493aThomas Grafenum
33844d362409d5469aed47d19e7908d19bd194493aThomas Graf{
33944d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTAX_UNSPEC,
34044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTAX_UNSPEC RTAX_UNSPEC
34144d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTAX_LOCK,
34244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTAX_LOCK RTAX_LOCK
34344d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTAX_MTU,
34444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTAX_MTU RTAX_MTU
34544d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTAX_WINDOW,
34644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTAX_WINDOW RTAX_WINDOW
34744d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTAX_RTT,
34844d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTAX_RTT RTAX_RTT
34944d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTAX_RTTVAR,
35044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTAX_RTTVAR RTAX_RTTVAR
35144d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTAX_SSTHRESH,
35244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTAX_SSTHRESH RTAX_SSTHRESH
35344d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTAX_CWND,
35444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTAX_CWND RTAX_CWND
35544d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTAX_ADVMSS,
35644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTAX_ADVMSS RTAX_ADVMSS
35744d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTAX_REORDERING,
35844d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTAX_REORDERING RTAX_REORDERING
35944d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTAX_HOPLIMIT,
36044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTAX_HOPLIMIT RTAX_HOPLIMIT
36144d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTAX_INITCWND,
36244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTAX_INITCWND RTAX_INITCWND
36344d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTAX_FEATURES,
36444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTAX_FEATURES RTAX_FEATURES
365639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf	RTAX_RTO_MIN,
366639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf#define RTAX_RTO_MIN RTAX_RTO_MIN
36744d362409d5469aed47d19e7908d19bd194493aThomas Graf	__RTAX_MAX
36844d362409d5469aed47d19e7908d19bd194493aThomas Graf};
36944d362409d5469aed47d19e7908d19bd194493aThomas Graf
37044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTAX_MAX (__RTAX_MAX - 1)
37144d362409d5469aed47d19e7908d19bd194493aThomas Graf
37244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTAX_FEATURE_ECN	0x00000001
37344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTAX_FEATURE_SACK	0x00000002
37444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTAX_FEATURE_TIMESTAMP	0x00000004
37544d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTAX_FEATURE_ALLFRAG	0x00000008
37644d362409d5469aed47d19e7908d19bd194493aThomas Graf
37744d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rta_session
37844d362409d5469aed47d19e7908d19bd194493aThomas Graf{
37944d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u8	proto;
38044d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u8	pad1;
38144d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u16	pad2;
38244d362409d5469aed47d19e7908d19bd194493aThomas Graf
38344d362409d5469aed47d19e7908d19bd194493aThomas Graf	union {
38444d362409d5469aed47d19e7908d19bd194493aThomas Graf		struct {
38544d362409d5469aed47d19e7908d19bd194493aThomas Graf			__u16	sport;
38644d362409d5469aed47d19e7908d19bd194493aThomas Graf			__u16	dport;
38744d362409d5469aed47d19e7908d19bd194493aThomas Graf		} ports;
38844d362409d5469aed47d19e7908d19bd194493aThomas Graf
38944d362409d5469aed47d19e7908d19bd194493aThomas Graf		struct {
39044d362409d5469aed47d19e7908d19bd194493aThomas Graf			__u8	type;
39144d362409d5469aed47d19e7908d19bd194493aThomas Graf			__u8	code;
39244d362409d5469aed47d19e7908d19bd194493aThomas Graf			__u16	ident;
39344d362409d5469aed47d19e7908d19bd194493aThomas Graf		} icmpt;
39444d362409d5469aed47d19e7908d19bd194493aThomas Graf
39544d362409d5469aed47d19e7908d19bd194493aThomas Graf		__u32		spi;
39644d362409d5469aed47d19e7908d19bd194493aThomas Graf	} u;
39744d362409d5469aed47d19e7908d19bd194493aThomas Graf};
39844d362409d5469aed47d19e7908d19bd194493aThomas Graf
39944d362409d5469aed47d19e7908d19bd194493aThomas Graf/****
40044d362409d5469aed47d19e7908d19bd194493aThomas Graf *		General form of address family dependent message.
40144d362409d5469aed47d19e7908d19bd194493aThomas Graf ****/
40244d362409d5469aed47d19e7908d19bd194493aThomas Graf
40344d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtgenmsg
40444d362409d5469aed47d19e7908d19bd194493aThomas Graf{
40544d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char		rtgen_family;
40644d362409d5469aed47d19e7908d19bd194493aThomas Graf};
40744d362409d5469aed47d19e7908d19bd194493aThomas Graf
40844d362409d5469aed47d19e7908d19bd194493aThomas Graf/*****************************************************************
40944d362409d5469aed47d19e7908d19bd194493aThomas Graf *		Link layer specific messages.
41044d362409d5469aed47d19e7908d19bd194493aThomas Graf ****/
41144d362409d5469aed47d19e7908d19bd194493aThomas Graf
41244d362409d5469aed47d19e7908d19bd194493aThomas Graf/* struct ifinfomsg
41344d362409d5469aed47d19e7908d19bd194493aThomas Graf * passes link level specific information, not dependent
41444d362409d5469aed47d19e7908d19bd194493aThomas Graf * on network protocol.
41544d362409d5469aed47d19e7908d19bd194493aThomas Graf */
41644d362409d5469aed47d19e7908d19bd194493aThomas Graf
41744d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct ifinfomsg
41844d362409d5469aed47d19e7908d19bd194493aThomas Graf{
41944d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char	ifi_family;
42044d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char	__ifi_pad;
42144d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned short	ifi_type;		/* ARPHRD_* */
42244d362409d5469aed47d19e7908d19bd194493aThomas Graf	int		ifi_index;		/* Link index	*/
42344d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned	ifi_flags;		/* IFF_* flags	*/
42444d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned	ifi_change;		/* IFF_* change mask */
42544d362409d5469aed47d19e7908d19bd194493aThomas Graf};
42644d362409d5469aed47d19e7908d19bd194493aThomas Graf
42744d362409d5469aed47d19e7908d19bd194493aThomas Graf/********************************************************************
42844d362409d5469aed47d19e7908d19bd194493aThomas Graf *		prefix information
42944d362409d5469aed47d19e7908d19bd194493aThomas Graf ****/
43044d362409d5469aed47d19e7908d19bd194493aThomas Graf
43144d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct prefixmsg
43244d362409d5469aed47d19e7908d19bd194493aThomas Graf{
43344d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char	prefix_family;
43444d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char	prefix_pad1;
43544d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned short	prefix_pad2;
43644d362409d5469aed47d19e7908d19bd194493aThomas Graf	int		prefix_ifindex;
43744d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char	prefix_type;
43844d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char	prefix_len;
43944d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char	prefix_flags;
44044d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char	prefix_pad3;
44144d362409d5469aed47d19e7908d19bd194493aThomas Graf};
44244d362409d5469aed47d19e7908d19bd194493aThomas Graf
44344d362409d5469aed47d19e7908d19bd194493aThomas Grafenum
44444d362409d5469aed47d19e7908d19bd194493aThomas Graf{
44544d362409d5469aed47d19e7908d19bd194493aThomas Graf	PREFIX_UNSPEC,
44644d362409d5469aed47d19e7908d19bd194493aThomas Graf	PREFIX_ADDRESS,
44744d362409d5469aed47d19e7908d19bd194493aThomas Graf	PREFIX_CACHEINFO,
44844d362409d5469aed47d19e7908d19bd194493aThomas Graf	__PREFIX_MAX
44944d362409d5469aed47d19e7908d19bd194493aThomas Graf};
45044d362409d5469aed47d19e7908d19bd194493aThomas Graf
45144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define PREFIX_MAX	(__PREFIX_MAX - 1)
45244d362409d5469aed47d19e7908d19bd194493aThomas Graf
45344d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct prefix_cacheinfo
45444d362409d5469aed47d19e7908d19bd194493aThomas Graf{
45544d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	preferred_time;
45644d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	valid_time;
45744d362409d5469aed47d19e7908d19bd194493aThomas Graf};
45844d362409d5469aed47d19e7908d19bd194493aThomas Graf
45944d362409d5469aed47d19e7908d19bd194493aThomas Graf
46044d362409d5469aed47d19e7908d19bd194493aThomas Graf/*****************************************************************
46144d362409d5469aed47d19e7908d19bd194493aThomas Graf *		Traffic control messages.
46244d362409d5469aed47d19e7908d19bd194493aThomas Graf ****/
46344d362409d5469aed47d19e7908d19bd194493aThomas Graf
46444d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct tcmsg
46544d362409d5469aed47d19e7908d19bd194493aThomas Graf{
46644d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char	tcm_family;
46744d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char	tcm__pad1;
46844d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned short	tcm__pad2;
46944d362409d5469aed47d19e7908d19bd194493aThomas Graf	int		tcm_ifindex;
47044d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		tcm_handle;
47144d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		tcm_parent;
47244d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		tcm_info;
47344d362409d5469aed47d19e7908d19bd194493aThomas Graf};
47444d362409d5469aed47d19e7908d19bd194493aThomas Graf
47544d362409d5469aed47d19e7908d19bd194493aThomas Grafenum
47644d362409d5469aed47d19e7908d19bd194493aThomas Graf{
47744d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_UNSPEC,
47844d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_KIND,
47944d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_OPTIONS,
48044d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_STATS,
48144d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_XSTATS,
48244d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_RATE,
48344d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_FCNT,
48444d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_STATS2,
48544d362409d5469aed47d19e7908d19bd194493aThomas Graf	__TCA_MAX
48644d362409d5469aed47d19e7908d19bd194493aThomas Graf};
48744d362409d5469aed47d19e7908d19bd194493aThomas Graf
48844d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TCA_MAX (__TCA_MAX - 1)
48944d362409d5469aed47d19e7908d19bd194493aThomas Graf
49044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TCA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcmsg))))
49144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TCA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcmsg))
49244d362409d5469aed47d19e7908d19bd194493aThomas Graf
493639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf/********************************************************************
494639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf *		Neighbor Discovery userland options
495639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf ****/
496639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf
497639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Grafstruct nduseroptmsg
498639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf{
499639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf	unsigned char	nduseropt_family;
500639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf	unsigned char	nduseropt_pad1;
501639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf	unsigned short	nduseropt_opts_len;	/* Total length of options */
502639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf	int		nduseropt_ifindex;
503639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf	__u8		nduseropt_icmp_type;
504639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf	__u8		nduseropt_icmp_code;
505639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf	unsigned short	nduseropt_pad2;
506639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf	unsigned int	nduseropt_pad3;
507639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf	/* Followed by one or more ND options */
508639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf};
509639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf
510639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Grafenum
511639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf{
512639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf	NDUSEROPT_UNSPEC,
513639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf	NDUSEROPT_SRCADDR,
514639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf	__NDUSEROPT_MAX
515639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf};
516639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf
517639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf#define NDUSEROPT_MAX	(__NDUSEROPT_MAX - 1)
518639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf
51944d362409d5469aed47d19e7908d19bd194493aThomas Graf#ifndef __KERNEL__
52044d362409d5469aed47d19e7908d19bd194493aThomas Graf/* RTnetlink multicast groups - backwards compatibility for userspace */
52144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTMGRP_LINK		1
52244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTMGRP_NOTIFY		2
52344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTMGRP_NEIGH		4
52444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTMGRP_TC		8
52544d362409d5469aed47d19e7908d19bd194493aThomas Graf
52644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTMGRP_IPV4_IFADDR	0x10
52744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTMGRP_IPV4_MROUTE	0x20
52844d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTMGRP_IPV4_ROUTE	0x40
52944d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTMGRP_IPV4_RULE	0x80
53044d362409d5469aed47d19e7908d19bd194493aThomas Graf
53144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTMGRP_IPV6_IFADDR	0x100
53244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTMGRP_IPV6_MROUTE	0x200
53344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTMGRP_IPV6_ROUTE	0x400
53444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTMGRP_IPV6_IFINFO	0x800
53544d362409d5469aed47d19e7908d19bd194493aThomas Graf
53644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTMGRP_DECnet_IFADDR    0x1000
53744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTMGRP_DECnet_ROUTE     0x4000
53844d362409d5469aed47d19e7908d19bd194493aThomas Graf
53944d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTMGRP_IPV6_PREFIX	0x20000
54044d362409d5469aed47d19e7908d19bd194493aThomas Graf#endif
54144d362409d5469aed47d19e7908d19bd194493aThomas Graf
54244d362409d5469aed47d19e7908d19bd194493aThomas Graf/* RTnetlink multicast groups */
54344d362409d5469aed47d19e7908d19bd194493aThomas Grafenum rtnetlink_groups {
54444d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTNLGRP_NONE,
54544d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNLGRP_NONE		RTNLGRP_NONE
54644d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTNLGRP_LINK,
54744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNLGRP_LINK		RTNLGRP_LINK
54844d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTNLGRP_NOTIFY,
54944d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNLGRP_NOTIFY		RTNLGRP_NOTIFY
55044d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTNLGRP_NEIGH,
55144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNLGRP_NEIGH		RTNLGRP_NEIGH
55244d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTNLGRP_TC,
55344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNLGRP_TC		RTNLGRP_TC
55444d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTNLGRP_IPV4_IFADDR,
55544d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNLGRP_IPV4_IFADDR	RTNLGRP_IPV4_IFADDR
55644d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTNLGRP_IPV4_MROUTE,
55744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define	RTNLGRP_IPV4_MROUTE	RTNLGRP_IPV4_MROUTE
55844d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTNLGRP_IPV4_ROUTE,
55944d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNLGRP_IPV4_ROUTE	RTNLGRP_IPV4_ROUTE
56044d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTNLGRP_IPV4_RULE,
56144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNLGRP_IPV4_RULE	RTNLGRP_IPV4_RULE
56244d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTNLGRP_IPV6_IFADDR,
56344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNLGRP_IPV6_IFADDR	RTNLGRP_IPV6_IFADDR
56444d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTNLGRP_IPV6_MROUTE,
56544d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNLGRP_IPV6_MROUTE	RTNLGRP_IPV6_MROUTE
56644d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTNLGRP_IPV6_ROUTE,
56744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNLGRP_IPV6_ROUTE	RTNLGRP_IPV6_ROUTE
56844d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTNLGRP_IPV6_IFINFO,
56944d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNLGRP_IPV6_IFINFO	RTNLGRP_IPV6_IFINFO
57044d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTNLGRP_DECnet_IFADDR,
57144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNLGRP_DECnet_IFADDR	RTNLGRP_DECnet_IFADDR
57244d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTNLGRP_NOP2,
57344d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTNLGRP_DECnet_ROUTE,
57444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNLGRP_DECnet_ROUTE	RTNLGRP_DECnet_ROUTE
57544d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTNLGRP_DECnet_RULE,
57644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNLGRP_DECnet_RULE	RTNLGRP_DECnet_RULE
57744d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTNLGRP_NOP4,
57844d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTNLGRP_IPV6_PREFIX,
57944d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNLGRP_IPV6_PREFIX	RTNLGRP_IPV6_PREFIX
58044d362409d5469aed47d19e7908d19bd194493aThomas Graf	RTNLGRP_IPV6_RULE,
58144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNLGRP_IPV6_RULE	RTNLGRP_IPV6_RULE
582639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf	RTNLGRP_ND_USEROPT,
583639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf#define RTNLGRP_ND_USEROPT	RTNLGRP_ND_USEROPT
58444d362409d5469aed47d19e7908d19bd194493aThomas Graf	__RTNLGRP_MAX
58544d362409d5469aed47d19e7908d19bd194493aThomas Graf};
58644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define RTNLGRP_MAX	(__RTNLGRP_MAX - 1)
58744d362409d5469aed47d19e7908d19bd194493aThomas Graf
58844d362409d5469aed47d19e7908d19bd194493aThomas Graf/* TC action piece */
58944d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct tcamsg
59044d362409d5469aed47d19e7908d19bd194493aThomas Graf{
59144d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char	tca_family;
59244d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char	tca__pad1;
59344d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned short	tca__pad2;
59444d362409d5469aed47d19e7908d19bd194493aThomas Graf};
59544d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TA_RTA(r)  ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct tcamsg))))
59644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct tcamsg))
59744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TCA_ACT_TAB 1 /* attr type must be >=1 */
59844d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TCAA_MAX 1
59944d362409d5469aed47d19e7908d19bd194493aThomas Graf
600639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf/* End of information exported to user level */
601639b66b1f6ecafff3376d52a12233f6c8c899b06Thomas Graf
60244d362409d5469aed47d19e7908d19bd194493aThomas Graf#endif	/* __LINUX_RTNETLINK_H */
603