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 void | lb_hash_prefetch_bucket (lb_hash_t *ht, u32 hash) |
|
static_always_inline void | lb_hash_get (lb_hash_t *ht, u32 hash, u32 vip, u32 time_now, u32 *available_index, u32 *found_value) |
|
static_always_inline u32 | lb_hash_available_value (lb_hash_t *h, u32 hash, u32 available_index) |
|
static_always_inline void | lb_hash_put (lb_hash_t *h, u32 hash, u32 value, u32 vip, u32 available_index, u32 time_now) |
|
static_always_inline u32 | lb_hash_elts (lb_hash_t *h, u32 time_now) |
|
◆ LB_HASH_DO_NOT_USE_SSE_BUCKETS
#define LB_HASH_DO_NOT_USE_SSE_BUCKETS 0 |
◆ lb_hash_foreach_bucket
#define lb_hash_foreach_bucket |
( |
|
h, |
|
|
|
bucket |
|
) |
| |
Value:for (bucket = (
h)->buckets; \
bucket++)
#define lb_hash_nbuckets(h)
Definition at line 67 of file lbhash.h.
◆ lb_hash_foreach_entry
#define lb_hash_foreach_entry |
( |
|
h, |
|
|
|
bucket, |
|
|
|
i |
|
) |
| |
Value:#define LBHASH_ENTRY_PER_BUCKET
vppinfra already includes tons of different hash tables.
#define lb_hash_foreach_bucket(h, bucket)
sll srl srl sll sra u16x4 i
Definition at line 72 of file lbhash.h.
◆ lb_hash_foreach_valid_entry
#define lb_hash_foreach_valid_entry |
( |
|
h, |
|
|
|
bucket, |
|
|
|
i, |
|
|
|
now |
|
) |
| |
Value:#define clib_u32_loop_gt(a, b)
32 bits integer comparison for running values.
#define lb_hash_foreach_entry(h, bucket, i)
sll srl srl sll sra u16x4 i
Definition at line 76 of file lbhash.h.
◆ lb_hash_nbuckets
#define lb_hash_nbuckets |
( |
|
h | ) |
(((h)->buckets_mask) + 1) |
◆ lb_hash_size
◆ LBHASH_ENTRY_PER_BUCKET
#define LBHASH_ENTRY_PER_BUCKET 4 |
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 trivial hash table you can do. Fixed total size, fixed bucket size. Advantage is that it could be very efficient (maybe).
Definition at line 42 of file lbhash.h.
◆ lb_hash_alloc()
◆ lb_hash_available_value()
◆ lb_hash_elts()
◆ lb_hash_free()
◆ lb_hash_get()
◆ lb_hash_prefetch_bucket()
◆ lb_hash_put()