l2: api cleanup 61/32861/8
authorFilip Tehlar <ftehlar@cisco.com>
Tue, 22 Jun 2021 21:20:29 +0000 (21:20 +0000)
committerOle Tr�an <otroan@employees.org>
Thu, 24 Jun 2021 08:30:43 +0000 (08:30 +0000)
Use autogenerated code.
Does not change API definitions.

Type: improvement

Signed-off-by: Filip Tehlar <ftehlar@cisco.com>
Change-Id: I7b84767e75d5f8310ec071036a5780fa4530f79f

src/vat/api_format.c
src/vnet/l2/l2_api.c
src/vnet/l2/l2_fib.c
src/vnet/l2/l2_input.h
src/vnet/vnet_all_api_h.h

index fb2c7da..1b77fb8 100644 (file)
@@ -623,17 +623,6 @@ ip_set (ip46_address_t * dst, void *src, u8 is_ip4)
                      sizeof (ip6_address_t));
 }
 
-static void
-increment_mac_address (u8 * mac)
-{
-  u64 tmp = *((u64 *) mac);
-  tmp = clib_net_to_host_u64 (tmp);
-  tmp += 1 << 16;              /* skip unused (least significant) octets */
-  tmp = clib_host_to_net_u64 (tmp);
-
-  clib_memcpy (mac, &tmp, 6);
-}
-
 static void
 vat_json_object_add_address (vat_json_node_t * node,
                             const char *str, const vl_api_address_t * addr)
@@ -1210,131 +1199,9 @@ api_show_threads (vat_main_t * vam)
   return ret;
 }
 
-static void
-vl_api_l2_macs_event_t_handler (vl_api_l2_macs_event_t * mp)
-{
-  u32 n_macs = ntohl (mp->n_macs);
-  errmsg ("L2MAC event received with pid %d cl-idx %d for %d macs: \n",
-         ntohl (mp->pid), mp->client_index, n_macs);
-  int i;
-  for (i = 0; i < n_macs; i++)
-    {
-      vl_api_mac_entry_t *mac = &mp->mac[i];
-      errmsg (" [%d] sw_if_index %d  mac_addr %U  action %d \n",
-             i + 1, ntohl (mac->sw_if_index),
-             format_ethernet_address, mac->mac_addr, mac->action);
-      if (i == 1000)
-       break;
-    }
-}
-
-static void
-vl_api_l2_macs_event_t_handler_json (vl_api_l2_macs_event_t * mp)
-{
-  /* JSON output not supported */
-}
-
 #define vl_api_bridge_domain_details_t_endian vl_noop_handler
 #define vl_api_bridge_domain_details_t_print vl_noop_handler
 
-/*
- * Special-case: build the bridge domain table, maintain
- * the next bd id vbl.
- */
-static void vl_api_bridge_domain_details_t_handler
-  (vl_api_bridge_domain_details_t * mp)
-{
-  vat_main_t *vam = &vat_main;
-  u32 n_sw_ifs = ntohl (mp->n_sw_ifs);
-  int i;
-
-  print (vam->ofp, "\n%-3s %-3s %-3s %-3s %-3s %-6s %-3s",
-        " ID", "LRN", "FWD", "FLD", "BVI", "UU-FWD", "#IF");
-
-  print (vam->ofp, "%3d %3d %3d %3d %3d %6d %3d",
-        ntohl (mp->bd_id), mp->learn, mp->forward,
-        mp->flood, ntohl (mp->bvi_sw_if_index),
-        ntohl (mp->uu_fwd_sw_if_index), n_sw_ifs);
-
-  if (n_sw_ifs)
-    {
-      vl_api_bridge_domain_sw_if_t *sw_ifs;
-      print (vam->ofp, "\n\n%s %s  %s", "sw_if_index", "SHG",
-            "Interface Name");
-
-      sw_ifs = mp->sw_if_details;
-      for (i = 0; i < n_sw_ifs; i++)
-       {
-         u8 *sw_if_name = 0;
-         u32 sw_if_index;
-         hash_pair_t *p;
-
-         sw_if_index = ntohl (sw_ifs->sw_if_index);
-
-         /* *INDENT-OFF* */
-         hash_foreach_pair (p, vam->sw_if_index_by_interface_name,
-                            ({
-                              if ((u32) p->value[0] == sw_if_index)
-                                {
-                                  sw_if_name = (u8 *)(p->key);
-                                  break;
-                                }
-                            }));
-         /* *INDENT-ON* */
-         print (vam->ofp, "%7d     %3d  %s", sw_if_index,
-                sw_ifs->shg, sw_if_name ? (char *) sw_if_name :
-                "sw_if_index not found!");
-
-         sw_ifs++;
-       }
-    }
-}
-
-static void vl_api_bridge_domain_details_t_handler_json
-  (vl_api_bridge_domain_details_t * mp)
-{
-  vat_main_t *vam = &vat_main;
-  vat_json_node_t *node, *array = NULL;
-  u32 n_sw_ifs = ntohl (mp->n_sw_ifs);
-
-  if (VAT_JSON_ARRAY != vam->json_tree.type)
-    {
-      ASSERT (VAT_JSON_NONE == vam->json_tree.type);
-      vat_json_init_array (&vam->json_tree);
-    }
-  node = vat_json_array_add (&vam->json_tree);
-
-  vat_json_init_object (node);
-  vat_json_object_add_uint (node, "bd_id", ntohl (mp->bd_id));
-  vat_json_object_add_uint (node, "flood", mp->flood);
-  vat_json_object_add_uint (node, "forward", mp->forward);
-  vat_json_object_add_uint (node, "learn", mp->learn);
-  vat_json_object_add_uint (node, "bvi_sw_if_index",
-                           ntohl (mp->bvi_sw_if_index));
-  vat_json_object_add_uint (node, "n_sw_ifs", n_sw_ifs);
-  array = vat_json_object_add (node, "sw_if");
-  vat_json_init_array (array);
-
-
-
-  if (n_sw_ifs)
-    {
-      vl_api_bridge_domain_sw_if_t *sw_ifs;
-      int i;
-
-      sw_ifs = mp->sw_if_details;
-      for (i = 0; i < n_sw_ifs; i++)
-       {
-         node = vat_json_array_add (array);
-         vat_json_init_object (node);
-         vat_json_object_add_uint (node, "sw_if_index",
-                                   ntohl (sw_ifs->sw_if_index));
-         vat_json_object_add_uint (node, "shg", sw_ifs->shg);
-         sw_ifs++;
-       }
-    }
-}
-
 static void vl_api_control_ping_reply_t_handler
   (vl_api_control_ping_reply_t * mp)
 {
@@ -1377,106 +1244,6 @@ static void vl_api_control_ping_reply_t_handler_json
   vam->result_ready = 1;
 }
 
-static void
-  vl_api_bridge_domain_set_mac_age_reply_t_handler
-  (vl_api_bridge_domain_set_mac_age_reply_t * mp)
-{
-  vat_main_t *vam = &vat_main;
-  i32 retval = ntohl (mp->retval);
-  if (vam->async_mode)
-    {
-      vam->async_errors += (retval < 0);
-    }
-  else
-    {
-      vam->retval = retval;
-      vam->result_ready = 1;
-    }
-}
-
-static void vl_api_bridge_domain_set_mac_age_reply_t_handler_json
-  (vl_api_bridge_domain_set_mac_age_reply_t * mp)
-{
-  vat_main_t *vam = &vat_main;
-  vat_json_node_t node;
-
-  vat_json_init_object (&node);
-  vat_json_object_add_int (&node, "retval", ntohl (mp->retval));
-
-  vat_json_print (vam->ofp, &node);
-  vat_json_free (&node);
-
-  vam->retval = ntohl (mp->retval);
-  vam->result_ready = 1;
-}
-
-static void
-vl_api_l2_flags_reply_t_handler (vl_api_l2_flags_reply_t * mp)
-{
-  vat_main_t *vam = &vat_main;
-  i32 retval = ntohl (mp->retval);
-  if (vam->async_mode)
-    {
-      vam->async_errors += (retval < 0);
-    }
-  else
-    {
-      vam->retval = retval;
-      vam->result_ready = 1;
-    }
-}
-
-static void vl_api_l2_flags_reply_t_handler_json
-  (vl_api_l2_flags_reply_t * mp)
-{
-  vat_main_t *vam = &vat_main;
-  vat_json_node_t node;
-
-  vat_json_init_object (&node);
-  vat_json_object_add_int (&node, "retval", ntohl (mp->retval));
-  vat_json_object_add_uint (&node, "resulting_feature_bitmap",
-                           ntohl (mp->resulting_feature_bitmap));
-
-  vat_json_print (vam->ofp, &node);
-  vat_json_free (&node);
-
-  vam->retval = ntohl (mp->retval);
-  vam->result_ready = 1;
-}
-
-static void vl_api_bridge_flags_reply_t_handler
-  (vl_api_bridge_flags_reply_t * mp)
-{
-  vat_main_t *vam = &vat_main;
-  i32 retval = ntohl (mp->retval);
-  if (vam->async_mode)
-    {
-      vam->async_errors += (retval < 0);
-    }
-  else
-    {
-      vam->retval = retval;
-      vam->result_ready = 1;
-    }
-}
-
-static void vl_api_bridge_flags_reply_t_handler_json
-  (vl_api_bridge_flags_reply_t * mp)
-{
-  vat_main_t *vam = &vat_main;
-  vat_json_node_t node;
-
-  vat_json_init_object (&node);
-  vat_json_object_add_int (&node, "retval", ntohl (mp->retval));
-  vat_json_object_add_uint (&node, "resulting_feature_bitmap",
-                           ntohl (mp->resulting_feature_bitmap));
-
-  vat_json_print (vam->ofp, &node);
-  vat_json_free (&node);
-
-  vam->retval = ntohl (mp->retval);
-  vam->result_ready = 1;
-}
 
 static void vl_api_ip_address_details_t_handler
   (vl_api_ip_address_details_t * mp)
@@ -1728,16 +1495,8 @@ format_hex_bytes (u8 * s, va_list * va)
 #define foreach_standard_reply_retval_handler           \
 _(sw_interface_set_flags_reply)                         \
 _(sw_interface_add_del_address_reply)                   \
