VPP-240: delete subinterface
[vpp.git] / vpp-api-test / vat / api_format.c
index 3d90cae..c1a472a 100644 (file)
@@ -2361,40 +2361,37 @@ static void
 }
 
 static void
-vl_api_lisp_eid_table_details_t_handler (vl_api_lisp_eid_table_details_t * mp)
+add_lisp_eid_table_entry (vat_main_t * vam,
+                         vl_api_lisp_eid_table_details_t * mp)
 {
-  vat_main_t *vam = &vat_main;
   eid_table_t eid_table;
 
   memset (&eid_table, 0, sizeof (eid_table));
   eid_table.is_local = mp->is_local;
-  eid_table.locator_set_index = mp->locator_set_index;
+  eid_table.locator_set_index = clib_net_to_host_u32 (mp->locator_set_index);
   eid_table.eid_type = mp->eid_type;
-  eid_table.vni = mp->vni;
+  eid_table.vni = clib_net_to_host_u32 (mp->vni);
   eid_table.eid_prefix_len = mp->eid_prefix_len;
-  eid_table.ttl = mp->ttl;
+  eid_table.ttl = clib_net_to_host_u32 (mp->ttl);
+  eid_table.action = mp->action;
   eid_table.authoritative = mp->authoritative;
   clib_memcpy (eid_table.eid, mp->eid, sizeof (eid_table.eid));
   vec_add1 (vam->eid_tables, eid_table);
 }
 
+static void
+vl_api_lisp_eid_table_details_t_handler (vl_api_lisp_eid_table_details_t * mp)
+{
+  vat_main_t *vam = &vat_main;
+  add_lisp_eid_table_entry (vam, mp);
+}
+
 static void
 vl_api_lisp_eid_table_details_t_handler_json (vl_api_lisp_eid_table_details_t
                                              * mp)
 {
   vat_main_t *vam = &vat_main;
-  eid_table_t eid_table;
-
-  memset (&eid_table, 0, sizeof (eid_table));
-  eid_table.is_local = mp->is_local;
-  eid_table.locator_set_index = mp->locator_set_index;
-  eid_table.eid_type = mp->eid_type;
-  eid_table.vni = mp->vni;
-  eid_table.eid_prefix_len = mp->eid_prefix_len;
-  eid_table.ttl = mp->ttl;
-  eid_table.authoritative = mp->authoritative;
-  clib_memcpy (eid_table.eid, mp->eid, sizeof (eid_table.eid));
-  vec_add1 (vam->eid_tables, eid_table);
+  add_lisp_eid_table_entry (vam, mp);
 }
 
 static void
@@ -3388,7 +3385,8 @@ _(ipfix_enable_reply)                                   \
 _(pg_capture_reply)                                     \
 _(pg_enable_disable_reply)                              \
 _(ip_source_and_port_range_check_add_del_reply)         \
-_(ip_source_and_port_range_check_interface_add_del_reply)
+_(ip_source_and_port_range_check_interface_add_del_reply)\
+_(delete_subif_reply)
 
 #define _(n)                                    \
     static void vl_api_##n##_t_handler          \
@@ -3607,7 +3605,8 @@ _(IP_SOURCE_AND_PORT_RANGE_CHECK_ADD_DEL_REPLY,                         \
 _(IP_SOURCE_AND_PORT_RANGE_CHECK_INTERFACE_ADD_DEL_REPLY,               \
  ip_source_and_port_range_check_interface_add_del_reply)                \
 _(IPSEC_GRE_ADD_DEL_TUNNEL_REPLY, ipsec_gre_add_del_tunnel_reply)       \
-_(IPSEC_GRE_TUNNEL_DETAILS, ipsec_gre_tunnel_details)
+_(IPSEC_GRE_TUNNEL_DETAILS, ipsec_gre_tunnel_details)                   \
+_(DELETE_SUBIF_REPLY, delete_subif_reply)
 
 /* M: construct, but don't yet send a message */
 
@@ -12334,11 +12333,17 @@ api_lisp_eid_table_add_del_map (vat_main_t * vam)
       return -99;
     }
 
