rte_hash
創建表
- rte_hash_parameters 結構體
struct rte_hash_parameters {
const char *name; /**< Name of the hash. */
uint32_t entries; /**< Total hash table entries. */
uint32_t reserved; /**< Unused field. Should be set to 0 */
uint32_t key_len; /**< Length of hash key. */
rte_hash_function hash_func; /**< Primary Hash function used to calculate hash. */
uint32_t hash_func_init_val; /**< Init value used by hash_func. */
int socket_id; /**< NUMA Socket ID for memory. */
uint8_t extra_flag; /**< Indicate if additional parameters are present. */
};
填寫哈希表的名字,表最大數目,key長度,哈希函數,哈希函數初始值,NUMA套接字, 額外參數標志
重要的是選擇 hash 函數
- 哈希函數
typedef uint32_t (*rte_hash_function)(const void *key, uint32_t key_len,
uint32_t init_val);
rte_jhash.h 提供了一些函數如 rte_jhash, rte_jhash_1words, rte_jash_2words
其余相關函數有
設置比較函數
void rte_hash_set_cmp_func(struct rte_hash *h, rte_hash_cmp_eq_t func);
查看是否已經有同名的表
struct rte_hash *
rte_hash_find_existing(const char *name);
刪除表
void
rte_hash_free(struct rte_hash *h);
- 創建函數
struct rte_hash *
rte_hash_create(const struct rte_hash_parameters *params);
添加key、data
int32_t
rte_hash_add_key(const struct rte_hash *h, const void *key);
int
rte_hash_add_key_data(const struct rte_hash *h, const void *key, void *data);
int32_t
rte_hash_add_key_with_hash_data(const struct rte_hash *h, const void *key,
hash_sig_t sig, void *data);
int32_t
rte_hash_add_key_with_hash_data(const struct rte_hash *h, const void *key,
hash_sig_t sig, void *data);
int32_t
rte_hash_del_key(const struct rte_hash *h, const void *key);
刪除key、data
int32_t
rte_hash_del_key(const struct rte_hash *h, const void *key);
int32_t
rte_hash_del_key_with_hash(const struct rte_hash *h, const void *key, hash_sig_t sig);
查找
int
rte_hash_get_key_with_position(const struct rte_hash *h, const int32_t position,
void **key);
int
rte_hash_lookup_data(const struct rte_hash *h, const void *key, void **data);
int
rte_hash_lookup_with_hash_data(const struct rte_hash *h, const void *key,
hash_sig_t sig, void **data);
int32_t
rte_hash_lookup(const struct rte_hash *h, const void *key);
int32_t
rte_hash_lookup_with_hash(const struct rte_hash *h,
const void *key, hash_sig_t sig);
hash_sig_t
rte_hash_hash(const struct rte_hash *h, const void *key);
int
rte_hash_lookup_bulk_data(const struct rte_hash *h, const void **keys,
uint32_t num_keys, uint64_t *hit_mask, void *data[]);
int
rte_hash_lookup_bulk(const struct rte_hash *h, const void **keys,
uint32_t num_keys, int32_t *positions);
int32_t
rte_hash_iterate(const struct rte_hash *h, const void **key, void **data, uint32_t *next);