diff options
Diffstat (limited to 'src/vnet/dpo/load_balance.h')
-rw-r--r-- | src/vnet/dpo/load_balance.h | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/vnet/dpo/load_balance.h b/src/vnet/dpo/load_balance.h index 5428e20e981..eee073f5892 100644 --- a/src/vnet/dpo/load_balance.h +++ b/src/vnet/dpo/load_balance.h @@ -50,6 +50,12 @@ typedef struct load_balance_main_t_ extern load_balance_main_t load_balance_main; /** + * The maximum number of buckets that a load-balance object can have + * This must not overflow the lb_n_buckets field + */ +#define LB_MAX_BUCKETS 8192 + +/** * The number of buckets that a load-balance object can have and still * fit in one cache-line */ @@ -176,6 +182,10 @@ typedef struct load_balance_t_ { STATIC_ASSERT(sizeof(load_balance_t) <= CLIB_CACHE_LINE_BYTES, "A load_balance object size exceeds one cacheline"); +STATIC_ASSERT (LB_MAX_BUCKETS <= CLIB_U16_MAX, + "Too many buckets for load_balance object"); +STATIC_ASSERT (LB_MAX_BUCKETS && !(LB_MAX_BUCKETS & (LB_MAX_BUCKETS - 1)), + "LB_MAX_BUCKETS must be a power of 2"); /** * Flags controlling load-balance formatting/display @@ -222,6 +232,14 @@ load_balance_get (index_t lbi) return (pool_elt_at_index(load_balance_pool, lbi)); } +static inline load_balance_t * +load_balance_get_or_null (index_t lbi) +{ + if (pool_is_free_index (load_balance_pool, lbi)) + return 0; + return (pool_elt_at_index (load_balance_pool, lbi)); +} + #define LB_HAS_INLINE_BUCKETS(_lb) \ ((_lb)->lb_n_buckets <= LB_NUM_INLINE_BUCKETS) |