GNU Linux-libre 4.14.328-gnu1
[releases.git] / include / uapi / linux / netfilter / xt_policy.h
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 */