xref: /linux/include/uapi/linux/fib_rules.h (revision c13aca79ff3c4af5fd31a5b2743a90eba6e36a26)
16f52b16cSGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2607ca46eSDavid Howells #ifndef __LINUX_FIB_RULES_H
3607ca46eSDavid Howells #define __LINUX_FIB_RULES_H
4607ca46eSDavid Howells 
5607ca46eSDavid Howells #include <linux/types.h>
6607ca46eSDavid Howells #include <linux/rtnetlink.h>
7607ca46eSDavid Howells 
8607ca46eSDavid Howells /* rule is permanent, and cannot be deleted */
9607ca46eSDavid Howells #define FIB_RULE_PERMANENT	0x00000001
10607ca46eSDavid Howells #define FIB_RULE_INVERT		0x00000002
11607ca46eSDavid Howells #define FIB_RULE_UNRESOLVED	0x00000004
12607ca46eSDavid Howells #define FIB_RULE_IIF_DETACHED	0x00000008
13607ca46eSDavid Howells #define FIB_RULE_DEV_DETACHED	FIB_RULE_IIF_DETACHED
14607ca46eSDavid Howells #define FIB_RULE_OIF_DETACHED	0x00000010
15607ca46eSDavid Howells 
16607ca46eSDavid Howells /* try to find source address in routing lookups */
17607ca46eSDavid Howells #define FIB_RULE_FIND_SADDR	0x00010000
18607ca46eSDavid Howells 
19607ca46eSDavid Howells struct fib_rule_hdr {
20607ca46eSDavid Howells 	__u8		family;
21607ca46eSDavid Howells 	__u8		dst_len;
22607ca46eSDavid Howells 	__u8		src_len;
23607ca46eSDavid Howells 	__u8		tos;
24607ca46eSDavid Howells 
25607ca46eSDavid Howells 	__u8		table;
26607ca46eSDavid Howells 	__u8		res1;   /* reserved */
271b71af60SDonald Sharp 	__u8		res2;	/* reserved */
28607ca46eSDavid Howells 	__u8		action;
29607ca46eSDavid Howells 
30607ca46eSDavid Howells 	__u32		flags;
31607ca46eSDavid Howells };
32607ca46eSDavid Howells 
33622ec2c9SLorenzo Colitti struct fib_rule_uid_range {
34622ec2c9SLorenzo Colitti 	__u32		start;
35622ec2c9SLorenzo Colitti 	__u32		end;
36622ec2c9SLorenzo Colitti };
37622ec2c9SLorenzo Colitti 
38*bfff4862SRoopa Prabhu struct fib_rule_port_range {
39*bfff4862SRoopa Prabhu 	__u16		start;
40*bfff4862SRoopa Prabhu 	__u16		end;
41*bfff4862SRoopa Prabhu };
42*bfff4862SRoopa Prabhu 
43607ca46eSDavid Howells enum {
44607ca46eSDavid Howells 	FRA_UNSPEC,
45607ca46eSDavid Howells 	FRA_DST,	/* destination address */
46607ca46eSDavid Howells 	FRA_SRC,	/* source address */
47607ca46eSDavid Howells 	FRA_IIFNAME,	/* interface name */
48607ca46eSDavid Howells #define FRA_IFNAME	FRA_IIFNAME
49607ca46eSDavid Howells 	FRA_GOTO,	/* target to jump to (FR_ACT_GOTO) */
50607ca46eSDavid Howells 	FRA_UNUSED2,
51607ca46eSDavid Howells 	FRA_PRIORITY,	/* priority/preference */
52607ca46eSDavid Howells 	FRA_UNUSED3,
53607ca46eSDavid Howells 	FRA_UNUSED4,
54607ca46eSDavid Howells 	FRA_UNUSED5,
55607ca46eSDavid Howells 	FRA_FWMARK,	/* mark */
56607ca46eSDavid Howells 	FRA_FLOW,	/* flow/class id */
57e7030878SThomas Graf 	FRA_TUN_ID,
586ef94cfaSStefan Tomanek 	FRA_SUPPRESS_IFGROUP,
5973f5698eSStefan Tomanek 	FRA_SUPPRESS_PREFIXLEN,
60607ca46eSDavid Howells 	FRA_TABLE,	/* Extended table id */
61607ca46eSDavid Howells 	FRA_FWMASK,	/* mask for netfilter mark */
62607ca46eSDavid Howells 	FRA_OIFNAME,
63b46f6dedSNicolas Dichtel 	FRA_PAD,
6496c63fa7SDavid Ahern 	FRA_L3MDEV,	/* iif or oif is l3mdev goto its table */
65622ec2c9SLorenzo Colitti 	FRA_UID_RANGE,	/* UID range */
661b71af60SDonald Sharp 	FRA_PROTOCOL,   /* Originator of the rule */
67*bfff4862SRoopa Prabhu 	FRA_IP_PROTO,	/* ip proto */
68*bfff4862SRoopa Prabhu 	FRA_SPORT_RANGE, /* sport */
69*bfff4862SRoopa Prabhu 	FRA_DPORT_RANGE, /* dport */
70607ca46eSDavid Howells 	__FRA_MAX
71607ca46eSDavid Howells };
72607ca46eSDavid Howells 
73607ca46eSDavid Howells #define FRA_MAX (__FRA_MAX - 1)
74607ca46eSDavid Howells 
75607ca46eSDavid Howells enum {
76607ca46eSDavid Howells 	FR_ACT_UNSPEC,
77607ca46eSDavid Howells 	FR_ACT_TO_TBL,		/* Pass to fixed table */
78607ca46eSDavid Howells 	FR_ACT_GOTO,		/* Jump to another rule */
79607ca46eSDavid Howells 	FR_ACT_NOP,		/* No operation */
80607ca46eSDavid Howells 	FR_ACT_RES3,
81607ca46eSDavid Howells 	FR_ACT_RES4,
82607ca46eSDavid Howells 	FR_ACT_BLACKHOLE,	/* Drop without notification */
83607ca46eSDavid Howells 	FR_ACT_UNREACHABLE,	/* Drop with ENETUNREACH */
84607ca46eSDavid Howells 	FR_ACT_PROHIBIT,	/* Drop with EACCES */
85607ca46eSDavid Howells 	__FR_ACT_MAX,
86607ca46eSDavid Howells };
87607ca46eSDavid Howells 
88607ca46eSDavid Howells #define FR_ACT_MAX (__FR_ACT_MAX - 1)
89607ca46eSDavid Howells 
90607ca46eSDavid Howells #endif
91