summaryrefslogtreecommitdiffstats
path: root/src/plugins/lb/api.c
diff options
context:
space:
mode:
authorHongjun Ni <hongjun.ni@intel.com>2018-09-18 23:25:02 +0800
committerDamjan Marion <dmarion@me.com>2018-09-24 08:04:37 +0000
commit6a4375e02d8dd4ebcc2f79ee9f6abbafdd2f674c (patch)
treef4f2b6958c5797b14b9ebd0ad5d762630189e150 /src/plugins/lb/api.c
parent742582f4156b249b5a4f60070ae6491dd9b6e7c0 (diff)
LB: fix flush flow table issue
Change-Id: Ib0a06ab71aed42eb5bb2ab2edf4844b2167e0610 Signed-off-by: Hongjun Ni <hongjun.ni@intel.com>
Diffstat (limited to 'src/plugins/lb/api.c')
-rw-r--r--src/plugins/lb/api.c45
1 files changed, 44 insertions, 1 deletions
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)
{