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 */
46dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	FRA_UNUSED6,
47dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	FRA_UNUSED7,
48dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	FRA_UNUSED8,
49dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	FRA_TABLE,	/* Extended table id */
50dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	FRA_FWMASK,	/* mask for netfilter mark */
511a441f49ec87ef74b978d7ae17da2a9b2ca6e811Dmitry Shmidt	FRA_OIFNAME,
52dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	__FRA_MAX
53dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat};
54dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat
55dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat#define FRA_MAX (__FRA_MAX - 1)
56dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat
571a441f49ec87ef74b978d7ae17da2a9b2ca6e811Dmitry Shmidtenum {
58dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	FR_ACT_UNSPEC,
59dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	FR_ACT_TO_TBL,		/* Pass to fixed table */
60dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	FR_ACT_GOTO,		/* Jump to another rule */
61dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	FR_ACT_NOP,		/* No operation */
62dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	FR_ACT_RES3,
63dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	FR_ACT_RES4,
64dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	FR_ACT_BLACKHOLE,	/* Drop without notification */
65dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	FR_ACT_UNREACHABLE,	/* Drop with ENETUNREACH */
66dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	FR_ACT_PROHIBIT,	/* Drop with EACCES */
67dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat	__FR_ACT_MAX,
68dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat};
69dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat
70dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat#define FR_ACT_MAX (__FR_ACT_MAX - 1)
71dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat
72dcfb7a77f8709125e97c313cb8ab6ec4d87468f4San Mehat#endif
73