LB: fix flush flow table issue
[vpp.git] / src / plugins / lb / api.c
index 5194c2e..c392123 100644 (file)
@@ -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)
 {