b = v0 ^ v1 ^ v2 ^ v3;
return b;
}
+
+#include "rand.h"
+static uint64_t siphash_uint64_t(const uint64_t in) {
+ return siphash(&in, sizeof(uint64_t), COMPILE_TIME_RAND);
+}
+__attribute__((always_inline))
+static inline uint64_t siphash_uint32_t(const uint32_t in) {
+ return siphash_uint64_t(in);
+}
+static uint64_t siphash_uint128_t(const __uint128_t in) {
+ return siphash(&in, sizeof(__uint128_t), COMPILE_TIME_RAND);
+}
BGP.ext_community: (generic, 0x80060000, 0x0) (generic, 0x80070000, 0xf) (generic, 0x80090000, 0x3f)"
DO_TEST() {
- clang -g -std=c99 -pedantic -Wall -Wextra -Wno-pointer-arith -Wno-unused-variable -Wno-tautological-constant-out-of-range-compare -Wno-unused-function -Wno-visibility -O3 -emit-llvm -c xdp.c -o xdp.bc
+ clang -g -std=c99 -pedantic -Wall -Wextra -Wno-pointer-arith -Wno-unused-variable -Wno-unused-function -Wno-tautological-constant-out-of-range-compare -Wno-unused-function -Wno-visibility -O3 -emit-llvm -c xdp.c -o xdp.bc
cat xdp.bc | llc -O3 -march=bpf -filetype=obj -o xdp
echo "$TEST_PKT" >> rules.h
echo "#define TEST_EXP $1" >> rules.h
- clang -std=c99 -fsanitize=address -pedantic -Wall -Wextra -Wno-pointer-arith -Wno-unused-variable -Wno-tautological-constant-out-of-range-compare -O0 -g xdp.c -o xdp && ./xdp
+ clang -std=c99 -fsanitize=address -pedantic -Wall -Wextra -Wno-pointer-arith -Wno-unused-variable -Wno-unused-function -Wno-tautological-constant-out-of-range-compare -O0 -g xdp.c -o xdp && ./xdp
}
TEST_PKT='#define TEST \
#define SRC_HASH_BUCKET_COUNT_POW 4
#define SRC_HASH_BUCKET_COUNT (1 << SRC_HASH_BUCKET_COUNT_POW)
-#include "rand.h"
-
#define CREATE_PERSRC_LOOKUP(IPV, IP_TYPE) \
struct persrc_rate##IPV##_entry { \
uint64_t sent_time; \
__attribute__((always_inline)) \
static inline struct persrc_rate##IPV##_ptr get_v##IPV##_persrc_ratelimit(IP_TYPE key, void *map, size_t map_limit, int64_t cur_time_masked) { \
struct persrc_rate##IPV##_ptr res = { .rate = NULL, .lock = NULL }; \
- uint64_t hash = siphash(&key, sizeof(key), COMPILE_TIME_RAND); \
+ uint64_t hash = siphash_##IP_TYPE(key); \
\
const uint32_t map_key = hash % SRC_HASH_MAX_PARALLELISM; \
struct persrc_rate##IPV##_bucket *buckets = bpf_map_lookup_elem(map, &map_key); \