FD.io VPP  v19.08-27-gf4dcae4
Vector Packet Processing
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
load_balance.c File Reference
+ Include dependency graph for load_balance.c:

Go to the source code of this file.

Data Structures

struct  load_balance_trace_t_
 

Macros

#define LB_DBG(_lb, _fmt, _args...)
 

Typedefs

typedef struct load_balance_trace_t_ load_balance_trace_t
 

Functions

f64 load_balance_get_multipath_tolerance (void)
 
static index_t load_balance_get_index (const load_balance_t *lb)
 
static dpo_id_tload_balance_get_buckets (load_balance_t *lb)
 
static load_balance_tload_balance_alloc_i (void)
 
static u8load_balance_format (index_t lbi, load_balance_format_flags_t flags, u32 indent, u8 *s)
 
u8format_load_balance (u8 *s, va_list *args)
 
static u8format_load_balance_dpo (u8 *s, va_list *args)
 
flow_hash_config_t load_balance_get_default_flow_hash (dpo_proto_t lb_proto)
 
static load_balance_tload_balance_create_i (u32 num_buckets, dpo_proto_t lb_proto, flow_hash_config_t fhc)
 
index_t load_balance_create (u32 n_buckets, dpo_proto_t lb_proto, flow_hash_config_t fhc)
 
static void load_balance_set_bucket_i (load_balance_t *lb, u32 bucket, dpo_id_t *buckets, const dpo_id_t *next)
 
void load_balance_set_bucket (index_t lbi, u32 bucket, const dpo_id_t *next)
 
int load_balance_is_drop (const dpo_id_t *dpo)
 
u16 load_balance_n_buckets (index_t lbi)
 
void load_balance_set_fib_entry_flags (index_t lbi, fib_entry_flag_t flags)
 
void load_balance_set_urpf (index_t lbi, index_t urpf)
 
index_t load_balance_get_urpf (index_t lbi)
 
const dpo_id_tload_balance_get_bucket (index_t lbi, u32 bucket)
 
static int next_hop_sort_by_weight (const load_balance_path_t *n1, const load_balance_path_t *n2)
 
u32 ip_multipath_normalize_next_hops (const load_balance_path_t *raw_next_hops, load_balance_path_t **normalized_next_hops, u32 *sum_weight_in, f64 multipath_next_hop_error_tolerance)
 
static load_balance_path_tload_balance_multipath_next_hop_fixup (const load_balance_path_t *nhs, dpo_proto_t drop_proto)
 
static void load_balance_fill_buckets_norm (load_balance_t *lb, load_balance_path_t *nhs, dpo_id_t *buckets, u32 n_buckets)
 
static void load_balance_fill_buckets_sticky (load_balance_t *lb, load_balance_path_t *nhs, dpo_id_t *buckets, u32 n_buckets)
 
static void load_balance_fill_buckets (load_balance_t *lb, load_balance_path_t *nhs, dpo_id_t *buckets, u32 n_buckets, load_balance_flags_t flags)
 
static void load_balance_set_n_buckets (load_balance_t *lb, u32 n_buckets)
 
void load_balance_multipath_update (const dpo_id_t *dpo, const load_balance_path_t *raw_nhs, load_balance_flags_t flags)
 
static void load_balance_lock (dpo_id_t *dpo)
 
static void load_balance_destroy (load_balance_t *lb)
 
static void load_balance_unlock (dpo_id_t *dpo)
 
static void load_balance_mem_show (void)
 
void load_balance_module_init (void)
 
