VPP-540 : pbb tag rewrite details
[vpp.git] / src / vat / api_format.c
index d4834b7..0f03527 100644 (file)
@@ -914,6 +914,19 @@ static void vl_api_sw_interface_details_t_handler_json
                            ntohl (mp->vtr_push_dot1q));
   vat_json_object_add_uint (node, "vtr_tag1", ntohl (mp->vtr_tag1));
   vat_json_object_add_uint (node, "vtr_tag2", ntohl (mp->vtr_tag2));
+  if (mp->sub_dot1ah)
+    {
+      vat_json_object_add_string_copy (node, "pbb_vtr_dmac",
+                                      format (0, "%U",
+                                              format_ethernet_address,
+                                              &mp->b_dmac));
+      vat_json_object_add_string_copy (node, "pbb_vtr_smac",
+                                      format (0, "%U",
+                                              format_ethernet_address,
+                                              &mp->b_smac));
+      vat_json_object_add_uint (node, "pbb_vtr_b_vlanid", mp->b_vlanid);
+      vat_json_object_add_uint (node, "pbb_vtr_i_sid", mp->i_sid);
+    }
 }
 
 static void vl_api_sw_interface_set_flags_t_handler
@@ -3843,6 +3856,14 @@ _(ikev2_profile_set_auth_reply)                         \
 _(ikev2_profile_set_id_reply)                           \
 _(ikev2_profile_set_ts_reply)                           \
 _(ikev2_set_local_key_reply)                            \
+_(ikev2_set_responder_reply)                            \
+_(ikev2_set_ike_transforms_reply)                       \
+_(ikev2_set_esp_transforms_reply)                       \
+_(ikev2_set_sa_lifetime_reply)                          \
+_(ikev2_initiate_sa_init_reply)                         \
+_(ikev2_initiate_del_ike_sa_reply)                      \
+_(ikev2_initiate_del_child_sa_reply)                    \
+_(ikev2_initiate_rekey_child_sa_reply)                  \
 _(delete_loopback_reply)                                \
 _(bd_ip_mac_add_del_reply)                              \
 _(map_del_domain_reply)                                 \
@@ -4076,6 +4097,14 @@ _(IKEV2_PROFILE_SET_AUTH_REPLY, ikev2_profile_set_auth_reply)           \
 _(IKEV2_PROFILE_SET_ID_REPLY, ikev2_profile_set_id_reply)               \
 _(IKEV2_PROFILE_SET_TS_REPLY, ikev2_profile_set_ts_reply)               \
 _(IKEV2_SET_LOCAL_KEY_REPLY, ikev2_set_local_key_reply)                 \
+_(IKEV2_SET_RESPONDER_REPLY, ikev2_set_responder_reply)                 \
+_(IKEV2_SET_IKE_TRANSFORMS_REPLY, ikev2_set_ike_transforms_reply)       \
+_(IKEV2_SET_ESP_TRANSFORMS_REPLY, ikev2_set_esp_transforms_reply)       \
+_(IKEV2_SET_SA_LIFETIME_REPLY, ikev2_set_sa_lifetime_reply)             \
+_(IKEV2_INITIATE_SA_INIT_REPLY, ikev2_initiate_sa_init_reply)           \
+_(IKEV2_INITIATE_DEL_IKE_SA_REPLY, ikev2_initiate_del_ike_sa_reply)     \
+_(IKEV2_INITIATE_DEL_CHILD_SA_REPLY, ikev2_initiate_del_child_sa_reply) \
+_(IKEV2_INITIATE_REKEY_CHILD_SA_REPLY, ikev2_initiate_rekey_child_sa_reply) \
 _(DELETE_LOOPBACK_REPLY, delete_loopback_reply)                         \
 _(BD_IP_MAC_ADD_DEL_REPLY, bd_ip_mac_add_del_reply)                     \
 _(DHCP_COMPL_EVENT, dhcp_compl_event)                                   \
@@ -4590,7 +4619,7 @@ exec (vat_main_t * vam)
     }
 
 
-  M (CLI_REQUEST, cli_request);
+  M (CLI_REQUEST, mp);
 
   /*
    * Copy cmd into shared memory.
@@ -4608,7 +4637,7 @@ exec (vat_main_t * vam)
   pthread_mutex_unlock (&am->vlib_rp->mutex);
 
   mp->cmd_in_shmem = (u64) cmd;
-  S;
+  S (mp);
   timeout = vat_time_now (vam) + 10.0;
 
   while (vat_time_now (vam) < timeout)
@@ -4640,8 +4669,8 @@ static int
 exec_inband (vat_main_t * vam)
 {
   vl_api_cli_inband_t *mp;
-  f64 timeout;
   unformat_input_t *i = vam->input;
+  int ret;
 
   if (vec_len (i->buffer) == 0)
     return -1;
@@ -4663,12 +4692,13 @@ exec_inband (vat_main_t * vam)
    * in \n\0.
    */
   u32 len = vec_len (vam->input->buffer);
-  M2 (CLI_INBAND, cli_inband, len);
+  M2 (CLI_INBAND, mp, len);
   clib_memcpy (mp->cmd, vam->input->buffer, len);
   mp->length = htonl (len);
 
-  S;
-  W2 (print (vam->ofp, "%s", vam->cmd_reply));
+  S (mp);
+  W2 (ret, print (vam->ofp, "%s", vam->cmd_reply));
+  return ret;
 }
 
 static int
