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