FD.io VPP
v19.04.4-rc0-5-ge88582fac
Vector Packet Processing
|
Go to the source code of this file.
Data Structures | |
struct | lb_hash_bucket_t |
struct | lb_hash_t |
Macros | |
#define | LBHASH_ENTRY_PER_BUCKET 4 |
vppinfra already includes tons of different hash tables. More... | |
#define | LB_HASH_DO_NOT_USE_SSE_BUCKETS 0 |
#define | lb_hash_nbuckets(h) (((h)->buckets_mask) + 1) |
#define | lb_hash_size(h) ((h)->buckets_mask + LBHASH_ENTRY_PER_BUCKET) |
#define | lb_hash_foreach_bucket(h, bucket) |
#define | lb_hash_foreach_entry(h, bucket, i) |
#define | lb_hash_foreach_valid_entry(h, bucket, i, now) |
Functions | |
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) |
#define lb_hash_size | ( | h | ) | ((h)->buckets_mask + 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 dummy hash table you can do. Fixed total size, fixed bucket size. Advantage is that it could be very efficient (maybe).
static_always_inline lb_hash_t* lb_hash_alloc | ( | u32 | buckets, |
u32 | timeout | ||
) |
static_always_inline u32 lb_hash_available_value | ( | lb_hash_t * | h, |
u32 | hash, | ||
u32 | available_index | ||
) |
static_always_inline u32 lb_hash_elts | ( | lb_hash_t * | h, |
u32 | time_now | ||
) |
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 | ||
) |