@@ -4676,9 +4706,9 @@ api_create_loopback (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_create_loopback_t *mp;
-  f64 timeout;
   u8 mac_address[6];
   u8 mac_set = 0;
+  int ret;
 
   memset (mac_address, 0, sizeof (mac_address));
 
@@ -4691,12 +4721,13 @@ api_create_loopback (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (CREATE_LOOPBACK, create_loopback);
+  M (CREATE_LOOPBACK, mp);
   if (mac_set)
     clib_memcpy (mp->mac_address, mac_address, sizeof (mac_address));
 
-  S;
-  W;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -4704,8 +4735,8 @@ api_delete_loopback (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_delete_loopback_t *mp;
-  f64 timeout;
   u32 sw_if_index = ~0;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -4722,11 +4753,12 @@ api_delete_loopback (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (DELETE_LOOPBACK, delete_loopback);
+  M (DELETE_LOOPBACK, mp);
   mp->sw_if_index = ntohl (sw_if_index);
 
-  S;
-  W;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -4734,8 +4766,8 @@ api_want_stats (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_want_stats_t *mp;
-  f64 timeout;
   int enable = -1;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -4753,11 +4785,12 @@ api_want_stats (vat_main_t * vam)
       return -99;
     }
 
-  M (WANT_STATS, want_stats);
+  M (WANT_STATS, mp);
   mp->enable_disable = enable;
 
-  S;
-  W;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -4765,8 +4798,8 @@ api_want_interface_events (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_want_interface_events_t *mp;
-  f64 timeout;
   int enable = -1;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -4784,13 +4817,14 @@ api_want_interface_events (vat_main_t * vam)
       return -99;
     }
 
-  M (WANT_INTERFACE_EVENTS, want_interface_events);
+  M (WANT_INTERFACE_EVENTS, mp);
   mp->enable_disable = enable;
 
   vam->interface_event_display = enable;
 
-  S;
-  W;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 
@@ -4799,10 +4833,11 @@ int
 api_sw_interface_dump (vat_main_t * vam)
 {
   vl_api_sw_interface_dump_t *mp;
-  f64 timeout;
+  vl_api_control_ping_t *mp_ping;
   hash_pair_t *p;
   name_sort_t *nses = 0, *ns;
   sw_interface_subif_t *sub = NULL;
+  int ret;
 
   /* Toss the old name table */
   /* *INDENT-OFF* */
@@ -4830,75 +4865,74 @@ api_sw_interface_dump (vat_main_t * vam)
   vam->sw_if_index_by_interface_name = hash_create_string (0, sizeof (uword));
 
   /* Get list of ethernets */
-  M (SW_INTERFACE_DUMP, sw_interface_dump);
+  M (SW_INTERFACE_DUMP, mp);
   mp->name_filter_valid = 1;
   strncpy ((char *) mp->name_filter, "Ether", sizeof (mp->name_filter) - 1);
-  S;
+  S (mp);
 
   /* and local / loopback interfaces */
-  M (SW_INTERFACE_DUMP, sw_interface_dump);
+  M (SW_INTERFACE_DUMP, mp);
   mp->name_filter_valid = 1;
   strncpy ((char *) mp->name_filter, "lo", sizeof (mp->name_filter) - 1);
-  S;
+  S (mp);
 
   /* and packet-generator interfaces */
-  M (SW_INTERFACE_DUMP, sw_interface_dump);
+  M (SW_INTERFACE_DUMP, mp);
   mp->name_filter_valid = 1;
   strncpy ((char *) mp->name_filter, "pg", sizeof (mp->name_filter) - 1);
-  S;
+  S (mp);
 
   /* and vxlan-gpe tunnel interfaces */
-  M (SW_INTERFACE_DUMP, sw_interface_dump);
+  M (SW_INTERFACE_DUMP, mp);
   mp->name_filter_valid = 1;
   strncpy ((char *) mp->name_filter, "vxlan_gpe",
           sizeof (mp->name_filter) - 1);
-  S;
+  S (mp);
 
   /* and vxlan tunnel interfaces */
-  M (SW_INTERFACE_DUMP, sw_interface_dump);
+  M (SW_INTERFACE_DUMP, mp);
   mp->name_filter_valid = 1;
   strncpy ((char *) mp->name_filter, "vxlan", sizeof (mp->name_filter) - 1);
-  S;
+  S (mp);
 
   /* and host (af_packet) interfaces */
-  M (SW_INTERFACE_DUMP, sw_interface_dump);
+  M (SW_INTERFACE_DUMP, mp);
   mp->name_filter_valid = 1;
   strncpy ((char *) mp->name_filter, "host", sizeof (mp->name_filter) - 1);
-  S;
+  S (mp);
 
   /* and l2tpv3 tunnel interfaces */
-  M (SW_INTERFACE_DUMP, sw_interface_dump);
+  M (SW_INTERFACE_DUMP, mp);
   mp->name_filter_valid = 1;
   strncpy ((char *) mp->name_filter, "l2tpv3_tunnel",
           sizeof (mp->name_filter) - 1);
-  S;
+  S (mp);
 
   /* and GRE tunnel interfaces */
-  M (SW_INTERFACE_DUMP, sw_interface_dump);
+  M (SW_INTERFACE_DUMP, mp);
   mp->name_filter_valid = 1;
   strncpy ((char *) mp->name_filter, "gre", sizeof (mp->name_filter) - 1);
-  S;
+  S (mp);
 
   /* and LISP-GPE interfaces */
-  M (SW_INTERFACE_DUMP, sw_interface_dump);
+  M (SW_INTERFACE_DUMP, mp);
   mp->name_filter_valid = 1;
   strncpy ((char *) mp->name_filter, "lisp_gpe",
           sizeof (mp->name_filter) - 1);
-  S;
+  S (mp);
 
   /* and IPSEC tunnel interfaces */
-  M (SW_INTERFACE_DUMP, sw_interface_dump);
+  M (SW_INTERFACE_DUMP, mp);
   mp->name_filter_valid = 1;
   strncpy ((char *) mp->name_filter, "ipsec", sizeof (mp->name_filter) - 1);
-  S;
+  S (mp);
 
   /* Use a control ping for synchronization */
-  {
-    vl_api_control_ping_t *mp;
-    M (CONTROL_PING, control_ping);
-    S;
-  }
-  W;
+  M (CONTROL_PING, mp_ping);
+  S (mp_ping);
+
+  W (ret);
+  return ret;
 }
 
 static int
@@ -4906,10 +4940,10 @@ api_sw_interface_set_flags (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_sw_interface_set_flags_t *mp;
-  f64 timeout;
   u32 sw_if_index;
   u8 sw_if_index_set = 0;
   u8 admin_up = 0, link_up = 0;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
@@ -4938,16 +4972,17 @@ api_sw_interface_set_flags (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (SW_INTERFACE_SET_FLAGS, sw_interface_set_flags);
+  M (SW_INTERFACE_SET_FLAGS, mp);
   mp->sw_if_index = ntohl (sw_if_index);
   mp->admin_up_down = admin_up;
   mp->link_up_down = link_up;
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Wait for a reply, return the good/bad news... */
-  W;
+  W (ret);
+  return ret;
 }
 
 static int
@@ -4955,9 +4990,9 @@ api_sw_interface_clear_stats (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_sw_interface_clear_stats_t *mp;
-  f64 timeout;
   u32 sw_if_index;
   u8 sw_if_index_set = 0;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
@@ -4971,7 +5006,7 @@ api_sw_interface_clear_stats (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (SW_INTERFACE_CLEAR_STATS, sw_interface_clear_stats);
+  M (SW_INTERFACE_CLEAR_STATS, mp);
 
   if (sw_if_index_set == 1)
     mp->sw_if_index = ntohl (sw_if_index);
@@ -4979,10 +5014,11 @@ api_sw_interface_clear_stats (vat_main_t * vam)
     mp->sw_if_index = ~0;
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Wait for a reply, return the good/bad news... */
-  W;
+  W (ret);
+  return ret;
 }
 
 #if DPDK >0
@@ -4991,7 +5027,6 @@ api_sw_interface_set_dpdk_hqos_pipe (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_sw_interface_set_dpdk_hqos_pipe_t *mp;
-  f64 timeout;
   u32 sw_if_index;
   u8 sw_if_index_set = 0;
   u32 subport;
@@ -5000,6 +5035,7 @@ api_sw_interface_set_dpdk_hqos_pipe (vat_main_t * vam)
   u8 pipe_set = 0;
   u32 profile;
   u8 profile_set = 0;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
@@ -5045,7 +5081,7 @@ api_sw_interface_set_dpdk_hqos_pipe (vat_main_t * vam)
       return -99;
     }
 
-  M (SW_INTERFACE_SET_DPDK_HQOS_PIPE, sw_interface_set_dpdk_hqos_pipe);
+  M (SW_INTERFACE_SET_DPDK_HQOS_PIPE, mp);
 
   mp->sw_if_index = ntohl (sw_if_index);
   mp->subport = ntohl (subport);
@@ -5053,10 +5089,9 @@ api_sw_interface_set_dpdk_hqos_pipe (vat_main_t * vam)
   mp->profile = ntohl (profile);
 
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -5064,7 +5099,6 @@ api_sw_interface_set_dpdk_hqos_subport (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_sw_interface_set_dpdk_hqos_subport_t *mp;
-  f64 timeout;
   u32 sw_if_index;
   u8 sw_if_index_set = 0;
   u32 subport;
@@ -5073,6 +5107,7 @@ api_sw_interface_set_dpdk_hqos_subport (vat_main_t * vam)
   u32 tb_size = 1000000;
   u32 tc_rate[] = { 1250000000, 1250000000, 1250000000, 1250000000 };
   u32 tc_period = 10;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
@@ -5122,7 +5157,7 @@ api_sw_interface_set_dpdk_hqos_subport (vat_main_t * vam)
       return -99;
     }
 
-  M (SW_INTERFACE_SET_DPDK_HQOS_SUBPORT, sw_interface_set_dpdk_hqos_subport);
+  M (SW_INTERFACE_SET_DPDK_HQOS_SUBPORT, mp);
 
   mp->sw_if_index = ntohl (sw_if_index);
   mp->subport = ntohl (subport);
@@ -5134,10 +5169,9 @@ api_sw_interface_set_dpdk_hqos_subport (vat_main_t * vam)
   mp->tc_rate[3] = ntohl (tc_rate[3]);
   mp->tc_period = ntohl (tc_period);
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -5145,13 +5179,13 @@ api_sw_interface_set_dpdk_hqos_tctbl (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_sw_interface_set_dpdk_hqos_tctbl_t *mp;
-  f64 timeout;
   u32 sw_if_index;
   u8 sw_if_index_set = 0;
   u8 entry_set = 0;
   u8 tc_set = 0;
   u8 queue_set = 0;
   u32 entry, tc, queue;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
@@ -5194,17 +5228,16 @@ api_sw_interface_set_dpdk_hqos_tctbl (vat_main_t * vam)
       return -99;
     }
 
-  M (SW_INTERFACE_SET_DPDK_HQOS_TCTBL, sw_interface_set_dpdk_hqos_tctbl);
+  M (SW_INTERFACE_SET_DPDK_HQOS_TCTBL, mp);
 
   mp->sw_if_index = ntohl (sw_if_index);
   mp->entry = ntohl (entry);
   mp->tc = ntohl (tc);
   mp->queue = ntohl (queue);
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 #endif
 
@@ -5213,7 +5246,6 @@ api_sw_interface_add_del_address (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_sw_interface_add_del_address_t *mp;
-  f64 timeout;
   u32 sw_if_index;
   u8 sw_if_index_set = 0;
   u8 is_add = 1, del_all = 0;
@@ -5222,6 +5254,7 @@ api_sw_interface_add_del_address (vat_main_t * vam)
   u8 v6_address_set = 0;
   ip4_address_t v4address;
   ip6_address_t v6address;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
@@ -5262,7 +5295,7 @@ api_sw_interface_add_del_address (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (SW_INTERFACE_ADD_DEL_ADDRESS, sw_interface_add_del_address);
+  M (SW_INTERFACE_ADD_DEL_ADDRESS, mp);
 
   mp->sw_if_index = ntohl (sw_if_index);
   mp->is_add = is_add;
@@ -5279,10 +5312,11 @@ api_sw_interface_add_del_address (vat_main_t * vam)
   mp->address_length = address_length;
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Wait for a reply, return good/bad news  */
-  W;
+  W (ret);
+  return ret;
 }
 
 static int
@@ -5290,10 +5324,10 @@ api_sw_interface_set_mpls_enable (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_sw_interface_set_mpls_enable_t *mp;
-  f64 timeout;
   u32 sw_if_index;
   u8 sw_if_index_set = 0;
   u8 enable = 1;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
@@ -5317,16 +5351,17 @@ api_sw_interface_set_mpls_enable (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (SW_INTERFACE_SET_MPLS_ENABLE, sw_interface_set_mpls_enable);
+  M (SW_INTERFACE_SET_MPLS_ENABLE, mp);
 
   mp->sw_if_index = ntohl (sw_if_index);
   mp->enable = enable;
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Wait for a reply... */
-  W;
+  W (ret);
+  return ret;
 }
 
 static int
@@ -5334,10 +5369,10 @@ api_sw_interface_set_table (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_sw_interface_set_table_t *mp;
-  f64 timeout;
   u32 sw_if_index, vrf_id = 0;
   u8 sw_if_index_set = 0;
   u8 is_ipv6 = 0;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
@@ -5361,17 +5396,18 @@ api_sw_interface_set_table (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (SW_INTERFACE_SET_TABLE, sw_interface_set_table);
+  M (SW_INTERFACE_SET_TABLE, mp);
 
   mp->sw_if_index = ntohl (sw_if_index);
   mp->is_ipv6 = is_ipv6;
   mp->vrf_id = ntohl (vrf_id);
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Wait for a reply... */
-  W;
+  W (ret);
+  return ret;
 }
 
 static void vl_api_sw_interface_get_table_reply_t_handler
@@ -5411,7 +5447,7 @@ api_sw_interface_get_table (vat_main_t * vam)
   u32 sw_if_index;
   u8 sw_if_index_set = 0;
   u8 is_ipv6 = 0;
-  f64 timeout;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -5431,12 +5467,13 @@ api_sw_interface_get_table (vat_main_t * vam)
       return -99;
     }
 
-  M (SW_INTERFACE_GET_TABLE, sw_interface_get_table);
+  M (SW_INTERFACE_GET_TABLE, mp);
   mp->sw_if_index = htonl (sw_if_index);
   mp->is_ipv6 = is_ipv6;
 
-  S;
-  W;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -5444,10 +5481,10 @@ api_sw_interface_set_vpath (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_sw_interface_set_vpath_t *mp;
-  f64 timeout;
   u32 sw_if_index = 0;
   u8 sw_if_index_set = 0;
   u8 is_enable = 0;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
@@ -5471,16 +5508,17 @@ api_sw_interface_set_vpath (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (SW_INTERFACE_SET_VPATH, sw_interface_set_vpath);
+  M (SW_INTERFACE_SET_VPATH, mp);
 
   mp->sw_if_index = ntohl (sw_if_index);
   mp->enable = is_enable;
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Wait for a reply... */
-  W;
+  W (ret);
+  return ret;
 }
 
 static int
@@ -5488,11 +5526,11 @@ api_sw_interface_set_vxlan_bypass (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_sw_interface_set_vxlan_bypass_t *mp;
-  f64 timeout;
   u32 sw_if_index = 0;
   u8 sw_if_index_set = 0;
   u8 is_enable = 1;
   u8 is_ipv6 = 0;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
@@ -5520,17 +5558,18 @@ api_sw_interface_set_vxlan_bypass (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (SW_INTERFACE_SET_VXLAN_BYPASS, sw_interface_set_vxlan_bypass);
+  M (SW_INTERFACE_SET_VXLAN_BYPASS, mp);
 
   mp->sw_if_index = ntohl (sw_if_index);
   mp->enable = is_enable;
   mp->is_ipv6 = is_ipv6;
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Wait for a reply... */
-  W;
+  W (ret);
+  return ret;
 }
 
 static int
@@ -5538,12 +5577,12 @@ api_sw_interface_set_l2_xconnect (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_sw_interface_set_l2_xconnect_t *mp;
-  f64 timeout;
   u32 rx_sw_if_index;
   u8 rx_sw_if_index_set = 0;
   u32 tx_sw_if_index;
   u8 tx_sw_if_index_set = 0;
   u8 enable = 1;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
@@ -5594,16 +5633,15 @@ api_sw_interface_set_l2_xconnect (vat_main_t * vam)
       return -99;
     }
 
-  M (SW_INTERFACE_SET_L2_XCONNECT, sw_interface_set_l2_xconnect);
+  M (SW_INTERFACE_SET_L2_XCONNECT, mp);
 
   mp->rx_sw_if_index = ntohl (rx_sw_if_index);
   mp->tx_sw_if_index = ntohl (tx_sw_if_index);
   mp->enable = enable;
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -5611,7 +5649,6 @@ api_sw_interface_set_l2_bridge (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_sw_interface_set_l2_bridge_t *mp;
-  f64 timeout;
   u32 rx_sw_if_index;
   u8 rx_sw_if_index_set = 0;
   u32 bd_id;
@@ -5619,6 +5656,7 @@ api_sw_interface_set_l2_bridge (vat_main_t * vam)
   u8 bvi = 0;
   u32 shg = 0;
   u8 enable = 1;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
@@ -5655,7 +5693,7 @@ api_sw_interface_set_l2_bridge (vat_main_t * vam)
       return -99;
     }
 
-  M (SW_INTERFACE_SET_L2_BRIDGE, sw_interface_set_l2_bridge);
+  M (SW_INTERFACE_SET_L2_BRIDGE, mp);
 
   mp->rx_sw_if_index = ntohl (rx_sw_if_index);
   mp->bd_id = ntohl (bd_id);
@@ -5663,10 +5701,9 @@ api_sw_interface_set_l2_bridge (vat_main_t * vam)
   mp->bvi = bvi;
   mp->enable = enable;
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -5674,8 +5711,9 @@ api_bridge_domain_dump (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_bridge_domain_dump_t *mp;
-  f64 timeout;
+  vl_api_control_ping_t *mp_ping;
   u32 bd_id = ~0;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
@@ -5686,20 +5724,16 @@ api_bridge_domain_dump (vat_main_t * vam)
        break;
     }
 
-  M (BRIDGE_DOMAIN_DUMP, bridge_domain_dump);
+  M (BRIDGE_DOMAIN_DUMP, mp);
   mp->bd_id = ntohl (bd_id);
-  S;
+  S (mp);
 
   /* Use a control ping for synchronization */
-  {
-    vl_api_control_ping_t *mp;
-    M (CONTROL_PING, control_ping);
-    S;
-  }
+  M (CONTROL_PING, mp_ping);
+  S (mp_ping);
 
-  W;
-  /* NOTREACHED */
-  return 0;
+  W (ret);
+  return ret;
 }
 
 static int
@@ -5707,11 +5741,11 @@ api_bridge_domain_add_del (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_bridge_domain_add_del_t *mp;
-  f64 timeout;
   u32 bd_id = ~0;
   u8 is_add = 1;
   u32 flood = 1, forward = 1, learn = 1, uu_flood = 1, arp_term = 0;
   u32 mac_age = 0;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
@@ -5751,7 +5785,7 @@ api_bridge_domain_add_del (vat_main_t * vam)
       return -99;
     }
 
-  M (BRIDGE_DOMAIN_ADD_DEL, bridge_domain_add_del);
+  M (BRIDGE_DOMAIN_ADD_DEL, mp);
 
   mp->bd_id = ntohl (bd_id);
   mp->flood = flood;
@@ -5762,10 +5796,9 @@ api_bridge_domain_add_del (vat_main_t * vam)
   mp->is_add = is_add;
   mp->mac_age = (u8) mac_age;
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -5856,7 +5889,7 @@ api_l2fib_add_del (vat_main_t * vam)
 
   for (j = 0; j < count; j++)
     {
-      M (L2FIB_ADD_DEL, l2fib_add_del);
+      M (L2FIB_ADD_DEL, mp);
 
       mp->mac = mac;
       mp->bd_id = ntohl (bd_id);
@@ -5871,19 +5904,19 @@ api_l2fib_add_del (vat_main_t * vam)
        }
       increment_mac_address (&mac);
       /* send it... */
-      S;
+      S (mp);
     }
 
   if (count > 1)
     {
-      vl_api_control_ping_t *mp;
+      vl_api_control_ping_t *mp_ping;
       f64 after;
 
       /* Shut off async mode */
       vam->async_mode = 0;
 
-      M (CONTROL_PING, control_ping);
-      S;
+      M (CONTROL_PING, mp_ping);
+      S (mp_ping);
 
       timeout = vat_time_now (vam) + 1.0;
       while (vat_time_now (vam) < timeout)
@@ -5908,8 +5941,11 @@ api_l2fib_add_del (vat_main_t * vam)
     }
   else
     {
+      int ret;
+
       /* Wait for a reply... */
-      W;
+      W (ret);
+      return ret;
     }
   /* Return the good/bad news */
   return (vam->retval);
@@ -5920,10 +5956,10 @@ api_l2_flags (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_l2_flags_t *mp;
-  f64 timeout;
   u32 sw_if_index;
   u32 feature_bitmap = 0;
   u8 sw_if_index_set = 0;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
@@ -5959,15 +5995,14 @@ api_l2_flags (vat_main_t * vam)
       return -99;
     }
 
-  M (L2_FLAGS, l2_flags);
+  M (L2_FLAGS, mp);
 
   mp->sw_if_index = ntohl (sw_if_index);
   mp->feature_bitmap = ntohl (feature_bitmap);
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -5975,11 +6010,11 @@ api_bridge_flags (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_bridge_flags_t *mp;
-  f64 timeout;
   u32 bd_id;
   u8 bd_id_set = 0;
   u8 is_set = 1;
   u32 flags = 0;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
@@ -6010,16 +6045,15 @@ api_bridge_flags (vat_main_t * vam)
       return -99;
     }
 
-  M (BRIDGE_FLAGS, bridge_flags);
+  M (BRIDGE_FLAGS, mp);
 
   mp->bd_id = ntohl (bd_id);
   mp->feature_bitmap = ntohl (flags);
   mp->is_set = is_set;
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -6027,7 +6061,6 @@ api_bd_ip_mac_add_del (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_bd_ip_mac_add_del_t *mp;
-  f64 timeout;
   u32 bd_id;
   u8 is_ipv6 = 0;
   u8 is_add = 1;
@@ -6037,6 +6070,7 @@ api_bd_ip_mac_add_del (vat_main_t * vam)
   ip4_address_t v4addr;
   ip6_address_t v6addr;
   u8 macaddr[6];
+  int ret;
 
 
   /* Parse args required to build the message */
@@ -6081,7 +6115,7 @@ api_bd_ip_mac_add_del (vat_main_t * vam)
       return -99;
     }
 
-  M (BD_IP_MAC_ADD_DEL, bd_ip_mac_add_del);
+  M (BD_IP_MAC_ADD_DEL, mp);
 
   mp->bd_id = ntohl (bd_id);
   mp->is_ipv6 = is_ipv6;
@@ -6091,10 +6125,9 @@ api_bd_ip_mac_add_del (vat_main_t * vam)
   else
     clib_memcpy (mp->ip_address, &v4addr, sizeof (v4addr));
   clib_memcpy (mp->mac_address, macaddr, 6);
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -6102,7 +6135,6 @@ api_tap_connect (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_tap_connect_t *mp;
-  f64 timeout;
   u8 mac_address[6];
   u8 random_mac = 1;
   u8 name_set = 0;
@@ -6114,6 +6146,7 @@ api_tap_connect (vat_main_t * vam)
   ip6_address_t ip6_address;
   u32 ip6_mask_width;
   int ip6_address_set = 0;
+  int ret;
 
   memset (mac_address, 0, sizeof (mac_address));
 
@@ -6159,7 +6192,7 @@ api_tap_connect (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (TAP_CONNECT, tap_connect);
+  M (TAP_CONNECT, mp);
 
   mp->use_random_mac = random_mac;
   clib_memcpy (mp->mac_address, mac_address, 6);
@@ -6184,10 +6217,11 @@ api_tap_connect (vat_main_t * vam)
   vec_free (tag);
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Wait for a reply... */
-  W;
+  W (ret);
+  return ret;
 }
 
 static int
@@ -6195,13 +6229,13 @@ api_tap_modify (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_tap_modify_t *mp;
-  f64 timeout;
   u8 mac_address[6];
   u8 random_mac = 1;
   u8 name_set = 0;
   u8 *tap_name;
   u32 sw_if_index = ~0;
   u8 sw_if_index_set = 0;
+  int ret;
 
   memset (mac_address, 0, sizeof (mac_address));
 
@@ -6241,7 +6275,7 @@ api_tap_modify (vat_main_t * vam)
   vec_add1 (tap_name, 0);
 
   /* Construct the API message */
-  M (TAP_MODIFY, tap_modify);
+  M (TAP_MODIFY, mp);
 
   mp->use_random_mac = random_mac;
   mp->sw_if_index = ntohl (sw_if_index);
@@ -6250,10 +6284,11 @@ api_tap_modify (vat_main_t * vam)
   vec_free (tap_name);
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Wait for a reply... */
-  W;
+  W (ret);
+  return ret;
 }
 
 static int
@@ -6261,9 +6296,9 @@ api_tap_delete (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_tap_delete_t *mp;
-  f64 timeout;
   u32 sw_if_index = ~0;
   u8 sw_if_index_set = 0;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
@@ -6283,15 +6318,16 @@ api_tap_delete (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (TAP_DELETE, tap_delete);
+  M (TAP_DELETE, mp);
 
   mp->sw_if_index = ntohl (sw_if_index);
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Wait for a reply... */
-  W;
+  W (ret);
+  return ret;
 }
 
 static int
@@ -6299,7 +6335,6 @@ api_ip_add_del_route (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_ip_add_del_route_t *mp;
-  f64 timeout;
   u32 sw_if_index = ~0, vrf_id = 0;
   u8 is_ipv6 = 0;
   u8 is_local = 0, is_drop = 0;
@@ -6484,7 +6519,7 @@ api_ip_add_del_route (vat_main_t * vam)
   for (j = 0; j < count; j++)
     {
       /* Construct the API message */
-      M2 (IP_ADD_DEL_ROUTE, ip_add_del_route,
+      M2 (IP_ADD_DEL_ROUTE, mp,
          sizeof (mpls_label_t) * vec_len (next_hop_out_label_stack));
 
       mp->next_hop_sw_if_index = ntohl (sw_if_index);
@@ -6538,7 +6573,7 @@ api_ip_add_del_route (vat_main_t * vam)
            increment_v4_address (&v4_dst_address);
        }
       /* send it... */
-      S;
+      S (mp);
       /* If we receive SIGTERM, stop now... */
       if (vam->do_exit)
        break;
@@ -6547,14 +6582,15 @@ api_ip_add_del_route (vat_main_t * vam)
   /* When testing multiple add/del ops, use a control-ping to sync */
   if (count > 1)
     {
-      vl_api_control_ping_t *mp;
+      vl_api_control_ping_t *mp_ping;
       f64 after;
+      f64 timeout;
 
       /* Shut off async mode */
       vam->async_mode = 0;
 
-      M (CONTROL_PING, control_ping);
-      S;
+      M (CONTROL_PING, mp_ping);
+      S (mp_ping);
 
       timeout = vat_time_now (vam) + 1.0;
       while (vat_time_now (vam) < timeout)
@@ -6583,8 +6619,11 @@ api_ip_add_del_route (vat_main_t * vam)
     }
   else
     {
+      int ret;
+
       /* Wait for a reply... */
-      W;
+      W (ret);
+      return ret;
     }
 
   /* Return the good/bad news */
@@ -6596,7 +6635,6 @@ api_ip_mroute_add_del (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_ip_mroute_add_del_t *mp;
-  f64 timeout;
   u32 sw_if_index = ~0, vrf_id = 0;
   u8 is_ipv6 = 0;
   u8 is_local = 0;
@@ -6608,6 +6646,7 @@ api_ip_mroute_add_del (vat_main_t * vam)
   ip6_address_t v6_grp_address, v6_src_address;
   mfib_itf_flags_t iflags = 0;
   mfib_entry_flags_t eflags = 0;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
@@ -6676,7 +6715,7 @@ api_ip_mroute_add_del (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (IP_MROUTE_ADD_DEL, ip_mroute_add_del);
+  M (IP_MROUTE_ADD_DEL, mp);
 
   mp->next_hop_sw_if_index = ntohl (sw_if_index);
   mp->table_id = ntohl (vrf_id);
@@ -6703,12 +6742,10 @@ api_ip_mroute_add_del (vat_main_t * vam)
     }
 
   /* send it... */
-  S;
+  S (mp);
   /* Wait for a reply... */
-  W;
-
-  /* Return the good/bad news */
-  return (vam->retval);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -6716,7 +6753,6 @@ api_mpls_route_add_del (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_mpls_route_add_del_t *mp;
-  f64 timeout;
   u32 sw_if_index = ~0, table_id = 0;
   u8 create_table_if_needed = 0;
   u8 is_add = 1;
@@ -6832,7 +6868,7 @@ api_mpls_route_add_del (vat_main_t * vam)
   for (j = 0; j < count; j++)
     {
       /* Construct the API message */
-      M2 (MPLS_ROUTE_ADD_DEL, mpls_route_add_del,
+      M2 (MPLS_ROUTE_ADD_DEL, mp,
          sizeof (mpls_label_t) * vec_len (next_hop_out_label_stack));
 
       mp->mr_next_hop_sw_if_index = ntohl (sw_if_index);
@@ -6879,7 +6915,7 @@ api_mpls_route_add_del (vat_main_t * vam)
       local_label++;
 
       /* send it... */
-      S;
+      S (mp);
       /* If we receive SIGTERM, stop now... */
       if (vam->do_exit)
        break;
@@ -6888,14 +6924,15 @@ api_mpls_route_add_del (vat_main_t * vam)
   /* When testing multiple add/del ops, use a control-ping to sync */
   if (count > 1)
     {
-      vl_api_control_ping_t *mp;
+      vl_api_control_ping_t *mp_ping;
       f64 after;
+      f64 timeout;
 
       /* Shut off async mode */
       vam->async_mode = 0;
 
-      M (CONTROL_PING, control_ping);
-      S;
+      M (CONTROL_PING, mp_ping);
+      S (mp_ping);
 
       timeout = vat_time_now (vam) + 1.0;
       while (vat_time_now (vam) < timeout)
@@ -6924,8 +6961,11 @@ api_mpls_route_add_del (vat_main_t * vam)
     }
   else
     {
+      int ret;
+
       /* Wait for a reply... */
-      W;
+      W (ret);
+      return ret;
     }
 
   /* Return the good/bad news */
@@ -6937,7 +6977,6 @@ api_mpls_ip_bind_unbind (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_mpls_ip_bind_unbind_t *mp;
-  f64 timeout;
   u32 ip_table_id = 0;
   u8 create_table_if_needed = 0;
   u8 is_bind = 1;
@@ -6947,6 +6986,7 @@ api_mpls_ip_bind_unbind (vat_main_t * vam)
   u32 address_length;
   u8 address_set = 0;
   mpls_label_t local_label = MPLS_LABEL_INVALID;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
@@ -6993,7 +7033,7 @@ api_mpls_ip_bind_unbind (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (MPLS_IP_BIND_UNBIND, mpls_ip_bind_unbind);
+  M (MPLS_IP_BIND_UNBIND, mp);
 
   mp->mb_create_table_if_needed = create_table_if_needed;
   mp->mb_is_bind = is_bind;
@@ -7009,10 +7049,11 @@ api_mpls_ip_bind_unbind (vat_main_t * vam)
     clib_memcpy (mp->mb_address, &v6_address, sizeof (v6_address));
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Wait for a reply... */
-  W;
+  W (ret);
+  return ret;
 }
 
 static int
@@ -7020,11 +7061,11 @@ api_proxy_arp_add_del (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_proxy_arp_add_del_t *mp;
-  f64 timeout;
   u32 vrf_id = 0;
   u8 is_add = 1;
   ip4_address_t lo, hi;
   u8 range_set = 0;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -7048,17 +7089,16 @@ api_proxy_arp_add_del (vat_main_t * vam)
       return -99;
     }
 
-  M (PROXY_ARP_ADD_DEL, proxy_arp_add_del);
+  M (PROXY_ARP_ADD_DEL, mp);
 
   mp->vrf_id = ntohl (vrf_id);
   mp->is_add = is_add;
   clib_memcpy (mp->low_address, &lo, sizeof (mp->low_address));
   clib_memcpy (mp->hi_address, &hi, sizeof (mp->hi_address));
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -7066,10 +7106,10 @@ api_proxy_arp_intfc_enable_disable (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_proxy_arp_intfc_enable_disable_t *mp;
-  f64 timeout;
   u32 sw_if_index;
   u8 enable = 1;
   u8 sw_if_index_set = 0;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -7094,15 +7134,14 @@ api_proxy_arp_intfc_enable_disable (vat_main_t * vam)
       return -99;
     }
 
-  M (PROXY_ARP_INTFC_ENABLE_DISABLE, proxy_arp_intfc_enable_disable);
+  M (PROXY_ARP_INTFC_ENABLE_DISABLE, mp);
 
   mp->sw_if_index = ntohl (sw_if_index);
   mp->enable_disable = enable;
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -7110,7 +7149,6 @@ api_mpls_tunnel_add_del (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_mpls_tunnel_add_del_t *mp;
-  f64 timeout;
 
   u8 is_add = 1;
   u8 l2_only = 0;
@@ -7124,6 +7162,7 @@ api_mpls_tunnel_add_del (vat_main_t * vam)
   };
   ip6_address_t v6_next_hop_address = { {0} };
   mpls_label_t next_hop_out_label = MPLS_LABEL_INVALID, *labels = NULL;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -7156,8 +7195,7 @@ api_mpls_tunnel_add_del (vat_main_t * vam)
        }
     }
 
-  M2 (MPLS_TUNNEL_ADD_DEL, mpls_tunnel_add_del,
-      sizeof (mpls_label_t) * vec_len (labels));
+  M2 (MPLS_TUNNEL_ADD_DEL, mp, sizeof (mpls_label_t) * vec_len (labels));
 
   mp->mt_next_hop_sw_if_index = ntohl (next_hop_sw_if_index);
   mp->mt_sw_if_index = ntohl (sw_if_index);
@@ -7186,10 +7224,9 @@ api_mpls_tunnel_add_del (vat_main_t * vam)
                   &v6_next_hop_address, sizeof (v6_next_hop_address));
     }
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -7197,11 +7234,11 @@ api_sw_interface_set_unnumbered (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_sw_interface_set_unnumbered_t *mp;
-  f64 timeout;
   u32 sw_if_index;
   u32 unnum_sw_index = ~0;
   u8 is_add = 1;
   u8 sw_if_index_set = 0;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -7226,16 +7263,15 @@ api_sw_interface_set_unnumbered (vat_main_t * vam)
       return -99;
     }
 
-  M (SW_INTERFACE_SET_UNNUMBERED, sw_interface_set_unnumbered);
+  M (SW_INTERFACE_SET_UNNUMBERED, mp);
 
   mp->sw_if_index = ntohl (sw_if_index);
   mp->unnumbered_sw_if_index = ntohl (unnum_sw_index);
   mp->is_add = is_add;
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -7243,7 +7279,6 @@ api_ip_neighbor_add_del (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_ip_neighbor_add_del_t *mp;
-  f64 timeout;
   u32 sw_if_index;
   u8 sw_if_index_set = 0;
   u32 vrf_id = 0;
@@ -7255,6 +7290,7 @@ api_ip_neighbor_add_del (vat_main_t * vam)
   u8 v6_address_set = 0;
   ip4_address_t v4address;
   ip6_address_t v6address;
+  int ret;
 
   memset (mac_address, 0, sizeof (mac_address));
 
@@ -7304,7 +7340,7 @@ api_ip_neighbor_add_del (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (IP_NEIGHBOR_ADD_DEL, ip_neighbor_add_del);
+  M (IP_NEIGHBOR_ADD_DEL, mp);
 
   mp->sw_if_index = ntohl (sw_if_index);
   mp->is_add = is_add;
@@ -7324,13 +7360,11 @@ api_ip_neighbor_add_del (vat_main_t * vam)
     }
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Wait for a reply, return good/bad news  */
-  W;
-
-  /* NOTREACHED */
-  return 0;
+  W (ret);
+  return ret;
 }
 
 static int
@@ -7338,10 +7372,10 @@ api_reset_vrf (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_reset_vrf_t *mp;
-  f64 timeout;
   u32 vrf_id = 0;
   u8 is_ipv6 = 0;
   u8 vrf_id_set = 0;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -7362,15 +7396,14 @@ api_reset_vrf (vat_main_t * vam)
       return -99;
     }
 
-  M (RESET_VRF, reset_vrf);
+  M (RESET_VRF, mp);
 
   mp->vrf_id = ntohl (vrf_id);
   mp->is_ipv6 = is_ipv6;
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -7378,11 +7411,11 @@ api_create_vlan_subif (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_create_vlan_subif_t *mp;
-  f64 timeout;
   u32 sw_if_index;
   u8 sw_if_index_set = 0;
   u32 vlan_id;
   u8 vlan_id_set = 0;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -7411,15 +7444,14 @@ api_create_vlan_subif (vat_main_t * vam)
       errmsg ("missing vlan_id");
       return -99;
     }
-  M (CREATE_VLAN_SUBIF, create_vlan_subif);
+  M (CREATE_VLAN_SUBIF, mp);
 
   mp->sw_if_index = ntohl (sw_if_index);
   mp->vlan_id = ntohl (vlan_id);
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 #define foreach_create_subif_bit                \
@@ -7437,7 +7469,6 @@ api_create_subif (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_create_subif_t *mp;
-  f64 timeout;
   u32 sw_if_index;
   u8 sw_if_index_set = 0;
   u32 sub_id;
@@ -7453,6 +7484,7 @@ api_create_subif (vat_main_t * vam)
   u32 tmp;
   u16 outer_vlan_id = 0;
   u16 inner_vlan_id = 0;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -7489,7 +7521,7 @@ api_create_subif (vat_main_t * vam)
       errmsg ("missing sub_id");
       return -99;
     }
-  M (CREATE_SUBIF, create_subif);
+  M (CREATE_SUBIF, mp);
 
   mp->sw_if_index = ntohl (sw_if_index);
   mp->sub_id = ntohl (sub_id);
@@ -7501,10 +7533,9 @@ api_create_subif (vat_main_t * vam)
   mp->outer_vlan_id = ntohs (outer_vlan_id);
   mp->inner_vlan_id = ntohs (inner_vlan_id);
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -7512,12 +7543,12 @@ api_oam_add_del (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_oam_add_del_t *mp;
-  f64 timeout;
   u32 vrf_id = 0;
   u8 is_add = 1;
   ip4_address_t src, dst;
   u8 src_set = 0;
   u8 dst_set = 0;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -7548,17 +7579,16 @@ api_oam_add_del (vat_main_t * vam)
       return -99;
     }
 
-  M (OAM_ADD_DEL, oam_add_del);
+  M (OAM_ADD_DEL, mp);
 
   mp->vrf_id = ntohl (vrf_id);
   mp->is_add = is_add;
   clib_memcpy (mp->src_address, &src, sizeof (mp->src_address));
   clib_memcpy (mp->dst_address, &dst, sizeof (mp->dst_address));
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -7566,11 +7596,11 @@ api_reset_fib (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_reset_fib_t *mp;
-  f64 timeout;
   u32 vrf_id = 0;
   u8 is_ipv6 = 0;
   u8 vrf_id_set = 0;
 
+  int ret;
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
       if (unformat (i, "vrf %d", &vrf_id))
@@ -7590,15 +7620,14 @@ api_reset_fib (vat_main_t * vam)
       return -99;
     }
 
-  M (RESET_FIB, reset_fib);
+  M (RESET_FIB, mp);
 
   mp->vrf_id = ntohl (vrf_id);
   mp->is_ipv6 = is_ipv6;
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -7606,7 +7635,6 @@ api_dhcp_proxy_config (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_dhcp_proxy_config_t *mp;
-  f64 timeout;
   u32 vrf_id = 0;
   u8 is_add = 1;
   u8 insert_cid = 1;
@@ -7618,6 +7646,7 @@ api_dhcp_proxy_config (vat_main_t * vam)
   u8 v6_src_address_set = 0;
   ip4_address_t v4srcaddress;
   ip6_address_t v6srcaddress;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
@@ -7670,7 +7699,7 @@ api_dhcp_proxy_config (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (DHCP_PROXY_CONFIG, dhcp_proxy_config);
+  M (DHCP_PROXY_CONFIG, mp);
 
   mp->insert_circuit_id = insert_cid;
   mp->is_add = is_add;
@@ -7688,12 +7717,11 @@ api_dhcp_proxy_config (vat_main_t * vam)
     }
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Wait for a reply, return good/bad news  */
-  W;
-  /* NOTREACHED */
-  return 0;
+  W (ret);
+  return ret;
 }
 
 static int
@@ -7701,7 +7729,6 @@ api_dhcp_proxy_config_2 (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_dhcp_proxy_config_2_t *mp;
-  f64 timeout;
   u32 rx_vrf_id = 0;
   u32 server_vrf_id = 0;
   u8 is_add = 1;
@@ -7714,6 +7741,7 @@ api_dhcp_proxy_config_2 (vat_main_t * vam)
   u8 v6_src_address_set = 0;
   ip4_address_t v4srcaddress;
   ip6_address_t v6srcaddress;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
@@ -7768,7 +7796,7 @@ api_dhcp_proxy_config_2 (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (DHCP_PROXY_CONFIG_2, dhcp_proxy_config_2);
+  M (DHCP_PROXY_CONFIG_2, mp);
 
   mp->insert_circuit_id = insert_cid;
   mp->is_add = is_add;
@@ -7787,12 +7815,11 @@ api_dhcp_proxy_config_2 (vat_main_t * vam)
     }
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Wait for a reply, return good/bad news  */
-  W;
-  /* NOTREACHED */
-  return 0;
+  W (ret);
+  return ret;
 }
 
 static int
@@ -7800,7 +7827,6 @@ api_dhcp_proxy_set_vss (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_dhcp_proxy_set_vss_t *mp;
-  f64 timeout;
   u8 is_ipv6 = 0;
   u8 is_add = 1;
   u32 tbl_id;
@@ -7809,6 +7835,7 @@ api_dhcp_proxy_set_vss (vat_main_t * vam)
   u8 oui_set = 0;
   u32 fib_id;
   u8 fib_id_set = 0;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -7846,17 +7873,16 @@ api_dhcp_proxy_set_vss (vat_main_t * vam)
       return -99;
     }
 
-  M (DHCP_PROXY_SET_VSS, dhcp_proxy_set_vss);
+  M (DHCP_PROXY_SET_VSS, mp);
   mp->tbl_id = ntohl (tbl_id);
   mp->fib_id = ntohl (fib_id);
   mp->oui = ntohl (oui);
   mp->is_ipv6 = is_ipv6;
   mp->is_add = is_add;
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -7864,12 +7890,12 @@ api_dhcp_client_config (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_dhcp_client_config_t *mp;
-  f64 timeout;
   u32 sw_if_index;
   u8 sw_if_index_set = 0;
   u8 is_add = 1;
   u8 *hostname = 0;
   u8 disable_event = 0;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
@@ -7902,7 +7928,7 @@ api_dhcp_client_config (vat_main_t * vam)
   vec_add1 (hostname, 0);
 
   /* Construct the API message */
-  M (DHCP_CLIENT_CONFIG, dhcp_client_config);
+  M (DHCP_CLIENT_CONFIG, mp);
 
   mp->sw_if_index = ntohl (sw_if_index);
   clib_memcpy (mp->hostname, hostname, vec_len (hostname));
@@ -7912,12 +7938,11 @@ api_dhcp_client_config (vat_main_t * vam)
   mp->pid = getpid ();
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Wait for a reply, return good/bad news  */
-  W;
-  /* NOTREACHED */
-  return 0;
+  W (ret);
+  return ret;
 }
 
 static int
@@ -7925,7 +7950,6 @@ api_set_ip_flow_hash (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_set_ip_flow_hash_t *mp;
-  f64 timeout;
   u32 vrf_id = 0;
   u8 is_ipv6 = 0;
   u8 vrf_id_set = 0;
@@ -7935,6 +7959,7 @@ api_set_ip_flow_hash (vat_main_t * vam)
   u8 dport = 0;
   u8 proto = 0;
   u8 reverse = 0;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -7968,7 +7993,7 @@ api_set_ip_flow_hash (vat_main_t * vam)
       return -99;
     }
 
-  M (SET_IP_FLOW_HASH, set_ip_flow_hash);
+  M (SET_IP_FLOW_HASH, mp);
   mp->src = src;
   mp->dst = dst;
   mp->sport = sport;
@@ -7978,10 +8003,9 @@ api_set_ip_flow_hash (vat_main_t * vam)
   mp->vrf_id = ntohl (vrf_id);
   mp->is_ipv6 = is_ipv6;
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -7989,10 +8013,10 @@ api_sw_interface_ip6_enable_disable (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_sw_interface_ip6_enable_disable_t *mp;
-  f64 timeout;
   u32 sw_if_index;
   u8 sw_if_index_set = 0;
   u8 enable = 0;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -8017,15 +8041,14 @@ api_sw_interface_ip6_enable_disable (vat_main_t * vam)
       return -99;
     }
 
-  M (SW_INTERFACE_IP6_ENABLE_DISABLE, sw_interface_ip6_enable_disable);
+  M (SW_INTERFACE_IP6_ENABLE_DISABLE, mp);
 
   mp->sw_if_index = ntohl (sw_if_index);
   mp->enable = enable;
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -8033,11 +8056,11 @@ api_sw_interface_ip6_set_link_local_address (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_sw_interface_ip6_set_link_local_address_t *mp;
-  f64 timeout;
   u32 sw_if_index;
   u8 sw_if_index_set = 0;
   u8 v6_address_set = 0;
   ip6_address_t v6address;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
@@ -8064,20 +8087,17 @@ api_sw_interface_ip6_set_link_local_address (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (SW_INTERFACE_IP6_SET_LINK_LOCAL_ADDRESS,
-     sw_interface_ip6_set_link_local_address);
+  M (SW_INTERFACE_IP6_SET_LINK_LOCAL_ADDRESS, mp);
 
   mp->sw_if_index = ntohl (sw_if_index);
   clib_memcpy (mp->address, &v6address, sizeof (v6address));
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Wait for a reply, return good/bad news  */
-  W;
-
-  /* NOTREACHED */
-  return 0;
+  W (ret);
+  return ret;
 }
 
 
@@ -8086,7 +8106,6 @@ api_sw_interface_ip6nd_ra_prefix (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_sw_interface_ip6nd_ra_prefix_t *mp;
-  f64 timeout;
   u32 sw_if_index;
   u8 sw_if_index_set = 0;
   u32 address_length = 0;
@@ -8100,6 +8119,7 @@ api_sw_interface_ip6nd_ra_prefix (vat_main_t * vam)
   u8 is_no = 0;
   u32 val_lifetime = 0;
   u32 pref_lifetime = 0;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
@@ -8146,7 +8166,7 @@ api_sw_interface_ip6nd_ra_prefix (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (SW_INTERFACE_IP6ND_RA_PREFIX, sw_interface_ip6nd_ra_prefix);
+  M (SW_INTERFACE_IP6ND_RA_PREFIX, mp);
 
   mp->sw_if_index = ntohl (sw_if_index);
   clib_memcpy (mp->address, &v6address, sizeof (v6address));
@@ -8161,13 +8181,11 @@ api_sw_interface_ip6nd_ra_prefix (vat_main_t * vam)
   mp->pref_lifetime = ntohl (pref_lifetime);
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Wait for a reply, return good/bad news  */
-  W;
-
-  /* NOTREACHED */
-  return 0;
+  W (ret);
+  return ret;
 }
 
 static int
@@ -8175,7 +8193,6 @@ api_sw_interface_ip6nd_ra_config (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_sw_interface_ip6nd_ra_config_t *mp;
-  f64 timeout;
   u32 sw_if_index;
   u8 sw_if_index_set = 0;
   u8 suppress = 0;
@@ -8191,6 +8208,7 @@ api_sw_interface_ip6nd_ra_config (vat_main_t * vam)
   u32 lifetime = 0;
   u32 initial_count = 0;
   u32 initial_interval = 0;
+  int ret;
 
 
   /* Parse args required to build the message */
@@ -8240,7 +8258,7 @@ api_sw_interface_ip6nd_ra_config (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (SW_INTERFACE_IP6ND_RA_CONFIG, sw_interface_ip6nd_ra_config);
+  M (SW_INTERFACE_IP6ND_RA_CONFIG, mp);
 
   mp->sw_if_index = ntohl (sw_if_index);
   mp->max_interval = ntohl (max_interval);
@@ -8258,13 +8276,11 @@ api_sw_interface_ip6nd_ra_config (vat_main_t * vam)
   mp->default_router = default_router;
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Wait for a reply, return good/bad news  */
-  W;
-
-  /* NOTREACHED */
-  return 0;
+  W (ret);
+  return ret;
 }
 
 static int
@@ -8272,10 +8288,10 @@ api_set_arp_neighbor_limit (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_set_arp_neighbor_limit_t *mp;
-  f64 timeout;
   u32 arp_nbr_limit;
   u8 limit_set = 0;
   u8 is_ipv6 = 0;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -8296,15 +8312,14 @@ api_set_arp_neighbor_limit (vat_main_t * vam)
       return -99;
     }
 
-  M (SET_ARP_NEIGHBOR_LIMIT, set_arp_neighbor_limit);
+  M (SET_ARP_NEIGHBOR_LIMIT, mp);
 
   mp->arp_neighbor_limit = ntohl (arp_nbr_limit);
   mp->is_ipv6 = is_ipv6;
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -8312,12 +8327,12 @@ api_l2_patch_add_del (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_l2_patch_add_del_t *mp;
-  f64 timeout;
   u32 rx_sw_if_index;
   u8 rx_sw_if_index_set = 0;
   u32 tx_sw_if_index;
   u8 tx_sw_if_index_set = 0;
   u8 is_add = 1;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
@@ -8366,16 +8381,15 @@ api_l2_patch_add_del (vat_main_t * vam)
       return -99;
     }
 
-  M (L2_PATCH_ADD_DEL, l2_patch_add_del);
+  M (L2_PATCH_ADD_DEL, mp);
 
   mp->rx_sw_if_index = ntohl (rx_sw_if_index);
   mp->tx_sw_if_index = ntohl (tx_sw_if_index);
   mp->is_add = is_add;
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -8383,12 +8397,12 @@ api_ioam_enable (vat_main_t * vam)
 {
   unformat_input_t *input = vam->input;
   vl_api_ioam_enable_t *mp;
-  f64 timeout;
   u32 id = 0;
   int has_trace_option = 0;
   int has_pot_option = 0;
   int has_seqno_option = 0;
   int has_analyse_option = 0;
+  int ret;
 
   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
     {
@@ -8403,18 +8417,16 @@ api_ioam_enable (vat_main_t * vam)
       else
        break;
     }
-  M (IOAM_ENABLE, ioam_enable);
+  M (IOAM_ENABLE, mp);
   mp->id = htons (id);
   mp->seqno = has_seqno_option;
   mp->analyse = has_analyse_option;
   mp->pot_enable = has_pot_option;
   mp->trace_enable = has_trace_option;
 
-  S;
-  W;
-
-  return (0);
-
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 
@@ -8422,12 +8434,12 @@ static int
 api_ioam_disable (vat_main_t * vam)
 {
   vl_api_ioam_disable_t *mp;
-  f64 timeout;
+  int ret;
 
-  M (IOAM_DISABLE, ioam_disable);
-  S;
-  W;
-  return 0;
+  M (IOAM_DISABLE, mp);
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -8435,7 +8447,6 @@ api_sr_tunnel_add_del (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_sr_tunnel_add_del_t *mp;
-  f64 timeout;
   int is_del = 0;
   int pl_index;
   ip6_address_t src_address;
@@ -8453,6 +8464,7 @@ api_sr_tunnel_add_del (vat_main_t * vam)
   ip6_address_t next_address, tag;
   u8 *name = 0;
   u8 *policy_name = 0;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -8533,7 +8545,7 @@ api_sr_tunnel_add_del (vat_main_t * vam)
       return -99;
     }
 
-  M2 (SR_TUNNEL_ADD_DEL, sr_tunnel_add_del,
+  M2 (SR_TUNNEL_ADD_DEL, mp,
       vec_len (segments) * sizeof (ip6_address_t)
       + vec_len (tags) * sizeof (ip6_address_t));
 
@@ -8558,9 +8570,9 @@ api_sr_tunnel_add_del (vat_main_t * vam)
   vec_free (segments);
   vec_free (tags);
 
-  S;
-  W;
-  /* NOTREACHED */
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -8568,7 +8580,6 @@ api_sr_policy_add_del (vat_main_t * vam)
 {
   unformat_input_t *input = vam->input;
   vl_api_sr_policy_add_del_t *mp;
-  f64 timeout;
   int is_del = 0;
   u8 *name = 0;
   u8 *tunnel_name = 0;
@@ -8579,6 +8590,7 @@ api_sr_policy_add_del (vat_main_t * vam)
   int j = 0;
   int tunnel_names_length = 1; // Init to 1 to offset the #tunnel_names counter byte
   int tun_name_len = 0;                // Different naming convention used as confusing these would be "bad" (TM)
+  int ret;
 
   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
     {
@@ -8616,7 +8628,7 @@ api_sr_policy_add_del (vat_main_t * vam)
       return -99;
     }
 
-  M2 (SR_POLICY_ADD_DEL, sr_policy_add_del, tunnel_names_length);
+  M2 (SR_POLICY_ADD_DEL, mp, tunnel_names_length);
 
 
 
@@ -8642,9 +8654,9 @@ api_sr_policy_add_del (vat_main_t * vam)
   vec_free (tunnel_names);
   vec_free (tunnel_name);
 
-  S;
-  W;
-  /* NOTREACHED */
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -8652,11 +8664,11 @@ api_sr_multicast_map_add_del (vat_main_t * vam)
 {
   unformat_input_t *input = vam->input;
   vl_api_sr_multicast_map_add_del_t *mp;
-  f64 timeout;
   int is_del = 0;
   ip6_address_t multicast_address;
   u8 *policy_name = 0;
   int multicast_address_set = 0;
+  int ret;
 
   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
     {
@@ -8685,7 +8697,7 @@ api_sr_multicast_map_add_del (vat_main_t * vam)
       return -99;
     }
 
-  M (SR_MULTICAST_MAP_ADD_DEL, sr_multicast_map_add_del);
+  M (SR_MULTICAST_MAP_ADD_DEL, mp);
 
   mp->is_add = !is_del;
   memcpy (mp->policy_name, policy_name, vec_len (policy_name));
@@ -8695,9 +8707,9 @@ api_sr_multicast_map_add_del (vat_main_t * vam)
 
   vec_free (policy_name);
 
-  S;
-  W;
-  /* NOTREACHED */
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 
@@ -9325,9 +9337,9 @@ api_classify_add_del_table (vat_main_t * vam)
   u32 miss_next_index = ~0;
   u32 memory_size = 32 << 20;
   u8 *mask = 0;
-  f64 timeout;
   u32 current_data_flag = 0;
   int current_data_offset = 0;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -9394,7 +9406,7 @@ api_classify_add_del_table (vat_main_t * vam)
       return -99;
     }
 
-  M2 (CLASSIFY_ADD_DEL_TABLE, classify_add_del_table, vec_len (mask));
+  M2 (CLASSIFY_ADD_DEL_TABLE, mp, vec_len (mask));
 
   mp->is_add = is_add;
   mp->del_chain = del_chain;
@@ -9411,9 +9423,9 @@ api_classify_add_del_table (vat_main_t * vam)
 
   vec_free (mask);
 
-  S;
-  W;
-  /* NOTREACHED */
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 uword
@@ -9863,11 +9875,11 @@ api_classify_add_del_session (vat_main_t * vam)
   u32 opaque_index = ~0;
   u8 *match = 0;
   i32 advance = 0;
-  f64 timeout;
   u32 skip_n_vectors = 0;
   u32 match_n_vectors = 0;
   u32 action = 0;
   u32 metadata = 0;
+  int ret;
 
   /*
    * Warning: you have to supply skip_n and match_n
@@ -9929,7 +9941,7 @@ api_classify_add_del_session (vat_main_t * vam)
       return -99;
     }
 
-  M2 (CLASSIFY_ADD_DEL_SESSION, classify_add_del_session, vec_len (match));
+  M2 (CLASSIFY_ADD_DEL_SESSION, mp, vec_len (match));
 
   mp->is_add = is_add;
   mp->table_index = ntohl (table_index);
@@ -9941,9 +9953,9 @@ api_classify_add_del_session (vat_main_t * vam)
   clib_memcpy (mp->match, match, vec_len (match));
   vec_free (match);
 
-  S;
-  W;
-  /* NOTREACHED */
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -9951,11 +9963,11 @@ api_classify_set_interface_ip_table (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_classify_set_interface_ip_table_t *mp;
-  f64 timeout;
   u32 sw_if_index;
   int sw_if_index_set;
   u32 table_index = ~0;
   u8 is_ipv6 = 0;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -9979,16 +9991,15 @@ api_classify_set_interface_ip_table (vat_main_t * vam)
     }
 
 
-  M (CLASSIFY_SET_INTERFACE_IP_TABLE, classify_set_interface_ip_table);
+  M (CLASSIFY_SET_INTERFACE_IP_TABLE, mp);
 
   mp->sw_if_index = ntohl (sw_if_index);
   mp->table_index = ntohl (table_index);
   mp->is_ipv6 = is_ipv6;
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -9996,13 +10007,13 @@ api_classify_set_interface_l2_tables (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_classify_set_interface_l2_tables_t *mp;
-  f64 timeout;
   u32 sw_if_index;
   int sw_if_index_set;
   u32 ip4_table_index = ~0;
   u32 ip6_table_index = ~0;
   u32 other_table_index = ~0;
   u32 is_input = 1;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -10032,7 +10043,7 @@ api_classify_set_interface_l2_tables (vat_main_t * vam)
     }
 
 
-  M (CLASSIFY_SET_INTERFACE_L2_TABLES, classify_set_interface_l2_tables);
+  M (CLASSIFY_SET_INTERFACE_L2_TABLES, mp);
 
   mp->sw_if_index = ntohl (sw_if_index);
   mp->ip4_table_index = ntohl (ip4_table_index);
@@ -10040,10 +10051,9 @@ api_classify_set_interface_l2_tables (vat_main_t * vam)
   mp->other_table_index = ntohl (other_table_index);
   mp->is_input = (u8) is_input;
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -10060,7 +10070,7 @@ api_set_ipfix_exporter (vat_main_t * vam)
   u32 path_mtu = ~0;
   u32 template_interval = ~0;
   u8 udp_checksum = 0;
-  f64 timeout;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -10096,7 +10106,7 @@ api_set_ipfix_exporter (vat_main_t * vam)
       return -99;
     }
 
-  M (SET_IPFIX_EXPORTER, set_ipfix_exporter);
+  M (SET_IPFIX_EXPORTER, mp);
 
   memcpy (mp->collector_address, collector_address.data,
          sizeof (collector_address.data));
@@ -10107,9 +10117,9 @@ api_set_ipfix_exporter (vat_main_t * vam)
   mp->template_interval = htonl (template_interval);
   mp->udp_checksum = udp_checksum;
 
-  S;
-  W;
-  /* NOTREACHED */
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -10119,7 +10129,7 @@ api_set_ipfix_classify_stream (vat_main_t * vam)
   vl_api_set_ipfix_classify_stream_t *mp;
   u32 domain_id = 0;
   u32 src_port = UDP_DST_PORT_ipfix;
-  f64 timeout;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -10134,14 +10144,14 @@ api_set_ipfix_classify_stream (vat_main_t * vam)
        }
     }
 
-  M (SET_IPFIX_CLASSIFY_STREAM, set_ipfix_classify_stream);
+  M (SET_IPFIX_CLASSIFY_STREAM, mp);
 
   mp->domain_id = htonl (domain_id);
   mp->src_port = htons ((u16) src_port);
 
-  S;
-  W;
-  /* NOTREACHED */
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -10153,7 +10163,7 @@ api_ipfix_classify_table_add_del (vat_main_t * vam)
   u32 classify_table_index = ~0;
   u8 ip_version = 0;
   u8 transport_protocol = 255;
-  f64 timeout;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -10194,16 +10204,16 @@ api_ipfix_classify_table_add_del (vat_main_t * vam)
       return -99;
     }
 
-  M (IPFIX_CLASSIFY_TABLE_ADD_DEL, ipfix_classify_table_add_del);
+  M (IPFIX_CLASSIFY_TABLE_ADD_DEL, mp);
 
   mp->is_add = is_add;
   mp->table_id = htonl (classify_table_index);
   mp->ip_version = ip_version;
   mp->transport_protocol = transport_protocol;
 
-  S;
-  W;
-  /* NOTREACHED */
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -10211,8 +10221,8 @@ api_get_node_index (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_get_node_index_t *mp;
-  f64 timeout;
   u8 *name = 0;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -10232,14 +10242,13 @@ api_get_node_index (vat_main_t * vam)
       return -99;
     }
 
-  M (GET_NODE_INDEX, get_node_index);
+  M (GET_NODE_INDEX, mp);
   clib_memcpy (mp->node_name, name, vec_len (name));
   vec_free (name);
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -10247,8 +10256,8 @@ api_get_next_index (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_get_next_index_t *mp;
-  f64 timeout;
   u8 *node_name = 0, *next_node_name = 0;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -10280,16 +10289,15 @@ api_get_next_index (vat_main_t * vam)
       return -99;
     }
 
-  M (GET_NEXT_INDEX, get_next_index);
+  M (GET_NEXT_INDEX, mp);
   clib_memcpy (mp->node_name, node_name, vec_len (node_name));
   clib_memcpy (mp->next_name, next_node_name, vec_len (next_node_name));
   vec_free (node_name);
   vec_free (next_node_name);
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -10297,9 +10305,9 @@ api_add_node_next (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_add_node_next_t *mp;
-  f64 timeout;
   u8 *name = 0;
   u8 *next = 0;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -10331,16 +10339,15 @@ api_add_node_next (vat_main_t * vam)
       return -99;
     }
 
-  M (ADD_NODE_NEXT, add_node_next);
+  M (ADD_NODE_NEXT, mp);
   clib_memcpy (mp->node_name, name, vec_len (name));
   clib_memcpy (mp->next_name, next, vec_len (next));
   vec_free (name);
   vec_free (next);
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -10356,7 +10363,7 @@ api_l2tpv3_create_tunnel (vat_main_t * vam)
   u64 remote_cookie = 0;
   u8 l2_sublayer_present = 0;
   vl_api_l2tpv3_create_tunnel_t *mp;
-  f64 timeout;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -10392,7 +10399,7 @@ api_l2tpv3_create_tunnel (vat_main_t * vam)
       return -99;
     }
 
-  M (L2TPV3_CREATE_TUNNEL, l2tpv3_create_tunnel);
+  M (L2TPV3_CREATE_TUNNEL, mp);
 
   clib_memcpy (mp->client_address, client_address.as_u8,
               sizeof (mp->client_address));
@@ -10406,10 +10413,9 @@ api_l2tpv3_create_tunnel (vat_main_t * vam)
   mp->l2_sublayer_present = l2_sublayer_present;
   mp->is_ipv6 = 1;
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -10421,7 +10427,7 @@ api_l2tpv3_set_tunnel_cookies (vat_main_t * vam)
   u64 new_local_cookie = 0;
   u64 new_remote_cookie = 0;
   vl_api_l2tpv3_set_tunnel_cookies_t *mp;
-  f64 timeout;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -10443,16 +10449,15 @@ api_l2tpv3_set_tunnel_cookies (vat_main_t * vam)
       return -99;
     }
 
-  M (L2TPV3_SET_TUNNEL_COOKIES, l2tpv3_set_tunnel_cookies);
+  M (L2TPV3_SET_TUNNEL_COOKIES, mp);
 
   mp->sw_if_index = ntohl (sw_if_index);
   mp->new_local_cookie = clib_host_to_net_u64 (new_local_cookie);
   mp->new_remote_cookie = clib_host_to_net_u64 (new_remote_cookie);
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -10460,10 +10465,10 @@ api_l2tpv3_interface_enable_disable (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_l2tpv3_interface_enable_disable_t *mp;
-  f64 timeout;
   u32 sw_if_index;
   u8 sw_if_index_set = 0;
   u8 enable_disable = 1;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -10485,15 +10490,14 @@ api_l2tpv3_interface_enable_disable (vat_main_t * vam)
       return -99;
     }
 
-  M (L2TPV3_INTERFACE_ENABLE_DISABLE, l2tpv3_interface_enable_disable);
+  M (L2TPV3_INTERFACE_ENABLE_DISABLE, mp);
 
   mp->sw_if_index = ntohl (sw_if_index);
   mp->enable_disable = enable_disable;
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -10501,8 +10505,8 @@ api_l2tpv3_set_lookup_key (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_l2tpv3_set_lookup_key_t *mp;
-  f64 timeout;
   u8 key = ~0;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -10522,14 +10526,13 @@ api_l2tpv3_set_lookup_key (vat_main_t * vam)
       return -99;
     }
 
-  M (L2TPV3_SET_LOOKUP_KEY, l2tpv3_set_lookup_key);
+  M (L2TPV3_SET_LOOKUP_KEY, mp);
 
   mp->key = key;
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static void vl_api_sw_if_l2tpv3_tunnel_details_t_handler
@@ -10599,19 +10602,19 @@ static int
 api_sw_if_l2tpv3_tunnel_dump (vat_main_t * vam)
 {
   vl_api_sw_if_l2tpv3_tunnel_dump_t *mp;
-  f64 timeout;
+  vl_api_control_ping_t *mp_ping;
+  int ret;
 
   /* Get list of l2tpv3-tunnel interfaces */
-  M (SW_IF_L2TPV3_TUNNEL_DUMP, sw_if_l2tpv3_tunnel_dump);
-  S;
+  M (SW_IF_L2TPV3_TUNNEL_DUMP, mp);
+  S (mp);
 
   /* Use a control ping for synchronization */
-  {
-    vl_api_control_ping_t *mp;
-    M (CONTROL_PING, control_ping);
-    S;
-  }
-  W;
+  M (CONTROL_PING, mp_ping);
+  S (mp_ping);
+
+  W (ret);
+  return ret;
 }
 
 
@@ -10646,20 +10649,20 @@ static int
 api_sw_interface_tap_dump (vat_main_t * vam)
 {
   vl_api_sw_interface_tap_dump_t *mp;
-  f64 timeout;
+  vl_api_control_ping_t *mp_ping;
+  int ret;
 
   print (vam->ofp, "\n%-16s %s", "dev_name", "sw_if_index");
   /* Get list of tap interfaces */
-  M (SW_INTERFACE_TAP_DUMP, sw_interface_tap_dump);
-  S;
+  M (SW_INTERFACE_TAP_DUMP, mp);
+  S (mp);
 
   /* Use a control ping for synchronization */
-  {
-    vl_api_control_ping_t *mp;
-    M (CONTROL_PING, control_ping);
-    S;
-  }
-  W;
+  M (CONTROL_PING, mp_ping);
+  S (mp_ping);
+
+  W (ret);
+  return ret;
 }
 
 static uword unformat_vxlan_decap_next
@@ -10682,7 +10685,6 @@ api_vxlan_add_del_tunnel (vat_main_t * vam)
 {
   unformat_input_t *line_input = vam->input;
   vl_api_vxlan_add_del_tunnel_t *mp;
-  f64 timeout;
   ip46_address_t src, dst;
   u8 is_add = 1;
   u8 ipv4_set = 0, ipv6_set = 0;
@@ -10693,6 +10695,7 @@ api_vxlan_add_del_tunnel (vat_main_t * vam)
   u32 encap_vrf_id = 0;
   u32 decap_next_index = ~0;
   u32 vni = 0;
+  int ret;
 
   /* Can't "universally zero init" (={0}) due to GCC bug 53119 */
   memset (&src, 0, sizeof src);
@@ -10809,7 +10812,7 @@ api_vxlan_add_del_tunnel (vat_main_t * vam)
       return -99;
     }
 
-  M (VXLAN_ADD_DEL_TUNNEL, vxlan_add_del_tunnel);
+  M (VXLAN_ADD_DEL_TUNNEL, mp);
 
   if (ipv6_set)
     {
@@ -10828,10 +10831,9 @@ api_vxlan_add_del_tunnel (vat_main_t * vam)
   mp->is_add = is_add;
   mp->is_ipv6 = ipv6_set;
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static void vl_api_vxlan_tunnel_details_t_handler
@@ -10899,9 +10901,10 @@ api_vxlan_tunnel_dump (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_vxlan_tunnel_dump_t *mp;
-  f64 timeout;
+  vl_api_control_ping_t *mp_ping;
   u32 sw_if_index;
   u8 sw_if_index_set = 0;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
@@ -10925,19 +10928,18 @@ api_vxlan_tunnel_dump (vat_main_t * vam)
     }
 
   /* Get list of vxlan-tunnel interfaces */
-  M (VXLAN_TUNNEL_DUMP, vxlan_tunnel_dump);
+  M (VXLAN_TUNNEL_DUMP, mp);
 
   mp->sw_if_index = htonl (sw_if_index);
 
-  S;
+  S (mp);
 
   /* Use a control ping for synchronization */
-  {
-    vl_api_control_ping_t *mp;
-    M (CONTROL_PING, control_ping);
-    S;
-  }
-  W;
+  M (CONTROL_PING, mp_ping);
+  S (mp_ping);
+
+  W (ret);
+  return ret;
 }
 
 static int
@@ -10945,13 +10947,13 @@ api_gre_add_del_tunnel (vat_main_t * vam)
 {
   unformat_input_t *line_input = vam->input;
   vl_api_gre_add_del_tunnel_t *mp;
-  f64 timeout;
   ip4_address_t src4, dst4;
   u8 is_add = 1;
   u8 teb = 0;
   u8 src_set = 0;
   u8 dst_set = 0;
   u32 outer_fib_id = 0;
+  int ret;
 
   while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT)
     {
@@ -10984,7 +10986,7 @@ api_gre_add_del_tunnel (vat_main_t * vam)
     }
 
 
-  M (GRE_ADD_DEL_TUNNEL, gre_add_del_tunnel);
+  M (GRE_ADD_DEL_TUNNEL, mp);
 
   clib_memcpy (&mp->src_address, &src4, sizeof (src4));
   clib_memcpy (&mp->dst_address, &dst4, sizeof (dst4));
@@ -10992,10 +10994,9 @@ api_gre_add_del_tunnel (vat_main_t * vam)
   mp->is_add = is_add;
   mp->teb = teb;
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static void vl_api_gre_tunnel_details_t_handler
@@ -11039,9 +11040,10 @@ api_gre_tunnel_dump (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_gre_tunnel_dump_t *mp;
-  f64 timeout;
+  vl_api_control_ping_t *mp_ping;
   u32 sw_if_index;
   u8 sw_if_index_set = 0;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
@@ -11065,19 +11067,18 @@ api_gre_tunnel_dump (vat_main_t * vam)
     }
 
   /* Get list of gre-tunnel interfaces */
-  M (GRE_TUNNEL_DUMP, gre_tunnel_dump);
+  M (GRE_TUNNEL_DUMP, mp);
 
   mp->sw_if_index = htonl (sw_if_index);
 
-  S;
+  S (mp);
 
   /* Use a control ping for synchronization */
-  {
-    vl_api_control_ping_t *mp;
-    M (CONTROL_PING, control_ping);
-    S;
-  }
-  W;
+  M (CONTROL_PING, mp_ping);
+  S (mp_ping);
+
+  W (ret);
+  return ret;
 }
 
 static int
@@ -11085,14 +11086,13 @@ api_l2_fib_clear_table (vat_main_t * vam)
 {
 //  unformat_input_t * i = vam->input;
   vl_api_l2_fib_clear_table_t *mp;
-  f64 timeout;
+  int ret;
 
-  M (L2_FIB_CLEAR_TABLE, l2_fib_clear_table);
+  M (L2_FIB_CLEAR_TABLE, mp);
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -11100,10 +11100,10 @@ api_l2_interface_efp_filter (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_l2_interface_efp_filter_t *mp;
-  f64 timeout;
   u32 sw_if_index;
   u8 enable = 1;
   u8 sw_if_index_set = 0;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -11128,15 +11128,14 @@ api_l2_interface_efp_filter (vat_main_t * vam)
       return -99;
     }
 
-  M (L2_INTERFACE_EFP_FILTER, l2_interface_efp_filter);
+  M (L2_INTERFACE_EFP_FILTER, mp);
 
   mp->sw_if_index = ntohl (sw_if_index);
   mp->enable_disable = enable;
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 #define foreach_vtr_op                          \
@@ -11155,7 +11154,6 @@ api_l2_interface_vlan_tag_rewrite (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_l2_interface_vlan_tag_rewrite_t *mp;
-  f64 timeout;
   u32 sw_if_index;
   u8 sw_if_index_set = 0;
   u8 vtr_op_set = 0;
@@ -11163,6 +11161,7 @@ api_l2_interface_vlan_tag_rewrite (vat_main_t * vam)
   u32 push_dot1q = 1;
   u32 tag1 = ~0;
   u32 tag2 = ~0;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -11194,17 +11193,16 @@ api_l2_interface_vlan_tag_rewrite (vat_main_t * vam)
       return -99;
     }
 
-  M (L2_INTERFACE_VLAN_TAG_REWRITE, l2_interface_vlan_tag_rewrite)
-    mp->sw_if_index = ntohl (sw_if_index);
+  M (L2_INTERFACE_VLAN_TAG_REWRITE, mp);
+  mp->sw_if_index = ntohl (sw_if_index);
   mp->vtr_op = ntohl (vtr_op);
   mp->push_dot1q = ntohl (push_dot1q);
   mp->tag1 = ntohl (tag1);
   mp->tag2 = ntohl (tag2);
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -11212,7 +11210,6 @@ api_create_vhost_user_if (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_create_vhost_user_if_t *mp;
-  f64 timeout;
   u8 *file_name;
   u8 is_server = 0;
   u8 file_name_set = 0;
@@ -11220,6 +11217,7 @@ api_create_vhost_user_if (vat_main_t * vam)
   u8 hwaddr[6];
   u8 use_custom_mac = 0;
   u8 *tag = 0;
+  int ret;
 
   /* Shut up coverity */
   memset (hwaddr, 0, sizeof (hwaddr));
@@ -11255,7 +11253,7 @@ api_create_vhost_user_if (vat_main_t * vam)
     }
   vec_add1 (file_name, 0);
 
-  M (CREATE_VHOST_USER_IF, create_vhost_user_if);
+  M (CREATE_VHOST_USER_IF, mp);
 
   mp->is_server = is_server;
   clib_memcpy (mp->sock_filename, file_name, vec_len (file_name));
@@ -11271,10 +11269,9 @@ api_create_vhost_user_if (vat_main_t * vam)
     strncpy ((char *) mp->tag, (char *) tag, ARRAY_LEN (mp->tag) - 1);
   vec_free (tag);
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -11282,13 +11279,13 @@ api_modify_vhost_user_if (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_modify_vhost_user_if_t *mp;
-  f64 timeout;
   u8 *file_name;
   u8 is_server = 0;
   u8 file_name_set = 0;
   u32 custom_dev_instance = ~0;
   u8 sw_if_index_set = 0;
   u32 sw_if_index = (u32) ~ 0;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -11327,7 +11324,7 @@ api_modify_vhost_user_if (vat_main_t * vam)
     }
   vec_add1 (file_name, 0);
 
-  M (MODIFY_VHOST_USER_IF, modify_vhost_user_if);
+  M (MODIFY_VHOST_USER_IF, mp);
 
   mp->sw_if_index = ntohl (sw_if_index);
   mp->is_server = is_server;
@@ -11339,10 +11336,9 @@ api_modify_vhost_user_if (vat_main_t * vam)
       mp->custom_dev_instance = ntohl (custom_dev_instance);
     }
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -11350,9 +11346,9 @@ api_delete_vhost_user_if (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_delete_vhost_user_if_t *mp;
-  f64 timeout;
   u32 sw_if_index = ~0;
   u8 sw_if_index_set = 0;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -11371,14 +11367,13 @@ api_delete_vhost_user_if (vat_main_t * vam)
     }
 
 
-  M (DELETE_VHOST_USER_IF, delete_vhost_user_if);
+  M (DELETE_VHOST_USER_IF, mp);
 
   mp->sw_if_index = ntohl (sw_if_index);
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static void vl_api_sw_interface_vhost_user_details_t_handler
@@ -11425,35 +11420,34 @@ static int
 api_sw_interface_vhost_user_dump (vat_main_t * vam)
 {
   vl_api_sw_interface_vhost_user_dump_t *mp;
-  f64 timeout;
+  vl_api_control_ping_t *mp_ping;
+  int ret;
   print (vam->ofp,
         "Interface name           idx hdr_sz features server regions filename");
 
   /* Get list of vhost-user interfaces */
-  M (SW_INTERFACE_VHOST_USER_DUMP, sw_interface_vhost_user_dump);
-  S;
+  M (SW_INTERFACE_VHOST_USER_DUMP, mp);
+  S (mp);
 
   /* Use a control ping for synchronization */
-  {
-    vl_api_control_ping_t *mp;
-    M (CONTROL_PING, control_ping);
-    S;
-  }
-  W;
+  M (CONTROL_PING, mp_ping);
+  S (mp_ping);
+
+  W (ret);
+  return ret;
 }
 
 static int
 api_show_version (vat_main_t * vam)
 {
   vl_api_show_version_t *mp;
-  f64 timeout;
+  int ret;
 
-  M (SHOW_VERSION, show_version);
+  M (SHOW_VERSION, mp);
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 
@@ -11462,7 +11456,6 @@ api_vxlan_gpe_add_del_tunnel (vat_main_t * vam)
 {
   unformat_input_t *line_input = vam->input;
   vl_api_vxlan_gpe_add_del_tunnel_t *mp;
-  f64 timeout;
   ip4_address_t local4, remote4;
   ip6_address_t local6, remote6;
   u8 is_add = 1;
@@ -11474,6 +11467,7 @@ api_vxlan_gpe_add_del_tunnel (vat_main_t * vam)
   u8 protocol = ~0;
   u32 vni;
   u8 vni_set = 0;
+  int ret;
 
   while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT)
     {
@@ -11546,7 +11540,7 @@ api_vxlan_gpe_add_del_tunnel (vat_main_t * vam)
       return -99;
     }
 
-  M (VXLAN_GPE_ADD_DEL_TUNNEL, vxlan_gpe_add_del_tunnel);
+  M (VXLAN_GPE_ADD_DEL_TUNNEL, mp);
 
 
   if (ipv6_set)
@@ -11567,10 +11561,9 @@ api_vxlan_gpe_add_del_tunnel (vat_main_t * vam)
   mp->is_add = is_add;
   mp->is_ipv6 = ipv6_set;
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static void vl_api_vxlan_gpe_tunnel_details_t_handler
@@ -11630,9 +11623,10 @@ api_vxlan_gpe_tunnel_dump (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_vxlan_gpe_tunnel_dump_t *mp;
-  f64 timeout;
+  vl_api_control_ping_t *mp_ping;
   u32 sw_if_index;
   u8 sw_if_index_set = 0;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
@@ -11656,19 +11650,18 @@ api_vxlan_gpe_tunnel_dump (vat_main_t * vam)
     }
 
   /* Get list of vxlan-tunnel interfaces */
-  M (VXLAN_GPE_TUNNEL_DUMP, vxlan_gpe_tunnel_dump);
+  M (VXLAN_GPE_TUNNEL_DUMP, mp);
 
   mp->sw_if_index = htonl (sw_if_index);
 
-  S;
+  S (mp);
 
   /* Use a control ping for synchronization */
-  {
-    vl_api_control_ping_t *mp;
-    M (CONTROL_PING, control_ping);
-    S;
-  }
-  W;
+  M (CONTROL_PING, mp_ping);
+  S (mp_ping);
+
+  W (ret);
+  return ret;
 }
 
 u8 *
@@ -11719,9 +11712,10 @@ api_l2_fib_table_dump (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_l2_fib_table_dump_t *mp;
-  f64 timeout;
+  vl_api_control_ping_t *mp_ping;
   u32 bd_id;
   u8 bd_id_set = 0;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
@@ -11741,18 +11735,17 @@ api_l2_fib_table_dump (vat_main_t * vam)
   print (vam->ofp, "BD-ID     Mac Address      sw-ndx  Static  Filter  BVI");
 
   /* Get list of l2 fib entries */
-  M (L2_FIB_TABLE_DUMP, l2_fib_table_dump);
+  M (L2_FIB_TABLE_DUMP, mp);
 
   mp->bd_id = ntohl (bd_id);
-  S;
+  S (mp);
 
   /* Use a control ping for synchronization */
-  {
-    vl_api_control_ping_t *mp;
-    M (CONTROL_PING, control_ping);
-    S;
-  }
-  W;
+  M (CONTROL_PING, mp_ping);
+  S (mp_ping);
+
+  W (ret);
+  return ret;
 }
 
 
@@ -11762,8 +11755,8 @@ api_interface_name_renumber (vat_main_t * vam)
   unformat_input_t *line_input = vam->input;
   vl_api_interface_name_renumber_t *mp;
   u32 sw_if_index = ~0;
-  f64 timeout;
   u32 new_show_dev_instance = ~0;
+  int ret;
 
   while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT)
     {
@@ -11791,13 +11784,14 @@ api_interface_name_renumber (vat_main_t * vam)
       return -99;
     }
 
-  M (INTERFACE_NAME_RENUMBER, interface_name_renumber);
+  M (INTERFACE_NAME_RENUMBER, mp);
 
   mp->sw_if_index = ntohl (sw_if_index);
   mp->new_show_dev_instance = ntohl (new_show_dev_instance);
 
-  S;
-  W;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -11805,10 +11799,10 @@ api_want_ip4_arp_events (vat_main_t * vam)
 {
   unformat_input_t *line_input = vam->input;
   vl_api_want_ip4_arp_events_t *mp;
-  f64 timeout;
   ip4_address_t address;
   int address_set = 0;
   u32 enable_disable = 1;
+  int ret;
 
   while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT)
     {
@@ -11826,13 +11820,14 @@ api_want_ip4_arp_events (vat_main_t * vam)
       return -99;
     }
 
-  M (WANT_IP4_ARP_EVENTS, want_ip4_arp_events);
+  M (WANT_IP4_ARP_EVENTS, mp);
   mp->enable_disable = enable_disable;
   mp->pid = getpid ();
   mp->address = address.as_u32;
 
-  S;
-  W;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -11840,10 +11835,10 @@ api_want_ip6_nd_events (vat_main_t * vam)
 {
   unformat_input_t *line_input = vam->input;
   vl_api_want_ip6_nd_events_t *mp;
-  f64 timeout;
   ip6_address_t address;
   int address_set = 0;
   u32 enable_disable = 1;
+  int ret;
 
   while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT)
     {
@@ -11861,13 +11856,14 @@ api_want_ip6_nd_events (vat_main_t * vam)
       return -99;
     }
 
-  M (WANT_IP6_ND_EVENTS, want_ip6_nd_events);
+  M (WANT_IP6_ND_EVENTS, mp);
   mp->enable_disable = enable_disable;
   mp->pid = getpid ();
   clib_memcpy (mp->address, &address, sizeof (ip6_address_t));
 
-  S;
-  W;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -11875,13 +11871,13 @@ api_input_acl_set_interface (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_input_acl_set_interface_t *mp;
-  f64 timeout;
   u32 sw_if_index;
   int sw_if_index_set;
   u32 ip4_table_index = ~0;
   u32 ip6_table_index = ~0;
   u32 l2_table_index = ~0;
   u8 is_add = 1;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -11910,7 +11906,7 @@ api_input_acl_set_interface (vat_main_t * vam)
       return -99;
     }
 
-  M (INPUT_ACL_SET_INTERFACE, input_acl_set_interface);
+  M (INPUT_ACL_SET_INTERFACE, mp);
 
   mp->sw_if_index = ntohl (sw_if_index);
   mp->ip4_table_index = ntohl (ip4_table_index);
@@ -11918,10 +11914,9 @@ api_input_acl_set_interface (vat_main_t * vam)
   mp->l2_table_index = ntohl (l2_table_index);
   mp->is_add = is_add;
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -11929,11 +11924,12 @@ api_ip_address_dump (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_ip_address_dump_t *mp;
+  vl_api_control_ping_t *mp_ping;
   u32 sw_if_index = ~0;
   u8 sw_if_index_set = 0;
   u8 ipv4_set = 0;
   u8 ipv6_set = 0;
-  f64 timeout;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -11971,30 +11967,30 @@ api_ip_address_dump (vat_main_t * vam)
   vam->current_sw_if_index = sw_if_index;
   vam->is_ipv6 = ipv6_set;
 
-  M (IP_ADDRESS_DUMP, ip_address_dump);
+  M (IP_ADDRESS_DUMP, mp);
   mp->sw_if_index = ntohl (sw_if_index);
   mp->is_ipv6 = ipv6_set;
-  S;
+  S (mp);
 
   /* Use a control ping for synchronization */
-  {
-    vl_api_control_ping_t *mp;
-    M (CONTROL_PING, control_ping);
-    S;
-  }
-  W;
+  M (CONTROL_PING, mp_ping);
+  S (mp_ping);
+
+  W (ret);
+  return ret;
 }
 
 static int
 api_ip_dump (vat_main_t * vam)
 {
   vl_api_ip_dump_t *mp;
+  vl_api_control_ping_t *mp_ping;
   unformat_input_t *in = vam->input;
   int ipv4_set = 0;
   int ipv6_set = 0;
   int is_ipv6;
-  f64 timeout;
   int i;
+  int ret;
 
   while (unformat_check_input (in) != UNFORMAT_END_OF_INPUT)
     {
@@ -12028,17 +12024,16 @@ api_ip_dump (vat_main_t * vam)
     }
   vec_free (vam->ip_details_by_sw_if_index[is_ipv6]);
 
-  M (IP_DUMP, ip_dump);
+  M (IP_DUMP, mp);
   mp->is_ipv6 = ipv6_set;
-  S;
+  S (mp);
 
   /* Use a control ping for synchronization */
-  {
-    vl_api_control_ping_t *mp;
-    M (CONTROL_PING, control_ping);
-    S;
-  }
-  W;
+  M (CONTROL_PING, mp_ping);
+  S (mp_ping);
+
+  W (ret);
+  return ret;
 }
 
 static int
@@ -12046,9 +12041,9 @@ api_ipsec_spd_add_del (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_ipsec_spd_add_del_t *mp;
-  f64 timeout;
   u32 spd_id = ~0;
   u8 is_add = 1;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -12068,15 +12063,14 @@ api_ipsec_spd_add_del (vat_main_t * vam)
       return -99;
     }
 
-  M (IPSEC_SPD_ADD_DEL, ipsec_spd_add_del);
+  M (IPSEC_SPD_ADD_DEL, mp);
 
   mp->spd_id = ntohl (spd_id);
   mp->is_add = is_add;
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -12084,11 +12078,11 @@ api_ipsec_interface_add_del_spd (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_ipsec_interface_add_del_spd_t *mp;
-  f64 timeout;
   u32 sw_if_index;
   u8 sw_if_index_set = 0;
   u32 spd_id = (u32) ~ 0;
   u8 is_add = 1;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -12121,16 +12115,15 @@ api_ipsec_interface_add_del_spd (vat_main_t * vam)
       return -99;
     }
 
-  M (IPSEC_INTERFACE_ADD_DEL_SPD, ipsec_interface_add_del_spd);
+  M (IPSEC_INTERFACE_ADD_DEL_SPD, mp);
 
   mp->spd_id = ntohl (spd_id);
   mp->sw_if_index = ntohl (sw_if_index);
   mp->is_add = is_add;
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -12138,7 +12131,6 @@ api_ipsec_spd_add_del_entry (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_ipsec_spd_add_del_entry_t *mp;
-  f64 timeout;
   u8 is_add = 1, is_outbound = 0, is_ipv6 = 0, is_ip_any = 1;
   u32 spd_id = 0, sa_id = 0, protocol = 0, policy = 0;
   i32 priority = 0;
@@ -12146,6 +12138,7 @@ api_ipsec_spd_add_del_entry (vat_main_t * vam)
   u32 lport_start = 0, lport_stop = (u32) ~ 0;
   ip4_address_t laddr4_start, laddr4_stop, raddr4_start, raddr4_stop;
   ip6_address_t laddr6_start, laddr6_stop, raddr6_start, raddr6_stop;
+  int ret;
 
   laddr4_start.as_u32 = raddr4_start.as_u32 = 0;
   laddr4_stop.as_u32 = raddr4_stop.as_u32 = (u32) ~ 0;
@@ -12247,7 +12240,7 @@ api_ipsec_spd_add_del_entry (vat_main_t * vam)
 
     }
 
-  M (IPSEC_SPD_ADD_DEL_ENTRY, ipsec_spd_add_del_entry);
+  M (IPSEC_SPD_ADD_DEL_ENTRY, mp);
 
   mp->spd_id = ntohl (spd_id);
   mp->priority = ntohl (priority);
@@ -12285,10 +12278,9 @@ api_ipsec_spd_add_del_entry (vat_main_t * vam)
   mp->sa_id = ntohl (sa_id);
   mp->is_add = is_add;
   mp->is_ip_any = is_ip_any;
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -12296,7 +12288,6 @@ api_ipsec_sad_add_del_entry (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_ipsec_sad_add_del_entry_t *mp;
-  f64 timeout;
   u32 sad_id = 0, spi = 0;
   u8 *ck = 0, *ik = 0;
   u8 is_add = 1;
@@ -12308,6 +12299,7 @@ api_ipsec_sad_add_del_entry (vat_main_t * vam)
   ip4_address_t tun_dst4;
   ip6_address_t tun_src6;
   ip6_address_t tun_dst6;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -12375,7 +12367,7 @@ api_ipsec_sad_add_del_entry (vat_main_t * vam)
 
     }
 
-  M (IPSEC_SAD_ADD_DEL_ENTRY, ipsec_sad_add_del_entry);
+  M (IPSEC_SAD_ADD_DEL_ENTRY, mp);
 
   mp->sad_id = ntohl (sad_id);
   mp->is_add = is_add;
@@ -12417,10 +12409,9 @@ api_ipsec_sad_add_del_entry (vat_main_t * vam)
        }
     }
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -12428,9 +12419,9 @@ api_ipsec_sa_set_key (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_ipsec_sa_set_key_t *mp;
-  f64 timeout;
   u32 sa_id;
   u8 *ck = 0, *ik = 0;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -12447,7 +12438,7 @@ api_ipsec_sa_set_key (vat_main_t * vam)
        }
     }
 
-  M (IPSEC_SA_SET_KEY, ipsec_set_sa_key);
+  M (IPSEC_SA_SET_KEY, mp);
 
   mp->sa_id = ntohl (sa_id);
   mp->crypto_key_length = vec_len (ck);
@@ -12464,10 +12455,9 @@ api_ipsec_sa_set_key (vat_main_t * vam)
   if (ik)
     clib_memcpy (mp->integrity_key, ik, mp->integrity_key_length);
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -12475,9 +12465,9 @@ api_ikev2_profile_add_del (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_ikev2_profile_add_del_t *mp;
-  f64 timeout;
   u8 is_add = 1;
   u8 *name = 0;
+  int ret;
 
   const char *valid_chars = "a-zA-Z0-9_";
 
@@ -12506,16 +12496,15 @@ api_ikev2_profile_add_del (vat_main_t * vam)
       return -99;
     }
 
-  M (IKEV2_PROFILE_ADD_DEL, ikev2_profile_add_del);
+  M (IKEV2_PROFILE_ADD_DEL, mp);
 
   clib_memcpy (mp->name, name, vec_len (name));
   mp->is_add = is_add;
   vec_free (name);
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -12523,11 +12512,11 @@ api_ikev2_profile_set_auth (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_ikev2_profile_set_auth_t *mp;
-  f64 timeout;
   u8 *name = 0;
   u8 *data = 0;
   u32 auth_method = 0;
   u8 is_hex = 0;
+  int ret;
 
   const char *valid_chars = "a-zA-Z0-9_";
 
@@ -12573,7 +12562,7 @@ api_ikev2_profile_set_auth (vat_main_t * vam)
       return -99;
     }
 
-  M (IKEV2_PROFILE_SET_AUTH, ikev2_profile_set_auth);
+  M (IKEV2_PROFILE_SET_AUTH, mp);
 
   mp->is_hex = is_hex;
   mp->auth_method = (u8) auth_method;
@@ -12583,10 +12572,9 @@ api_ikev2_profile_set_auth (vat_main_t * vam)
   vec_free (name);
   vec_free (data);
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -12594,12 +12582,12 @@ api_ikev2_profile_set_id (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_ikev2_profile_set_id_t *mp;
-  f64 timeout;
   u8 *name = 0;
   u8 *data = 0;
   u8 is_local = 0;
   u32 id_type = 0;
   ip4_address_t ip4;
+  int ret;
 
   const char *valid_chars = "a-zA-Z0-9_";
 
@@ -12653,7 +12641,7 @@ api_ikev2_profile_set_id (vat_main_t * vam)
       return -99;
     }
 
-  M (IKEV2_PROFILE_SET_ID, ikev2_profile_set_id);
+  M (IKEV2_PROFILE_SET_ID, mp);
 
   mp->is_local = is_local;
   mp->id_type = (u8) id_type;
@@ -12663,10 +12651,9 @@ api_ikev2_profile_set_id (vat_main_t * vam)
   vec_free (name);
   vec_free (data);
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -12674,13 +12661,13 @@ api_ikev2_profile_set_ts (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_ikev2_profile_set_ts_t *mp;
-  f64 timeout;
   u8 *name = 0;
   u8 is_local = 0;
   u32 proto = 0, start_port = 0, end_port = (u32) ~ 0;
   ip4_address_t start_addr, end_addr;
 
   const char *valid_chars = "a-zA-Z0-9_";
+  int ret;
 
   start_addr.as_u32 = 0;
   end_addr.as_u32 = (u32) ~ 0;
@@ -12723,7 +12710,7 @@ api_ikev2_profile_set_ts (vat_main_t * vam)
       return -99;
     }
 
-  M (IKEV2_PROFILE_SET_TS, ikev2_profile_set_ts);
+  M (IKEV2_PROFILE_SET_TS, mp);
 
   mp->is_local = is_local;
   mp->proto = (u8) proto;
@@ -12734,10 +12721,9 @@ api_ikev2_profile_set_ts (vat_main_t * vam)
   clib_memcpy (mp->name, name, vec_len (name));
   vec_free (name);
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -12745,8 +12731,8 @@ api_ikev2_set_local_key (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_ikev2_set_local_key_t *mp;
-  f64 timeout;
   u8 *file = 0;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -12771,15 +12757,344 @@ api_ikev2_set_local_key (vat_main_t * vam)
       return -99;
     }
 
-  M (IKEV2_SET_LOCAL_KEY, ikev2_set_local_key);
+  M (IKEV2_SET_LOCAL_KEY, mp);
 
   clib_memcpy (mp->key_file, file, vec_len (file));
   vec_free (file);
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
+}
+
+static int
+api_ikev2_set_responder (vat_main_t * vam)
+{
+  unformat_input_t *i = vam->input;
+  vl_api_ikev2_set_responder_t *mp;
+  int ret;
+  u8 *name = 0;
+  u32 sw_if_index = ~0;
+  ip4_address_t address;
+
+  const char *valid_chars = "a-zA-Z0-9_";
+
+  while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
+    {
+      if (unformat
+         (i, "%U interface %d address %U", unformat_token, valid_chars,
+          &name, &sw_if_index, unformat_ip4_address, &address))
+       vec_add1 (name, 0);
+      else
+       {
+         errmsg ("parse error '%U'", format_unformat_error, i);
+         return -99;
+       }
+    }
+
+  if (!vec_len (name))
+    {
+      errmsg ("profile name must be specified");
+      return -99;
+    }
+
+  if (vec_len (name) > 64)
+    {
+      errmsg ("profile name too long");
+      return -99;
+    }
+
+  M (IKEV2_SET_RESPONDER, mp);
+
+  clib_memcpy (mp->name, name, vec_len (name));
+  vec_free (name);
+
+  mp->sw_if_index = sw_if_index;
+  clib_memcpy (mp->address, &address, sizeof (address));
+
+  S (mp);
+  W (ret);
+  return ret;
+}
+
+static int
+api_ikev2_set_ike_transforms (vat_main_t * vam)
+{
+  unformat_input_t *i = vam->input;
+  vl_api_ikev2_set_ike_transforms_t *mp;
+  int ret;
+  u8 *name = 0;
+  u32 crypto_alg, crypto_key_size, integ_alg, dh_group;
+
+  const char *valid_chars = "a-zA-Z0-9_";
+
+  while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
+    {
+      if (unformat (i, "%U %d %d %d %d", unformat_token, valid_chars, &name,
+                   &crypto_alg, &crypto_key_size, &integ_alg, &dh_group))
+       vec_add1 (name, 0);
+      else
+       {
+         errmsg ("parse error '%U'", format_unformat_error, i);
+         return -99;
+       }
+    }
+
+  if (!vec_len (name))
+    {
+      errmsg ("profile name must be specified");
+      return -99;
+    }
+
+  if (vec_len (name) > 64)
+    {
+      errmsg ("profile name too long");
+      return -99;
+    }
+
+  M (IKEV2_SET_IKE_TRANSFORMS, mp);
+
+  clib_memcpy (mp->name, name, vec_len (name));
+  vec_free (name);
+  mp->crypto_alg = crypto_alg;
+  mp->crypto_key_size = crypto_key_size;
+  mp->integ_alg = integ_alg;
+  mp->dh_group = dh_group;
+
+  S (mp);
+  W (ret);
+  return ret;
+}
+
+
+static int
+api_ikev2_set_esp_transforms (vat_main_t * vam)
+{
+  unformat_input_t *i = vam->input;
+  vl_api_ikev2_set_esp_transforms_t *mp;
+  int ret;
+  u8 *name = 0;
+  u32 crypto_alg, crypto_key_size, integ_alg, dh_group;
+
+  const char *valid_chars = "a-zA-Z0-9_";
+
+  while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
+    {
+      if (unformat (i, "%U %d %d %d %d", unformat_token, valid_chars, &name,
+                   &crypto_alg, &crypto_key_size, &integ_alg, &dh_group))
+       vec_add1 (name, 0);
+      else
+       {
+         errmsg ("parse error '%U'", format_unformat_error, i);
+         return -99;
+       }
+    }
+
+  if (!vec_len (name))
+    {
+      errmsg ("profile name must be specified");
+      return -99;
+    }
+
+  if (vec_len (name) > 64)
+    {
+      errmsg ("profile name too long");
+      return -99;
+    }
+
+  M (IKEV2_SET_ESP_TRANSFORMS, mp);
+
+  clib_memcpy (mp->name, name, vec_len (name));
+  vec_free (name);
+  mp->crypto_alg = crypto_alg;
+  mp->crypto_key_size = crypto_key_size;
+  mp->integ_alg = integ_alg;
+  mp->dh_group = dh_group;
+
+  S (mp);
+  W (ret);
+  return ret;
+}
+
+static int
+api_ikev2_set_sa_lifetime (vat_main_t * vam)
+{
+  unformat_input_t *i = vam->input;
+  vl_api_ikev2_set_sa_lifetime_t *mp;
+  int ret;
+  u8 *name = 0;
+  u64 lifetime, lifetime_maxdata;
+  u32 lifetime_jitter, handover;
+
+  const char *valid_chars = "a-zA-Z0-9_";
+
+  while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
+    {
+      if (unformat (i, "%U %lu %u %u %lu", unformat_token, valid_chars, &name,
+                   &lifetime, &lifetime_jitter, &handover,
+                   &lifetime_maxdata))
+       vec_add1 (name, 0);
+      else
+       {
+         errmsg ("parse error '%U'", format_unformat_error, i);
+         return -99;
+       }
+    }
+
+  if (!vec_len (name))
+    {
+      errmsg ("profile name must be specified");
+      return -99;
+    }
+
+  if (vec_len (name) > 64)
+    {
+      errmsg ("profile name too long");
+      return -99;
+    }
+
+  M (IKEV2_SET_SA_LIFETIME, mp);
+
+  clib_memcpy (mp->name, name, vec_len (name));
+  vec_free (name);
+  mp->lifetime = lifetime;
+  mp->lifetime_jitter = lifetime_jitter;
+  mp->handover = handover;
+  mp->lifetime_maxdata = lifetime_maxdata;
+
+  S (mp);
+  W (ret);
+  return ret;
+}
+
+static int
+api_ikev2_initiate_sa_init (vat_main_t * vam)
+{
+  unformat_input_t *i = vam->input;
+  vl_api_ikev2_initiate_sa_init_t *mp;
+  int ret;
+  u8 *name = 0;
+
+  const char *valid_chars = "a-zA-Z0-9_";
+
+  while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
+    {
+      if (unformat (i, "%U", unformat_token, valid_chars, &name))
+       vec_add1 (name, 0);
+      else
+       {
+         errmsg ("parse error '%U'", format_unformat_error, i);
+         return -99;
+       }
+    }
+
+  if (!vec_len (name))
+    {
+      errmsg ("profile name must be specified");
+      return -99;
+    }
+
+  if (vec_len (name) > 64)
+    {
+      errmsg ("profile name too long");
+      return -99;
+    }
+
+  M (IKEV2_INITIATE_SA_INIT, mp);
+
+  clib_memcpy (mp->name, name, vec_len (name));
+  vec_free (name);
+
+  S (mp);
+  W (ret);
+  return ret;
+}
+
+static int
+api_ikev2_initiate_del_ike_sa (vat_main_t * vam)
+{
+  unformat_input_t *i = vam->input;
+  vl_api_ikev2_initiate_del_ike_sa_t *mp;
+  int ret;
+  u64 ispi;
+
+
+  while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
+    {
+      if (unformat (i, "%lx", &ispi))
+       ;
+      else
+       {
+         errmsg ("parse error '%U'", format_unformat_error, i);
+         return -99;
+       }
+    }
+
+  M (IKEV2_INITIATE_DEL_IKE_SA, mp);
+
+  mp->ispi = ispi;
+
+  S (mp);
+  W (ret);
+  return ret;
+}
+
+static int
+api_ikev2_initiate_del_child_sa (vat_main_t * vam)
+{
+  unformat_input_t *i = vam->input;
+  vl_api_ikev2_initiate_del_child_sa_t *mp;
+  int ret;
+  u32 ispi;
+
+
+  while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
+    {
+      if (unformat (i, "%x", &ispi))
+       ;
+      else
+       {
+         errmsg ("parse error '%U'", format_unformat_error, i);
+         return -99;
+       }
+    }
+
+  M (IKEV2_INITIATE_DEL_CHILD_SA, mp);
+
+  mp->ispi = ispi;
+
+  S (mp);
+  W (ret);
+  return ret;
+}
+
+static int
+api_ikev2_initiate_rekey_child_sa (vat_main_t * vam)
+{
+  unformat_input_t *i = vam->input;
+  vl_api_ikev2_initiate_rekey_child_sa_t *mp;
+  int ret;
+  u32 ispi;
+
+
+  while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
+    {
+      if (unformat (i, "%x", &ispi))
+       ;
+      else
+       {
+         errmsg ("parse error '%U'", format_unformat_error, i);
+         return -99;
+       }
+    }
+
+  M (IKEV2_INITIATE_REKEY_CHILD_SA, mp);
+
+  mp->ispi = ispi;
+
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 /*
@@ -12790,7 +13105,6 @@ api_map_add_domain (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_map_add_domain_t *mp;
-  f64 timeout;
 
   ip4_address_t ip4_prefix;
   ip6_address_t ip6_prefix;
@@ -12801,6 +13115,7 @@ api_map_add_domain (vat_main_t * vam)
   u8 is_translation = 0;
   u32 mtu = 0;
   u32 ip6_src_len = 128;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -12841,7 +13156,7 @@ api_map_add_domain (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (MAP_ADD_DOMAIN, map_add_domain);
+  M (MAP_ADD_DOMAIN, mp);
 
   clib_memcpy (mp->ip4_prefix, &ip4_prefix, sizeof (ip4_prefix));
   mp->ip4_prefix_len = ip4_prefix_len;
@@ -12859,10 +13174,11 @@ api_map_add_domain (vat_main_t * vam)
   mp->mtu = htons (mtu);
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Wait for a reply, return good/bad news  */
-  W;
+  W (ret);
+  return ret;
 }
 
 static int
@@ -12870,10 +13186,10 @@ api_map_del_domain (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_map_del_domain_t *mp;
-  f64 timeout;
 
   u32 num_m_args = 0;
   u32 index;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -12893,15 +13209,16 @@ api_map_del_domain (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (MAP_DEL_DOMAIN, map_del_domain);
+  M (MAP_DEL_DOMAIN, mp);
 
   mp->index = ntohl (index);
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Wait for a reply, return good/bad news  */
-  W;
+  W (ret);
+  return ret;
 }
 
 static int
@@ -12909,10 +13226,10 @@ api_map_add_del_rule (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_map_add_del_rule_t *mp;
-  f64 timeout;
   u8 is_add = 1;
   ip6_address_t ip6_dst;
   u32 num_m_args = 0, index, psid = 0;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -12934,7 +13251,7 @@ api_map_add_del_rule (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (MAP_ADD_DEL_RULE, map_add_del_rule);
+  M (MAP_ADD_DEL_RULE, mp);
 
   mp->index = ntohl (index);
   mp->is_add = is_add;
@@ -12942,31 +13259,32 @@ api_map_add_del_rule (vat_main_t * vam)
   mp->psid = ntohs (psid);
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Wait for a reply, return good/bad news  */
-  W;
+  W (ret);
+  return ret;
 }
 
 static int
 api_map_domain_dump (vat_main_t * vam)
 {
   vl_api_map_domain_dump_t *mp;
-  f64 timeout;
+  vl_api_control_ping_t *mp_ping;
+  int ret;
 
   /* Construct the API message */
-  M (MAP_DOMAIN_DUMP, map_domain_dump);
+  M (MAP_DOMAIN_DUMP, mp);
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Use a control ping for synchronization */
-  {
-    vl_api_control_ping_t *mp;
-    M (CONTROL_PING, control_ping);
-    S;
-  }
-  W;
+  M (CONTROL_PING, mp_ping);
+  S (mp_ping);
+
+  W (ret);
+  return ret;
 }
 
 static int
@@ -12974,8 +13292,9 @@ api_map_rule_dump (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_map_rule_dump_t *mp;
-  f64 timeout;
+  vl_api_control_ping_t *mp_ping;
   u32 domain_index = ~0;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -12992,20 +13311,19 @@ api_map_rule_dump (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (MAP_RULE_DUMP, map_rule_dump);
+  M (MAP_RULE_DUMP, mp);
 
   mp->domain_index = htonl (domain_index);
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Use a control ping for synchronization */
-  {
-    vl_api_control_ping_t *mp;
-    M (CONTROL_PING, control_ping);
-    S;
-  }
-  W;
+  M (CONTROL_PING, mp_ping);
+  S (mp_ping);
+
+  W (ret);
+  return ret;
 }
 
 static void vl_api_map_add_domain_reply_t_handler
@@ -13046,10 +13364,10 @@ static int
 api_get_first_msg_id (vat_main_t * vam)
 {
   vl_api_get_first_msg_id_t *mp;
-  f64 timeout;
   unformat_input_t *i = vam->input;
   u8 *name;
   u8 name_set = 0;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -13072,12 +13390,11 @@ api_get_first_msg_id (vat_main_t * vam)
       return -99;
     }
 
-  M (GET_FIRST_MSG_ID, get_first_msg_id);
+  M (GET_FIRST_MSG_ID, mp);
   clib_memcpy (mp->name, name, vec_len (name));
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -13085,9 +13402,9 @@ api_cop_interface_enable_disable (vat_main_t * vam)
 {
   unformat_input_t *line_input = vam->input;
   vl_api_cop_interface_enable_disable_t *mp;
-  f64 timeout;
   u32 sw_if_index = ~0;
   u8 enable_disable = 1;
+  int ret;
 
   while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT)
     {
@@ -13111,14 +13428,15 @@ api_cop_interface_enable_disable (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (COP_INTERFACE_ENABLE_DISABLE, cop_interface_enable_disable);
+  M (COP_INTERFACE_ENABLE_DISABLE, mp);
   mp->sw_if_index = ntohl (sw_if_index);
   mp->enable_disable = enable_disable;
 
   /* send it... */
-  S;
+  S (mp);
   /* Wait for the reply */
-  W;
+  W (ret);
+  return ret;
 }
 
 static int
@@ -13126,10 +13444,10 @@ api_cop_whitelist_enable_disable (vat_main_t * vam)
 {
   unformat_input_t *line_input = vam->input;
   vl_api_cop_whitelist_enable_disable_t *mp;
-  f64 timeout;
   u32 sw_if_index = ~0;
   u8 ip4 = 0, ip6 = 0, default_cop = 0;
   u32 fib_id = 0;
+  int ret;
 
   while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT)
     {
@@ -13157,7 +13475,7 @@ api_cop_whitelist_enable_disable (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (COP_WHITELIST_ENABLE_DISABLE, cop_whitelist_enable_disable);
+  M (COP_WHITELIST_ENABLE_DISABLE, mp);
   mp->sw_if_index = ntohl (sw_if_index);
   mp->fib_id = ntohl (fib_id);
   mp->ip4 = ip4;
@@ -13165,23 +13483,25 @@ api_cop_whitelist_enable_disable (vat_main_t * vam)
   mp->default_cop = default_cop;
 
   /* send it... */
-  S;
+  S (mp);
   /* Wait for the reply */
-  W;
+  W (ret);
+  return ret;
 }
 
 static int
 api_get_node_graph (vat_main_t * vam)
 {
   vl_api_get_node_graph_t *mp;
-  f64 timeout;
+  int ret;
 
-  M (GET_NODE_GRAPH, get_node_graph);
+  M (GET_NODE_GRAPH, mp);
 
   /* send it... */
-  S;
+  S (mp);
   /* Wait for the reply */
-  W;
+  W (ret);
+  return ret;
 }
 
 /* *INDENT-OFF* */
@@ -13246,29 +13566,19 @@ lisp_eid_put_vat (u8 * dst, u8 eid[16], u8 type)
   clib_memcpy (dst, eid, lisp_eid_size_vat (type));
 }
 
-/* *INDENT-OFF* */
-/** Used for transferring locators via VPP API */
-typedef CLIB_PACKED(struct
-{
-  u32 sw_if_index; /**< locator sw_if_index */
-  u8 priority; /**< locator priority */
-  u8 weight;   /**< locator weight */
-}) ls_locator_t;
-/* *INDENT-ON* */
-
 static int
 api_lisp_add_del_locator_set (vat_main_t * vam)
 {
   unformat_input_t *input = vam->input;
   vl_api_lisp_add_del_locator_set_t *mp;
-  f64 timeout = ~0;
   u8 is_add = 1;
   u8 *locator_set_name = NULL;
   u8 locator_set_name_set = 0;
-  ls_locator_t locator, *locators = 0;
+  vl_api_local_locator_t locator, *locators = 0;
   u32 sw_if_index, priority, weight;
   u32 data_len = 0;
 
+  int ret;
   /* Parse args required to build the message */
   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
     {
@@ -13318,10 +13628,10 @@ api_lisp_add_del_locator_set (vat_main_t * vam)
     }
   vec_add1 (locator_set_name, 0);
 
-  data_len = sizeof (ls_locator_t) * vec_len (locators);
+  data_len = sizeof (vl_api_local_locator_t) * vec_len (locators);
 
   /* Construct the API message */
-  M2 (LISP_ADD_DEL_LOCATOR_SET, lisp_add_del_locator_set, data_len);
+  M2 (LISP_ADD_DEL_LOCATOR_SET, mp, data_len);
 
   mp->is_add = is_add;
   clib_memcpy (mp->locator_set_name, locator_set_name,
@@ -13334,13 +13644,11 @@ api_lisp_add_del_locator_set (vat_main_t * vam)
   vec_free (locators);
 
   /* send it... */
-  S;
-
-  /* Wait for a reply... */
-  W;
-
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+
+  /* Wait for a reply... */
+  W (ret);
+  return ret;
 }
 
 static int
@@ -13348,7 +13656,6 @@ api_lisp_add_del_locator (vat_main_t * vam)
 {
   unformat_input_t *input = vam->input;
   vl_api_lisp_add_del_locator_t *mp;
-  f64 timeout = ~0;
   u32 tmp_if_index = ~0;
   u32 sw_if_index = ~0;
   u8 sw_if_index_set = 0;
@@ -13360,6 +13667,7 @@ api_lisp_add_del_locator (vat_main_t * vam)
   u8 is_add = 1;
   u8 *locator_set_name = NULL;
   u8 locator_set_name_set = 0;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
@@ -13438,7 +13746,7 @@ api_lisp_add_del_locator (vat_main_t * vam)
   vec_add1 (locator_set_name, 0);
 
   /* Construct the API message */
-  M (LISP_ADD_DEL_LOCATOR, lisp_add_del_locator);
+  M (LISP_ADD_DEL_LOCATOR, mp);
 
   mp->is_add = is_add;
   mp->sw_if_index = ntohl (sw_if_index);
@@ -13449,13 +13757,11 @@ api_lisp_add_del_locator (vat_main_t * vam)
   vec_free (locator_set_name);
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Wait for a reply... */
-  W;
-
-  /* NOTREACHED */
-  return 0;
+  W (ret);
+  return ret;
 }
 
 uword
@@ -13488,7 +13794,6 @@ api_lisp_add_del_local_eid (vat_main_t * vam)
 {
   unformat_input_t *input = vam->input;
   vl_api_lisp_add_del_local_eid_t *mp;
-  f64 timeout = ~0;
   u8 is_add = 1;
   u8 eid_set = 0;
   lisp_eid_vat_t _eid, *eid = &_eid;
@@ -13497,6 +13802,7 @@ api_lisp_add_del_local_eid (vat_main_t * vam)
   u32 vni = 0;
   u16 key_id = 0;
   u8 *key = 0;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
@@ -13560,7 +13866,7 @@ api_lisp_add_del_local_eid (vat_main_t * vam)
   vec_add1 (locator_set_name, 0);
 
   /* Construct the API message */
-  M (LISP_ADD_DEL_LOCAL_EID, lisp_add_del_local_eid);
+  M (LISP_ADD_DEL_LOCAL_EID, mp);
 
   mp->is_add = is_add;
   lisp_eid_put_vat (mp->eid, eid->addr, eid->type);
@@ -13576,13 +13882,11 @@ api_lisp_add_del_local_eid (vat_main_t * vam)
   vec_free (key);
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Wait for a reply... */
-  W;
-
-  /* NOTREACHED */
-  return 0;
+  W (ret);
+  return ret;
 }
 
 /* *INDENT-OFF* */
@@ -13602,7 +13906,6 @@ api_lisp_gpe_add_del_fwd_entry (vat_main_t * vam)
   u32 dp_table = 0, vni = 0;;
   unformat_input_t *input = vam->input;
   vl_api_lisp_gpe_add_del_fwd_entry_t *mp;
-  f64 timeout = ~0;
   u8 is_add = 1;
   lisp_eid_vat_t _rmt_eid, *rmt_eid = &_rmt_eid;
   lisp_eid_vat_t _lcl_eid, *lcl_eid = &_lcl_eid;
@@ -13612,6 +13915,7 @@ api_lisp_gpe_add_del_fwd_entry (vat_main_t * vam)
   ip6_address_t rmt_rloc6, lcl_rloc6;
   vl_api_lisp_gpe_locator_t *rmt_locs = 0, *lcl_locs = 0, rloc, *curr_rloc =
     0;
+  int ret;
 
   memset (&rloc, 0, sizeof (rloc));
 
@@ -13702,7 +14006,7 @@ api_lisp_gpe_add_del_fwd_entry (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M2 (LISP_GPE_ADD_DEL_FWD_ENTRY, lisp_gpe_add_del_fwd_entry,
+  M2 (LISP_GPE_ADD_DEL_FWD_ENTRY, mp,
       sizeof (vl_api_lisp_gpe_locator_t) * vec_len (rmt_locs) * 2);
 
   mp->is_add = is_add;
@@ -13729,13 +14033,11 @@ api_lisp_gpe_add_del_fwd_entry (vat_main_t * vam)
   vec_free (rmt_locs);
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Wait for a reply... */
-  W;
-
-  /* NOTREACHED */
-  return 0;
+  W (ret);
+  return ret;
 }
 
 static int
@@ -13743,12 +14045,12 @@ api_lisp_add_del_map_server (vat_main_t * vam)
 {
   unformat_input_t *input = vam->input;
   vl_api_lisp_add_del_map_server_t *mp;
-  f64 timeout = ~0;
   u8 is_add = 1;
   u8 ipv4_set = 0;
   u8 ipv6_set = 0;
   ip4_address_t ipv4;
   ip6_address_t ipv6;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
@@ -13782,7 +14084,7 @@ api_lisp_add_del_map_server (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (LISP_ADD_DEL_MAP_SERVER, lisp_add_del_map_server);
+  M (LISP_ADD_DEL_MAP_SERVER, mp);
 
   mp->is_add = is_add;
   if (ipv6_set)
@@ -13797,13 +14099,11 @@ api_lisp_add_del_map_server (vat_main_t * vam)
     }
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Wait for a reply... */
-  W;
-
-  /* NOTREACHED */
-  return 0;
+  W (ret);
+  return ret;
 }
 
 static int
@@ -13811,12 +14111,12 @@ api_lisp_add_del_map_resolver (vat_main_t * vam)
 {
   unformat_input_t *input = vam->input;
   vl_api_lisp_add_del_map_resolver_t *mp;
-  f64 timeout = ~0;
   u8 is_add = 1;
   u8 ipv4_set = 0;
   u8 ipv6_set = 0;
   ip4_address_t ipv4;
   ip6_address_t ipv6;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
@@ -13850,7 +14150,7 @@ api_lisp_add_del_map_resolver (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (LISP_ADD_DEL_MAP_RESOLVER, lisp_add_del_map_resolver);
+  M (LISP_ADD_DEL_MAP_RESOLVER, mp);
 
   mp->is_add = is_add;
   if (ipv6_set)
@@ -13865,13 +14165,11 @@ api_lisp_add_del_map_resolver (vat_main_t * vam)
     }
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Wait for a reply... */
-  W;
-
-  /* NOTREACHED */
-  return 0;
+  W (ret);
+  return ret;
 }
 
 static int
@@ -13879,9 +14177,9 @@ api_lisp_gpe_enable_disable (vat_main_t * vam)
 {
   unformat_input_t *input = vam->input;
   vl_api_lisp_gpe_enable_disable_t *mp;
-  f64 timeout = ~0;
   u8 is_set = 0;
   u8 is_en = 1;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
@@ -13907,18 +14205,16 @@ api_lisp_gpe_enable_disable (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (LISP_GPE_ENABLE_DISABLE, lisp_gpe_enable_disable);
+  M (LISP_GPE_ENABLE_DISABLE, mp);
 
   mp->is_en = is_en;
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Wait for a reply... */
-  W;
-
-  /* NOTREACHED */
-  return 0;
+  W (ret);
+  return ret;
 }
 
 static int
@@ -13926,9 +14222,9 @@ api_lisp_rloc_probe_enable_disable (vat_main_t * vam)
 {
   unformat_input_t *input = vam->input;
   vl_api_lisp_rloc_probe_enable_disable_t *mp;
-  f64 timeout = ~0;
   u8 is_set = 0;
   u8 is_en = 0;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
@@ -13951,18 +14247,16 @@ api_lisp_rloc_probe_enable_disable (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (LISP_RLOC_PROBE_ENABLE_DISABLE, lisp_rloc_probe_enable_disable);
+  M (LISP_RLOC_PROBE_ENABLE_DISABLE, mp);
 
   mp->is_enabled = is_en;
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Wait for a reply... */
-  W;
-
-  /* NOTREACHED */
-  return 0;
+  W (ret);
+  return ret;
 }
 
 static int
@@ -13970,9 +14264,9 @@ api_lisp_map_register_enable_disable (vat_main_t * vam)
 {
   unformat_input_t *input = vam->input;
   vl_api_lisp_map_register_enable_disable_t *mp;
-  f64 timeout = ~0;
   u8 is_set = 0;
   u8 is_en = 0;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
@@ -13995,18 +14289,16 @@ api_lisp_map_register_enable_disable (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (LISP_MAP_REGISTER_ENABLE_DISABLE, lisp_map_register_enable_disable);
+  M (LISP_MAP_REGISTER_ENABLE_DISABLE, mp);
 
   mp->is_enabled = is_en;
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Wait for a reply... */
-  W;
-
-  /* NOTREACHED */
-  return 0;
+  W (ret);
+  return ret;
 }
 
 static int
@@ -14014,9 +14306,9 @@ api_lisp_enable_disable (vat_main_t * vam)
 {
   unformat_input_t *input = vam->input;
   vl_api_lisp_enable_disable_t *mp;
-  f64 timeout = ~0;
   u8 is_set = 0;
   u8 is_en = 0;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
@@ -14041,78 +14333,73 @@ api_lisp_enable_disable (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (LISP_ENABLE_DISABLE, lisp_enable_disable);
+  M (LISP_ENABLE_DISABLE, mp);
 
   mp->is_en = is_en;
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Wait for a reply... */
-  W;
-
-  /* NOTREACHED */
-  return 0;
+  W (ret);
+  return ret;
 }
 
 static int
 api_show_lisp_map_register_state (vat_main_t * vam)
 {
-  f64 timeout = ~0;
   vl_api_show_lisp_map_register_state_t *mp;
+  int ret;
 
-  M (SHOW_LISP_MAP_REGISTER_STATE, show_lisp_map_register_state);
+  M (SHOW_LISP_MAP_REGISTER_STATE, mp);
 
   /* send */
-  S;
+  S (mp);
 
   /* wait for reply */
-  W;
-
-  return 0;
+  W (ret);
+  return ret;
 }
 
 static int
 api_show_lisp_rloc_probe_state (vat_main_t * vam)
 {
-  f64 timeout = ~0;
   vl_api_show_lisp_rloc_probe_state_t *mp;
+  int ret;
 
-  M (SHOW_LISP_RLOC_PROBE_STATE, show_lisp_rloc_probe_state);
+  M (SHOW_LISP_RLOC_PROBE_STATE, mp);
 
   /* send */
-  S;
+  S (mp);
 
   /* wait for reply */
-  W;
-
-  return 0;
+  W (ret);
+  return ret;
 }
 
 static int
 api_show_lisp_map_request_mode (vat_main_t * vam)
 {
-  f64 timeout = ~0;
   vl_api_show_lisp_map_request_mode_t *mp;
+  int ret;
 
-  M (SHOW_LISP_MAP_REQUEST_MODE, show_lisp_map_request_mode);
+  M (SHOW_LISP_MAP_REQUEST_MODE, mp);
 
   /* send */
-  S;
+  S (mp);
 
   /* wait for reply */
-  W;
-
-  return 0;
+  W (ret);
+  return ret;
 }
 
 static int
 api_lisp_map_request_mode (vat_main_t * vam)
 {
-  f64 timeout = ~0;
   unformat_input_t *input = vam->input;
   vl_api_lisp_map_request_mode_t *mp;
   u8 mode = 0;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
@@ -14128,18 +14415,16 @@ api_lisp_map_request_mode (vat_main_t * vam)
        }
     }
 
-  M (LISP_MAP_REQUEST_MODE, lisp_map_request_mode);
+  M (LISP_MAP_REQUEST_MODE, mp);
 
   mp->mode = mode;
 
   /* send */
-  S;
+  S (mp);
 
   /* wait for reply */
-  W;
-
-  /* notreached */
-  return 0;
+  W (ret);
+  return ret;
 }
 
 /**
@@ -14151,12 +14436,12 @@ api_lisp_map_request_mode (vat_main_t * vam)
 static int
 api_lisp_pitr_set_locator_set (vat_main_t * vam)
 {
-  f64 timeout = ~0;
   u8 ls_name_set = 0;
   unformat_input_t *input = vam->input;
   vl_api_lisp_pitr_set_locator_set_t *mp;
   u8 is_add = 1;
   u8 *ls_name = 0;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
@@ -14178,42 +14463,38 @@ api_lisp_pitr_set_locator_set (vat_main_t * vam)
       return -99;
     }
 
-  M (LISP_PITR_SET_LOCATOR_SET, lisp_pitr_set_locator_set);
+  M (LISP_PITR_SET_LOCATOR_SET, mp);
 
   mp->is_add = is_add;
   clib_memcpy (mp->ls_name, ls_name, vec_len (ls_name));
   vec_free (ls_name);
 
   /* send */
-  S;
+  S (mp);
 
   /* wait for reply */
-  W;
-
-  /* notreached */
-  return 0;
+  W (ret);
+  return ret;
 }
 
 static int
 api_show_lisp_pitr (vat_main_t * vam)
 {
   vl_api_show_lisp_pitr_t *mp;
-  f64 timeout = ~0;
+  int ret;
 
   if (!vam->json_output)
     {
       print (vam->ofp, "%=20s", "lisp status:");
     }
 
-  M (SHOW_LISP_PITR, show_lisp_pitr);
+  M (SHOW_LISP_PITR, mp);
   /* send it... */
-  S;
+  S (mp);
 
   /* Wait for a reply... */
-  W;
-
-  /* NOTREACHED */
-  return 0;
+  W (ret);
+  return ret;
 }
 
 /**
@@ -14222,11 +14503,11 @@ api_show_lisp_pitr (vat_main_t * vam)
 static int
 api_lisp_eid_table_add_del_map (vat_main_t * vam)
 {
-  f64 timeout = ~0;
   unformat_input_t *input = vam->input;
   vl_api_lisp_eid_table_add_del_map_t *mp;
   u8 is_add = 1, vni_set = 0, vrf_set = 0, bd_index_set = 0;
   u32 vni, vrf, bd_index;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
@@ -14255,7 +14536,7 @@ api_lisp_eid_table_add_del_map (vat_main_t * vam)
       return -99;
     }
 
-  M (LISP_EID_TABLE_ADD_DEL_MAP, lisp_eid_table_add_del_map);
+  M (LISP_EID_TABLE_ADD_DEL_MAP, mp);
 
   mp->is_add = is_add;
   mp->vni = htonl (vni);
@@ -14263,13 +14544,11 @@ api_lisp_eid_table_add_del_map (vat_main_t * vam)
   mp->is_l2 = bd_index_set;
 
   /* send */
-  S;
+  S (mp);
 
   /* wait for reply */
-  W;
-
-  /* notreached */
-  return 0;
+  W (ret);
+  return ret;
 }
 
 uword
@@ -14312,7 +14591,6 @@ api_lisp_add_del_remote_mapping (vat_main_t * vam)
 {
   unformat_input_t *input = vam->input;
   vl_api_lisp_add_del_remote_mapping_t *mp;
-  f64 timeout = ~0;
   u32 vni = 0;
   lisp_eid_vat_t _eid, *eid = &_eid;
   lisp_eid_vat_t _seid, *seid = &_seid;
@@ -14320,7 +14598,8 @@ api_lisp_add_del_remote_mapping (vat_main_t * vam)
   u32 action = ~0, p, w, data_len;
   ip4_address_t rloc4;
   ip6_address_t rloc6;
-  rloc_t *rlocs = 0, rloc, *curr_rloc = 0;
+  vl_api_remote_locator_t *rlocs = 0, rloc, *curr_rloc = 0;
+  int ret;
 
   memset (&rloc, 0, sizeof (rloc));
 
@@ -14399,9 +14678,9 @@ api_lisp_add_del_remote_mapping (vat_main_t * vam)
       return -99;
     }
 
-  data_len = vec_len (rlocs) * sizeof (rloc_t);
+  data_len = vec_len (rlocs) * sizeof (vl_api_remote_locator_t);
 
-  M2 (LISP_ADD_DEL_REMOTE_MAPPING, lisp_add_del_remote_mapping, data_len);
+  M2 (LISP_ADD_DEL_REMOTE_MAPPING, mp, data_len);
   mp->is_add = is_add;
   mp->vni = htonl (vni);
   mp->action = (u8) action;
@@ -14418,13 +14697,11 @@ api_lisp_add_del_remote_mapping (vat_main_t * vam)
   vec_free (rlocs);
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Wait for a reply... */
-  W;
-
-  /* NOTREACHED */
-  return 0;
+  W (ret);
+  return ret;
 }
 
 /**
@@ -14439,7 +14716,6 @@ api_lisp_add_del_adjacency (vat_main_t * vam)
 {
   unformat_input_t *input = vam->input;
   vl_api_lisp_add_del_adjacency_t *mp;
-  f64 timeout = ~0;
   u32 vni = 0;
   ip4_address_t leid4, reid4;
   ip6_address_t leid6, reid6;
@@ -14448,6 +14724,7 @@ api_lisp_add_del_adjacency (vat_main_t * vam)
   u8 reid_type, leid_type;
   u32 leid_len = 0, reid_len = 0, len;
   u8 is_add = 1;
+  int ret;
 
   leid_type = reid_type = (u8) ~ 0;
 
@@ -14519,7 +14796,7 @@ api_lisp_add_del_adjacency (vat_main_t * vam)
       return -99;
     }
 
-  M (LISP_ADD_DEL_ADJACENCY, lisp_add_del_adjacency);
+  M (LISP_ADD_DEL_ADJACENCY, mp);
   mp->is_add = is_add;
   mp->vni = htonl (vni);
   mp->leid_len = leid_len;
@@ -14546,13 +14823,11 @@ api_lisp_add_del_adjacency (vat_main_t * vam)
     }
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Wait for a reply... */
-  W;
-
-  /* NOTREACHED */
-  return 0;
+  W (ret);
+  return ret;
 }
 
 static int
@@ -14560,9 +14835,9 @@ api_lisp_gpe_add_del_iface (vat_main_t * vam)
 {
   unformat_input_t *input = vam->input;
   vl_api_lisp_gpe_add_del_iface_t *mp;
-  f64 timeout = ~0;
   u8 action_set = 0, is_add = 1, is_l2 = 0, dp_table_set = 0, vni_set = 0;
   u32 dp_table = 0, vni = 0;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
@@ -14606,7 +14881,7 @@ api_lisp_gpe_add_del_iface (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (LISP_GPE_ADD_DEL_IFACE, lisp_gpe_add_del_iface);
+  M (LISP_GPE_ADD_DEL_IFACE, mp);
 
   mp->is_add = is_add;
   mp->dp_table = dp_table;
@@ -14614,13 +14889,11 @@ api_lisp_gpe_add_del_iface (vat_main_t * vam)
   mp->vni = vni;
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Wait for a reply... */
-  W;
-
-  /* NOTREACHED */
-  return 0;
+  W (ret);
+  return ret;
 }
 
 /**
@@ -14634,10 +14907,10 @@ api_lisp_add_del_map_request_itr_rlocs (vat_main_t * vam)
 {
   unformat_input_t *input = vam->input;
   vl_api_lisp_add_del_map_request_itr_rlocs_t *mp;
-  f64 timeout = ~0;
   u8 *locator_set_name = 0;
   u8 locator_set_name_set = 0;
   u8 is_add = 1;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
@@ -14670,7 +14943,7 @@ api_lisp_add_del_map_request_itr_rlocs (vat_main_t * vam)
       return -99;
     }
 
-  M (LISP_ADD_DEL_MAP_REQUEST_ITR_RLOCS, lisp_add_del_map_request_itr_rlocs);
+  M (LISP_ADD_DEL_MAP_REQUEST_ITR_RLOCS, mp);
   mp->is_add = is_add;
   if (is_add)
     {
@@ -14684,13 +14957,11 @@ api_lisp_add_del_map_request_itr_rlocs (vat_main_t * vam)
   vec_free (locator_set_name);
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Wait for a reply... */
-  W;
-
-  /* NOTREACHED */
-  return 0;
+  W (ret);
+  return ret;
 }
 
 static int
@@ -14698,10 +14969,11 @@ api_lisp_locator_dump (vat_main_t * vam)
 {
   unformat_input_t *input = vam->input;
   vl_api_lisp_locator_dump_t *mp;
-  f64 timeout = ~0;
+  vl_api_control_ping_t *mp_ping;
   u8 is_index_set = 0, is_name_set = 0;
   u8 *ls_name = 0;
   u32 ls_index = ~0;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
@@ -14744,7 +15016,7 @@ api_lisp_locator_dump (vat_main_t * vam)
       print (vam->ofp, "%=16s%=16s%=16s", "locator", "priority", "weight");
     }
 
-  M (LISP_LOCATOR_DUMP, lisp_locator_dump);
+  M (LISP_LOCATOR_DUMP, mp);
   mp->is_index_set = is_index_set;
 
   if (is_index_set)
@@ -14757,28 +15029,25 @@ api_lisp_locator_dump (vat_main_t * vam)
     }
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Use a control ping for synchronization */
-  {
-    vl_api_control_ping_t *mp;
-    M (CONTROL_PING, control_ping);
-    S;
-  }
-  /* Wait for a reply... */
-  W;
+  M (CONTROL_PING, mp_ping);
+  S (mp_ping);
 
-  /* NOTREACHED */
-  return 0;
+  /* Wait for a reply... */
+  W (ret);
+  return ret;
 }
 
 static int
 api_lisp_locator_set_dump (vat_main_t * vam)
 {
   vl_api_lisp_locator_set_dump_t *mp;
+  vl_api_control_ping_t *mp_ping;
   unformat_input_t *input = vam->input;
-  f64 timeout = ~0;
   u8 filter = 0;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
@@ -14803,24 +15072,20 @@ api_lisp_locator_set_dump (vat_main_t * vam)
       print (vam->ofp, "%=10s%=15s", "ls_index", "ls_name");
     }
 
-  M (LISP_LOCATOR_SET_DUMP, lisp_locator_set_dump);
+  M (LISP_LOCATOR_SET_DUMP, mp);
 
   mp->filter = filter;
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Use a control ping for synchronization */
-  {
-    vl_api_control_ping_t *mp;
-    M (CONTROL_PING, control_ping);
-    S;
-  }
-  /* Wait for a reply... */
-  W;
+  M (CONTROL_PING, mp_ping);
+  S (mp_ping);
 
-  /* NOTREACHED */
-  return 0;
+  /* Wait for a reply... */
+  W (ret);
+  return ret;
 }
 
 static int
@@ -14830,7 +15095,8 @@ api_lisp_eid_table_map_dump (vat_main_t * vam)
   u8 mode_set = 0;
   unformat_input_t *input = vam->input;
   vl_api_lisp_eid_table_map_dump_t *mp;
-  f64 timeout = ~0;
+  vl_api_control_ping_t *mp_ping;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
@@ -14863,52 +15129,45 @@ api_lisp_eid_table_map_dump (vat_main_t * vam)
       print (vam->ofp, "%=10s%=10s", "VNI", is_l2 ? "BD" : "VRF");
     }
 
-  M (LISP_EID_TABLE_MAP_DUMP, lisp_eid_table_map_dump);
+  M (LISP_EID_TABLE_MAP_DUMP, mp);
   mp->is_l2 = is_l2;
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Use a control ping for synchronization */
-  {
-    vl_api_control_ping_t *mp;
-    M (CONTROL_PING, control_ping);
-    S;
-  }
-  /* Wait for a reply... */
-  W;
+  M (CONTROL_PING, mp_ping);
+  S (mp_ping);
 
-  /* NOTREACHED */
-  return 0;
+  /* Wait for a reply... */
+  W (ret);
+  return ret;
 }
 
 static int
 api_lisp_eid_table_vni_dump (vat_main_t * vam)
 {
   vl_api_lisp_eid_table_vni_dump_t *mp;
-  f64 timeout = ~0;
+  vl_api_control_ping_t *mp_ping;
+  int ret;
 
   if (!vam->json_output)
     {
       print (vam->ofp, "VNI");
     }
 
-  M (LISP_EID_TABLE_VNI_DUMP, lisp_eid_table_vni_dump);
+  M (LISP_EID_TABLE_VNI_DUMP, mp);
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Use a control ping for synchronization */
-  {
-    vl_api_control_ping_t *mp;
-    M (CONTROL_PING, control_ping);
-    S;
-  }
-  /* Wait for a reply... */
-  W;
+  M (CONTROL_PING, mp_ping);
+  S (mp_ping);
 
-  /* NOTREACHED */
-  return 0;
+  /* Wait for a reply... */
+  W (ret);
+  return ret;
 }
 
 static int
@@ -14916,13 +15175,14 @@ api_lisp_eid_table_dump (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_lisp_eid_table_dump_t *mp;
-  f64 timeout = ~0;
+  vl_api_control_ping_t *mp_ping;
   struct in_addr ip4;
   struct in6_addr ip6;
   u8 mac[6];
   u8 eid_type = ~0, eid_set = 0;
   u32 prefix_length = ~0, t, vni = 0;
   u8 filter = 0;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -14968,7 +15228,7 @@ api_lisp_eid_table_dump (vat_main_t * vam)
             "type", "ls_index", "ttl", "authoritative", "key_id", "key");
     }
 
-  M (LISP_EID_TABLE_DUMP, lisp_eid_table_dump);
+  M (LISP_EID_TABLE_DUMP, mp);
 
   mp->filter = filter;
   if (eid_set)
@@ -14996,20 +15256,15 @@ api_lisp_eid_table_dump (vat_main_t * vam)
     }
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Use a control ping for synchronization */
-  {
-    vl_api_control_ping_t *mp;
-    M (CONTROL_PING, control_ping);
-    S;
-  }
+  M (CONTROL_PING, mp_ping);
+  S (mp_ping);
 
   /* Wait for a reply... */
-  W;
-
-  /* NOTREACHED */
-  return 0;
+  W (ret);
+  return ret;
 }
 
 static int
@@ -15017,9 +15272,9 @@ api_lisp_gpe_fwd_entries_get (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_lisp_gpe_fwd_entries_get_t *mp;
-  f64 timeout = ~0;
   u8 vni_set = 0;
   u32 vni = ~0;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -15046,17 +15301,15 @@ api_lisp_gpe_fwd_entries_get (vat_main_t * vam)
             "leid", "reid");
     }
 
-  M (LISP_GPE_FWD_ENTRIES_GET, lisp_gpe_fwd_entries_get);
+  M (LISP_GPE_FWD_ENTRIES_GET, mp);
   mp->vni = clib_host_to_net_u32 (vni);
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Wait for a reply... */
-  W;
-
-  /* NOTREACHED */
-  return 0;
+  W (ret);
+  return ret;
 }
 
 #define vl_api_lisp_gpe_fwd_entries_get_reply_t_endian vl_noop_handler
@@ -15069,9 +15322,9 @@ api_lisp_adjacencies_get (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_lisp_adjacencies_get_t *mp;
-  f64 timeout = ~0;
   u8 vni_set = 0;
   u32 vni = ~0;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -15097,103 +15350,94 @@ api_lisp_adjacencies_get (vat_main_t * vam)
       print (vam->ofp, "%s %40s", "leid", "reid");
     }
 
-  M (LISP_ADJACENCIES_GET, lisp_adjacencies_get);
+  M (LISP_ADJACENCIES_GET, mp);
   mp->vni = clib_host_to_net_u32 (vni);
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Wait for a reply... */
-  W;
-
-  /* NOTREACHED */
-  return 0;
+  W (ret);
+  return ret;
 }
 
 static int
 api_lisp_map_server_dump (vat_main_t * vam)
 {
   vl_api_lisp_map_server_dump_t *mp;
-  f64 timeout = ~0;
+  vl_api_control_ping_t *mp_ping;
+  int ret;
 
   if (!vam->json_output)
     {
       print (vam->ofp, "%=20s", "Map server");
     }
 
-  M (LISP_MAP_SERVER_DUMP, lisp_map_server_dump);
+  M (LISP_MAP_SERVER_DUMP, mp);
   /* send it... */
-  S;
+  S (mp);
 
   /* Use a control ping for synchronization */
-  {
-    vl_api_control_ping_t *mp;
-    M (CONTROL_PING, control_ping);
-    S;
-  }
-  /* Wait for a reply... */
-  W;
+  M (CONTROL_PING, mp_ping);
+  S (mp_ping);
 
-  /* NOTREACHED */
-  return 0;
+  /* Wait for a reply... */
+  W (ret);
+  return ret;
 }
 
 static int
 api_lisp_map_resolver_dump (vat_main_t * vam)
 {
   vl_api_lisp_map_resolver_dump_t *mp;
-  f64 timeout = ~0;
+  vl_api_control_ping_t *mp_ping;
+  int ret;
 
   if (!vam->json_output)
     {
       print (vam->ofp, "%=20s", "Map resolver");
     }
 
-  M (LISP_MAP_RESOLVER_DUMP, lisp_map_resolver_dump);
+  M (LISP_MAP_RESOLVER_DUMP, mp);
   /* send it... */
-  S;
+  S (mp);
 
   /* Use a control ping for synchronization */
-  {
-    vl_api_control_ping_t *mp;
-    M (CONTROL_PING, control_ping);
-    S;
-  }
-  /* Wait for a reply... */
-  W;
+  M (CONTROL_PING, mp_ping);
+  S (mp_ping);
 
-  /* NOTREACHED */
-  return 0;
+  /* Wait for a reply... */
+  W (ret);
+  return ret;
 }
 
 static int
 api_show_lisp_status (vat_main_t * vam)
 {
   vl_api_show_lisp_status_t *mp;
-  f64 timeout = ~0;
+  int ret;
 
   if (!vam->json_output)
     {
       print (vam->ofp, "%-20s%-16s", "lisp status", "locator-set");
     }
 
-  M (SHOW_LISP_STATUS, show_lisp_status);
+  M (SHOW_LISP_STATUS, mp);
   /* send it... */
-  S;
+  S (mp);
   /* Wait for a reply... */
-  W;
-
-  /* NOTREACHED */
-  return 0;
+  W (ret);
+  return ret;
 }
 
 static int
 api_lisp_gpe_fwd_entry_path_dump (vat_main_t * vam)
 {
   vl_api_lisp_gpe_fwd_entry_path_dump_t *mp;
-  f64 timeout = ~0;
+  vl_api_control_ping_t *mp_ping;
   unformat_input_t *i = vam->input;
   u32 fwd_entry_index = ~0;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -15214,42 +15458,36 @@ api_lisp_gpe_fwd_entry_path_dump (vat_main_t * vam)
       print (vam->ofp, "first line");
     }
 
-  M (LISP_GPE_FWD_ENTRY_PATH_DUMP, lisp_gpe_fwd_entry_path_dump);
+  M (LISP_GPE_FWD_ENTRY_PATH_DUMP, mp);
 
   /* send it... */
-  S;
+  S (mp);
   /* Use a control ping for synchronization */
-  {
-    vl_api_control_ping_t *mp;
-    M (CONTROL_PING, control_ping);
-    S;
-  }
-  /* Wait for a reply... */
-  W;
+  M (CONTROL_PING, mp_ping);
+  S (mp_ping);
 
-  /* NOTREACHED */
-  return 0;
+  /* Wait for a reply... */
+  W (ret);
+  return ret;
 }
 
 static int
 api_lisp_get_map_request_itr_rlocs (vat_main_t * vam)
 {
   vl_api_lisp_get_map_request_itr_rlocs_t *mp;
-  f64 timeout = ~0;
+  int ret;
 
   if (!vam->json_output)
     {
       print (vam->ofp, "%=20s", "itr-rlocs:");
     }
 
-  M (LISP_GET_MAP_REQUEST_ITR_RLOCS, lisp_get_map_request_itr_rlocs);
+  M (LISP_GET_MAP_REQUEST_ITR_RLOCS, mp);
   /* send it... */
-  S;
+  S (mp);
   /* Wait for a reply... */
-  W;
-
-  /* NOTREACHED */
-  return 0;
+  W (ret);
+  return ret;
 }
 
 static int