-_(sw_interface_set_rx_mode_reply)                       \
 _(sw_interface_set_rx_placement_reply)                  \
 _(sw_interface_set_table_reply)                         \
-_(sw_interface_set_vpath_reply)                         \
-_(sw_interface_set_l2_bridge_reply)                     \
-_(bridge_domain_add_del_reply)                          \
-_(sw_interface_set_l2_xconnect_reply)                   \
-_(l2fib_add_del_reply)                                  \
-_(l2fib_flush_int_reply)                                \
-_(l2fib_flush_bd_reply)                                 \
 _(ip_route_add_del_reply)                               \
 _(ip_table_add_del_reply)                               \
 _(ip_table_replace_begin_reply)                         \
@@ -1747,14 +1506,7 @@ _(ip_mroute_add_del_reply)                              \
 _(sw_interface_set_unnumbered_reply)                    \
 _(set_ip_flow_hash_reply)                               \
 _(sw_interface_ip6_enable_disable_reply)                \
-_(l2_patch_add_del_reply)                               \
-_(l2_fib_clear_table_reply)                             \
-_(l2_interface_efp_filter_reply)                        \
-_(l2_interface_vlan_tag_rewrite_reply)                  \
-_(want_l2_macs_events_reply)                            \
 _(delete_loopback_reply)                                \
-_(bd_ip_mac_add_del_reply)                              \
-_(bd_ip_mac_flush_reply)                                \
 _(want_interface_events_reply)                          \
 _(sw_interface_clear_stats_reply)                       \
 _(ioam_enable_reply)                                    \
@@ -1762,7 +1514,6 @@ _(ioam_disable_reply)                                   \
 _(ip_source_and_port_range_check_add_del_reply)         \
 _(ip_source_and_port_range_check_interface_add_del_reply)\
 _(delete_subif_reply)                                   \
-_(l2_interface_pbb_tag_rewrite_reply)                   \
 _(sw_interface_tag_add_del_reply)                      \
 _(sw_interface_add_del_mac_address_reply)              \
 _(hw_interface_set_mtu_reply)                           \
@@ -1815,23 +1566,9 @@ _(CLI_REPLY, cli_reply)                                                 \
 _(CLI_INBAND_REPLY, cli_inband_reply)                                   \
 _(SW_INTERFACE_ADD_DEL_ADDRESS_REPLY,                                   \
   sw_interface_add_del_address_reply)                                   \
-_(SW_INTERFACE_SET_RX_MODE_REPLY, sw_interface_set_rx_mode_reply)       \
 _(SW_INTERFACE_SET_RX_PLACEMENT_REPLY, sw_interface_set_rx_placement_reply)    \
 _(SW_INTERFACE_RX_PLACEMENT_DETAILS, sw_interface_rx_placement_details)        \
 _(SW_INTERFACE_SET_TABLE_REPLY, sw_interface_set_table_reply)          \
-_(SW_INTERFACE_SET_VPATH_REPLY, sw_interface_set_vpath_reply)          \
-_(SW_INTERFACE_SET_L2_XCONNECT_REPLY,                                   \
-  sw_interface_set_l2_xconnect_reply)                                   \
-_(SW_INTERFACE_SET_L2_BRIDGE_REPLY,                                     \
-  sw_interface_set_l2_bridge_reply)                                     \
-_(BRIDGE_DOMAIN_ADD_DEL_REPLY, bridge_domain_add_del_reply)             \
-_(BRIDGE_DOMAIN_DETAILS, bridge_domain_details)                         \
-_(BRIDGE_DOMAIN_SET_MAC_AGE_REPLY, bridge_domain_set_mac_age_reply)     \
-_(L2FIB_ADD_DEL_REPLY, l2fib_add_del_reply)                             \
-_(L2FIB_FLUSH_INT_REPLY, l2fib_flush_int_reply)                         \
-_(L2FIB_FLUSH_BD_REPLY, l2fib_flush_bd_reply)                           \
-_(L2_FLAGS_REPLY, l2_flags_reply)                                       \
-_(BRIDGE_FLAGS_REPLY, bridge_flags_reply)                               \
 _(IP_ROUTE_ADD_DEL_REPLY, ip_route_add_del_reply)                      \
 _(IP_TABLE_ADD_DEL_REPLY, ip_table_add_del_reply)                      \
 _(IP_TABLE_REPLACE_BEGIN_REPLY, ip_table_replace_begin_reply)           \
@@ -1845,24 +1582,14 @@ _(CREATE_SUBIF_REPLY, create_subif_reply)                               \
 _(SET_IP_FLOW_HASH_REPLY, set_ip_flow_hash_reply)                       \
 _(SW_INTERFACE_IP6_ENABLE_DISABLE_REPLY,                                \
   sw_interface_ip6_enable_disable_reply)                                \
-_(L2_PATCH_ADD_DEL_REPLY, l2_patch_add_del_reply)                       \
 _(GET_NODE_INDEX_REPLY, get_node_index_reply)                           \
 _(ADD_NODE_NEXT_REPLY, add_node_next_reply)                             \
-_(L2_FIB_CLEAR_TABLE_REPLY, l2_fib_clear_table_reply)                   \
-_(L2_INTERFACE_EFP_FILTER_REPLY, l2_interface_efp_filter_reply)         \
-_(L2_INTERFACE_VLAN_TAG_REWRITE_REPLY, l2_interface_vlan_tag_rewrite_reply) \
 _(SHOW_VERSION_REPLY, show_version_reply)                               \
 _(SHOW_THREADS_REPLY, show_threads_reply)                               \
-_(L2_FIB_TABLE_DETAILS, l2_fib_table_details)                          \
 _(INTERFACE_NAME_RENUMBER_REPLY, interface_name_renumber_reply)                \
-_(WANT_L2_MACS_EVENTS_REPLY, want_l2_macs_events_reply)                        \
-_(L2_MACS_EVENT, l2_macs_event)                                                \
 _(IP_ADDRESS_DETAILS, ip_address_details)                               \
 _(IP_DETAILS, ip_details)                                               \
 _(DELETE_LOOPBACK_REPLY, delete_loopback_reply)                         \
-_(BD_IP_MAC_ADD_DEL_REPLY, bd_ip_mac_add_del_reply)                     \
-_(BD_IP_MAC_FLUSH_REPLY, bd_ip_mac_flush_reply)                         \
-_(BD_IP_MAC_DETAILS, bd_ip_mac_details)                                 \
 _(WANT_INTERFACE_EVENTS_REPLY, want_interface_events_reply)             \
 _(GET_FIRST_MSG_ID_REPLY, get_first_msg_id_reply)                      \
 _(GET_NODE_GRAPH_REPLY, get_node_graph_reply)                           \
@@ -1875,12 +1602,10 @@ _(IP_SOURCE_AND_PORT_RANGE_CHECK_ADD_DEL_REPLY,                         \
 _(IP_SOURCE_AND_PORT_RANGE_CHECK_INTERFACE_ADD_DEL_REPLY,               \
  ip_source_and_port_range_check_interface_add_del_reply)                \
 _(DELETE_SUBIF_REPLY, delete_subif_reply)                               \
-_(L2_INTERFACE_PBB_TAG_REWRITE_REPLY, l2_interface_pbb_tag_rewrite_reply) \
 _(IP_TABLE_DETAILS, ip_table_details)                                   \
 _(IP_ROUTE_DETAILS, ip_route_details)                                   \
 _(SW_INTERFACE_TAG_ADD_DEL_REPLY, sw_interface_tag_add_del_reply)      \
 _(SW_INTERFACE_ADD_DEL_MAC_ADDRESS_REPLY, sw_interface_add_del_mac_address_reply) \
-_(L2_XCONNECT_DETAILS, l2_xconnect_details)                             \
 _(HW_INTERFACE_SET_MTU_REPLY, hw_interface_set_mtu_reply)               \
 _(SW_INTERFACE_GET_TABLE_REPLY, sw_interface_get_table_reply)           \
 _(APP_NAMESPACE_ADD_DEL_REPLY, app_namespace_add_del_reply)            \
@@ -2320,64 +2045,6 @@ api_sw_interface_set_flags (vat_main_t * vam)
   return ret;
 }
 
-static int
-api_sw_interface_set_rx_mode (vat_main_t * vam)
-{
-  unformat_input_t *i = vam->input;
-  vl_api_sw_interface_set_rx_mode_t *mp;
-  u32 sw_if_index;
-  u8 sw_if_index_set = 0;
-  int ret;
-  u8 queue_id_valid = 0;
-  u32 queue_id;
-  vnet_hw_if_rx_mode mode = VNET_HW_IF_RX_MODE_UNKNOWN;
-
-  /* Parse args required to build the message */
-  while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
-    {
-      if (unformat (i, "queue %d", &queue_id))
-       queue_id_valid = 1;
-      else if (unformat (i, "polling"))
-       mode = VNET_HW_IF_RX_MODE_POLLING;
-      else if (unformat (i, "interrupt"))
-       mode = VNET_HW_IF_RX_MODE_INTERRUPT;
-      else if (unformat (i, "adaptive"))
-       mode = VNET_HW_IF_RX_MODE_ADAPTIVE;
-      else
-       if (unformat (i, "%U", api_unformat_sw_if_index, vam, &sw_if_index))
-       sw_if_index_set = 1;
-      else if (unformat (i, "sw_if_index %d", &sw_if_index))
-       sw_if_index_set = 1;
-      else
-       break;
-    }
-
-  if (sw_if_index_set == 0)
-    {
-      errmsg ("missing interface name or sw_if_index");
-      return -99;
-    }
-  if (mode == VNET_HW_IF_RX_MODE_UNKNOWN)
-    {
-      errmsg ("missing rx-mode");
-      return -99;
-    }
-
-  /* Construct the API message */
-  M (SW_INTERFACE_SET_RX_MODE, mp);
-  mp->sw_if_index = ntohl (sw_if_index);
-  mp->mode = (vl_api_rx_mode_t) mode;
-  mp->queue_id_valid = queue_id_valid;
-  mp->queue_id = queue_id_valid ? ntohl (queue_id) : ~0;
-
-  /* send it... */
-  S (mp);
-
-  /* Wait for a reply, return the good/bad news... */
-  W (ret);
-  return ret;
-}
-
 static int
 api_sw_interface_set_rx_placement (vat_main_t * vam)
 {
@@ -2732,937 +2399,94 @@ api_sw_interface_get_table (vat_main_t * vam)
   return ret;
 }
 
