24 ip46_address_t prefix;
45 if (
unformat(line_input,
"new_len %d", &new_len))
47 else if (
unformat(line_input,
"del"))
49 else if (
unformat(line_input,
"encap gre4"))
51 else if (
unformat(line_input,
"encap gre6"))
53 else if (
unformat(line_input,
"encap l3dsr"))
55 else if (
unformat(line_input,
"dscp %d", &dscp))
67 "should not configure dscp for none L3DSR.");
74 "dscp for L3DSR should be less than 64.");
96 if ((ret =
lb_vip_add(&prefix, plen, type, (
u8)(dscp & 0x3F), new_len, &index))) {
121 .short_help =
"lb vip <prefix> [encap (gre6|gre4|l3dsr)] [dscp <n>] [new_len <n>] [del]",
130 ip46_address_t vip_prefix, as_addr;
132 ip46_address_t *as_array = 0;
156 }
else if (
unformat(line_input,
"del")) {
195 .short_help =
"lb as <vip-prefix> [<address> [<address> [...]]] [del]",
208 u32 per_cpu_sticky_buckets_log2 = 0;
222 else if (
unformat(line_input,
"buckets %d", &per_cpu_sticky_buckets))
224 else if (
unformat(line_input,
"buckets-log2 %d", &per_cpu_sticky_buckets_log2)) {
225 if (per_cpu_sticky_buckets_log2 >= 32)
227 per_cpu_sticky_buckets = 1 << per_cpu_sticky_buckets_log2;
228 }
else if (
unformat(line_input,
"timeout %d", &flow_timeout))
239 if ((ret =
lb_conf(&ip4, &ip6, per_cpu_sticky_buckets, flow_timeout))) {
253 .short_help =
"lb conf [ip4-src-address <addr>] [ip6-src-address <addr>] [buckets <n>] [timeout <s>]",
269 .short_help =
"show lb",
285 if (
unformat(&line_input,
"verbose"))
289 vlib_cli_output(vm,
"%U\n", verbose?format_lb_vip_detailed:format_lb_vip, vip);
298 .path =
"show lb vips",
299 .short_help =
"show lb vips [verbose]",
311 for(thread_index = 0; thread_index < tm->
n_vlib_mains; thread_index++ ) {
336 .path =
"test lb flowtable flush",
337 .short_help =
"test lb flowtable flush",
static clib_error_t * lb_flowtable_flush_command_fn(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
static clib_error_t * lb_show_command_fn(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
u32 per_cpu_sticky_buckets
Number of buckets in the per-cpu sticky hash table.
int lb_conf(ip4_address_t *ip4_address, ip6_address_t *ip6_address, u32 per_cpu_sticky_buckets, u32 flow_timeout)
Fix global load-balancer parameters.
int lb_vip_add_ass(u32 vip_index, ip46_address_t *addresses, u32 n)
#define vec_add1(V, E)
Add 1 element to end of vector (unspecified alignment).
static clib_error_t * lb_conf_command_fn(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
lb_hash_t * sticky_ht
Each CPU has its own sticky flow hash table.
static clib_error_t * lb_show_vips_command_fn(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
#define pool_foreach(VAR, POOL, BODY)
Iterate through pool.
u32 flow_timeout
Flow timeout in seconds.
vlib_refcount_t as_refcount
Each AS has an associated reference counter.
#define clib_error_return(e, args...)
lb_vip_t * vips
Pool of all Virtual IPs.
ip4_address_t ip4_src_address
Source address used for IPv4 encapsulated traffic.
u32 value[LBHASH_ENTRY_PER_BUCKET]
int lb_vip_del(u32 vip_index)
format_function_t format_lb_main
static_always_inline void vlib_refcount_add(vlib_refcount_t *r, u32 thread_index, u32 counter_index, i32 v)
#define lb_hash_foreach_entry(h, bucket, i)
#define vec_free(V)
Free vector's memory (no header).
#define clib_warning(format, args...)
int lb_vip_del_ass(u32 vip_index, ip46_address_t *addresses, u32 n)
int lb_vip_add(ip46_address_t *prefix, u8 plen, lb_vip_type_t type, u8 dscp, u32 new_length, u32 *vip_index)
static_always_inline void lb_hash_free(lb_hash_t *h)
uword unformat_ip46_prefix(unformat_input_t *input, va_list *args)
#define VLIB_CLI_COMMAND(x,...)
lb_vip_type_t
The load balancer supports IPv4 and IPv6 traffic and GRE4, GRE6 and L3DSR encap.
int lb_vip_find_index(ip46_address_t *prefix, u8 plen, u32 *vip_index)
lb_per_cpu_t * per_cpu
Some global data is per-cpu.
ip6_address_t ip6_src_address
Source address used in IPv6 encapsulated traffic.
#define vec_len(v)
Number of elements in vector (rvalue-only, NULL tolerant)
static clib_error_t * lb_as_command_fn(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
static clib_error_t * lb_vip_command_fn(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
void lb_garbage_collection()
static vlib_thread_main_t * vlib_get_thread_main()
#define ip46_prefix_is_ip4(ip46, len)
void vlib_cli_output(vlib_main_t *vm, char *fmt,...)
Load balancing service is provided per VIP.