@@ -15257,10 +15495,10 @@ api_af_packet_create (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_af_packet_create_t *mp;
-  f64 timeout;
   u8 *host_if_name = 0;
   u8 hw_addr[6];
   u8 random_hw_addr = 1;
+  int ret;
 
   memset (hw_addr, 0, sizeof (hw_addr));
 
@@ -15286,17 +15524,16 @@ api_af_packet_create (vat_main_t * vam)
       return -99;
     }
 
-  M (AF_PACKET_CREATE, af_packet_create);
+  M (AF_PACKET_CREATE, mp);
 
   clib_memcpy (mp->host_if_name, host_if_name, vec_len (host_if_name));
   clib_memcpy (mp->hw_addr, hw_addr, 6);
   mp->use_random_hw_addr = random_hw_addr;
   vec_free (host_if_name);
 
-  S;
-  W2 (fprintf (vam->ofp, " new sw_if_index = %d ", vam->sw_if_index));
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W2 (ret, fprintf (vam->ofp, " new sw_if_index = %d ", vam->sw_if_index));
+  return ret;
 }
 
 static int
@@ -15304,8 +15541,8 @@ api_af_packet_delete (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_af_packet_delete_t *mp;
-  f64 timeout;
   u8 *host_if_name = 0;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -15327,15 +15564,14 @@ api_af_packet_delete (vat_main_t * vam)
       return -99;
     }
 