+  if (vrf_set && bd_index_set)
+    {
+      errmsg ("error: both vrf and bd entered!");
+      return -99;
+    }
+
   M (LISP_EID_TABLE_ADD_DEL_MAP, lisp_eid_table_add_del_map);
 
   mp->is_add = is_add;
   mp->vni = htonl (vni);
-  mp->dp_table = htonl (vrf);
+  mp->dp_table = vrf_set ? htonl (vrf) : htonl (bd_index);
   mp->is_l2 = bd_index_set;
 
   /* send */
@@ -13247,13 +13252,11 @@ format_eid_for_eid_table (vat_main_t * vam, u8 * str, eid_table_t * eid_table,
     case 1:
       format_eid = (eid_table->eid_type ? format_ip6_address :
                    format_ip4_address);
-      str = format (0, "[%d] %U/%d",
-                   clib_net_to_host_u32 (eid_table->vni),
+      str = format (0, "[%d] %U/%d", eid_table->vni,
                    format_eid, eid_table->eid, eid_table->eid_prefix_len);
       break;
     case 2:
-      str = format (0, "[%d] %U",
-                   clib_net_to_host_u32 (eid_table->vni),
+      str = format (0, "[%d] %U", eid_table->vni,
                    format_ethernet_address, eid_table->eid);
       break;
     default:
@@ -13308,6 +13311,11 @@ format_locator_for_eid_table (vat_main_t * vam, u8 * str,
   ASSERT (vam != NULL);
   ASSERT (eid_table != NULL);
 
+  if (~0 == eid_table->locator_set_index)
+    {
+      return format (0, "action: %d\n", eid_table->action);
+    }
+
   vec_foreach (loc, vam->locator_msg)
   {
     if (!first_line)
@@ -13366,13 +13374,17 @@ print_lisp_eid_table_dump (vat_main_t * vam)
 
   vec_foreach (eid_table, vam->eid_tables)
   {
-    ret = lisp_locator_dump_send_msg (vam, eid_table->locator_set_index, 0);
-    if (ret)
+    if (~0 != eid_table->locator_set_index)
       {
-       vec_free (vam->locator_msg);
-       clean_locator_set_message (vam);
-       vec_free (vam->eid_tables);
-       return ret;
+       ret = lisp_locator_dump_send_msg (vam, eid_table->locator_set_index,
+                                         0);
+       if (ret)
+         {
+           vec_free (vam->locator_msg);
+           clean_locator_set_message (vam);
+           vec_free (vam->eid_tables);
+           return ret;
+         }
       }
 
     tmp_str2 = format_eid_for_eid_table (vam, tmp_str2, eid_table, &ret);
@@ -15199,6 +15211,36 @@ api_ipsec_gre_tunnel_dump (vat_main_t * vam)
   W;
 }
 
+static int
+api_delete_subif (vat_main_t * vam)
+{
+  unformat_input_t *i = vam->input;
+  vl_api_delete_subif_t *mp;
+  f64 timeout;
+  u32 sw_if_index = ~0;
+
+  while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
+    {
+      if (unformat (i, "sw_if_index %d", &sw_if_index))
+       ;
+      else
+       break;
+    }
+
+  if (sw_if_index == ~0)
+    {
+      errmsg ("missing sw_if_index\n");
+      return -99;
+    }
+
+  /* Construct the API message */
+  M (DELETE_SUBIF, delete_subif);
+  mp->sw_if_index = ntohl (sw_if_index);
+
+  S;
+  W;
+}
+
 static int
 q_or_quit (vat_main_t * vam)
 {
@@ -15779,7 +15821,8 @@ _(ip_source_and_port_range_check_interface_add_del,                     \
   "[udp-in-vrf <id>] [udp-out-vrf <id>]")                               \
 _(ipsec_gre_add_del_tunnel,                                             \
   "src <addr> dst <addr> local_sa <sa-id> remote_sa <sa-id> [del]")     \
-_(ipsec_gre_tunnel_dump, "[sw_if_index <nn>]")
+_(ipsec_gre_tunnel_dump, "[sw_if_index <nn>]")                          \
+_(delete_subif,"sub_sw_if_index <nn> sub_if_id <nn>")
 
 /* List of command functions, CLI names map directly to functions */
 #define foreach_cli_function                                    \