static clib_error_tload_balance_show (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
 
static u32 ip_flow_hash (void *data)
 
static u64 mac_to_u64 (u8 *m)
 
static u32 l2_flow_hash (vlib_buffer_t *b0)
 
static uword load_balance_inline (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame, int is_l2)
 
static uword l2_load_balance (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
 
static u8format_l2_load_balance_trace (u8 *s, va_list *args)
 
static uword nsh_load_balance (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
 
static u8format_nsh_load_balance_trace (u8 *s, va_list *args)
 
static u8format_bier_load_balance_trace (u8 *s, va_list *args)
 
static uword bier_load_balance (vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
 

Variables

const f64 multipath_next_hop_error_tolerance = 0.1
 
static const char * load_balance_attr_names [] = LOAD_BALANCE_ATTR_NAMES
 
vlib_log_class_t load_balance_logger
 the logger More...
 
load_balance_tload_balance_pool
 Pool of all DPOs. More...
 
load_balance_main_t load_balance_main
 The one instance of load-balance main. More...
 
static const dpo_vft_t lb_vft
 
static const char *const load_balance_ip4_nodes []
 The per-protocol VLIB graph nodes that are assigned to a load-balance object. More...
 
static const char *const load_balance_ip6_nodes []
 
static const char *const load_balance_mpls_nodes []
 
static const char *const load_balance_l2_nodes []
 
static const char *const load_balance_nsh_nodes []
 
static const char *const load_balance_bier_nodes []
 
static const char *const *const load_balance_nodes [DPO_PROTO_NUM]
 
static vlib_cli_command_t load_balance_show_command
 (constructor) VLIB_CLI_COMMAND (load_balance_show_command) More...
 
vlib_node_registration_t l2_load_balance_node
 (constructor) VLIB_REGISTER_NODE (l2_load_balance_node) More...
 
vlib_node_registration_t nsh_load_balance_node
 (constructor) VLIB_REGISTER_NODE (nsh_load_balance_node) More...
 
vlib_node_registration_t bier_load_balance_node
 (constructor) VLIB_REGISTER_NODE (bier_load_balance_node) More...
 

Macro Definition Documentation

#define LB_DBG (   _lb,
  _fmt,
  _args... 
)
Value:
{ \
"lb:[%U]:" _fmt, \
##_args); \
}
vlib_log_class_t load_balance_logger
the logger
Definition: load_balance.c:37
static index_t load_balance_get_index(const load_balance_t *lb)
Definition: load_balance.c:74
#define vlib_log_debug(...)
Definition: log.h:106
u8 * format_load_balance(u8 *s, va_list *args)
Definition: load_balance.c:175

Definition at line 39 of file load_balance.c.

Typedef Documentation

Function Documentation

static uword bier_load_balance ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t frame 
)
static

Definition at line 1283 of file load_balance.c.

+ Here is the call graph for this function:

static u8* format_bier_load_balance_trace ( u8 s,
va_list *  args 
)
static

Definition at line 1272 of file load_balance.c.

+ Here is the call graph for this function:

static u8* format_l2_load_balance_trace ( u8 s,
va_list *  args 
)
static

Definition at line 1156 of file load_balance.c.

+ Here is the call graph for this function:

u8* format_load_balance ( u8 s,
va_list *  args 
)

Definition at line 175 of file load_balance.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static u8* format_load_balance_dpo ( u8 s,
va_list *  args 
)
static

Definition at line 184 of file load_balance.c.

+ Here is the call graph for this function:

static u8* format_nsh_load_balance_trace ( u8 s,
va_list *  args 
)
static

Definition at line 1246 of file load_balance.c.

+ Here is the call graph for this function:

static u32 ip_flow_hash ( void *  data)
inlinestatic

Definition at line 1026 of file load_balance.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

u32 ip_multipath_normalize_next_hops ( const load_balance_path_t raw_next_hops,
load_balance_path_t **  normalized_next_hops,
u32 sum_weight_in,
f64  multipath_next_hop_error_tolerance 
)

Definition at line 360 of file load_balance.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static u32 l2_flow_hash ( vlib_buffer_t b0)
inlinestatic

Definition at line 1043 of file load_balance.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static uword l2_load_balance ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t frame 
)
static

Definition at line 1148 of file load_balance.c.

+ Here is the call graph for this function:

static load_balance_t* load_balance_alloc_i ( void  )
static

Definition at line 93 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  n_buckets,
dpo_proto_t  lb_proto,
flow_hash_config_t  fhc 
)

Definition at line 239 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_create_i ( u32  num_buckets,
dpo_proto_t  lb_proto,
flow_hash_config_t  fhc 
)
static

Definition at line 214 of file load_balance.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void load_balance_destroy ( load_balance_t lb)
static

Definition at line 847 of file load_balance.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void load_balance_fill_buckets ( load_balance_t lb,
load_balance_path_t nhs,
dpo_id_t buckets,
u32  n_buckets,
load_balance_flags_t  flags 
)
static

Definition at line 577 of file load_balance.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void load_balance_fill_buckets_norm ( load_balance_t lb,
load_balance_path_t nhs,
dpo_id_t buckets,
u32  n_buckets 
)
static

Definition at line 506 of file load_balance.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void load_balance_fill_buckets_sticky ( load_balance_t lb,
load_balance_path_t nhs,
dpo_id_t buckets,
u32  n_buckets 
)
static

Definition at line 530 of file load_balance.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static u8* load_balance_format ( index_t  lbi,
load_balance_format_flags_t  flags,
u32  indent,
u8 s 
)
static

Definition at line 115 of file load_balance.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