-  M (AF_PACKET_DELETE, af_packet_delete);
+  M (AF_PACKET_DELETE, mp);
 
   clib_memcpy (mp->host_if_name, host_if_name, vec_len (host_if_name));
   vec_free (host_if_name);
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -15343,7 +15579,6 @@ api_policer_add_del (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_policer_add_del_t *mp;
-  f64 timeout;
   u8 is_add = 1;
   u8 *name = 0;
   u32 cir = 0;
@@ -15355,6 +15590,7 @@ api_policer_add_del (vat_main_t * vam)
   u8 type = 0;
   u8 color_aware = 0;
   sse2_qos_pol_action_params_st conform_action, exceed_action, violate_action;
+  int ret;
 
   conform_action.action_type = SSE2_QOS_ACTION_TRANSMIT;
   conform_action.dscp = 0;
@@ -15412,7 +15648,7 @@ api_policer_add_del (vat_main_t * vam)
       return -99;
     }
 
-  M (POLICER_ADD_DEL, policer_add_del);
+  M (POLICER_ADD_DEL, mp);
 
   clib_memcpy (mp->name, name, vec_len (name));
   vec_free (name);
@@ -15432,10 +15668,9 @@ api_policer_add_del (vat_main_t * vam)
   mp->violate_dscp = violate_action.dscp;
   mp->color_aware = color_aware;
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -15443,9 +15678,10 @@ api_policer_dump (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_policer_dump_t *mp;
-  f64 timeout = ~0;
+  vl_api_control_ping_t *mp_ping;
   u8 *match_name = 0;
   u8 match_name_valid = 0;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -15458,24 +15694,20 @@ api_policer_dump (vat_main_t * vam)
        break;
     }
 
