1 | /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ |
2 | #ifndef _UAPI_XT_HASHLIMIT_H |
3 | #define _UAPI_XT_HASHLIMIT_H |
4 | |
5 | #include <linux/types.h> |
6 | #include <linux/limits.h> |
7 | #include <linux/if.h> |
8 | |
9 | /* timings are in milliseconds. */ |
10 | #define XT_HASHLIMIT_SCALE 10000 |
11 | #define XT_HASHLIMIT_SCALE_v2 1000000llu |
12 | /* 1/10,000 sec period => max of 10,000/sec. Min rate is then 429490 |
13 | * seconds, or one packet every 59 hours. |
14 | */ |
15 | |
16 | /* packet length accounting is done in 16-byte steps */ |
17 | #define XT_HASHLIMIT_BYTE_SHIFT 4 |
18 | |
19 | /* details of this structure hidden by the implementation */ |
20 | struct xt_hashlimit_htable; |
21 | |
22 | enum { |
23 | XT_HASHLIMIT_HASH_DIP = 1 << 0, |
24 | XT_HASHLIMIT_HASH_DPT = 1 << 1, |
25 | XT_HASHLIMIT_HASH_SIP = 1 << 2, |
26 | XT_HASHLIMIT_HASH_SPT = 1 << 3, |
27 | XT_HASHLIMIT_INVERT = 1 << 4, |
28 | XT_HASHLIMIT_BYTES = 1 << 5, |
29 | XT_HASHLIMIT_RATE_MATCH = 1 << 6, |
30 | }; |
31 | |
32 | struct hashlimit_cfg { |
33 | __u32 mode; /* bitmask of XT_HASHLIMIT_HASH_* */ |
34 | __u32 avg; /* Average secs between packets * scale */ |
35 | __u32 burst; /* Period multiplier for upper limit. */ |
36 | |
37 | /* user specified */ |
38 | __u32 size; /* how many buckets */ |
39 | __u32 max; /* max number of entries */ |
40 | __u32 gc_interval; /* gc interval */ |
41 | __u32 expire; /* when do entries expire? */ |
42 | }; |
43 | |
44 | struct xt_hashlimit_info { |
45 | char name [IFNAMSIZ]; /* name */ |
46 | struct hashlimit_cfg cfg; |
47 | |
48 | /* Used internally by the kernel */ |
49 | struct xt_hashlimit_htable *hinfo; |
50 | union { |
51 | void *ptr; |
52 | struct xt_hashlimit_info *master; |
53 | } u; |
54 | }; |
55 | |
56 | struct hashlimit_cfg1 { |
57 | __u32 mode; /* bitmask of XT_HASHLIMIT_HASH_* */ |
58 | __u32 avg; /* Average secs between packets * scale */ |
59 | __u32 burst; /* Period multiplier for upper limit. */ |
60 | |
61 | /* user specified */ |
62 | __u32 size; /* how many buckets */ |
63 | __u32 max; /* max number of entries */ |
64 | __u32 gc_interval; /* gc interval */ |
65 | __u32 expire; /* when do entries expire? */ |
66 | |
67 | __u8 srcmask, dstmask; |
68 | }; |
69 | |
70 | struct hashlimit_cfg2 { |
71 | __u64 avg; /* Average secs between packets * scale */ |
72 | __u64 burst; /* Period multiplier for upper limit. */ |
73 | __u32 mode; /* bitmask of XT_HASHLIMIT_HASH_* */ |
74 | |
75 | /* user specified */ |
76 | __u32 size; /* how many buckets */ |
77 | __u32 max; /* max number of entries */ |
78 | __u32 gc_interval; /* gc interval */ |
79 | __u32 expire; /* when do entries expire? */ |
80 | |
81 | __u8 srcmask, dstmask; |
82 | }; |
83 | |
84 | struct hashlimit_cfg3 { |
85 | __u64 avg; /* Average secs between packets * scale */ |
86 | __u64 burst; /* Period multiplier for upper limit. */ |
87 | __u32 mode; /* bitmask of XT_HASHLIMIT_HASH_* */ |
88 | |
89 | /* user specified */ |
90 | __u32 size; /* how many buckets */ |
91 | __u32 max; /* max number of entries */ |
92 | __u32 gc_interval; /* gc interval */ |
93 | __u32 expire; /* when do entries expire? */ |
94 | |
95 | __u32 interval; |
96 | __u8 srcmask, dstmask; |
97 | }; |
98 | |
99 | struct xt_hashlimit_mtinfo1 { |
100 | char name[IFNAMSIZ]; |
101 | struct hashlimit_cfg1 cfg; |
102 | |
103 | /* Used internally by the kernel */ |
104 | struct xt_hashlimit_htable *hinfo __attribute__((aligned(8))); |
105 | }; |
106 | |
107 | struct xt_hashlimit_mtinfo2 { |
108 | char name[NAME_MAX]; |
109 | struct hashlimit_cfg2 cfg; |
110 | |
111 | /* Used internally by the kernel */ |
112 | struct xt_hashlimit_htable *hinfo __attribute__((aligned(8))); |
113 | }; |
114 | |
115 | struct xt_hashlimit_mtinfo3 { |
116 | char name[NAME_MAX]; |
117 | struct hashlimit_cfg3 cfg; |
118 | |
119 | /* Used internally by the kernel */ |
120 | struct xt_hashlimit_htable *hinfo __attribute__((aligned(8))); |
121 | }; |
122 | |
123 | #endif /* _UAPI_XT_HASHLIMIT_H */ |
124 | |