const dpo_id_t* load_balance_get_bucket ( index_t  lbi,
u32  bucket 
)

Definition at line 339 of file load_balance.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static dpo_id_t* load_balance_get_buckets ( load_balance_t lb)
inlinestatic

Definition at line 80 of file load_balance.c.

+ Here is the caller graph for this function:

flow_hash_config_t load_balance_get_default_flow_hash ( dpo_proto_t  lb_proto)

Definition at line 193 of file load_balance.c.

+ Here is the caller graph for this function:

static index_t load_balance_get_index ( const load_balance_t lb)
inlinestatic

Definition at line 74 of file load_balance.c.

+ Here is the caller graph for this function:

f64 load_balance_get_multipath_tolerance ( void  )

Definition at line 68 of file load_balance.c.

index_t load_balance_get_urpf ( index_t  lbi)

Definition at line 329 of file load_balance.c.

+ Here is the call graph for this function:

static uword load_balance_inline ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t frame,
int  is_l2 
)
inlinestatic

Definition at line 1075 of file load_balance.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

int load_balance_is_drop ( const dpo_id_t dpo)

Definition at line 272 of file load_balance.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void load_balance_lock ( dpo_id_t dpo)
static

Definition at line 837 of file load_balance.c.

+ Here is the call graph for this function:

static void load_balance_mem_show ( void  )
static

Definition at line 887 of file load_balance.c.

+ Here is the call graph for this function:

void load_balance_module_init ( void  )

Definition at line 955 of file load_balance.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static load_balance_path_t* load_balance_multipath_next_hop_fixup ( const load_balance_path_t nhs,
dpo_proto_t  drop_proto 
)
static

Definition at line 480 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_nhs,
load_balance_flags_t  flags 
)

Definition at line 602 of file load_balance.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

u16 load_balance_n_buckets ( index_t  lbi)

Definition at line 289 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 256 of file load_balance.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void load_balance_set_bucket_i ( load_balance_t lb,
u32  bucket,
dpo_id_t buckets,
const dpo_id_t next 
)
inlinestatic

Definition at line 247 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 299 of file load_balance.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static void load_balance_set_n_buckets ( load_balance_t lb,
u32  n_buckets 
)
inlinestatic

Definition at line 594 of file load_balance.c.

+ Here is the caller graph for this function:

void load_balance_set_urpf ( index_t  lbi,
index_t  urpf 
)

Definition at line 310 of file load_balance.c.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static clib_error_t* load_balance_show ( vlib_main_t vm,
unformat_input_t input,
vlib_cli_command_t cmd 
)
static

Definition at line 977 of file load_balance.c.

+ Here is the call graph for this function:

static void load_balance_unlock ( dpo_id_t dpo)
static

Definition at line 872 of file load_balance.c.

+ Here is the call graph for this function:

static u64 mac_to_u64 ( u8 m)
inlinestatic

Definition at line 1037 of file load_balance.c.

+ Here is the caller graph for this function:

static int next_hop_sort_by_weight ( const load_balance_path_t n1,
const load_balance_path_t n2 
)
static

Definition at line 350 of file load_balance.c.

+ Here is the caller graph for this function:

static uword nsh_load_balance ( vlib_main_t vm,
vlib_node_runtime_t node,
vlib_frame_t frame 
)
static

Definition at line 1182 of file load_balance.c.

+ Here is the call graph for this function:

Variable Documentation

vlib_node_registration_t bier_load_balance_node
Initial value:
= {
.function = bier_load_balance,
.name = "bier-load-balance",
.vector_size = sizeof (u32),
.sibling_of = "mpls-load-balance",
}
unsigned int u32
Definition: types.h:88
static uword bier_load_balance(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)
static u8 * format_bier_load_balance_trace(u8 *s, va_list *args)

(constructor) VLIB_REGISTER_NODE (bier_load_balance_node)

Definition at line 1293 of file load_balance.c.

vlib_node_registration_t l2_load_balance_node
Initial value:
= {
.function = l2_load_balance,
.name = "l2-load-balance",
.vector_size = sizeof (u32),
.n_next_nodes = 1,
.next_nodes = {
[0] = "error-drop",
},
}
static u8 * format_l2_load_balance_trace(u8 *s, va_list *args)
unsigned int u32
Definition: types.h:88
static uword l2_load_balance(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)

(constructor) VLIB_REGISTER_NODE (l2_load_balance_node)

Definition at line 1169 of file load_balance.c.

