FD.io VPP  v17.07.01-10-g3be13f0
Vector Packet Processing
load_balance.h File Reference
+ Include dependency graph for load_balance.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  load_balance_main_t_
 The load-balance object represents an ECMP choice. More...
 
struct  load_balance_path_t_
 One path from an [EU]CMP set that the client wants to add to a load-balance object. More...
 
struct  load_balance_t_
 The FIB DPO provieds;. More...
 

Macros

#define LB_NUM_INLINE_BUCKETS   4
 The number of buckets that a load-balance object can have and still fit in one cache-line. More...
 
#define LB_HAS_INLINE_BUCKETS(_lb)   ((_lb)->lb_n_buckets <= LB_NUM_INLINE_BUCKETS)
 

Typedefs

typedef struct load_balance_main_t_ load_balance_main_t
 The load-balance object represents an ECMP choice. More...
 
typedef struct load_balance_path_t_ load_balance_path_t
 One path from an [EU]CMP set that the client wants to add to a load-balance object. More...
 
typedef struct load_balance_t_ load_balance_t
 The FIB DPO provieds;. More...
 
typedef enum load_balance_format_flags_t_ load_balance_format_flags_t
 Flags controlling load-balance formatting/display. More...
 
typedef enum load_balance_flags_t_ load_balance_flags_t
 Flags controlling load-balance creation and modification. More...
 

Enumerations

enum  load_balance_format_flags_t_ { LOAD_BALANCE_FORMAT_NONE, LOAD_BALANCE_FORMAT_DETAIL = (1 << 0) }
 Flags controlling load-balance formatting/display. More...
 
enum  load_balance_flags_t_ { LOAD_BALANCE_FLAG_NONE = 0, LOAD_BALANCE_FLAG_USES_MAP = (1 << 0) }
 Flags controlling load-balance creation and modification. More...
 

Functions

 STATIC_ASSERT (sizeof(load_balance_t)<=CLIB_CACHE_LINE_BYTES,"A load_balance object size exceeds one cachline")
 
index_t load_balance_create (u32 num_buckets, dpo_proto_t lb_proto, flow_hash_config_t fhc)
 
void load_balance_multipath_update (const dpo_id_t *dpo, const load_balance_path_t *raw_next_hops, load_balance_flags_t flags)
 
void load_balance_set_bucket (index_t lbi, u32 bucket, const dpo_id_t *next)
 
void load_balance_set_urpf (index_t lbi, index_t urpf)
 
void load_balance_set_fib_entry_flags (index_t lbi, fib_entry_flag_t flags)
 
index_t load_balance_get_urpf (index_t lbi)
 
u8format_load_balance (u8 *s, va_list *args)
 
const dpo_id_tload_balance_get_bucket (index_t lbi, u32 bucket)
 
int load_balance_is_drop (const dpo_id_t *dpo)
 
f64 load_balance_get_multipath_tolerance (void)
 
static load_balance_tload_balance_get (index_t lbi)
 
static const dpo_id_tload_balance_get_bucket_i (const load_balance_t *lb, u32 bucket)
 
void load_balance_module_init (void)
 

Variables

load_balance_main_t load_balance_main
 The one instance of load-balance main. More...
 
load_balance_tload_balance_pool
 The encapsulation breakages are for fast DP access. More...
 

Macro Definition Documentation

#define LB_HAS_INLINE_BUCKETS (   _lb)    ((_lb)->lb_n_buckets <= LB_NUM_INLINE_BUCKETS)

Definition at line 198 of file load_balance.h.

#define LB_NUM_INLINE_BUCKETS   4

The number of buckets that a load-balance object can have and still fit in one cache-line.

Definition at line 56 of file load_balance.h.

Typedef Documentation

Flags controlling load-balance creation and modification.

Flags controlling load-balance formatting/display.

The load-balance object represents an ECMP choice.

The buckets of a load balance object point to the sub-graph after the choice is made. THe load-balance object is also object type returned from a FIB table lookup. As such it needs to represent the case where there is only one coice. It may seem like overkill to use a load-balance object in this case, but the reason is for performance. If the load-balance object were not the result of the FIB lookup, then some other object would be. The case where there was ECMP this other object would need a load-balance as a parent and hence just add an unnecessary indirection.

It is also the object in the DP that represents a via-fib-entry in a recursive route. Load-balance main

One path from an [EU]CMP set that the client wants to add to a load-balance object.

The FIB DPO provieds;.

  • load-balancing over the next DPOs in the chain/graph
  • per-route counters

Enumeration Type Documentation

Flags controlling load-balance creation and modification.

Enumerator
LOAD_BALANCE_FLAG_NONE 
LOAD_BALANCE_FLAG_USES_MAP 

Definition at line 158 of file load_balance.h.

Flags controlling load-balance formatting/display.

Enumerator
LOAD_BALANCE_FORMAT_NONE 
LOAD_BALANCE_FORMAT_DETAIL 

Definition at line 150 of file load_balance.h.

Function Documentation

u8* format_load_balance ( u8 s,
va_list *  args 
)

Definition at line 150 of file load_balance.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

index_t load_balance_create ( u32  num_buckets,
dpo_proto_t  lb_proto,
flow_hash_config_t  fhc 
)

Definition at line 193 of file load_balance.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static load_balance_t* load_balance_get ( index_t  lbi)
inlinestatic

Definition at line 193 of file load_balance.h.

+ Here is the caller graph for this function:

const dpo_id_t* load_balance_get_bucket ( index_t  lbi,
u32  bucket 
)

Definition at line 283 of file load_balance.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static const dpo_id_t* load_balance_get_bucket_i ( const load_balance_t lb,
u32  bucket 
)
inlinestatic

Definition at line 202 of file load_balance.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

f64 load_balance_get_multipath_tolerance ( void  )

Definition at line 58 of file load_balance.c.

index_t load_balance_get_urpf ( index_t  lbi)

Definition at line 273 of file load_balance.c.

+ Here is the call graph for this function:

int load_balance_is_drop ( const dpo_id_t dpo)

Definition at line 226 of file load_balance.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void load_balance_module_init ( void  )

Definition at line 829 of file load_balance.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void load_balance_multipath_update ( const dpo_id_t dpo,
const load_balance_path_t raw_next_hops,
load_balance_flags_t  flags 
)

Definition at line 483 of file load_balance.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void load_balance_set_bucket ( index_t  lbi,
u32  bucket,
const dpo_id_t next 
)

Definition at line 210 of file load_balance.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void load_balance_set_fib_entry_flags ( index_t  lbi,
fib_entry_flag_t  flags 
)

Definition at line 243 of file load_balance.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void load_balance_set_urpf ( index_t  lbi,
index_t  urpf 
)

Definition at line 254 of file load_balance.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

STATIC_ASSERT ( sizeof(load_balance_t)<=  CLIB_CACHE_LINE_BYTES,
"A load_balance object size exceeds one cachline"   
)

Variable Documentation

load_balance_main_t load_balance_main

The one instance of load-balance main.

Definition at line 55 of file load_balance.c.

load_balance_t* load_balance_pool

The encapsulation breakages are for fast DP access.

The encapsulation breakages are for fast DP access.

It's not static so the DP can have fast access

Definition at line 50 of file load_balance.c.