-  M (POLICER_DUMP, policer_dump);
+  M (POLICER_DUMP, mp);
   mp->match_name_valid = match_name_valid;
   clib_memcpy (mp->match_name, match_name, vec_len (match_name));
   vec_free (match_name);
   /* send it... */
-  S;
+  S (mp);
 
   /* Use a control ping for synchronization */
-  {
-    vl_api_control_ping_t *mp;
-    M (CONTROL_PING, control_ping);
-    S;
-  }
-  /* Wait for a reply... */
-  W;
+  M (CONTROL_PING, mp_ping);
+  S (mp_ping);
 
-  /* NOTREACHED */
-  return 0;
+  /* Wait for a reply... */
+  W (ret);
+  return ret;
 }
 
 static int
@@ -15483,13 +15715,13 @@ api_policer_classify_set_interface (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_policer_classify_set_interface_t *mp;
-  f64 timeout;
   u32 sw_if_index;
   int sw_if_index_set;
   u32 ip4_table_index = ~0;
   u32 ip6_table_index = ~0;
   u32 l2_table_index = ~0;
   u8 is_add = 1;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -15518,7 +15750,7 @@ api_policer_classify_set_interface (vat_main_t * vam)
       return -99;
     }
 
-  M (POLICER_CLASSIFY_SET_INTERFACE, policer_classify_set_interface);
+  M (POLICER_CLASSIFY_SET_INTERFACE, mp);
 
   mp->sw_if_index = ntohl (sw_if_index);
   mp->ip4_table_index = ntohl (ip4_table_index);
