xref: /linux-6.15/include/uapi/linux/fib_rules.h (revision ca4edd96)
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 
38bfff4862SRoopa Prabhu struct fib_rule_port_range {
39bfff4862SRoopa Prabhu 	__u16		start;
40bfff4862SRoopa Prabhu 	__u16		end;
41bfff4862SRoopa Prabhu };
42bfff4862SRoopa 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 */
67bfff4862SRoopa Prabhu 	FRA_IP_PROTO,	/* ip proto */
68bfff4862SRoopa Prabhu 	FRA_SPORT_RANGE, /* sport */
69bfff4862SRoopa Prabhu 	FRA_DPORT_RANGE, /* dport */
70c951a29fSIdo Schimmel 	FRA_DSCP,	/* dscp */
71d1d761b3SIdo Schimmel 	FRA_FLOWLABEL,	/* flowlabel */
72d1d761b3SIdo Schimmel 	FRA_FLOWLABEL_MASK,	/* flowlabel mask */
7339f970aeSIdo Schimmel 	FRA_SPORT_MASK,	/* sport mask */
7439f970aeSIdo Schimmel 	FRA_DPORT_MASK,	/* dport mask */
75*ca4edd96SIdo Schimmel 	FRA_DSCP_MASK,	/* dscp mask */
76607ca46eSDavid Howells 	__FRA_MAX
77607ca46eSDavid Howells };
78607ca46eSDavid Howells 
79607ca46eSDavid Howells #define FRA_MAX (__FRA_MAX - 1)
80607ca46eSDavid Howells 
81607ca46eSDavid Howells enum {
82607ca46eSDavid Howells 	FR_ACT_UNSPEC,
83607ca46eSDavid Howells 	FR_ACT_TO_TBL,		/* Pass to fixed table */
84607ca46eSDavid Howells 	FR_ACT_GOTO,		/* Jump to another rule */
85607ca46eSDavid Howells 	FR_ACT_NOP,		/* No operation */
86607ca46eSDavid Howells 	FR_ACT_RES3,
87607ca46eSDavid Howells 	FR_ACT_RES4,
88607ca46eSDavid Howells 	FR_ACT_BLACKHOLE,	/* Drop without notification */
89607ca46eSDavid Howells 	FR_ACT_UNREACHABLE,	/* Drop with ENETUNREACH */
90607ca46eSDavid Howells 	FR_ACT_PROHIBIT,	/* Drop with EACCES */
91607ca46eSDavid Howells 	__FR_ACT_MAX,
92607ca46eSDavid Howells };
93607ca46eSDavid Howells 
94607ca46eSDavid Howells #define FR_ACT_MAX (__FR_ACT_MAX - 1)
95607ca46eSDavid Howells 
96607ca46eSDavid Howells #endif
97