24 ip46_address_t prefix;
44 if (
unformat(line_input,
"new_len %d", &new_len))
46 else if (
unformat(line_input,
"del"))
48 else if (
unformat(line_input,
"encap gre4"))
50 else if (
unformat(line_input,
"encap gre6"))
70 if ((ret =
lb_vip_add(&prefix, plen, type, new_len, &index))) {
95 .short_help =
"lb vip <prefix> [encap (gre6|gre4)] [new_len <n>] [del]",
104 ip46_address_t vip_prefix, as_addr;
106 ip46_address_t *as_array = 0;
130 }
else if (
unformat(line_input,
"del")) {
169 .short_help =
"lb as <vip-prefix> [<address> [<address> [...]]] [del]",
182 u32 per_cpu_sticky_buckets_log2 = 0;
196 else if (
unformat(line_input,
"buckets %d", &per_cpu_sticky_buckets))
198 else if (
unformat(line_input,
"buckets-log2 %d", &per_cpu_sticky_buckets_log2)) {
199 if (per_cpu_sticky_buckets_log2 >= 32)
201 per_cpu_sticky_buckets = 1 << per_cpu_sticky_buckets_log2;
202 }
else if (
unformat(line_input,
"timeout %d", &flow_timeout))
213 if ((ret =
lb_conf(&ip4, &ip6, per_cpu_sticky_buckets, flow_timeout))) {
227 .short_help =
"lb conf [ip4-src-address <addr>] [ip6-src-address <addr>] [buckets <n>] [timeout <s>]",
243 .short_help =
"show lb",
259 if (
unformat(&line_input,
"verbose"))
263 vlib_cli_output(vm,
"%U\n", verbose?format_lb_vip_detailed:format_lb_vip, vip);
272 .path =
"show lb vips",
273 .short_help =
"show lb vips [verbose]",
285 for(thread_index = 0; thread_index < tm->
n_vlib_mains; thread_index++ ) {
310 .path =
"test lb flowtable flush",
311 .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)
sll srl srl sll sra u16x4 i
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)
int lb_vip_add(ip46_address_t *prefix, u8 plen, lb_vip_type_t type, u32 new_length, u32 *vip_index)
#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)
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 and GRE6 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.