From 6a4375e02d8dd4ebcc2f79ee9f6abbafdd2f674c Mon Sep 17 00:00:00 2001 From: Hongjun Ni Date: Tue, 18 Sep 2018 23:25:02 +0800 Subject: LB: fix flush flow table issue Change-Id: Ib0a06ab71aed42eb5bb2ab2edf4844b2167e0610 Signed-off-by: Hongjun Ni --- src/plugins/lb/api.c | 45 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) (limited to 'src/plugins/lb/api.c') diff --git a/src/plugins/lb/api.c b/src/plugins/lb/api.c index 5194c2e88ec..c392123c792 100644 --- a/src/plugins/lb/api.c +++ b/src/plugins/lb/api.c @@ -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) { -- cgit 1.2.3-korg