@@ -15526,10 +15758,9 @@ api_policer_classify_set_interface (vat_main_t * vam)
   mp->l2_table_index = ntohl (l2_table_index);
   mp->is_add = is_add;
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -15537,8 +15768,9 @@ api_policer_classify_dump (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_policer_classify_dump_t *mp;
-  f64 timeout = ~0;
+  vl_api_control_ping_t *mp_ping;
   u8 type = POLICER_CLASSIFY_N_TABLES;
+  int ret;
 
   if (unformat (i, "type %U", unformat_policer_classify_table_type, &type))
     ;
@@ -15553,22 +15785,18 @@ api_policer_classify_dump (vat_main_t * vam)
       print (vam->ofp, "%10s%20s", "Intfc idx", "Classify table");
     }
 
-  M (POLICER_CLASSIFY_DUMP, policer_classify_dump);
+  M (POLICER_CLASSIFY_DUMP, mp);
   mp->type = type;
   /* send it... */
-  S;
+  S (mp);
 
   /* Use a control ping for synchronization */
-  {
-    vl_api_control_ping_t *mp;
-    M (CONTROL_PING, control_ping);
-    S;
-  }
-  /* Wait for a reply... */
-  W;
+  M (CONTROL_PING, mp_ping);
+  S (mp_ping);
 
