X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fplugins%2Flb%2Fapi.c;h=c392123c79285914cf848f65582ffea58d7267e6;hb=ad9d528;hp=18aae43b11d4dd5b2165b5b71fd996951bb1301a;hpb=219cc90cb435cfcfb5154c6c0e49bd4d60aae769;p=vpp.git diff --git a/src/plugins/lb/api.c b/src/plugins/lb/api.c index 18aae43b11d..c392123c792 100644 --- a/src/plugins/lb/api.c +++ b/src/plugins/lb/api.c @@ -218,7 +218,7 @@ vl_api_lb_add_del_as_t_handler goto done; if (mp->is_del) - rv = lb_vip_del_ass(vip_index, &as_address, 1); + rv = lb_vip_del_ass(vip_index, &as_address, 1, mp->is_flush); else rv = lb_vip_add_ass(vip_index, &as_address, 1); @@ -239,11 +239,54 @@ static void *vl_api_lb_add_del_as_t_print FINISH; } +static void +vl_api_lb_flush_vip_t_handler +(vl_api_lb_flush_vip_t * mp) +{ + lb_main_t *lbm = &lb_main; + int rv = 0; + ip46_address_t vip_prefix; + u8 vip_plen; + u32 vip_index; + vl_api_lb_flush_vip_reply_t * rmp; + + if (mp->port == 0) + { + mp->protocol = ~0; + } + + memcpy (&(vip_prefix.ip6), mp->ip_prefix, sizeof(vip_prefix.ip6)); + + vip_plen = mp->prefix_length; + + rv = lb_vip_find_index(&vip_prefix, vip_plen, mp->protocol, + (u16)mp->port, &vip_index); + + rv = lb_flush_vip_as(vip_index, ~0); + + REPLY_MACRO (VL_API_LB_FLUSH_VIP_REPLY); +} + +static void *vl_api_lb_flush_vip_t_print +(vl_api_lb_flush_vip_t *mp, void * handle) +{ + u8 * s; + s = format (0, "SCRIPT: lb_add_del_vip "); + s = format (s, "%U ", format_ip46_prefix, + (ip46_address_t *)mp->ip_prefix, mp->prefix_length, IP46_TYPE_ANY); + + s = format (s, "protocol %u ", mp->protocol); + s = format (s, "port %u ", mp->port); + + FINISH; +} + /* List of message types that this plugin understands */ #define foreach_lb_plugin_api_msg \ _(LB_CONF, lb_conf) \ _(LB_ADD_DEL_VIP, lb_add_del_vip) \ -_(LB_ADD_DEL_AS, lb_add_del_as) +_(LB_ADD_DEL_AS, lb_add_del_as) \ +_(LB_FLUSH_VIP, lb_flush_vip) static clib_error_t * lb_api_init (vlib_main_t * vm) {