1dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat#ifndef __LINUX_FIB_RULES_H
2dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat#define __LINUX_FIB_RULES_H
3dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat
4dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat#include <linux/types.h>
5dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat#include <linux/rtnetlink.h>
6dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat
7dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat/* rule is permanent, and cannot be deleted */
8dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat#define FIB_RULE_PERMANENT	0x00000001
9dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat#define FIB_RULE_INVERT		0x00000002
10dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat#define FIB_RULE_UNRESOLVED	0x00000004
111a441f49ec87ef74b978d7ae17da2a9b2ca6e811Dmitry Shmidt#define FIB_RULE_IIF_DETACHED	0x00000008
121a441f49ec87ef74b978d7ae17da2a9b2ca6e811Dmitry Shmidt#define FIB_RULE_DEV_DETACHED	FIB_RULE_IIF_DETACHED
131a441f49ec87ef74b978d7ae17da2a9b2ca6e811Dmitry Shmidt#define FIB_RULE_OIF_DETACHED	0x00000010
14dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat
15dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat/* try to find source address in routing lookups */
16dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat#define FIB_RULE_FIND_SADDR	0x00010000
17dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat
181a441f49ec87ef74b978d7ae17da2a9b2ca6e811Dmitry Shmidtstruct fib_rule_hdr {
19dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	__u8		family;
20dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	__u8		dst_len;
21dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	__u8		src_len;
22dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	__u8		tos;
23dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat
24dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	__u8		table;
25dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	__u8		res1;	/* reserved */
26dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	__u8		res2;	/* reserved */
27dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	__u8		action;
28dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat
29dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	__u32		flags;
30dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat};
31dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat
321a441f49ec87ef74b978d7ae17da2a9b2ca6e811Dmitry Shmidtenum {
33dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	FRA_UNSPEC,
34dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	FRA_DST,	/* destination address */
35dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	FRA_SRC,	/* source address */
361a441f49ec87ef74b978d7ae17da2a9b2ca6e811Dmitry Shmidt	FRA_IIFNAME,	/* interface name */
371a441f49ec87ef74b978d7ae17da2a9b2ca6e811Dmitry Shmidt#define FRA_IFNAME	FRA_IIFNAME
38dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	FRA_GOTO,	/* target to jump to (FR_ACT_GOTO) */
39dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	FRA_UNUSED2,
40dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	FRA_PRIORITY,	/* priority/preference */
41dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	FRA_UNUSED3,
42dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	FRA_UNUSED4,
43dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	FRA_UNUSED5,
44dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	FRA_FWMARK,	/* mark */
45dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	FRA_FLOW,	/* flow/class id */
46a3563ede2d519047dcb00fec3f12ad234ccdff45Stephen Hemminger	FRA_TUN_ID,
476b2ed935ae4e6a0bafa5a314cc177470529cd629Stephen Hemminger	FRA_SUPPRESS_IFGROUP,
486b2ed935ae4e6a0bafa5a314cc177470529cd629Stephen Hemminger	FRA_SUPPRESS_PREFIXLEN,
49dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	FRA_TABLE,	/* Extended table id */
50dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	FRA_FWMASK,	/* mask for netfilter mark */
511a441f49ec87ef74b978d7ae17da2a9b2ca6e811Dmitry Shmidt	FRA_OIFNAME,
52b7a3df0f3c56c10587e926307daaa87fc3b854bfLorenzo Colitti	FRA_UID_START,
53b7a3df0f3c56c10587e926307daaa87fc3b854bfLorenzo Colitti	FRA_UID_END,
54dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	__FRA_MAX
55dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat};
56dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat
57dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat#define FRA_MAX (__FRA_MAX - 1)
58dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat
591a441f49ec87ef74b978d7ae17da2a9b2ca6e811Dmitry Shmidtenum {
60dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	FR_ACT_UNSPEC,
61dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	FR_ACT_TO_TBL,		/* Pass to fixed table */
62dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	FR_ACT_GOTO,		/* Jump to another rule */
63dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	FR_ACT_NOP,		/* No operation */
64dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	FR_ACT_RES3,
65dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	FR_ACT_RES4,
66dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	FR_ACT_BLACKHOLE,	/* Drop without notification */
67dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	FR_ACT_UNREACHABLE,	/* Drop with ENETUNREACH */
68dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	FR_ACT_PROHIBIT,	/* Drop with EACCES */
69dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	__FR_ACT_MAX,
70dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat};
71dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat
72dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat#define FR_ACT_MAX (__FR_ACT_MAX - 1)
73dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat
74dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat#endif
75