CSIT-844: fix binary api rx pthread heap push/pop
[vpp.git] / src / vat / api_format.c
index 35b46f4..d6af698 100644 (file)
@@ -2137,6 +2137,7 @@ static void vl_api_memfd_segment_create_reply_t_handler
 
       vam->client_index_invalid = 1;
 
+      /* Note: this closes memfd.fd */
       retval = memfd_slave_init (&memfd);
       if (retval)
        clib_warning ("WARNING: segment map returned %d", retval);
@@ -2152,8 +2153,6 @@ static void vl_api_memfd_segment_create_reply_t_handler
       vl_client_connect_to_vlib_no_map ("pvt",
                                        "vpp_api_test(p)",
                                        32 /* input_queue_length */ );
-      if (close (my_fd) < 0)
-       clib_unix_warning ("close memfd fd pivot");
       vam->vl_input_queue = am->shmem_hdr->vl_input_queue;
 
       vl_socket_client_enable_disable (&vam->socket_client_main,
@@ -5885,7 +5884,7 @@ exec_inband (vat_main_t * vam)
   W (ret);
   /* json responses may or may not include a useful reply... */
   if (vec_len (vam->cmd_reply))
-    print (vam->ofp, (char *) (vam->cmd_reply));
+    print (vam->ofp, "%v", (char *) (vam->cmd_reply));
   return ret;
 }
 
@@ -7562,6 +7561,7 @@ api_ip_add_del_route (vat_main_t * vam)
   u8 is_ipv6 = 0;
   u8 is_local = 0, is_drop = 0;
   u8 is_unreach = 0, is_prohibit = 0;
+  u8 create_vrf_if_needed = 0;
   u8 is_add = 1;
   u32 next_hop_weight = 1;
   u8 not_last = 0;
@@ -7658,6 +7658,8 @@ api_ip_add_del_route (vat_main_t * vam)
        is_multipath = 1;
       else if (unformat (i, "vrf %d", &vrf_id))
        ;
+      else if (unformat (i, "create-vrf"))
+       create_vrf_if_needed = 1;
       else if (unformat (i, "count %d", &count))
        ;
       else if (unformat (i, "lookup-in-vrf %d", &next_hop_table_id))
@@ -7744,6 +7746,7 @@ api_ip_add_del_route (vat_main_t * vam)
 
       mp->next_hop_sw_if_index = ntohl (sw_if_index);
       mp->table_id = ntohl (vrf_id);
+      mp->create_vrf_if_needed = create_vrf_if_needed;
 
       mp->is_add = is_add;
       mp->is_drop = is_drop;
@@ -7857,6 +7860,7 @@ api_ip_mroute_add_del (vat_main_t * vam)
   u32 sw_if_index = ~0, vrf_id = 0;
   u8 is_ipv6 = 0;
   u8 is_local = 0;
+  u8 create_vrf_if_needed = 0;
   u8 is_add = 1;
   u8 address_set = 0;
   u32 grp_address_length = 0;
@@ -7913,6 +7917,8 @@ api_ip_mroute_add_del (vat_main_t * vam)
        is_add = 1;
       else if (unformat (i, "vrf %d", &vrf_id))
        ;
+      else if (unformat (i, "create-vrf"))
+       create_vrf_if_needed = 1;
       else if (unformat (i, "%U", unformat_mfib_itf_flags, &iflags))
        ;
       else if (unformat (i, "%U", unformat_mfib_entry_flags, &eflags))
@@ -7935,6 +7941,7 @@ api_ip_mroute_add_del (vat_main_t * vam)
 
   mp->next_hop_sw_if_index = ntohl (sw_if_index);
   mp->table_id = ntohl (vrf_id);
+  mp->create_vrf_if_needed = create_vrf_if_needed;
 
   mp->is_add = is_add;
   mp->is_ipv6 = is_ipv6;
@@ -7975,12 +7982,12 @@ api_mpls_table_add_del (vat_main_t * vam)
   /* Parse args required to build the message */
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
-      if (unformat (i, "del"))
+      if (unformat (i, "table %d", &table_id))
+       ;
+      else if (unformat (i, "del"))
        is_add = 0;
       else if (unformat (i, "add"))
        is_add = 1;
-      else if (unformat (i, "table-id %d", &table_id))
-       ;
       else
        {
          clib_warning ("parse error '%U'", format_unformat_error, i);
@@ -8015,6 +8022,7 @@ api_mpls_route_add_del (vat_main_t * vam)
   unformat_input_t *i = vam->input;
   vl_api_mpls_route_add_del_t *mp;
   u32 sw_if_index = ~0, table_id = 0;
+  u8 create_table_if_needed = 0;
   u8 is_add = 1;
   u32 next_hop_weight = 1;
   u8 is_multipath = 0;
@@ -8064,6 +8072,8 @@ api_mpls_route_add_del (vat_main_t * vam)
        }
       else if (unformat (i, "weight %d", &next_hop_weight))
        ;
+      else if (unformat (i, "create-table"))
+       create_table_if_needed = 1;
       else if (unformat (i, "classify %d", &classify_table_index))
        {
          is_classify = 1;
@@ -8131,6 +8141,7 @@ api_mpls_route_add_del (vat_main_t * vam)
 
       mp->mr_next_hop_sw_if_index = ntohl (sw_if_index);
       mp->mr_table_id = ntohl (table_id);
+      mp->mr_create_table_if_needed = create_table_if_needed;
 
       mp->mr_is_add = is_add;
       mp->mr_next_hop_proto = next_hop_proto;
@@ -8236,6 +8247,7 @@ api_mpls_ip_bind_unbind (vat_main_t * vam)
   unformat_input_t *i = vam->input;
   vl_api_mpls_ip_bind_unbind_t *mp;
   u32 ip_table_id = 0;
+  u8 create_table_if_needed = 0;
   u8 is_bind = 1;
   u8 is_ip4 = 1;
   ip4_address_t v4_address;
@@ -8262,6 +8274,8 @@ api_mpls_ip_bind_unbind (vat_main_t * vam)
        }
       else if (unformat (i, "%d", &local_label))
        ;
+      else if (unformat (i, "create-table"))
+       create_table_if_needed = 1;
       else if (unformat (i, "table-id %d", &ip_table_id))
        ;
       else if (unformat (i, "unbind"))
@@ -8290,6 +8304,7 @@ api_mpls_ip_bind_unbind (vat_main_t * vam)
   /* Construct the API message */
   M (MPLS_IP_BIND_UNBIND, mp);
 
+  mp->mb_create_table_if_needed = create_table_if_needed;
   mp->mb_is_bind = is_bind;
   mp->mb_is_ip4 = is_ip4;
   mp->mb_ip_table_id = ntohl (ip_table_id);
@@ -20902,16 +20917,12 @@ api_app_namespace_add_del (vat_main_t * vam)
 static int
 api_memfd_segment_create (vat_main_t * vam)
 {
+#if VPP_API_TEST_BUILTIN == 0
   unformat_input_t *i = vam->input;
   vl_api_memfd_segment_create_t *mp;
   u64 size = 64 << 20;
   int ret;
 
-#if VPP_API_TEST_BUILTIN == 1
-  errmsg ("memfd_segment_create (builtin) not supported");
-  return -99;
-#endif
-
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
       if (unformat (i, "size %U", unformat_memory_size, &size))
@@ -20925,6 +20936,11 @@ api_memfd_segment_create (vat_main_t * vam)
   S (mp);
   W (ret);
   return ret;
+
+#else
+  errmsg ("memfd_segment_create (builtin) not supported");
+  return -99;
+#endif
 }
 
 static int