-#define SRC_HASH_ENTRY_MAX 8192
-#define CONCAT(a, b) a##b
-#define DEFINE_SRC_RATE_MAPS(CNT, NAME) CONCAT(DEFINE_MAP, CNT)(NAME)
-
-#ifdef V4_SRC_RATE_CNT
-#define V4_SRC_MAPS DEFINE_SRC_RATE_MAPS(V4_SRC_RATE_CNT, v4_src_rate)
-struct {
- __uint(type, BPF_MAP_TYPE_LRU_PERCPU_HASH);
- __uint(max_entries, SRC_HASH_ENTRY_MAX);
- __u32 *key;
- struct percpu_ratelimit *value;
-} V4_SRC_MAPS;
-#endif
-
-#ifdef V6_SRC_RATE_CNT
-#define V6_SRC_MAPS DEFINE_SRC_RATE_MAPS(V6_SRC_RATE_CNT, v6_src_rate)
-struct {
- __uint(type, BPF_MAP_TYPE_LRU_PERCPU_HASH);
- __uint(max_entries, SRC_HASH_ENTRY_MAX);
- uint128_t *key;
- struct percpu_ratelimit *value;
-} V6_SRC_MAPS;
-#endif
+#define V6_SRC_RATE_DEFINE(n, limit) \
+struct { \
+ __uint(type, BPF_MAP_TYPE_LRU_PERCPU_HASH); \
+ __uint(map_flags, BPF_F_NO_COMMON_LRU); \
+ __uint(max_entries, limit); \
+ uint128_t *key; \
+ struct percpu_ratelimit *value; \
+} v6_src_rate_##n SEC(".maps");
+
+#define V4_SRC_RATE_DEFINE(n, limit) \
+struct { \
+ __uint(type, BPF_MAP_TYPE_LRU_PERCPU_HASH); \
+ __uint(map_flags, BPF_F_NO_COMMON_LRU); \
+ __uint(max_entries, limit); \
+ __u32 *key; \
+ struct percpu_ratelimit *value; \
+} v4_src_rate_##n SEC(".maps");
+
+#include "maps.h"