-  /* NOTREACHED */
-  return 0;
+  /* Wait for a reply... */
+  W (ret);
+  return ret;
 }
 
 static int
@@ -15576,12 +15804,12 @@ api_netmap_create (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_netmap_create_t *mp;
-  f64 timeout;
   u8 *if_name = 0;
   u8 hw_addr[6];
   u8 random_hw_addr = 1;
   u8 is_pipe = 0;
   u8 is_master = 0;
+  int ret;
 
   memset (hw_addr, 0, sizeof (hw_addr));
 
@@ -15613,7 +15841,7 @@ api_netmap_create (vat_main_t * vam)
       return -99;
     }
 
-  M (NETMAP_CREATE, netmap_create);
+  M (NETMAP_CREATE, mp);
 
   clib_memcpy (mp->netmap_if_name, if_name, vec_len (if_name));
   clib_memcpy (mp->hw_addr, hw_addr, 6);
@@ -15622,10 +15850,9 @@ api_netmap_create (vat_main_t * vam)
   mp->is_master = is_master;
   vec_free (if_name);
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -15633,8 +15860,8 @@ api_netmap_delete (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_netmap_delete_t *mp;
-  f64 timeout;
   u8 *if_name = 0;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -15656,15 +15883,14 @@ api_netmap_delete (vat_main_t * vam)
       return -99;
     }
 
-  M (NETMAP_DELETE, netmap_delete);
+  M (NETMAP_DELETE, mp);
 
   clib_memcpy (mp->netmap_if_name, if_name, vec_len (if_name));
   vec_free (if_name);
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static void vl_api_mpls_tunnel_details_t_handler
@@ -15720,8 +15946,9 @@ static int
 api_mpls_tunnel_dump (vat_main_t * vam)
 {
   vl_api_mpls_tunnel_dump_t *mp;
-  f64 timeout;
+  vl_api_control_ping_t *mp_ping;
   i32 index = -1;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (vam->input) != UNFORMAT_END_OF_INPUT)
@@ -15735,17 +15962,16 @@ api_mpls_tunnel_dump (vat_main_t * vam)
 
   print (vam->ofp, "  tunnel_index %d", index);
 
-  M (MPLS_TUNNEL_DUMP, mpls_tunnel_dump);
+  M (MPLS_TUNNEL_DUMP, mp);
   mp->tunnel_index = htonl (index);
-  S;
+  S (mp);
 
   /* Use a control ping for synchronization */
-  {
-    vl_api_control_ping_t *mp;
-    M (CONTROL_PING, control_ping);
-    S;
-  }
-  W;
+  M (CONTROL_PING, mp_ping);
+  S (mp_ping);
+
+  W (ret);
+  return ret;
 }
 
 #define vl_api_mpls_fib_details_t_endian vl_noop_handler
@@ -15833,18 +16059,18 @@ static int
 api_mpls_fib_dump (vat_main_t * vam)
 {
   vl_api_mpls_fib_dump_t *mp;
-  f64 timeout;
+  vl_api_control_ping_t *mp_ping;
+  int ret;
 
-  M (MPLS_FIB_DUMP, mpls_fib_dump);
-  S;
+  M (MPLS_FIB_DUMP, mp);
+  S (mp);
 
   /* Use a control ping for synchronization */
-  {
-    vl_api_control_ping_t *mp;
-    M (CONTROL_PING, control_ping);
-    S;
-  }
-  W;
+  M (CONTROL_PING, mp_ping);
+  S (mp_ping);
+
+  W (ret);
+  return ret;
 }
 
 #define vl_api_ip_fib_details_t_endian vl_noop_handler
@@ -15934,18 +16160,36 @@ static int
 api_ip_fib_dump (vat_main_t * vam)
 {
   vl_api_ip_fib_dump_t *mp;
-  f64 timeout;
+  vl_api_control_ping_t *mp_ping;
+  int ret;
 
-  M (IP_FIB_DUMP, ip_fib_dump);
-  S;
+  M (IP_FIB_DUMP, mp);
+  S (mp);
 
   /* Use a control ping for synchronization */
-  {
-    vl_api_control_ping_t *mp;
-    M (CONTROL_PING, control_ping);
-    S;
-  }
-  W;
+  M (CONTROL_PING, mp_ping);
+  S (mp_ping);
+
+  W (ret);
+  return ret;
+}
+
+static int
+api_ip_mfib_dump (vat_main_t * vam)
+{
+  vl_api_ip_mfib_dump_t *mp;
+  vl_api_control_ping_t *mp_ping;
+  int ret;
+
+  M (IP_MFIB_DUMP, mp);
+  S (mp);
+
+  /* Use a control ping for synchronization */
+  M (CONTROL_PING, mp_ping);
+  S (mp_ping);
+
+  W (ret);
+  return ret;
 }
 
 static void vl_api_ip_neighbor_details_t_handler
@@ -16002,9 +16246,10 @@ api_ip_neighbor_dump (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_ip_neighbor_dump_t *mp;
-  f64 timeout;
+  vl_api_control_ping_t *mp_ping;
   u8 is_ipv6 = 0;
   u32 sw_if_index = ~0;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
@@ -16025,18 +16270,17 @@ api_ip_neighbor_dump (vat_main_t * vam)
       return -99;
     }
 
-  M (IP_NEIGHBOR_DUMP, ip_neighbor_dump);
+  M (IP_NEIGHBOR_DUMP, mp);
   mp->is_ipv6 = (u8) is_ipv6;
   mp->sw_if_index = ntohl (sw_if_index);
-  S;
+  S (mp);
 
   /* Use a control ping for synchronization */
-  {
-    vl_api_control_ping_t *mp;
-    M (CONTROL_PING, control_ping);
-    S;
-  }
-  W;
+  M (CONTROL_PING, mp_ping);
+  S (mp_ping);
+
+  W (ret);
+  return ret;
 }
 
 #define vl_api_ip6_fib_details_t_endian vl_noop_handler
