X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fplugins%2Flb%2Flb.c;h=ab5e808ddab7b8ecaeac5cff5a0cb2359174da03;hb=ba5f9bc7534bcf58225b0658993728b1f4d47a67;hp=3ac2b284ea6e2cad176667ff18fcf37c9cafa49f;hpb=5cdde5c25a0e71d923a6d56e5c94e058887f95d8;p=vpp.git diff --git a/src/plugins/lb/lb.c b/src/plugins/lb/lb.c index 3ac2b284ea6..ab5e808ddab 100644 --- a/src/plugins/lb/lb.c +++ b/src/plugins/lb/lb.c @@ -26,6 +26,9 @@ //After so many seconds. It is assumed that inter-core race condition will not occur. #define LB_CONCURRENCY_TIMEOUT 10 +// FIB source for adding routes +static fib_source_t lb_fib_src; + lb_main_t lb_main; #define lb_get_writer_lock() clib_spinlock_lock (&lb_main.writer_lock) @@ -860,7 +863,7 @@ static int lb_vip_prefix_index_alloc (lb_main_t *lbm) { /* - * Check for dynamically allocaetd instance number. + * Check for dynamically allocated instance number. */ u32 bit; @@ -903,6 +906,8 @@ static void lb_vip_add_adjacency(lb_main_t *lbm, lb_vip_t *vip, if (!lb_vip_port_find_diff_port(&(vip->prefix), vip->plen, vip->protocol, vip->port, &vip_idx)) { + lb_vip_t *exists_vip = lb_vip_get_by_index(vip_idx); + *vip_prefix_index = exists_vip ? exists_vip->vip_prefix_index : ~0; return; } @@ -948,7 +953,7 @@ static void lb_vip_add_adjacency(lb_main_t *lbm, lb_vip_t *vip, dpo_set(&dpo, dpo_type, proto, *vip_prefix_index); fib_table_entry_special_dpo_add(0, &pfx, - FIB_SOURCE_PLUGIN_HI, + lb_fib_src, FIB_ENTRY_FLAG_EXCLUSIVE, &dpo); dpo_reset(&dpo); @@ -1037,7 +1042,7 @@ static void lb_vip_del_adjacency(lb_main_t *lbm, lb_vip_t *vip) pfx.fp_len = vip->plen; pfx.fp_proto = FIB_PROTOCOL_IP6; } - fib_table_entry_special_remove(0, &pfx, FIB_SOURCE_PLUGIN_HI); + fib_table_entry_special_remove(0, &pfx, lb_fib_src); } int lb_vip_add(lb_vip_add_args_t args, u32 *vip_index) @@ -1445,6 +1450,11 @@ lb_init (vlib_main_t * vm) #define _(a,b,c) lbm->vip_counters[c].name = b; lb_foreach_vip_counter #undef _ + + lb_fib_src = fib_source_allocate("lb", + FIB_SOURCE_PRIORITY_HI, + FIB_SOURCE_BH_SIMPLE); + return NULL; }