1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2 #ifndef _XT_POLICY_H 3 #define _XT_POLICY_H 4 5 #include <linux/types.h> 6 #include <linux/in.h> 7 #include <linux/in6.h> 8 9 #define XT_POLICY_MAX_ELEM 4 10 11 enum xt_policy_flags { 12 XT_POLICY_MATCH_IN = 0x1, 13 XT_POLICY_MATCH_OUT = 0x2, 14 XT_POLICY_MATCH_NONE = 0x4, 15 XT_POLICY_MATCH_STRICT = 0x8, 16 }; 17 18 enum xt_policy_modes { 19 XT_POLICY_MODE_TRANSPORT, 20 XT_POLICY_MODE_TUNNEL 21 }; 22 23 struct xt_policy_spec { 24 __u8 saddr:1, 25 daddr:1, 26 proto:1, 27 mode:1, 28 spi:1, 29 reqid:1; 30 }; 31 32 #ifndef __KERNEL__ 33 union xt_policy_addr { 34 struct in_addr a4; 35 struct in6_addr a6; 36 }; 37 #endif 38 39 struct xt_policy_elem { 40 union { 41 #ifdef __KERNEL__ 42 struct { 43 union nf_inet_addr saddr; 44 union nf_inet_addr smask; 45 union nf_inet_addr daddr; 46 union nf_inet_addr dmask; 47 }; 48 #else 49 struct { 50 union xt_policy_addr saddr; 51 union xt_policy_addr smask; 52 union xt_policy_addr daddr; 53 union xt_policy_addr dmask; 54 }; 55 #endif 56 }; 57 __be32 spi; 58 __u32 reqid; 59 __u8 proto; 60 __u8 mode; 61 62 struct xt_policy_spec match; 63 struct xt_policy_spec invert; 64 }; 65 66 struct xt_policy_info { 67 struct xt_policy_elem pol[XT_POLICY_MAX_ELEM]; 68 __u16 flags; 69 __u16 len; 70 }; 71 72 #endif /* _XT_POLICY_H */ 73