Go to the source code of this file.
|
static_always_inline lb_hash_t * | lb_hash_alloc (u32 buckets, u32 timeout) |
|
static_always_inline void | lb_hash_free (lb_hash_t *h) |
|
static_always_inline u32 | lb_hash_hash (u64 k[5]) |
|
static_always_inline void | lb_hash_get (lb_hash_t *h, u64 k[5], u32 hash, u32 time_now, u32 *available_index, u32 *value) |
|
static_always_inline u32 | lb_hash_available_value (lb_hash_t *h, u32 available_index) |
|
static_always_inline u32 | lb_hash_put (lb_hash_t *h, u64 k[5], u32 value, u32 available_index, u32 time_now) |
|
static_always_inline u32 | lb_hash_elts (lb_hash_t *h, u32 time_now) |
|
#define lb_hash_foreach_entry |
( |
|
h, |
|
|
|
e |
|
) |
| for (e = (h)->entries; e < h->entries + lb_hash_size(h); e++) |
#define lb_hash_foreach_valid_entry |
( |
|
h, |
|
|
|
e, |
|
|
|
now |
|
) |
| |
Value:#define clib_u32_loop_gt(a, b)
32 bits integer comparison for running values.
#define lb_hash_foreach_entry(h, e)
Definition at line 56 of file lbhash.h.
#define LBHASH_ENTRY_PER_BUCKET_LOG2 2 |
vppinfra already includes tons of different hash tables.
MagLev flow table is a bit different. It has to be very efficient for both writing and reading operations. But it does not need to be 100% reliable (write can fail). It also needs to recycle old entries in a lazy way.
This hash table is the most dummy hash table you can do. Fixed total size, fixed bucket size. Advantage is that it could be very efficient (maybe).
Definition at line 34 of file lbhash.h.