+uword
+unformat_vlib_pci_addr (unformat_input_t *input, va_list *args)
+{
+  vlib_pci_addr_t *addr = va_arg (*args, vlib_pci_addr_t *);
+  u32 x[4];
+
+  if (!unformat (input, "%x:%x:%x.%x", &x[0], &x[1], &x[2], &x[3]))
+    return 0;
+
+  addr->domain = x[0];
+  addr->bus = x[1];
+  addr->slot = x[2];
+  addr->function = x[3];
+
+  return 1;
+}
+
 static int
-api_sw_interface_set_vpath (vat_main_t * vam)
+api_ip_table_add_del (vat_main_t *vam)
 {
   unformat_input_t *i = vam->input;
-  vl_api_sw_interface_set_vpath_t *mp;
-  u32 sw_if_index = 0;
-  u8 sw_if_index_set = 0;
-  u8 is_enable = 0;
-  int ret;
+  vl_api_ip_table_add_del_t *mp;
+  u32 table_id = ~0;
+  u8 is_ipv6 = 0;
+  u8 is_add = 1;
+  int ret = 0;
 
   /* Parse args required to build the message */
   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     {
-      if (unformat (i, "%U", api_unformat_sw_if_index, vam, &sw_if_index))
-       sw_if_index_set = 1;
-      else if (unformat (i, "sw_if_index %d", &sw_if_index))
-       sw_if_index_set = 1;
-      else if (unformat (i, "enable"))
-       is_enable = 1;
-      else if (unformat (i, "disable"))
-       is_enable = 0;
+      if (unformat (i, "ipv6"))
+       is_ipv6 = 1;
+      else if (unformat (i, "del"))
+       is_add = 0;
+      else if (unformat (i, "add"))
+       is_add = 1;
+      else if (unformat (i, "table %d", &table_id))
+       ;
       else
-       break;
+       {
+         clib_warning ("parse error '%U'", format_unformat_error, i);
+         return -99;
+       }
     }
 
-  if (sw_if_index_set == 0)
+  if (~0 == table_id)
     {
-      errmsg ("missing interface name or sw_if_index");
+      errmsg ("missing table-ID");
       return -99;
     }
 
   /* Construct the API message */
-  M (SW_INTERFACE_SET_VPATH, mp);
+  M (IP_TABLE_ADD_DEL, mp);
 
-  mp->sw_if_index = ntohl (sw_if_index);
-  mp->enable = is_enable;
+  mp->table.table_id = ntohl (table_id);
+  mp->table.is_ip6 = is_ipv6;
+  mp->is_add = is_add;
 
   /* send it... */
   S (mp);
 
   /* Wait for a reply... */
   W (ret);
+
   return ret;
 }
 
