1*4dc78e53SAndroid Build Coastguard Worker /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2*4dc78e53SAndroid Build Coastguard Worker #ifndef __LINUX_FIB_RULES_H 3*4dc78e53SAndroid Build Coastguard Worker #define __LINUX_FIB_RULES_H 4*4dc78e53SAndroid Build Coastguard Worker 5*4dc78e53SAndroid Build Coastguard Worker #include <linux/types.h> 6*4dc78e53SAndroid Build Coastguard Worker #include <linux/rtnetlink.h> 7*4dc78e53SAndroid Build Coastguard Worker 8*4dc78e53SAndroid Build Coastguard Worker /* rule is permanent, and cannot be deleted */ 9*4dc78e53SAndroid Build Coastguard Worker #define FIB_RULE_PERMANENT 0x00000001 10*4dc78e53SAndroid Build Coastguard Worker #define FIB_RULE_INVERT 0x00000002 11*4dc78e53SAndroid Build Coastguard Worker #define FIB_RULE_UNRESOLVED 0x00000004 12*4dc78e53SAndroid Build Coastguard Worker #define FIB_RULE_IIF_DETACHED 0x00000008 13*4dc78e53SAndroid Build Coastguard Worker #define FIB_RULE_DEV_DETACHED FIB_RULE_IIF_DETACHED 14*4dc78e53SAndroid Build Coastguard Worker #define FIB_RULE_OIF_DETACHED 0x00000010 15*4dc78e53SAndroid Build Coastguard Worker 16*4dc78e53SAndroid Build Coastguard Worker /* try to find source address in routing lookups */ 17*4dc78e53SAndroid Build Coastguard Worker #define FIB_RULE_FIND_SADDR 0x00010000 18*4dc78e53SAndroid Build Coastguard Worker 19*4dc78e53SAndroid Build Coastguard Worker struct fib_rule_hdr { 20*4dc78e53SAndroid Build Coastguard Worker __u8 family; 21*4dc78e53SAndroid Build Coastguard Worker __u8 dst_len; 22*4dc78e53SAndroid Build Coastguard Worker __u8 src_len; 23*4dc78e53SAndroid Build Coastguard Worker __u8 tos; 24*4dc78e53SAndroid Build Coastguard Worker 25*4dc78e53SAndroid Build Coastguard Worker __u8 table; 26*4dc78e53SAndroid Build Coastguard Worker __u8 res1; /* reserved */ 27*4dc78e53SAndroid Build Coastguard Worker __u8 res2; /* reserved */ 28*4dc78e53SAndroid Build Coastguard Worker __u8 action; 29*4dc78e53SAndroid Build Coastguard Worker 30*4dc78e53SAndroid Build Coastguard Worker __u32 flags; 31*4dc78e53SAndroid Build Coastguard Worker }; 32*4dc78e53SAndroid Build Coastguard Worker 33*4dc78e53SAndroid Build Coastguard Worker struct fib_rule_uid_range { 34*4dc78e53SAndroid Build Coastguard Worker __u32 start; 35*4dc78e53SAndroid Build Coastguard Worker __u32 end; 36*4dc78e53SAndroid Build Coastguard Worker }; 37*4dc78e53SAndroid Build Coastguard Worker 38*4dc78e53SAndroid Build Coastguard Worker struct fib_rule_port_range { 39*4dc78e53SAndroid Build Coastguard Worker __u16 start; 40*4dc78e53SAndroid Build Coastguard Worker __u16 end; 41*4dc78e53SAndroid Build Coastguard Worker }; 42*4dc78e53SAndroid Build Coastguard Worker 43*4dc78e53SAndroid Build Coastguard Worker enum { 44*4dc78e53SAndroid Build Coastguard Worker FRA_UNSPEC, 45*4dc78e53SAndroid Build Coastguard Worker FRA_DST, /* destination address */ 46*4dc78e53SAndroid Build Coastguard Worker FRA_SRC, /* source address */ 47*4dc78e53SAndroid Build Coastguard Worker FRA_IIFNAME, /* interface name */ 48*4dc78e53SAndroid Build Coastguard Worker #define FRA_IFNAME FRA_IIFNAME 49*4dc78e53SAndroid Build Coastguard Worker FRA_GOTO, /* target to jump to (FR_ACT_GOTO) */ 50*4dc78e53SAndroid Build Coastguard Worker FRA_UNUSED2, 51*4dc78e53SAndroid Build Coastguard Worker FRA_PRIORITY, /* priority/preference */ 52*4dc78e53SAndroid Build Coastguard Worker FRA_UNUSED3, 53*4dc78e53SAndroid Build Coastguard Worker FRA_UNUSED4, 54*4dc78e53SAndroid Build Coastguard Worker FRA_UNUSED5, 55*4dc78e53SAndroid Build Coastguard Worker FRA_FWMARK, /* mark */ 56*4dc78e53SAndroid Build Coastguard Worker FRA_FLOW, /* flow/class id */ 57*4dc78e53SAndroid Build Coastguard Worker FRA_TUN_ID, 58*4dc78e53SAndroid Build Coastguard Worker FRA_SUPPRESS_IFGROUP, 59*4dc78e53SAndroid Build Coastguard Worker FRA_SUPPRESS_PREFIXLEN, 60*4dc78e53SAndroid Build Coastguard Worker FRA_TABLE, /* Extended table id */ 61*4dc78e53SAndroid Build Coastguard Worker FRA_FWMASK, /* mask for netfilter mark */ 62*4dc78e53SAndroid Build Coastguard Worker FRA_OIFNAME, 63*4dc78e53SAndroid Build Coastguard Worker FRA_PAD, 64*4dc78e53SAndroid Build Coastguard Worker FRA_L3MDEV, /* iif or oif is l3mdev goto its table */ 65*4dc78e53SAndroid Build Coastguard Worker FRA_UID_RANGE, /* UID range */ 66*4dc78e53SAndroid Build Coastguard Worker FRA_PROTOCOL, /* Originator of the rule */ 67*4dc78e53SAndroid Build Coastguard Worker FRA_IP_PROTO, /* ip proto */ 68*4dc78e53SAndroid Build Coastguard Worker FRA_SPORT_RANGE, /* sport */ 69*4dc78e53SAndroid Build Coastguard Worker FRA_DPORT_RANGE, /* dport */ 70*4dc78e53SAndroid Build Coastguard Worker __FRA_MAX 71*4dc78e53SAndroid Build Coastguard Worker }; 72*4dc78e53SAndroid Build Coastguard Worker 73*4dc78e53SAndroid Build Coastguard Worker #define FRA_MAX (__FRA_MAX - 1) 74*4dc78e53SAndroid Build Coastguard Worker 75*4dc78e53SAndroid Build Coastguard Worker enum { 76*4dc78e53SAndroid Build Coastguard Worker FR_ACT_UNSPEC, 77*4dc78e53SAndroid Build Coastguard Worker FR_ACT_TO_TBL, /* Pass to fixed table */ 78*4dc78e53SAndroid Build Coastguard Worker FR_ACT_GOTO, /* Jump to another rule */ 79*4dc78e53SAndroid Build Coastguard Worker FR_ACT_NOP, /* No operation */ 80*4dc78e53SAndroid Build Coastguard Worker FR_ACT_RES3, 81*4dc78e53SAndroid Build Coastguard Worker FR_ACT_RES4, 82*4dc78e53SAndroid Build Coastguard Worker FR_ACT_BLACKHOLE, /* Drop without notification */ 83*4dc78e53SAndroid Build Coastguard Worker FR_ACT_UNREACHABLE, /* Drop with ENETUNREACH */ 84*4dc78e53SAndroid Build Coastguard Worker FR_ACT_PROHIBIT, /* Drop with EACCES */ 85*4dc78e53SAndroid Build Coastguard Worker __FR_ACT_MAX, 86*4dc78e53SAndroid Build Coastguard Worker }; 87*4dc78e53SAndroid Build Coastguard Worker 88*4dc78e53SAndroid Build Coastguard Worker #define FR_ACT_MAX (__FR_ACT_MAX - 1) 89*4dc78e53SAndroid Build Coastguard Worker 90*4dc78e53SAndroid Build Coastguard Worker #endif 91