@@ -16126,34 +16370,51 @@ static int
 api_ip6_fib_dump (vat_main_t * vam)
 {
   vl_api_ip6_fib_dump_t *mp;
-  f64 timeout;
+  vl_api_control_ping_t *mp_ping;
+  int ret;
 
-  M (IP6_FIB_DUMP, ip6_fib_dump);
-  S;
+  M (IP6_FIB_DUMP, mp);
+  S (mp);
 
   /* Use a control ping for synchronization */
-  {
-    vl_api_control_ping_t *mp;
-    M (CONTROL_PING, control_ping);
-    S;
-  }
-  W;
+  M (CONTROL_PING, mp_ping);
+  S (mp_ping);
+
+  W (ret);
+  return ret;
+}
+
+static int
+api_ip6_mfib_dump (vat_main_t * vam)
+{
+  vl_api_ip6_mfib_dump_t *mp;
+  vl_api_control_ping_t *mp_ping;
+  int ret;
+
+  M (IP6_MFIB_DUMP, mp);
+  S (mp);
+
+  /* Use a control ping for synchronization */
+  M (CONTROL_PING, mp_ping);
+  S (mp_ping);
+
+  W (ret);
+  return ret;
 }
 
 int
 api_classify_table_ids (vat_main_t * vam)
 {
   vl_api_classify_table_ids_t *mp;
-  f64 timeout;
+  int ret;
 
   /* Construct the API message */
-  M (CLASSIFY_TABLE_IDS, classify_table_ids);
+  M (CLASSIFY_TABLE_IDS, mp);
   mp->context = 0;
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 int
@@ -16161,9 +16422,9 @@ api_classify_table_by_interface (vat_main_t * vam)
 {
   unformat_input_t *input = vam->input;
   vl_api_classify_table_by_interface_t *mp;
-  f64 timeout;
 
   u32 sw_if_index = ~0;
+  int ret;
   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
     {
       if (unformat (input, "%U", api_unformat_sw_if_index, vam, &sw_if_index))
@@ -16180,14 +16441,13 @@ api_classify_table_by_interface (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (CLASSIFY_TABLE_BY_INTERFACE, classify_table_by_interface);
+  M (CLASSIFY_TABLE_BY_INTERFACE, mp);
   mp->context = 0;
   mp->sw_if_index = ntohl (sw_if_index);
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 int
@@ -16195,9 +16455,9 @@ api_classify_table_info (vat_main_t * vam)
 {
   unformat_input_t *input = vam->input;
   vl_api_classify_table_info_t *mp;
-  f64 timeout;
 
   u32 table_id = ~0;
+  int ret;
   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
     {
       if (unformat (input, "table_id %d", &table_id))
@@ -16212,14 +16472,13 @@ api_classify_table_info (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (CLASSIFY_TABLE_INFO, classify_table_info);
+  M (CLASSIFY_TABLE_INFO, mp);
   mp->context = 0;
   mp->table_id = ntohl (table_id);
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 int
@@ -16227,9 +16486,10 @@ api_classify_session_dump (vat_main_t * vam)
 {
   unformat_input_t *input = vam->input;
   vl_api_classify_session_dump_t *mp;
-  f64 timeout;
+  vl_api_control_ping_t *mp_ping;
 
   u32 table_id = ~0;
+  int ret;
   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
     {
       if (unformat (input, "table_id %d", &table_id))
@@ -16244,20 +16504,17 @@ api_classify_session_dump (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (CLASSIFY_SESSION_DUMP, classify_session_dump);
+  M (CLASSIFY_SESSION_DUMP, mp);
   mp->context = 0;
   mp->table_id = ntohl (table_id);
-  S;
+  S (mp);
 
   /* Use a control ping for synchronization */
-  {
-    vl_api_control_ping_t *mp;
-    M (CONTROL_PING, control_ping);
-    S;
-  }
-  W;
-  /* NOTREACHED */
-  return 0;
+  M (CONTROL_PING, mp_ping);
+  S (mp_ping);
+
+  W (ret);
+  return ret;
 }
 
 static void
@@ -16311,30 +16568,30 @@ int
 api_ipfix_exporter_dump (vat_main_t * vam)
 {
   vl_api_ipfix_exporter_dump_t *mp;
-  f64 timeout;
+  int ret;
 
   /* Construct the API message */
-  M (IPFIX_EXPORTER_DUMP, ipfix_exporter_dump);
+  M (IPFIX_EXPORTER_DUMP, mp);
   mp->context = 0;
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
 api_ipfix_classify_stream_dump (vat_main_t * vam)
 {
   vl_api_ipfix_classify_stream_dump_t *mp;
-  f64 timeout;
+  int ret;
 
   /* Construct the API message */
-  M (IPFIX_CLASSIFY_STREAM_DUMP, ipfix_classify_stream_dump);
+  M (IPFIX_CLASSIFY_STREAM_DUMP, mp);
   mp->context = 0;
 
-  S;
-  W;
+  S (mp);
+  W (ret);
+  return ret;
   /* NOTREACHED */
   return 0;
 }
@@ -16371,7 +16628,8 @@ static int
 api_ipfix_classify_table_dump (vat_main_t * vam)
 {
   vl_api_ipfix_classify_table_dump_t *mp;
-  f64 timeout;
+  vl_api_control_ping_t *mp_ping;
+  int ret;
 
   if (!vam->json_output)
     {
@@ -16380,18 +16638,17 @@ api_ipfix_classify_table_dump (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (IPFIX_CLASSIFY_TABLE_DUMP, ipfix_classify_table_dump);
+  M (IPFIX_CLASSIFY_TABLE_DUMP, mp);
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Use a control ping for synchronization */
-  {
-    vl_api_control_ping_t *mp;
-    M (CONTROL_PING, control_ping);
-    S;
-  }
-  W;
+  M (CONTROL_PING, mp_ping);
+  S (mp_ping);
+
+  W (ret);
+  return ret;
 }
 
 static void
@@ -16430,10 +16687,10 @@ api_sw_interface_span_enable_disable (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_sw_interface_span_enable_disable_t *mp;
-  f64 timeout;
   u32 src_sw_if_index = ~0;
   u32 dst_sw_if_index = ~0;
   u8 state = 3;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -16460,16 +16717,15 @@ api_sw_interface_span_enable_disable (vat_main_t * vam)
        break;
     }
 
-  M (SW_INTERFACE_SPAN_ENABLE_DISABLE, sw_interface_span_enable_disable);
+  M (SW_INTERFACE_SPAN_ENABLE_DISABLE, mp);
 
   mp->sw_if_index_from = htonl (src_sw_if_index);
   mp->sw_if_index_to = htonl (dst_sw_if_index);
   mp->state = state;
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static void
@@ -16546,7 +16802,10 @@ static void
   vat_json_object_add_uint (node, "src-if-index", sw_if_index_from);
   vat_json_object_add_string_copy (node, "src-if-name", sw_if_from_name);
   vat_json_object_add_uint (node, "dst-if-index", sw_if_index_to);
-  vat_json_object_add_string_copy (node, "dst-if-name", sw_if_to_name);
+  if (0 != sw_if_to_name)
+    {
+      vat_json_object_add_string_copy (node, "dst-if-name", sw_if_to_name);
+    }
   vat_json_object_add_uint (node, "state", mp->state);
 }
 
@@ -16554,18 +16813,18 @@ static int
 api_sw_interface_span_dump (vat_main_t * vam)
 {
   vl_api_sw_interface_span_dump_t *mp;
-  f64 timeout;
+  vl_api_control_ping_t *mp_ping;
+  int ret;
 
-  M (SW_INTERFACE_SPAN_DUMP, sw_interface_span_dump);
-  S;
+  M (SW_INTERFACE_SPAN_DUMP, mp);
+  S (mp);
 
   /* Use a control ping for synchronization */
-  {
-    vl_api_control_ping_t *mp;
-    M (CONTROL_PING, control_ping);
-    S;
-  }
-  W;
+  M (CONTROL_PING, mp_ping);
+  S (mp_ping);
+
+  W (ret);
+  return ret;
 }
 
 int
@@ -16573,9 +16832,9 @@ api_pg_create_interface (vat_main_t * vam)
 {
   unformat_input_t *input = vam->input;
   vl_api_pg_create_interface_t *mp;
-  f64 timeout;
 
   u32 if_id = ~0;
+  int ret;
   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
     {
       if (unformat (input, "if_id %d", &if_id))
@@ -16590,14 +16849,13 @@ api_pg_create_interface (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (PG_CREATE_INTERFACE, pg_create_interface);
+  M (PG_CREATE_INTERFACE, mp);
   mp->context = 0;
   mp->interface_id = ntohl (if_id);
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 int
@@ -16605,13 +16863,13 @@ api_pg_capture (vat_main_t * vam)
 {
   unformat_input_t *input = vam->input;
   vl_api_pg_capture_t *mp;
-  f64 timeout;
 
   u32 if_id = ~0;
   u8 enable = 1;
   u32 count = 1;
   u8 pcap_file_set = 0;
   u8 *pcap_file = 0;
+  int ret;
   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
     {
       if (unformat (input, "if_id %d", &if_id))
@@ -16641,7 +16899,7 @@ api_pg_capture (vat_main_t * vam)
 
   u32 name_len = vec_len (pcap_file);
   /* Construct the API message */
-  M (PG_CAPTURE, pg_capture);
+  M (PG_CAPTURE, mp);
   mp->context = 0;
   mp->interface_id = ntohl (if_id);
   mp->is_enabled = enable;
@@ -16653,10 +16911,9 @@ api_pg_capture (vat_main_t * vam)
     }
   vec_free (pcap_file);
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 int
@@ -16664,11 +16921,11 @@ api_pg_enable_disable (vat_main_t * vam)
 {
   unformat_input_t *input = vam->input;
   vl_api_pg_enable_disable_t *mp;
-  f64 timeout;
 
   u8 enable = 1;
   u8 stream_name_set = 0;
   u8 *stream_name = 0;
+  int ret;
   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
     {
       if (unformat (input, "stream %s", &stream_name))
@@ -16690,7 +16947,7 @@ api_pg_enable_disable (vat_main_t * vam)
 
   u32 name_len = vec_len (stream_name);
   /* Construct the API message */
-  M (PG_ENABLE_DISABLE, pg_enable_disable);
+  M (PG_ENABLE_DISABLE, mp);
   mp->context = 0;
   mp->is_enabled = enable;
   if (stream_name_set != 0)
@@ -16700,10 +16957,9 @@ api_pg_enable_disable (vat_main_t * vam)
     }
   vec_free (stream_name);
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 int
@@ -16711,7 +16967,6 @@ api_ip_source_and_port_range_check_add_del (vat_main_t * vam)
 {
   unformat_input_t *input = vam->input;
   vl_api_ip_source_and_port_range_check_add_del_t *mp;
-  f64 timeout;
 
   u16 *low_ports = 0;
   u16 *high_ports = 0;
@@ -16725,6 +16980,7 @@ api_ip_source_and_port_range_check_add_del (vat_main_t * vam)
   u32 vrf_id = ~0;
   u8 is_add = 1;
   u8 is_ipv6 = 0;
+  int ret;
 
   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
     {
@@ -16805,8 +17061,7 @@ api_ip_source_and_port_range_check_add_del (vat_main_t * vam)
       return -99;
     }
 
-  M (IP_SOURCE_AND_PORT_RANGE_CHECK_ADD_DEL,
-     ip_source_and_port_range_check_add_del);
+  M (IP_SOURCE_AND_PORT_RANGE_CHECK_ADD_DEL, mp);
 
   mp->is_add = is_add;
 
@@ -16832,10 +17087,9 @@ api_ip_source_and_port_range_check_add_del (vat_main_t * vam)
 
   mp->vrf_id = ntohl (vrf_id);
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 int
@@ -16843,12 +17097,12 @@ api_ip_source_and_port_range_check_interface_add_del (vat_main_t * vam)
 {
   unformat_input_t *input = vam->input;
   vl_api_ip_source_and_port_range_check_interface_add_del_t *mp;
-  f64 timeout;
   u32 sw_if_index = ~0;
   int vrf_set = 0;
   u32 tcp_out_vrf_id = ~0, udp_out_vrf_id = ~0;
   u32 tcp_in_vrf_id = ~0, udp_in_vrf_id = ~0;
   u8 is_add = 1;
+  int ret;
 
   while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
     {
@@ -16891,8 +17145,7 @@ api_ip_source_and_port_range_check_interface_add_del (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (IP_SOURCE_AND_PORT_RANGE_CHECK_INTERFACE_ADD_DEL,
-     ip_source_and_port_range_check_interface_add_del);
+  M (IP_SOURCE_AND_PORT_RANGE_CHECK_INTERFACE_ADD_DEL, mp);
 
   mp->sw_if_index = ntohl (sw_if_index);
   mp->is_add = is_add;
@@ -16902,10 +17155,11 @@ api_ip_source_and_port_range_check_interface_add_del (vat_main_t * vam)
   mp->udp_in_vrf_id = ntohl (udp_in_vrf_id);
 
   /* send it... */
-  S;
+  S (mp);
 
   /* Wait for a reply... */
-  W;
+  W (ret);
+  return ret;
 }
 
 static int
@@ -16913,12 +17167,12 @@ api_ipsec_gre_add_del_tunnel (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_ipsec_gre_add_del_tunnel_t *mp;
-  f64 timeout;
   u32 local_sa_id = 0;
   u32 remote_sa_id = 0;
   ip4_address_t src_address;
   ip4_address_t dst_address;
   u8 is_add = 1;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -16939,7 +17193,7 @@ api_ipsec_gre_add_del_tunnel (vat_main_t * vam)
        }
     }
 
-  M (IPSEC_GRE_ADD_DEL_TUNNEL, ipsec_gre_add_del_tunnel);
+  M (IPSEC_GRE_ADD_DEL_TUNNEL, mp);
 
   mp->local_sa_id = ntohl (local_sa_id);
   mp->remote_sa_id = ntohl (remote_sa_id);
@@ -16947,10 +17201,9 @@ api_ipsec_gre_add_del_tunnel (vat_main_t * vam)
   clib_memcpy (mp->dst_address, &dst_address, sizeof (dst_address));
   mp->is_add = is_add;
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -16958,11 +17211,11 @@ api_punt (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_punt_t *mp;
-  f64 timeout;
   u32 ipv = ~0;
   u32 protocol = ~0;
   u32 port = ~0;
   int is_add = 1;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -16981,17 +17234,16 @@ api_punt (vat_main_t * vam)
        }
     }
 
-  M (PUNT, punt);
+  M (PUNT, mp);
 
   mp->is_add = (u8) is_add;
   mp->ipv = (u8) ipv;
   mp->l4_protocol = (u8) protocol;
   mp->l4_port = htons ((u16) port);
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static void vl_api_ipsec_gre_tunnel_details_t_handler
@@ -17035,9 +17287,10 @@ api_ipsec_gre_tunnel_dump (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_ipsec_gre_tunnel_dump_t *mp;
-  f64 timeout;
+  vl_api_control_ping_t *mp_ping;
   u32 sw_if_index;
   u8 sw_if_index_set = 0;
+  int ret;
 
   /* Parse args required to build the message */
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
@@ -17061,19 +17314,18 @@ api_ipsec_gre_tunnel_dump (vat_main_t * vam)
     }
 
   /* Get list of gre-tunnel interfaces */
-  M (IPSEC_GRE_TUNNEL_DUMP, ipsec_gre_tunnel_dump);
+  M (IPSEC_GRE_TUNNEL_DUMP, mp);
 
   mp->sw_if_index = htonl (sw_if_index);
 
-  S;
+  S (mp);
 
   /* Use a control ping for synchronization */
-  {
-    vl_api_control_ping_t *mp;
-    M (CONTROL_PING, control_ping);
-    S;
-  }
-  W;
+  M (CONTROL_PING, mp_ping);
+  S (mp_ping);
+
+  W (ret);
+  return ret;
 }
 
 static int
@@ -17081,8 +17333,8 @@ 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;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -17101,11 +17353,12 @@ api_delete_subif (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (DELETE_SUBIF, delete_subif);
+  M (DELETE_SUBIF, mp);
   mp->sw_if_index = ntohl (sw_if_index);
 
-  S;
-  W;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 #define foreach_pbb_vtr_op      \
@@ -17118,7 +17371,6 @@ api_l2_interface_pbb_tag_rewrite (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_l2_interface_pbb_tag_rewrite_t *mp;
-  f64 timeout;
   u32 sw_if_index = ~0, vtr_op = ~0;
   u16 outer_tag = ~0;
   u8 dmac[6], smac[6];
@@ -17126,6 +17378,7 @@ api_l2_interface_pbb_tag_rewrite (vat_main_t * vam)
   u16 vlanid = 0;
   u32 sid = ~0;
   u32 tmp;
+  int ret;
 
   /* Shut up coverity */
   memset (dmac, 0, sizeof (dmac));
@@ -17184,7 +17437,7 @@ api_l2_interface_pbb_tag_rewrite (vat_main_t * vam)
       return -99;
     }
 
-  M (L2_INTERFACE_PBB_TAG_REWRITE, l2_interface_pbb_tag_rewrite);
+  M (L2_INTERFACE_PBB_TAG_REWRITE, mp);
   mp->sw_if_index = ntohl (sw_if_index);
   mp->vtr_op = ntohl (vtr_op);
   mp->outer_tag = ntohs (outer_tag);
@@ -17193,10 +17446,9 @@ api_l2_interface_pbb_tag_rewrite (vat_main_t * vam)
   mp->b_vlanid = ntohs (vlanid);
   mp->i_sid = ntohl (sid);
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -17204,12 +17456,12 @@ api_flow_classify_set_interface (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_flow_classify_set_interface_t *mp;
-  f64 timeout;
   u32 sw_if_index;
   int sw_if_index_set;
   u32 ip4_table_index = ~0;
   u32 ip6_table_index = ~0;
   u8 is_add = 1;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -17236,17 +17488,16 @@ api_flow_classify_set_interface (vat_main_t * vam)
       return -99;
     }
 
-  M (FLOW_CLASSIFY_SET_INTERFACE, flow_classify_set_interface);
+  M (FLOW_CLASSIFY_SET_INTERFACE, mp);
 
   mp->sw_if_index = ntohl (sw_if_index);
   mp->ip4_table_index = ntohl (ip4_table_index);
   mp->ip6_table_index = ntohl (ip6_table_index);
   mp->is_add = is_add;
 
-  S;
-  W;
-  /* NOTREACHED */
-  return 0;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -17254,8 +17505,9 @@ api_flow_classify_dump (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_flow_classify_dump_t *mp;
-  f64 timeout = ~0;
+  vl_api_control_ping_t *mp_ping;
   u8 type = FLOW_CLASSIFY_N_TABLES;
+  int ret;
 
   if (unformat (i, "type %U", unformat_flow_classify_table_type, &type))
     ;
@@ -17270,22 +17522,18 @@ api_flow_classify_dump (vat_main_t * vam)
       print (vam->ofp, "%10s%20s", "Intfc idx", "Classify table");
     }
 
-  M (FLOW_CLASSIFY_DUMP, flow_classify_dump);
+  M (FLOW_CLASSIFY_DUMP, mp);
   mp->type = type;
   /* send it... */
-  S;
+  S (mp);
 
   /* Use a control ping for synchronization */
-  {
-    vl_api_control_ping_t *mp;
-    M (CONTROL_PING, control_ping);
-    S;
-  }
-  /* Wait for a reply... */
-  W;
+  M (CONTROL_PING, mp_ping);
+  S (mp_ping);
 
-  /* NOTREACHED */
-  return 0;
+  /* Wait for a reply... */
+  W (ret);
+  return ret;
 }
 
 static int
@@ -17293,11 +17541,11 @@ api_feature_enable_disable (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_feature_enable_disable_t *mp;
-  f64 timeout;
   u8 *arc_name = 0;
   u8 *feature_name = 0;
   u32 sw_if_index = ~0;
   u8 enable = 1;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -17343,7 +17591,7 @@ api_feature_enable_disable (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (FEATURE_ENABLE_DISABLE, feature_enable_disable);
+  M (FEATURE_ENABLE_DISABLE, mp);
   mp->sw_if_index = ntohl (sw_if_index);
   mp->enable = enable;
   clib_memcpy (mp->arc_name, arc_name, vec_len (arc_name));
@@ -17351,8 +17599,9 @@ api_feature_enable_disable (vat_main_t * vam)
   vec_free (arc_name);
   vec_free (feature_name);
 
-  S;
-  W;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static int
@@ -17360,10 +17609,10 @@ api_sw_interface_tag_add_del (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_sw_interface_tag_add_del_t *mp;
-  f64 timeout;
   u32 sw_if_index = ~0;
   u8 *tag = 0;
   u8 enable = 1;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -17392,15 +17641,16 @@ api_sw_interface_tag_add_del (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (SW_INTERFACE_TAG_ADD_DEL, sw_interface_tag_add_del);
+  M (SW_INTERFACE_TAG_ADD_DEL, mp);
   mp->sw_if_index = ntohl (sw_if_index);
   mp->is_add = enable;
   if (enable)
     strncpy ((char *) mp->tag, (char *) tag, ARRAY_LEN (mp->tag) - 1);
   vec_free (tag);
 
-  S;
-  W;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 static void vl_api_l2_xconnect_details_t_handler
@@ -17436,24 +17686,24 @@ static int
 api_l2_xconnect_dump (vat_main_t * vam)
 {
   vl_api_l2_xconnect_dump_t *mp;
-  f64 timeout;
+  vl_api_control_ping_t *mp_ping;
+  int ret;
 
   if (!vam->json_output)
     {
       print (vam->ofp, "%15s%15s", "rx_sw_if_index", "tx_sw_if_index");
     }
 
-  M (L2_XCONNECT_DUMP, l2_xconnect_dump);
+  M (L2_XCONNECT_DUMP, mp);
 
-  S;
+  S (mp);
 
   /* Use a control ping for synchronization */
-  {
-    vl_api_control_ping_t *mp;
-    M (CONTROL_PING, control_ping);
-    S;
-  }
-  W;
+  M (CONTROL_PING, mp_ping);
+  S (mp_ping);
+
+  W (ret);
+  return ret;
 }
 
 static int
@@ -17461,9 +17711,9 @@ api_sw_interface_set_mtu (vat_main_t * vam)
 {
   unformat_input_t *i = vam->input;
   vl_api_sw_interface_set_mtu_t *mp;
-  f64 timeout;
   u32 sw_if_index = ~0;
   u32 mtu = 0;
+  int ret;
 
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
@@ -17490,12 +17740,13 @@ api_sw_interface_set_mtu (vat_main_t * vam)
     }
 
   /* Construct the API message */
-  M (SW_INTERFACE_SET_MTU, sw_interface_set_mtu);
+  M (SW_INTERFACE_SET_MTU, mp);
   mp->sw_if_index = ntohl (sw_if_index);
   mp->mtu = ntohs ((u16) mtu);
 
-  S;
-  W;
+  S (mp);
+  W (ret);
+  return ret;
 }
 
 
@@ -18058,6 +18309,14 @@ _(ikev2_profile_set_ts, "name <profile_name> protocol <proto>\n"        \
   "start_port <port> end_port <port> start_addr <ip4> end_addr <ip4>\n" \
   "(local|remote)")                                                     \
 _(ikev2_set_local_key, "file <absolute_file_path>")                     \
+_(ikev2_set_responder, "<profile_name> interface <interface> address <addr>") \
+_(ikev2_set_ike_transforms, "<profile_name> <crypto alg> <key size> <integrity alg> <DH group>") \
+_(ikev2_set_esp_transforms, "<profile_name> <crypto alg> <key size> <integrity alg> <DH group>") \
+_(ikev2_set_sa_lifetime, "<profile_name> <seconds> <jitter> <handover> <max bytes>") \
+_(ikev2_initiate_sa_init, "<profile_name>")                             \
+_(ikev2_initiate_del_ike_sa, "<ispi>")                                  \
+_(ikev2_initiate_del_child_sa, "<ispi>")                                \
+_(ikev2_initiate_rekey_child_sa, "<ispi>")                              \
 _(delete_loopback,"sw_if_index <nn>")                                   \
 _(bd_ip_mac_add_del, "bd_id <bridge-domain-id> <ip4/6-addr> <mac-addr> [del]") \
 _(map_add_domain,                                                       \
@@ -18175,7 +18434,9 @@ _(flow_classify_set_interface,                                          \
   "<intfc> | sw_if_index <nn> [ip4-table <nn>] [ip6-table <nn>] [del]") \
 _(flow_classify_dump, "type [ip4|ip6]")                                 \
 _(ip_fib_dump, "")                                                      \
+_(ip_mfib_dump, "")                                                     \
 _(ip6_fib_dump, "")                                                     \
+_(ip6_mfib_dump, "")                                                    \
 _(feature_enable_disable, "arc_name <arc_name> "                        \
   "feature_name <feature_name> <intfc> | sw_if_index <nn> [disable]")  \
 _(sw_interface_tag_add_del, "<intfc> | sw_if_index <nn> tag <text>"    \