-static int
-api_sw_interface_set_l2_xconnect (vat_main_t * vam)
+uword
+unformat_fib_path (unformat_input_t *input, va_list *args)
 {
-  unformat_input_t *i = vam->input;
-  vl_api_sw_interface_set_l2_xconnect_t *mp;
-  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;
+  vat_main_t *vam = va_arg (*args, vat_main_t *);
+  vl_api_fib_path_t *path = va_arg (*args, vl_api_fib_path_t *);
+  u32 weight, preference;
+  mpls_label_t out_label;
 
-  /* Parse args required to build the message */
-  while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
+  clib_memset (path, 0, sizeof (*path));
+  path->weight = 1;
+  path->sw_if_index = ~0;
+  path->rpf_id = ~0;
+  path->n_labels = 0;
+
+  while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
     {
-      if (unformat (i, "rx_sw_if_index %d", &rx_sw_if_index))
-       rx_sw_if_index_set = 1;
-      else if (unformat (i, "tx_sw_if_index %d", &tx_sw_if_index))
-       tx_sw_if_index_set = 1;
-      else if (unformat (i, "rx"))
+      if (unformat (input, "%U %U", unformat_vl_api_ip4_address,
+                   &path->nh.address.ip4, api_unformat_sw_if_index, vam,
+                   &path->sw_if_index))
        {
-         if (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
-           {
-             if (unformat (i, "%U", api_unformat_sw_if_index, vam,
-                           &rx_sw_if_index))
-               rx_sw_if_index_set = 1;
-           }
-         else
-           break;
-       }
-      else if (unformat (i, "tx"))
-       {
-         if (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
-           {
-             if (unformat (i, "%U", api_unformat_sw_if_index, vam,
-                           &tx_sw_if_index))
-               tx_sw_if_index_set = 1;
-           }
-         else
-           break;
-       }
-      else if (unformat (i, "enable"))
-       enable = 1;
-      else if (unformat (i, "disable"))
-       enable = 0;
-      else
-       break;
-    }
-
-  if (rx_sw_if_index_set == 0)
-    {
-      errmsg ("missing rx interface name or rx_sw_if_index");
-      return -99;
-    }
-
-  if (enable && (tx_sw_if_index_set == 0))
-    {
-      errmsg ("missing tx interface name or tx_sw_if_index");
-      return -99;
-    }
-
-  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 (mp);
-  W (ret);
-  return ret;
-}
-
-static int
-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;
-  vl_api_l2_port_type_t port_type;
-  u32 rx_sw_if_index;
-  u8 rx_sw_if_index_set = 0;
-  u32 bd_id;
-  u8 bd_id_set = 0;
-  u32 shg = 0;
-  u8 enable = 1;
-  int ret;
-
-  port_type = L2_API_PORT_TYPE_NORMAL;
-
-  /* Parse args required to build the message */
-  while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
-    {
-      if (unformat (i, "sw_if_index %d", &rx_sw_if_index))
-       rx_sw_if_index_set = 1;
-      else if (unformat (i, "bd_id %d", &bd_id))
-       bd_id_set = 1;
-      else
-       if (unformat
-           (i, "%U", api_unformat_sw_if_index, vam, &rx_sw_if_index))
-       rx_sw_if_index_set = 1;
-      else if (unformat (i, "shg %d", &shg))
-       ;
-      else if (unformat (i, "bvi"))
-       port_type = L2_API_PORT_TYPE_BVI;
-      else if (unformat (i, "uu-fwd"))
-       port_type = L2_API_PORT_TYPE_UU_FWD;
-      else if (unformat (i, "enable"))
-       enable = 1;
-      else if (unformat (i, "disable"))
-       enable = 0;
-      else
-       break;
-    }
-
-  if (rx_sw_if_index_set == 0)
-    {
-      errmsg ("missing rx interface name or sw_if_index");
-      return -99;
-    }
-
-  if (enable && (bd_id_set == 0))
-    {
-      errmsg ("missing bridge domain");
-      return -99;
-    }
-
-  M (SW_INTERFACE_SET_L2_BRIDGE, mp);
-
-  mp->rx_sw_if_index = ntohl (rx_sw_if_index);
-  mp->bd_id = ntohl (bd_id);
-  mp->shg = (u8) shg;
-  mp->port_type = ntohl (port_type);
-  mp->enable = enable;
-
-  S (mp);
-  W (ret);
-  return ret;
-}
-
-static int
-api_bridge_domain_dump (vat_main_t * vam)
-{
-  unformat_input_t *i = vam->input;
-  vl_api_bridge_domain_dump_t *mp;
-  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)
-    {
-      if (unformat (i, "bd_id %d", &bd_id))
-       ;
-      else
-       break;
-    }
-
-  M (BRIDGE_DOMAIN_DUMP, mp);
-  mp->bd_id = ntohl (bd_id);
-  S (mp);
-
-  /* Use a control ping for synchronization */
-  MPING (CONTROL_PING, mp_ping);
-  S (mp_ping);
-
-  W (ret);
-  return ret;
-}
-
-static int
-api_bridge_domain_add_del (vat_main_t * vam)
-{
-  unformat_input_t *i = vam->input;
-  vl_api_bridge_domain_add_del_t *mp;
-  u32 bd_id = ~0;
-  u8 is_add = 1;
-  u32 flood = 1, forward = 1, learn = 1, uu_flood = 1, arp_term = 0;
-  u8 *bd_tag = NULL;
-  u32 mac_age = 0;
-  int ret;
-
-  /* Parse args required to build the message */
-  while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
-    {
-      if (unformat (i, "bd_id %d", &bd_id))
-       ;
-      else if (unformat (i, "flood %d", &flood))
-       ;
-      else if (unformat (i, "uu-flood %d", &uu_flood))
-       ;
-      else if (unformat (i, "forward %d", &forward))
-       ;
-      else if (unformat (i, "learn %d", &learn))
-       ;
-      else if (unformat (i, "arp-term %d", &arp_term))
-       ;
-      else if (unformat (i, "mac-age %d", &mac_age))
-       ;
-      else if (unformat (i, "bd-tag %s", &bd_tag))
-       ;
-      else if (unformat (i, "del"))
-       {
-         is_add = 0;
-         flood = uu_flood = forward = learn = 0;
-       }
-      else
-       break;
-    }
-
-  if (bd_id == ~0)
-    {
-      errmsg ("missing bridge domain");
-      ret = -99;
-      goto done;
-    }
-
-  if (mac_age > 255)
-    {
-      errmsg ("mac age must be less than 256 ");
-      ret = -99;
-      goto done;
-    }
-
-  if ((bd_tag) && (vec_len (bd_tag) > 63))
-    {
-      errmsg ("bd-tag cannot be longer than 63");
-      ret = -99;
-      goto done;
-    }
-
-  M (BRIDGE_DOMAIN_ADD_DEL, mp);
-
-  mp->bd_id = ntohl (bd_id);
-  mp->flood = flood;
-  mp->uu_flood = uu_flood;
-  mp->forward = forward;
-  mp->learn = learn;
-  mp->arp_term = arp_term;
-  mp->is_add = is_add;
-  mp->mac_age = (u8) mac_age;
-  if (bd_tag)
-    {
-      clib_memcpy (mp->bd_tag, bd_tag, vec_len (bd_tag));
-      mp->bd_tag[vec_len (bd_tag)] = 0;
-    }
-  S (mp);
-  W (ret);
-
-done:
-  vec_free (bd_tag);
-  return ret;
-}
-
-static int
-api_l2fib_flush_bd (vat_main_t * vam)
-{
-  unformat_input_t *i = vam->input;
-  vl_api_l2fib_flush_bd_t *mp;
-  u32 bd_id = ~0;
-  int ret;
-
-  /* Parse args required to build the message */
-  while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
-    {
-      if (unformat (i, "bd_id %d", &bd_id));
-      else
-       break;
-    }
-
-  if (bd_id == ~0)
-    {
-      errmsg ("missing bridge domain");
-      return -99;
-    }
-
-  M (L2FIB_FLUSH_BD, mp);
-
-  mp->bd_id = htonl (bd_id);
-
-  S (mp);
-  W (ret);
-  return ret;
-}
-
-static int
-api_l2fib_flush_int (vat_main_t * vam)
-{
-  unformat_input_t *i = vam->input;
-  vl_api_l2fib_flush_int_t *mp;
-  u32 sw_if_index = ~0;
-  int ret;
-
-  /* Parse args required to build the message */
-  while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
-    {
-      if (unformat (i, "sw_if_index %d", &sw_if_index));
-      else
-       if (unformat (i, "%U", api_unformat_sw_if_index, vam, &sw_if_index));
-      else
-       break;
-    }
-
-  if (sw_if_index == ~0)
-    {
-      errmsg ("missing interface name or sw_if_index");
-      return -99;
-    }
-
-  M (L2FIB_FLUSH_INT, mp);
-
-  mp->sw_if_index = ntohl (sw_if_index);
-
-  S (mp);
-  W (ret);
-  return ret;
-}
-
-static int
-api_l2fib_add_del (vat_main_t * vam)
-{
-  unformat_input_t *i = vam->input;
-  vl_api_l2fib_add_del_t *mp;
-  f64 timeout;
-  u8 mac[6] = { 0 };
-  u8 mac_set = 0;
-  u32 bd_id;
-  u8 bd_id_set = 0;
-  u32 sw_if_index = 0;
-  u8 sw_if_index_set = 0;
-  u8 is_add = 1;
-  u8 static_mac = 0;
-  u8 filter_mac = 0;
-  u8 bvi_mac = 0;
-  int count = 1;
-  f64 before = 0;
-  int j;
-
-  /* Parse args required to build the message */
-  while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
-    {
-      if (unformat (i, "mac %U", unformat_ethernet_address, mac))
-       mac_set = 1;
-      else if (unformat (i, "bd_id %d", &bd_id))
-       bd_id_set = 1;
-      else if (unformat (i, "sw_if_index %d", &sw_if_index))
-       sw_if_index_set = 1;
-      else if (unformat (i, "sw_if"))
-       {
-         if (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
-           {
-             if (unformat
-                 (i, "%U", api_unformat_sw_if_index, vam, &sw_if_index))
-               sw_if_index_set = 1;
-           }
-         else
-           break;
-       }
-      else if (unformat (i, "static"))
-       static_mac = 1;
-      else if (unformat (i, "filter"))
-       {
-         filter_mac = 1;
-         static_mac = 1;
-       }
-      else if (unformat (i, "bvi"))
-       {
-         bvi_mac = 1;
-         static_mac = 1;
-       }
-      else if (unformat (i, "del"))
-       is_add = 0;
-      else if (unformat (i, "count %d", &count))
-       ;
-      else
-       break;
-    }
-
-  if (mac_set == 0)
-    {
-      errmsg ("missing mac address");
-      return -99;
-    }
-
-  if (bd_id_set == 0)
-    {
-      errmsg ("missing bridge domain");
-      return -99;
-    }
-
-  if (is_add && sw_if_index_set == 0 && filter_mac == 0)
-    {
-      errmsg ("missing interface name or sw_if_index");
-      return -99;
-    }
-
-  if (count > 1)
-    {
-      /* Turn on async mode */
-      vam->async_mode = 1;
-      vam->async_errors = 0;
-      before = vat_time_now (vam);
-    }
-
-  for (j = 0; j < count; j++)
-    {
-      M (L2FIB_ADD_DEL, mp);
-
-      clib_memcpy (mp->mac, mac, 6);
-      mp->bd_id = ntohl (bd_id);
-      mp->is_add = is_add;
-      mp->sw_if_index = ntohl (sw_if_index);
-
-      if (is_add)
-       {
-         mp->static_mac = static_mac;
-         mp->filter_mac = filter_mac;
-         mp->bvi_mac = bvi_mac;
-       }
-      increment_mac_address (mac);
-      /* send it... */
-      S (mp);
-    }
-
-  if (count > 1)
-    {
-      vl_api_control_ping_t *mp_ping;
-      f64 after;
-
-      /* Shut off async mode */
-      vam->async_mode = 0;
-
-      MPING (CONTROL_PING, mp_ping);
-      S (mp_ping);
-
-      timeout = vat_time_now (vam) + 1.0;
-      while (vat_time_now (vam) < timeout)
-       if (vam->result_ready == 1)
-         goto out;
-      vam->retval = -99;
-
-    out:
-      if (vam->retval == -99)
-       errmsg ("timeout");
-
-      if (vam->async_errors > 0)
-       {
-         errmsg ("%d asynchronous errors", vam->async_errors);
-         vam->retval = -98;
-       }
-      vam->async_errors = 0;
-      after = vat_time_now (vam);
-
-      print (vam->ofp, "%d routes in %.6f secs, %.2f routes/sec",
-            count, after - before, count / (after - before));
-    }
-  else
-    {
-      int ret;
-
-      /* Wait for a reply... */
-      W (ret);
-      return ret;
-    }
-  /* Return the good/bad news */
-  return (vam->retval);
-}
-
-static int
-api_bridge_domain_set_mac_age (vat_main_t * vam)
-{
-  unformat_input_t *i = vam->input;
-  vl_api_bridge_domain_set_mac_age_t *mp;
-  u32 bd_id = ~0;
-  u32 mac_age = 0;
-  int ret;
-
-  /* Parse args required to build the message */
-  while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
-    {
-      if (unformat (i, "bd_id %d", &bd_id));
-      else if (unformat (i, "mac-age %d", &mac_age));
-      else
-       break;
-    }
-
-  if (bd_id == ~0)
-    {
-      errmsg ("missing bridge domain");
-      return -99;
-    }
-
-  if (mac_age > 255)
-    {
-      errmsg ("mac age must be less than 256 ");
-      return -99;
-    }
-
-  M (BRIDGE_DOMAIN_SET_MAC_AGE, mp);
-
-  mp->bd_id = htonl (bd_id);
-  mp->mac_age = (u8) mac_age;
-
-  S (mp);
-  W (ret);
-  return ret;
-}
-
-static int
-api_l2_flags (vat_main_t * vam)
-{
-  unformat_input_t *i = vam->input;
-  vl_api_l2_flags_t *mp;
-  u32 sw_if_index;
-  u32 flags = 0;
-  u8 sw_if_index_set = 0;
-  u8 is_set = 0;
-  int ret;
-
-  /* Parse args required to build the message */
-  while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
-    {
-      if (unformat (i, "sw_if_index %d", &sw_if_index))
-       sw_if_index_set = 1;
-      else if (unformat (i, "sw_if"))
-       {
-         if (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
-           {
-             if (unformat
-                 (i, "%U", api_unformat_sw_if_index, vam, &sw_if_index))
-               sw_if_index_set = 1;
-           }
-         else
-           break;
-       }
-      else if (unformat (i, "learn"))
-       flags |= L2_LEARN;
-      else if (unformat (i, "forward"))
-       flags |= L2_FWD;
-      else if (unformat (i, "flood"))
-       flags |= L2_FLOOD;
-      else if (unformat (i, "uu-flood"))
-       flags |= L2_UU_FLOOD;
-      else if (unformat (i, "arp-term"))
-       flags |= L2_ARP_TERM;
-      else if (unformat (i, "off"))
-       is_set = 0;
-      else if (unformat (i, "disable"))
-       is_set = 0;
-      else
-       break;
-    }
-
-  if (sw_if_index_set == 0)
-    {
-      errmsg ("missing interface name or sw_if_index");
-      return -99;
-    }
-
-  M (L2_FLAGS, mp);
-
-  mp->sw_if_index = ntohl (sw_if_index);
-  mp->feature_bitmap = ntohl (flags);
-  mp->is_set = is_set;
-
-  S (mp);
-  W (ret);
-  return ret;
-}
-
-static int
-api_bridge_flags (vat_main_t * vam)
-{
-  unformat_input_t *i = vam->input;
-  vl_api_bridge_flags_t *mp;
-  u32 bd_id;
-  u8 bd_id_set = 0;
-  u8 is_set = 1;
-  bd_flags_t flags = 0;
-  int ret;
-
-  /* Parse args required to build the message */
-  while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
-    {
-      if (unformat (i, "bd_id %d", &bd_id))
-       bd_id_set = 1;
-      else if (unformat (i, "learn"))
-       flags |= BRIDGE_API_FLAG_LEARN;
-      else if (unformat (i, "forward"))
-       flags |= BRIDGE_API_FLAG_FWD;
-      else if (unformat (i, "flood"))
-       flags |= BRIDGE_API_FLAG_FLOOD;
-      else if (unformat (i, "uu-flood"))
-       flags |= BRIDGE_API_FLAG_UU_FLOOD;
-      else if (unformat (i, "arp-term"))
-       flags |= BRIDGE_API_FLAG_ARP_TERM;
-      else if (unformat (i, "off"))
-       is_set = 0;
-      else if (unformat (i, "disable"))
-       is_set = 0;
-      else
-       break;
-    }
-
-  if (bd_id_set == 0)
-    {
-      errmsg ("missing bridge domain");
-      return -99;
-    }
-
-  M (BRIDGE_FLAGS, mp);
-
-  mp->bd_id = ntohl (bd_id);
-  mp->flags = ntohl (flags);
-  mp->is_set = is_set;
-
-  S (mp);
-  W (ret);
-  return ret;
-}
-
-static int
-api_bd_ip_mac_add_del (vat_main_t * vam)
-{
-  vl_api_address_t ip = VL_API_ZERO_ADDRESS;
-  vl_api_mac_address_t mac = { 0 };
-  unformat_input_t *i = vam->input;
-  vl_api_bd_ip_mac_add_del_t *mp;
-  u32 bd_id;
-  u8 is_add = 1;
-  u8 bd_id_set = 0;
-  u8 ip_set = 0;
-  u8 mac_set = 0;
-  int ret;
-
-
-  /* Parse args required to build the message */
-  while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
-    {
-      if (unformat (i, "bd_id %d", &bd_id))
-       {
-         bd_id_set++;
-       }
-      else if (unformat (i, "%U", unformat_vl_api_address, &ip))
-       {
-         ip_set++;
-       }
-      else if (unformat (i, "%U", unformat_vl_api_mac_address, &mac))
-       {
-         mac_set++;
-       }
-      else if (unformat (i, "del"))
-       is_add = 0;
-      else
-       break;
-    }
-
-  if (bd_id_set == 0)
-    {
-      errmsg ("missing bridge domain");
-      return -99;
-    }
-  else if (ip_set == 0)
-    {
-      errmsg ("missing IP address");
-      return -99;
-    }
-  else if (mac_set == 0)
-    {
-      errmsg ("missing MAC address");
-      return -99;
-    }
-
-  M (BD_IP_MAC_ADD_DEL, mp);
-
-  mp->entry.bd_id = ntohl (bd_id);
-  mp->is_add = is_add;
-
-  clib_memcpy (&mp->entry.ip, &ip, sizeof (ip));
-  clib_memcpy (&mp->entry.mac, &mac, sizeof (mac));
-
-  S (mp);
-  W (ret);
-  return ret;
-}
-
-static int
-api_bd_ip_mac_flush (vat_main_t * vam)
-{
-  unformat_input_t *i = vam->input;
-  vl_api_bd_ip_mac_flush_t *mp;
-  u32 bd_id;
-  u8 bd_id_set = 0;
-  int ret;
-
-  while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
-    {
-      if (unformat (i, "bd_id %d", &bd_id))
-       {
-         bd_id_set++;
-       }
-      else
-       break;
-    }
-
-  if (bd_id_set == 0)
-    {
-      errmsg ("missing bridge domain");
-      return -99;
-    }
-
-  M (BD_IP_MAC_FLUSH, mp);
-
-  mp->bd_id = ntohl (bd_id);
-
-  S (mp);
-  W (ret);
-  return ret;
-}
-
-static void vl_api_bd_ip_mac_details_t_handler
-  (vl_api_bd_ip_mac_details_t * mp)
-{
-  vat_main_t *vam = &vat_main;
-
-  print (vam->ofp,
-        "\n%-5d %U %U",
-        ntohl (mp->entry.bd_id),
-        format_vl_api_mac_address, mp->entry.mac,
-        format_vl_api_address, &mp->entry.ip);
-}
-
-static void vl_api_bd_ip_mac_details_t_handler_json
-  (vl_api_bd_ip_mac_details_t * mp)
-{
-  vat_main_t *vam = &vat_main;
-  vat_json_node_t *node = NULL;
-
-  if (VAT_JSON_ARRAY != vam->json_tree.type)
-    {
-      ASSERT (VAT_JSON_NONE == vam->json_tree.type);
-      vat_json_init_array (&vam->json_tree);
-    }
-  node = vat_json_array_add (&vam->json_tree);
-
-  vat_json_init_object (node);
-  vat_json_object_add_uint (node, "bd_id", ntohl (mp->entry.bd_id));
-  vat_json_object_add_string_copy (node, "mac_address",
-                                  format (0, "%U", format_vl_api_mac_address,
-                                          &mp->entry.mac));
-  u8 *ip = 0;
-
-  ip = format (0, "%U", format_vl_api_address, &mp->entry.ip);
-  vat_json_object_add_string_copy (node, "ip_address", ip);
-  vec_free (ip);
-}
-
-static int
-api_bd_ip_mac_dump (vat_main_t * vam)
-{
-  unformat_input_t *i = vam->input;
-  vl_api_bd_ip_mac_dump_t *mp;
-  vl_api_control_ping_t *mp_ping;
-  int ret;
-  u32 bd_id;
-  u8 bd_id_set = 0;
-
-  while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
-    {
-      if (unformat (i, "bd_id %d", &bd_id))
-       {
-         bd_id_set++;
-       }
-      else
-       break;
-    }
-
-  print (vam->ofp,
-        "\n%-5s %-7s %-20s %-30s",
-        "bd_id", "is_ipv6", "mac_address", "ip_address");
-
-  /* Dump Bridge Domain Ip to Mac entries */
-  M (BD_IP_MAC_DUMP, mp);
-
-  if (bd_id_set)
-    mp->bd_id = htonl (bd_id);
-  else
-    mp->bd_id = ~0;
-
-  S (mp);
-
-  /* Use a control ping for synchronization */
-  MPING (CONTROL_PING, mp_ping);
-  S (mp_ping);
-
-  W (ret);
-  return ret;
-}
-
-uword
-unformat_vlib_pci_addr (unformat_input_t * input, va_list * args)
-{
-  vlib_pci_addr_t *addr = va_arg (*args, vlib_pci_addr_t *);
-  u32 x[4];
-
-  if (!unformat (input, "%x:%x:%x.%x", &x[0], &x[1], &x[2], &x[3]))
-    return 0;
-
-  addr->domain = x[0];
-  addr->bus = x[1];
-  addr->slot = x[2];
-  addr->function = x[3];
-
-  return 1;
-}
-
-static int
-api_ip_table_add_del (vat_main_t * vam)
-{
-  unformat_input_t *i = vam->input;
-  vl_api_ip_table_add_del_t *mp;
-  u32 table_id = ~0;
-  u8 is_ipv6 = 0;
-  u8 is_add = 1;
-  int ret = 0;
-
-  /* Parse args required to build the message */
-  while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
-    {
-      if (unformat (i, "ipv6"))
-       is_ipv6 = 1;
-      else if (unformat (i, "del"))
-       is_add = 0;
-      else if (unformat (i, "add"))
-       is_add = 1;
-      else if (unformat (i, "table %d", &table_id))
-       ;
-      else
-       {
-         clib_warning ("parse error '%U'", format_unformat_error, i);
-         return -99;
-       }
-    }
-
-  if (~0 == table_id)
-    {
-      errmsg ("missing table-ID");
-      return -99;
-    }
-
-  /* Construct the API message */
-  M (IP_TABLE_ADD_DEL, mp);
-
-  mp->table.table_id = ntohl (table_id);
-  mp->table.is_ip6 = is_ipv6;
-  mp->is_add = is_add;
-
-  /* send it... */
-  S (mp);
-
-  /* Wait for a reply... */
-  W (ret);
-
-  return ret;
-}
-
-uword
-unformat_fib_path (unformat_input_t * input, va_list * args)
-{
-  vat_main_t *vam = va_arg (*args, vat_main_t *);
-  vl_api_fib_path_t *path = va_arg (*args, vl_api_fib_path_t *);
-  u32 weight, preference;
-  mpls_label_t out_label;
-
-  clib_memset (path, 0, sizeof (*path));
-  path->weight = 1;
-  path->sw_if_index = ~0;
-  path->rpf_id = ~0;
-  path->n_labels = 0;
-
-  while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
-    {
-      if (unformat (input, "%U %U",
-                   unformat_vl_api_ip4_address,
-                   &path->nh.address.ip4,
-                   api_unformat_sw_if_index, vam, &path->sw_if_index))
-       {
-         path->proto = FIB_API_PATH_NH_PROTO_IP4;
+         path->proto = FIB_API_PATH_NH_PROTO_IP4;
        }
       else if (unformat (input, "%U %U",
                         unformat_vl_api_ip6_address,
@@ -4394,95 +3218,24 @@ api_sw_interface_ip6_enable_disable (vat_main_t * vam)
       else if (unformat (i, "enable"))
        enable = 1;
       else if (unformat (i, "disable"))
-       enable = 0;
-      else
-       {
-         clib_warning ("parse error '%U'", format_unformat_error, i);
-         return -99;
-       }
-    }
-
-  if (sw_if_index_set == 0)
-    {
-      errmsg ("missing interface name or sw_if_index");
-      return -99;
-    }
-
-  M (SW_INTERFACE_IP6_ENABLE_DISABLE, mp);
-
-  mp->sw_if_index = ntohl (sw_if_index);
-  mp->enable = enable;
-
-  S (mp);
-  W (ret);
-  return ret;
-}
-
-
-static int
-api_l2_patch_add_del (vat_main_t * vam)
-{
-  unformat_input_t *i = vam->input;
-  vl_api_l2_patch_add_del_t *mp;
-  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)
-    {
-      if (unformat (i, "rx_sw_if_index %d", &rx_sw_if_index))
-       rx_sw_if_index_set = 1;
-      else if (unformat (i, "tx_sw_if_index %d", &tx_sw_if_index))
-       tx_sw_if_index_set = 1;
-      else if (unformat (i, "rx"))
-       {
-         if (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
-           {
-             if (unformat (i, "%U", api_unformat_sw_if_index, vam,
-                           &rx_sw_if_index))
-               rx_sw_if_index_set = 1;
-           }
-         else
-           break;
-       }
-      else if (unformat (i, "tx"))
-       {
-         if (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
-           {
-             if (unformat (i, "%U", api_unformat_sw_if_index, vam,
-                           &tx_sw_if_index))
-               tx_sw_if_index_set = 1;
-           }
-         else
-           break;
-       }
-      else if (unformat (i, "del"))
-       is_add = 0;
+       enable = 0;
       else
-       break;
-    }
-
-  if (rx_sw_if_index_set == 0)
-    {
-      errmsg ("missing rx interface name or rx_sw_if_index");
-      return -99;
+       {
+         clib_warning ("parse error '%U'", format_unformat_error, i);
+         return -99;
+       }
     }
 
-  if (tx_sw_if_index_set == 0)
+  if (sw_if_index_set == 0)
     {
-      errmsg ("missing tx interface name or tx_sw_if_index");
+      errmsg ("missing interface name or sw_if_index");
       return -99;
     }
 
-  M (L2_PATCH_ADD_DEL, mp);
+  M (SW_INTERFACE_IP6_ENABLE_DISABLE, 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;
+  mp->sw_if_index = ntohl (sw_if_index);
+  mp->enable = enable;
 
   S (mp);
   W (ret);
@@ -5748,63 +4501,6 @@ api_add_node_next (vat_main_t * vam)
   return ret;
 }
 
-static int
-api_l2_fib_clear_table (vat_main_t * vam)
-{
-//  unformat_input_t * i = vam->input;
-  vl_api_l2_fib_clear_table_t *mp;
-  int ret;
-
-  M (L2_FIB_CLEAR_TABLE, mp);
-
-  S (mp);
-  W (ret);
-  return ret;
-}
-
-static int
-api_l2_interface_efp_filter (vat_main_t * vam)
-{
-  unformat_input_t *i = vam->input;
-  vl_api_l2_interface_efp_filter_t *mp;
-  u32 sw_if_index;
-  u8 enable = 1;
-  u8 sw_if_index_set = 0;
-  int ret;
-
-  while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
-    {
-      if (unformat (i, "%U", api_unformat_sw_if_index, vam, &sw_if_index))
-       sw_if_index_set = 1;
-      else if (unformat (i, "sw_if_index %d", &sw_if_index))
-       sw_if_index_set = 1;
-      else if (unformat (i, "enable"))
-       enable = 1;
-      else if (unformat (i, "disable"))
-       enable = 0;
-      else
-       {
-         clib_warning ("parse error '%U'", format_unformat_error, i);
-         return -99;
-       }
-    }
-
-  if (sw_if_index_set == 0)
-    {
-      errmsg ("missing sw_if_index");
-      return -99;
-    }
-
-  M (L2_INTERFACE_EFP_FILTER, mp);
-
-  mp->sw_if_index = ntohl (sw_if_index);
-  mp->enable_disable = enable;
-
-  S (mp);
-  W (ret);
-  return ret;
-}
-
 #define foreach_vtr_op                          \
 _("disable",  L2_VTR_DISABLED)                  \
 _("push-1",  L2_VTR_PUSH_1)                     \
@@ -5816,62 +4512,6 @@ _("translate-1-2",  L2_VTR_TRANSLATE_1_2)       \
 _("translate-2-1",  L2_VTR_TRANSLATE_2_1)       \
 _("translate-2-2",  L2_VTR_TRANSLATE_2_2)
 
-static int
-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;
-  u32 sw_if_index;
-  u8 sw_if_index_set = 0;
-  u8 vtr_op_set = 0;
-  u32 vtr_op = 0;
-  u32 push_dot1q = 1;
-  u32 tag1 = ~0;
-  u32 tag2 = ~0;
-  int ret;
-
-  while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
-    {
-      if (unformat (i, "%U", api_unformat_sw_if_index, vam, &sw_if_index))
-       sw_if_index_set = 1;
-      else if (unformat (i, "sw_if_index %d", &sw_if_index))
-       sw_if_index_set = 1;
-      else if (unformat (i, "vtr_op %d", &vtr_op))
-       vtr_op_set = 1;
-#define _(n,v) else if (unformat(i, n)) {vtr_op = v; vtr_op_set = 1;}
-      foreach_vtr_op
-#undef _
-       else if (unformat (i, "push_dot1q %d", &push_dot1q))
-       ;
-      else if (unformat (i, "tag1 %d", &tag1))
-       ;
-      else if (unformat (i, "tag2 %d", &tag2))
-       ;
-      else
-       {
-         clib_warning ("parse error '%U'", format_unformat_error, i);
-         return -99;
-       }
-    }
-
-  if ((sw_if_index_set == 0) || (vtr_op_set == 0))
-    {
-      errmsg ("missing vtr operation or sw_if_index");
-      return -99;
-    }
-
-  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 (mp);
-  W (ret);
-  return ret;
-}
-
 static int
 api_show_version (vat_main_t *vam)
 {
@@ -5885,80 +4525,6 @@ api_show_version (vat_main_t *vam)
   return ret;
 }
 
-static void
-vl_api_l2_fib_table_details_t_handler (vl_api_l2_fib_table_details_t *mp)
-{
-  vat_main_t *vam = &vat_main;
-
-  print (vam->ofp,
-        "%3" PRIu32 "    %U    %3" PRIu32 "       %d       %d     %d",
-        ntohl (mp->bd_id), format_ethernet_address, mp->mac,
-        ntohl (mp->sw_if_index), mp->static_mac, mp->filter_mac, mp->bvi_mac);
-}
-
-static void
-vl_api_l2_fib_table_details_t_handler_json (vl_api_l2_fib_table_details_t *mp)
-{
-  vat_main_t *vam = &vat_main;
-  vat_json_node_t *node = NULL;
-
-  if (VAT_JSON_ARRAY != vam->json_tree.type)
-    {
-      ASSERT (VAT_JSON_NONE == vam->json_tree.type);
-      vat_json_init_array (&vam->json_tree);
-    }
-  node = vat_json_array_add (&vam->json_tree);
-
-  vat_json_init_object (node);
-  vat_json_object_add_uint (node, "bd_id", ntohl (mp->bd_id));
-  vat_json_object_add_bytes (node, "mac", mp->mac, 6);
-  vat_json_object_add_uint (node, "sw_if_index", ntohl (mp->sw_if_index));
-  vat_json_object_add_uint (node, "static_mac", mp->static_mac);
-  vat_json_object_add_uint (node, "filter_mac", mp->filter_mac);
-  vat_json_object_add_uint (node, "bvi_mac", mp->bvi_mac);
-}
-
-static int
-api_l2_fib_table_dump (vat_main_t *vam)
-{
-  unformat_input_t *i = vam->input;
-  vl_api_l2_fib_table_dump_t *mp;
-  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)
-    {
-      if (unformat (i, "bd_id %d", &bd_id))
-       bd_id_set = 1;
-      else
-       break;
-    }
-
-  if (bd_id_set == 0)
-    {
-      errmsg ("missing bridge domain");
-      return -99;
-    }
-
-  print (vam->ofp, "BD-ID     Mac Address      sw-ndx  Static  Filter  BVI");
-
-  /* Get list of l2 fib entries */
-  M (L2_FIB_TABLE_DUMP, mp);
-
-  mp->bd_id = ntohl (bd_id);
-  S (mp);
-
-  /* Use a control ping for synchronization */
-  MPING (CONTROL_PING, mp_ping);
-  S (mp_ping);
-
-  W (ret);
-  return ret;
-}
-
 static int
 api_interface_name_renumber (vat_main_t *vam)
 {
@@ -6004,42 +4570,6 @@ api_interface_name_renumber (vat_main_t *vam)
   return ret;
 }
 
-static int
-api_want_l2_macs_events (vat_main_t *vam)
-{
-  unformat_input_t *line_input = vam->input;
-  vl_api_want_l2_macs_events_t *mp;
-  u8 enable_disable = 1;
-  u32 scan_delay = 0;
-  u32 max_macs_in_event = 0;
-  u32 learn_limit = 0;
-  int ret;
-
-  while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT)
-    {
-      if (unformat (line_input, "learn-limit %d", &learn_limit))
-       ;
-      else if (unformat (line_input, "scan-delay %d", &scan_delay))
-       ;
-      else if (unformat (line_input, "max-entries %d", &max_macs_in_event))
-       ;
-      else if (unformat (line_input, "disable"))
-       enable_disable = 0;
-      else
-       break;
-    }
-
-  M (WANT_L2_MACS_EVENTS, mp);
-  mp->enable_disable = enable_disable;
-  mp->pid = htonl (getpid ());
-  mp->learn_limit = htonl (learn_limit);
-  mp->scan_delay = (u8) scan_delay;
-  mp->max_macs_in_event = (u8) (max_macs_in_event / 10);
-  S (mp);
-  W (ret);
-  return ret;
-}
-
 static int
 api_ip_address_dump (vat_main_t *vam)
 {
@@ -6762,90 +5292,6 @@ _("disable",  L2_VTR_DISABLED)  \
 _("pop",  L2_VTR_POP_2)         \
 _("push",  L2_VTR_PUSH_2)
 
-static int
-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;
-  u32 sw_if_index = ~0, vtr_op = ~0;
-  u16 outer_tag = ~0;
-  u8 dmac[6], smac[6];
-  u8 dmac_set = 0, smac_set = 0;
-  u16 vlanid = 0;
-  u32 sid = ~0;
-  u32 tmp;
-  int ret;
-
-  /* Shut up coverity */
-  clib_memset (dmac, 0, sizeof (dmac));
-  clib_memset (smac, 0, sizeof (smac));
-
-  while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
-    {
-      if (unformat (i, "%U", api_unformat_sw_if_index, vam, &sw_if_index))
-       ;
-      else if (unformat (i, "sw_if_index %d", &sw_if_index))
-       ;
-      else if (unformat (i, "vtr_op %d", &vtr_op))
-       ;
-#define _(n,v) else if (unformat(i, n)) {vtr_op = v;}
-      foreach_pbb_vtr_op
-#undef _
-       else if (unformat (i, "translate_pbb_stag"))
-       {
-         if (unformat (i, "%d", &tmp))
-           {
-             vtr_op = L2_VTR_TRANSLATE_2_1;
-             outer_tag = tmp;
-           }
-         else
-           {
-             errmsg
-               ("translate_pbb_stag operation requires outer tag definition");
-             return -99;
-           }
-       }
-      else if (unformat (i, "dmac %U", unformat_ethernet_address, dmac))
-       dmac_set++;
-      else if (unformat (i, "smac %U", unformat_ethernet_address, smac))
-       smac_set++;
-      else if (unformat (i, "sid %d", &sid))
-       ;
-      else if (unformat (i, "vlanid %d", &tmp))
-       vlanid = tmp;
-      else
-       {
-         clib_warning ("parse error '%U'", format_unformat_error, i);
-         return -99;
-       }
-    }
-
-  if ((sw_if_index == ~0) || (vtr_op == ~0))
-    {
-      errmsg ("missing sw_if_index or vtr operation");
-      return -99;
-    }
-  if (((vtr_op == L2_VTR_PUSH_2) || (vtr_op == L2_VTR_TRANSLATE_2_2))
-      && ((dmac_set == 0) || (smac_set == 0) || (sid == ~0)))
-    {
-      errmsg
-       ("push and translate_qinq operations require dmac, smac, sid and optionally vlanid");
-      return -99;
-    }
-
-  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);
-  clib_memcpy (mp->b_dmac, dmac, sizeof (dmac));
-  clib_memcpy (mp->b_smac, smac, sizeof (smac));
-  mp->b_vlanid = ntohs (vlanid);
-  mp->i_sid = ntohl (sid);
-
-  S (mp);
-  W (ret);
-  return ret;
-}
 
 static int
 api_sw_interface_tag_add_del (vat_main_t * vam)
@@ -6944,59 +5390,6 @@ api_sw_interface_add_del_mac_address (vat_main_t * vam)
   return ret;
 }
 
-static void vl_api_l2_xconnect_details_t_handler
-  (vl_api_l2_xconnect_details_t * mp)
-{
-  vat_main_t *vam = &vat_main;
-
-  print (vam->ofp, "%15d%15d",
-        ntohl (mp->rx_sw_if_index), ntohl (mp->tx_sw_if_index));
-}
-
-static void vl_api_l2_xconnect_details_t_handler_json
-  (vl_api_l2_xconnect_details_t * mp)
-{
-  vat_main_t *vam = &vat_main;
-  vat_json_node_t *node = NULL;
-
-  if (VAT_JSON_ARRAY != vam->json_tree.type)
-    {
-      ASSERT (VAT_JSON_NONE == vam->json_tree.type);
-      vat_json_init_array (&vam->json_tree);
-    }
-  node = vat_json_array_add (&vam->json_tree);
-
-  vat_json_init_object (node);
-  vat_json_object_add_uint (node, "rx_sw_if_index",
-                           ntohl (mp->rx_sw_if_index));
-  vat_json_object_add_uint (node, "tx_sw_if_index",
-                           ntohl (mp->tx_sw_if_index));
-}
-
-static int
-api_l2_xconnect_dump (vat_main_t * vam)
-{
-  vl_api_l2_xconnect_dump_t *mp;
-  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, mp);
-
-  S (mp);
-
-  /* Use a control ping for synchronization */
-  MPING (CONTROL_PING, mp_ping);
-  S (mp_ping);
-
-  W (ret);
-  return ret;
-}
-
 static int
 api_hw_interface_set_mtu (vat_main_t * vam)
 {
@@ -7975,35 +6368,12 @@ _(sw_interface_set_flags,                                               \
   "<intfc> | sw_if_index <id> admin-up | admin-down link-up | link down") \
 _(sw_interface_add_del_address,                                         \
   "<intfc> | sw_if_index <id> <ip4-address> | <ip6-address> [del] [del-all] ") \
-_(sw_interface_set_rx_mode,                                             \
-  "<intfc> | sw_if_index <id> [queue <id>] <polling | interrupt | adaptive>") \
 _(sw_interface_set_rx_placement,                                        \
   "<intfc> | sw_if_index <id> [queue <id>] [worker <id> | main]")       \
 _(sw_interface_rx_placement_dump,                                       \
   "[<intfc> | sw_if_index <id>]")                                         \
 _(sw_interface_set_table,                                               \
   "<intfc> | sw_if_index <id> vrf <table-id> [ipv6]")                   \
-_(sw_interface_set_vpath,                                               \
-  "<intfc> | sw_if_index <id> enable | disable")                        \
-_(sw_interface_set_l2_xconnect,                                         \
-  "rx <intfc> | rx_sw_if_index <id> tx <intfc> | tx_sw_if_index <id>\n" \
-  "enable | disable")                                                   \
-_(sw_interface_set_l2_bridge,                                           \
-  "{<intfc> | sw_if_index <id>} bd_id <bridge-domain-id>\n"             \
-  "[shg <split-horizon-group>] [bvi]\n"                                 \
-  "enable | disable")                                                   \
-_(bridge_domain_set_mac_age, "bd_id <bridge-domain-id> mac-age 0-255")  \
-_(bridge_domain_add_del,                                                \
-  "bd_id <bridge-domain-id> [flood 1|0] [uu-flood 1|0] [forward 1|0] [learn 1|0] [arp-term 1|0] [mac-age 0-255] [bd-tag <text>] [del]\n") \
-_(bridge_domain_dump, "[bd_id <bridge-domain-id>]\n")                   \
-_(l2fib_add_del,                                                        \
-  "mac <mac-addr> bd_id <bridge-domain-id> [del] | sw_if <intfc> | sw_if_index <id> [static] [filter] [bvi] [count <nn>]\n") \
-_(l2fib_flush_bd, "bd_id <bridge-domain-id>")                           \
-_(l2fib_flush_int, "<intfc> | sw_if_index <id>")                        \
-_(l2_flags,                                                             \
-  "sw_if <intfc> | sw_if_index <id> [learn] [forward] [uu-flood] [flood] [arp-term] [disable]\n") \
-_(bridge_flags,                                                         \
-  "bd_id <bridge-domain-id> [learn] [forward] [uu-flood] [flood] [arp-term] [disable]\n") \
 _(ip_table_add_del,                                                     \
   "table <n> [ipv6] [add | del]\n")                                     \
 _(ip_route_add_del,                                                     \
@@ -8028,29 +6398,15 @@ _(set_ip_flow_hash,                                                     \
   "vrf <n> [src] [dst] [sport] [dport] [proto] [reverse] [ipv6]")       \
 _(sw_interface_ip6_enable_disable,                                      \
   "<intfc> | sw_if_index <id> enable | disable")                        \
-_(l2_patch_add_del,                                                     \
-  "rx <intfc> | rx_sw_if_index <id> tx <intfc> | tx_sw_if_index <id>\n" \
-  "enable | disable")                                                   \
 _(get_node_index, "node <node-name")                                    \
 _(add_node_next, "node <node-name> next <next-node-name>")              \
-_(l2_fib_clear_table, "")                                               \
-_(l2_interface_efp_filter, "sw_if_index <nn> enable | disable")         \
-_(l2_interface_vlan_tag_rewrite,                                        \
-  "<intfc> | sw_if_index <nn> \n"                                       \
-  "[disable][push-[1|2]][pop-[1|2]][translate-1-[1|2]] \n"              \
-  "[translate-2-[1|2]] [push_dot1q 0] tag1 <nn> tag2 <nn>")             \
 _(show_version, "")                                                     \
 _(show_threads, "")                                                     \
-_(l2_fib_table_dump, "bd_id <bridge-domain-id>")                       \
 _(interface_name_renumber,                                              \
   "<intfc> | sw_if_index <nn> new_show_dev_instance <nn>")             \
-_(want_l2_macs_events, "[disable] [learn-limit <n>] [scan-delay <n>] [max-entries <n>]") \
 _(ip_address_dump, "(ipv4 | ipv6) (<intfc> | sw_if_index <id>)")        \
 _(ip_dump, "ipv4 | ipv6")                                               \
 _(delete_loopback,"sw_if_index <nn>")                                   \
-_(bd_ip_mac_add_del, "bd_id <bridge-domain-id> <ip4/6-addr> <mac-addr> [del]") \
-_(bd_ip_mac_flush, "bd_id <bridge-domain-id>")                          \
-_(bd_ip_mac_dump, "[bd_id] <bridge-domain-id>")                         \
 _(want_interface_events,  "enable|disable")                             \
 _(get_first_msg_id, "client <name>")                                   \
 _(get_node_graph, " ")                                                  \
@@ -8064,10 +6420,6 @@ _(ip_source_and_port_range_check_interface_add_del,                     \
   "<intf> | sw_if_index <nn> [tcp-out-vrf <id>] [tcp-in-vrf <id>]"      \
   "[udp-in-vrf <id>] [udp-out-vrf <id>]")                               \
 _(delete_subif,"<intfc> | sw_if_index <nn>")                            \
-_(l2_interface_pbb_tag_rewrite,                                         \
-  "<intfc> | sw_if_index <nn> \n"                                       \
-  "[disable | push | pop | translate_pbb_stag <outer_tag>] \n"          \
-  "dmac <mac> smac <mac> sid <nn> [vlanid <nn>]")                       \
 _(ip_table_dump, "")                                                    \
 _(ip_route_dump, "table-id [ip4|ip6]")                                  \
 _(ip_mtable_dump, "")                                                   \
@@ -8076,7 +6428,6 @@ _(sw_interface_tag_add_del, "<intfc> | sw_if_index <nn> tag <text>"       \
 "[disable]")                                                           \
 _(sw_interface_add_del_mac_address, "<intfc> | sw_if_index <nn> "      \
   "mac <mac-address> [del]")                                            \
-_(l2_xconnect_dump, "")                                                \
 _(hw_interface_set_mtu, "<intfc> | hw_if_index <nn> mtu <nn>")        \
 _(sw_interface_get_table, "<intfc> | sw_if_index <id> [ipv6]")          \
 _(sock_init_shm, "size <nnn>")                                         \
index 01e4ed1..5a0432d 100644 (file)
 #include <vnet/ip/ip_types_api.h>
 #include <vnet/ethernet/ethernet_types_api.h>
 
-#include <vnet/vnet_msg_enum.h>
-
-#define vl_typedefs            /* define message structures */
-#include <vnet/vnet_all_api_h.h>
-#undef vl_typedefs
-
-#define vl_endianfun           /* define message structures */
-#include <vnet/vnet_all_api_h.h>
-#undef vl_endianfun
-
-/* instantiate all the print functions we know about */
-#define vl_print(handle, ...) vlib_cli_output (handle, __VA_ARGS__)
-#define vl_printfun
-#include <vnet/vnet_all_api_h.h>
-#undef vl_printfun
+#include <vnet/format_fns.h>
+#include <vnet/l2/l2.api_enum.h>
+#include <vnet/l2/l2.api_types.h>
 
+#define REPLY_MSG_ID_BASE l2input_main.msg_id_base
 #include <vlibapi/api_helper_macros.h>
 
-#define foreach_vpe_api_msg                                                   \
-  _ (L2_XCONNECT_DUMP, l2_xconnect_dump)                                      \
-  _ (L2_FIB_CLEAR_TABLE, l2_fib_clear_table)                                  \
-  _ (L2_FIB_TABLE_DUMP, l2_fib_table_dump)                                    \
-  _ (L2FIB_FLUSH_ALL, l2fib_flush_all)                                        \
-  _ (L2FIB_FLUSH_INT, l2fib_flush_int)                                        \
-  _ (L2FIB_FLUSH_BD, l2fib_flush_bd)                                          \
-  _ (L2FIB_ADD_DEL, l2fib_add_del)                                            \
-  _ (L2FIB_SET_SCAN_DELAY, l2fib_set_scan_delay)                              \
-  _ (WANT_L2_MACS_EVENTS, want_l2_macs_events)                                \
-  _ (WANT_L2_MACS_EVENTS2, want_l2_macs_events2)                              \
-  _ (L2_FLAGS, l2_flags)                                                      \
-  _ (SW_INTERFACE_SET_L2_XCONNECT, sw_interface_set_l2_xconnect)              \
-  _ (SW_INTERFACE_SET_L2_BRIDGE, sw_interface_set_l2_bridge)                  \
-  _ (L2_PATCH_ADD_DEL, l2_patch_add_del)                                      \
-  _ (L2_INTERFACE_EFP_FILTER, l2_interface_efp_filter)                        \
-  _ (BD_IP_MAC_ADD_DEL, bd_ip_mac_add_del)                                    \
-  _ (BD_IP_MAC_FLUSH, bd_ip_mac_flush)                                        \
-  _ (BD_IP_MAC_DUMP, bd_ip_mac_dump)                                          \
-  _ (BRIDGE_DOMAIN_ADD_DEL, bridge_domain_add_del)                            \
-  _ (BRIDGE_DOMAIN_DUMP, bridge_domain_dump)                                  \
-  _ (BRIDGE_FLAGS, bridge_flags)                                              \
-  _ (L2_INTERFACE_VLAN_TAG_REWRITE, l2_interface_vlan_tag_rewrite)            \
-  _ (L2_INTERFACE_PBB_TAG_REWRITE, l2_interface_pbb_tag_rewrite)              \
-  _ (BRIDGE_DOMAIN_SET_MAC_AGE, bridge_domain_set_mac_age)                    \
-  _ (SW_INTERFACE_SET_VPATH, sw_interface_set_vpath)                          \
-  _ (BVI_CREATE, bvi_create)                                                  \
-  _ (BVI_DELETE, bvi_delete)                                                  \
-  _ (WANT_L2_ARP_TERM_EVENTS, want_l2_arp_term_events)                        \
-  _ (BRIDGE_DOMAIN_SET_LEARN_LIMIT, bridge_domain_set_learn_limit)            \
-  _ (BRIDGE_DOMAIN_SET_DEFAULT_LEARN_LIMIT,                                   \
-     bridge_domain_set_default_learn_limit)
-
 static void
 send_l2_xconnect_details (vl_api_registration_t * reg, u32 context,
                          u32 rx_sw_if_index, u32 tx_sw_if_index)
@@ -91,7 +47,7 @@ send_l2_xconnect_details (vl_api_registration_t * reg, u32 context,
 
   mp = vl_msg_api_alloc (sizeof (*mp));
   clib_memset (mp, 0, sizeof (*mp));
-  mp->_vl_msg_id = ntohs (VL_API_L2_XCONNECT_DETAILS);
+  mp->_vl_msg_id = ntohs (REPLY_MSG_ID_BASE + VL_API_L2_XCONNECT_DETAILS);
   mp->context = context;
   mp->rx_sw_if_index = htonl (rx_sw_if_index);
   mp->tx_sw_if_index = htonl (tx_sw_if_index);
@@ -144,7 +100,7 @@ send_l2fib_table_entry (vpe_api_main_t * am,
 
   mp = vl_msg_api_alloc (sizeof (*mp));
   clib_memset (mp, 0, sizeof (*mp));
-  mp->_vl_msg_id = ntohs (VL_API_L2_FIB_TABLE_DETAILS);
+  mp->_vl_msg_id = ntohs (REPLY_MSG_ID_BASE + VL_API_L2_FIB_TABLE_DETAILS);
 
   mp->bd_id =
     ntohl (l2input_main.bd_configs[l2fe_key->fields.bd_index].bd_id);
@@ -568,7 +524,7 @@ send_bridge_domain_details (l2input_main_t * l2im,
   mp = vl_msg_api_alloc (sizeof (*mp) +
                         (n_sw_ifs * sizeof (vl_api_bridge_domain_sw_if_t)));
   clib_memset (mp, 0, sizeof (*mp));
-  mp->_vl_msg_id = ntohs (VL_API_BRIDGE_DOMAIN_DETAILS);
+  mp->_vl_msg_id = ntohs (REPLY_MSG_ID_BASE + VL_API_BRIDGE_DOMAIN_DETAILS);
   mp->bd_id = ntohl (bd_config->bd_id);
   mp->flood = bd_feature_flood (bd_config);
   mp->uu_flood = bd_feature_uu_flood (bd_config);
@@ -907,7 +863,7 @@ send_bd_ip_mac_entry (vpe_api_main_t * am,
 
   mp = vl_msg_api_alloc (sizeof (*mp));
   clib_memset (mp, 0, sizeof (*mp));
-  mp->_vl_msg_id = ntohs (VL_API_BD_IP_MAC_DETAILS);
+  mp->_vl_msg_id = ntohs (REPLY_MSG_ID_BASE + VL_API_BD_IP_MAC_DETAILS);
 
   mp->context = context;
   mp->entry.bd_id = ntohl (bd_id);
@@ -1219,7 +1175,8 @@ l2_arp_term_process (vlib_main_t * vm, vlib_node_runtime_t * rt,
                    vl_api_l2_arp_term_event_t *vevent;
                    vevent = vl_msg_api_alloc (sizeof *vevent);
                    clib_memset (vevent, 0, sizeof *vevent);
-                   vevent->_vl_msg_id = htons (VL_API_L2_ARP_TERM_EVENT);
+                   vevent->_vl_msg_id =
+                     htons (REPLY_MSG_ID_BASE + VL_API_L2_ARP_TERM_EVENT);
                    vevent->client_index = reg->client_index;
                    vevent->pid = reg->client_pid;
                    ip_address_encode (&event->ip, event->type, &vevent->ip);
@@ -1317,47 +1274,19 @@ want_l2_arp_term_events_reaper (u32 client_index)
 
 VL_MSG_API_REAPER_FUNCTION (want_l2_arp_term_events_reaper);
 
-/*
- * l2_api_hookup
- * Add vpe's API message handlers to the table.
- * vlib has already mapped shared memory and
- * added the client registration handlers.
- * See .../vlib-api/vlibmemory/memclnt_vlib.c:memclnt_process()
- */
-#define vl_msg_name_crc_list
-#include <vnet/vnet_all_api_h.h>
-#undef vl_msg_name_crc_list
-
-static void
-setup_message_id_table (api_main_t * am)
-{
-#define _(id,n,crc) vl_msg_api_add_msg_name_crc (am, #n "_" #crc, id);
-  foreach_vl_msg_name_crc_l2;
-#undef _
-}
-
+#include <vnet/l2/l2.api.c>
 static clib_error_t *
 l2_api_hookup (vlib_main_t * vm)
 {
   api_main_t *am = vlibapi_get_main ();
 
-#define _(N,n)                                                  \
-    vl_msg_api_set_handlers(VL_API_##N, #n,                     \
-                           vl_api_##n##_t_handler,              \
-                           vl_noop_handler,                     \
-                           vl_api_##n##_t_endian,               \
-                           vl_api_##n##_t_print,                \
-                           sizeof(vl_api_##n##_t), 1);
-  foreach_vpe_api_msg;
-#undef _
-
   /* Mark VL_API_BRIDGE_DOMAIN_DUMP as mp safe */
   am->is_mp_safe[VL_API_BRIDGE_DOMAIN_DUMP] = 1;
 
   /*
    * Set up the (msg_name, crc, message-id) table
    */
-  setup_message_id_table (am);
+  REPLY_MSG_ID_BASE = setup_message_id_table ();
 
   return 0;
 }
index 4407cb5..478f676 100644 (file)
 #include <vnet/l2/l2_fib.h>
 #include <vnet/l2/l2_learn.h>
 #include <vnet/l2/l2_bd.h>
-
 #include <vppinfra/bihash_template.c>
-
 #include <vlibmemory/api.h>
-#include <vnet/vnet_msg_enum.h>
 
-#define vl_typedefs            /* define message structures */
-#include <vnet/vnet_all_api_h.h>
-#undef vl_typedefs
+#include <vnet/l2/l2.api_enum.h>
+#include <vnet/l2/l2.api_types.h>
 
-#define vl_endianfun           /* define message structures */
-#include <vnet/vnet_all_api_h.h>
+#define vl_endianfun
+#include <vnet/l2/l2.api.h>
 #undef vl_endianfun
 
 /**
@@ -1078,7 +1074,7 @@ allocate_mac_evt_buf (u32 client, u32 client_index)
   l2fib_main_t *fm = &l2fib_main;
   vl_api_l2_macs_event_t *mp = vl_msg_api_alloc
     (sizeof (*mp) + (fm->max_macs_in_event * sizeof (vl_api_mac_entry_t)));
-  mp->_vl_msg_id = htons (VL_API_L2_MACS_EVENT);
+  mp->_vl_msg_id = htons (l2input_main.msg_id_base + VL_API_L2_MACS_EVENT);
   mp->pid = htonl (client);
   mp->client_index = client_index;
   return mp;
index adc130e..ba4c4b6 100644 (file)
@@ -95,6 +95,8 @@ typedef struct
   /* convenience variables */
   vlib_main_t *vlib_main;
   vnet_main_t *vnet_main;
+
+  u16 msg_id_base;
 } l2input_main_t;
 
 extern l2input_main_t l2input_main;
index 9978181..4aca0d7 100644 (file)
@@ -34,7 +34,6 @@
 #endif
 
 #include <vnet/interface.api.h>
-#include <vnet/l2/l2.api.h>
 #include <vnet/ip/ip.api.h>
 #include <vnet/session/session.api.h>
 #include <vnet/srmpls/sr_mpls.api.h>