11 #ifndef _RTE_CUCKOO_HASH_H_
12 #define _RTE_CUCKOO_HASH_H_
14 #if defined(RTE_ARCH_X86)
15 #include "rte_cmp_x86.h"
18 #if defined(RTE_ARCH_ARM64)
19 #include "rte_cmp_arm64.h"
23 #if defined(RTE_LIBRTE_HASH_DEBUG)
24 #define RETURN_IF_TRUE(cond, retval) do { \
29 #define RETURN_IF_TRUE(cond, retval)
32 #if defined(RTE_LIBRTE_HASH_DEBUG)
33 #define ERR_IF_TRUE(cond, fmt, args...) do { \
35 RTE_LOG(ERR, HASH, fmt, ##args); \
40 #define ERR_IF_TRUE(cond, fmt, args...)
46 #if defined(RTE_ARCH_X86) || defined(RTE_ARCH_ARM64)
51 enum cmp_jump_table_case {
86 enum cmp_jump_table_case {
105 #define RTE_HASH_BUCKET_ENTRIES 8
107 #if !RTE_IS_POWER_OF_2(RTE_HASH_BUCKET_ENTRIES)
108 #error RTE_HASH_BUCKET_ENTRIES must be a power of 2
111 #define NULL_SIGNATURE 0
115 #define KEY_ALIGNMENT 16
117 #define LCORE_CACHE_SIZE 64
119 #define RTE_HASH_BFS_QUEUE_MAX_LEN 1000
121 #define RTE_XABORT_CUCKOO_PATH_INVALIDED 0x4
123 #define RTE_HASH_TSX_MAX_RETRY 10
127 void *objs[LCORE_CACHE_SIZE];
131 struct rte_hash_key {
141 enum rte_hash_sig_compare_function {
142 RTE_HASH_COMPARE_SCALAR = 0,
143 RTE_HASH_COMPARE_SSE,
149 uint16_t sig_current[RTE_HASH_BUCKET_ENTRIES];
151 uint32_t key_idx[RTE_HASH_BUCKET_ENTRIES];
153 uint8_t flag[RTE_HASH_BUCKET_ENTRIES];
219 uint32_t cur_bkt_idx;
221 struct queue_node *prev;