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