const dpo_vft_t lb_vft
static
Initial value:
= {
.dv_lock = load_balance_lock,
.dv_unlock = load_balance_unlock,
.dv_mem_show = load_balance_mem_show,
}
static u8 * format_load_balance_dpo(u8 *s, va_list *args)
Definition: load_balance.c:184
static void load_balance_mem_show(void)
Definition: load_balance.c:887
static void load_balance_lock(dpo_id_t *dpo)
Definition: load_balance.c:837
static void load_balance_unlock(dpo_id_t *dpo)
Definition: load_balance.c:872

Definition at line 896 of file load_balance.c.

const char* load_balance_attr_names[] = LOAD_BALANCE_ATTR_NAMES
static

Definition at line 32 of file load_balance.c.

const char* const load_balance_bier_nodes[]
static
Initial value:
=
{
"bier-load-balance",
}
#define NULL
Definition: clib.h:58

Definition at line 939 of file load_balance.c.

const char* const load_balance_ip4_nodes[]
static
Initial value:
=
{
"ip4-load-balance",
}
#define NULL
Definition: clib.h:58

The per-protocol VLIB graph nodes that are assigned to a load-balance object.

this means that these graph nodes are ones from which a load-balance is the parent object in the DPO-graph.

We do not list all the load-balance nodes, such as the *-lookup. instead we are relying on the correct use of the .sibling_of field when setting up these sibling nodes.

Definition at line 914 of file load_balance.c.

const char* const load_balance_ip6_nodes[]
static
Initial value:
=
{
"ip6-load-balance",
}
#define NULL
Definition: clib.h:58

Definition at line 919 of file load_balance.c.

const char* const load_balance_l2_nodes[]
static
Initial value:
=
{
"l2-load-balance",
}
#define NULL
Definition: clib.h:58

Definition at line 929 of file load_balance.c.

vlib_log_class_t load_balance_logger

the logger

Definition at line 37 of file load_balance.c.

load_balance_main_t load_balance_main
Initial value:
= {
.lbm_to_counters = {
.name = "route-to",
.stat_segment_name = "/net/route/to",
},
.lbm_via_counters = {
.name = "route-via",
.stat_segment_name = "/net/route/via",
}
}

The one instance of load-balance main.

Definition at line 56 of file load_balance.c.

const char* const load_balance_mpls_nodes[]
static
Initial value:
=
{
"mpls-load-balance",
}
#define NULL
Definition: clib.h:58

Definition at line 924 of file load_balance.c.

const char* const* const load_balance_nodes[DPO_PROTO_NUM]
static
Initial value:
=
{
}
static const char *const load_balance_ip6_nodes[]
Definition: load_balance.c:919
static const char *const load_balance_mpls_nodes[]
Definition: load_balance.c:924
static const char *const load_balance_ip4_nodes[]
The per-protocol VLIB graph nodes that are assigned to a load-balance object.
Definition: load_balance.c:914
static const char *const load_balance_l2_nodes[]
Definition: load_balance.c:929
static const char *const load_balance_bier_nodes[]
Definition: load_balance.c:939
static const char *const load_balance_nsh_nodes[]
Definition: load_balance.c:934

Definition at line 944 of file load_balance.c.

const char* const load_balance_nsh_nodes[]
static
Initial value:
=
{
"nsh-load-balance",
}
#define NULL
Definition: clib.h:58

Definition at line 934 of file load_balance.c.

load_balance_t* load_balance_pool

Pool of all DPOs.

The encapsulation breakages are for fast DP access.

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

Definition at line 51 of file load_balance.c.

vlib_cli_command_t load_balance_show_command
static
Initial value:
= {
.path = "show load-balance",
.short_help = "show load-balance [<index>]",
.function = load_balance_show,
}
static clib_error_t * load_balance_show(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
Definition: load_balance.c:977

(constructor) VLIB_CLI_COMMAND (load_balance_show_command)

Definition at line 1018 of file load_balance.c.

const f64 multipath_next_hop_error_tolerance = 0.1

Definition at line 30 of file load_balance.c.

vlib_node_registration_t nsh_load_balance_node
Initial value:
= {
.function = nsh_load_balance,
.name = "nsh-load-balance",
.vector_size = sizeof (u32),
.n_next_nodes = 1,
.next_nodes = {
[0] = "error-drop",
},
}
unsigned int u32
Definition: types.h:88
static u8 * format_nsh_load_balance_trace(u8 *s, va_list *args)
static uword nsh_load_balance(vlib_main_t *vm, vlib_node_runtime_t *node, vlib_frame_t *frame)

(constructor) VLIB_REGISTER_NODE (nsh_load_balance_node)

Definition at line 1259 of file load_balance.c.