API refactoring : vhost_user 24/4424/2
authorPavel Kotucek <pkotucek@cisco.com>
Tue, 20 Dec 2016 11:17:37 +0000 (12:17 +0100)
committerDamjan Marion <damarion@cisco.com>
Wed, 21 Dec 2016 21:23:37 +0000 (22:23 +0100)
Change-Id: I8813d5500973079d582e0bb5f8c2052f8f31c5c7
Signed-off-by: Pavel Kotucek <pkotucek@cisco.com>
vnet/Makefile.am
vnet/vnet/devices/virtio/vhost_user.api [new file with mode: 0644]
vnet/vnet/devices/virtio/vhost_user_api.c [new file with mode: 0644]
vnet/vnet/vnet_all_api_h.h
vpp-api/java/Makefile.am
vpp/vpp-api/api.c
vpp/vpp-api/vpe.api

index d0f4d9e..e871b1c 100644 (file)
@@ -20,6 +20,8 @@ BUILT_SOURCES =                               \
  vnet/devices/af_packet/af_packet.api.json     \
  vnet/devices/netmap/netmap.api.h              \
  vnet/devices/netmap/netmap.api.json           \
+ vnet/devices/virtio/vhost_user.api.h          \
+ vnet/devices/virtio/vhost_user.api.json       \
  vnet/interface.api.h                          \
  vnet/interface.api.json                       \
  vnet/ip/ip.api.h                              \
@@ -751,10 +753,12 @@ endif
 ########################################
 
 libvnet_la_SOURCES +=       \
-  vnet/devices/virtio/vhost-user.c
+  vnet/devices/virtio/vhost-user.c     \
+  vnet/devices/virtio/vhost_user_api.c
 
 nobase_include_HEADERS +=     \
-  vnet/devices/virtio/vhost-user.h
+  vnet/devices/virtio/vhost-user.h     \
+  vnet/devices/virtio/vhost_user.api.h
 
 ########################################
 # ssvm ethernet
@@ -947,6 +951,7 @@ apidir = $(prefix)/vnet
 api_DATA =                                     \
  vnet/devices/af_packet/af_packet.api.json     \
  vnet/devices/netmap/netmap.api.json           \
+ vnet/devices/virtio/vhost_user.api.json       \
  vnet/interface.api.json                       \
  vnet/ip/ip.api.json                           \
  vnet/l2/l2.api.json                           \
diff --git a/vnet/vnet/devices/virtio/vhost_user.api b/vnet/vnet/devices/virtio/vhost_user.api
new file mode 100644 (file)
index 0000000..21e4229
--- /dev/null
@@ -0,0 +1,125 @@
+/*
+ * Copyright (c) 2015-2016 Cisco and/or its affiliates.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/** \brief vhost-user interface create request
+    @param client_index - opaque cookie to identify the sender
+    @param is_server - our side is socket server
+    @param sock_filename - unix socket filename, used to speak with frontend
+    @param use_custom_mac - enable or disable the use of the provided hardware address
+    @param mac_address - hardware address to use if 'use_custom_mac' is set
+*/
+define create_vhost_user_if
+{
+  u32 client_index;
+  u32 context;
+  u8 is_server;
+  u8 sock_filename[256];
+  u8 renumber;
+  u32 custom_dev_instance;
+  u8 use_custom_mac;
+  u8 mac_address[6];
+  u8 tag[64];
+};
+
+/** \brief vhost-user interface create response
+    @param context - sender context, to match reply w/ request
+    @param retval - return code for the request
+    @param sw_if_index - interface the operation is applied to
+*/
+define create_vhost_user_if_reply
+{
+  u32 context;
+  i32 retval;
+  u32 sw_if_index;
+};
+
+/** \brief vhost-user interface modify request
+    @param client_index - opaque cookie to identify the sender
+    @param is_server - our side is socket server
+    @param sock_filename - unix socket filename, used to speak with frontend
+*/
+define modify_vhost_user_if
+{
+  u32 client_index;
+  u32 context;
+  u32 sw_if_index;
+  u8 is_server;
+  u8 sock_filename[256];
+  u8 renumber;
+  u32 custom_dev_instance;
+};
+
+/** \brief vhost-user interface modify response
+    @param context - sender context, to match reply w/ request
+    @param retval - return code for the request
+*/
+define modify_vhost_user_if_reply
+{
+  u32 context;
+  i32 retval;
+};
+
+/** \brief vhost-user interface delete request
+    @param client_index - opaque cookie to identify the sender
+*/
+define delete_vhost_user_if
+{
+  u32 client_index;
+  u32 context;
+  u32 sw_if_index;
+};
+
+/** \brief vhost-user interface delete response
+    @param context - sender context, to match reply w/ request
+    @param retval - return code for the request
+*/
+define delete_vhost_user_if_reply
+{
+  u32 context;
+  i32 retval;
+};
+
+/** \brief Vhost-user interface details structure (fix this)
+    @param sw_if_index - index of the interface
+    @param interface_name - name of interface
+    @param virtio_net_hdr_sz - net header size
+    @param features - interface features
+    @param is_server - vhost-user server socket
+    @param sock_filename - socket filename
+    @param num_regions - number of used memory regions
+*/
+define sw_interface_vhost_user_details
+{
+  u32 context;
+  u32 sw_if_index;
+  u8 interface_name[64];
+  u32 virtio_net_hdr_sz;
+  u64 features;
+  u8 is_server;
+  u8 sock_filename[256];
+  u32 num_regions;
+  i32 sock_errno;
+};
+
+define sw_interface_vhost_user_dump
+{
+  u32 client_index;
+  u32 context;
+};
+/*
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/vnet/vnet/devices/virtio/vhost_user_api.c b/vnet/vnet/devices/virtio/vhost_user_api.c
new file mode 100644 (file)
index 0000000..dd517c2
--- /dev/null
@@ -0,0 +1,262 @@
+/*
+ *------------------------------------------------------------------
+ * vhost-user_api.c - vhost-user api
+ *
+ * Copyright (c) 2016 Cisco and/or its affiliates.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *------------------------------------------------------------------
+ */
+
+#include <vnet/vnet.h>
+#include <vlibmemory/api.h>
+
+#include <vnet/interface.h>
+#include <vnet/api_errno.h>
+#include <vnet/devices/virtio/vhost-user.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 <vlibapi/api_helper_macros.h>
+
+#define foreach_vpe_api_msg                                             \
+_(CREATE_VHOST_USER_IF, create_vhost_user_if)                           \
+_(MODIFY_VHOST_USER_IF, modify_vhost_user_if)                           \
+_(DELETE_VHOST_USER_IF, delete_vhost_user_if)                           \
+_(SW_INTERFACE_VHOST_USER_DUMP, sw_interface_vhost_user_dump)           \
+_(SW_INTERFACE_VHOST_USER_DETAILS, sw_interface_vhost_user_details)
+
+/*
+ * WARNING: replicated pending api refactor completion
+ */
+static void
+send_sw_interface_flags_deleted (vpe_api_main_t * am,
+                                unix_shared_memory_queue_t * q,
+                                u32 sw_if_index)
+{
+  vl_api_sw_interface_set_flags_t *mp;
+
+  mp = vl_msg_api_alloc (sizeof (*mp));
+  memset (mp, 0, sizeof (*mp));
+  mp->_vl_msg_id = ntohs (VL_API_SW_INTERFACE_SET_FLAGS);
+  mp->sw_if_index = ntohl (sw_if_index);
+
+  mp->admin_up_down = 0;
+  mp->link_up_down = 0;
+  mp->deleted = 1;
+  vl_msg_api_send_shmem (q, (u8 *) & mp);
+}
+
+static void
+vl_api_create_vhost_user_if_t_handler (vl_api_create_vhost_user_if_t * mp)
+{
+  int rv = 0;
+  vl_api_create_vhost_user_if_reply_t *rmp;
+  u32 sw_if_index = (u32) ~ 0;
+  vnet_main_t *vnm = vnet_get_main ();
+  vlib_main_t *vm = vlib_get_main ();
+
+  rv = vhost_user_create_if (vnm, vm, (char *) mp->sock_filename,
+                            mp->is_server, &sw_if_index, (u64) ~ 0,
+                            mp->renumber, ntohl (mp->custom_dev_instance),
+                            (mp->use_custom_mac) ? mp->mac_address : NULL);
+
+  /* Remember an interface tag for the new interface */
+  if (rv == 0)
+    {
+      /* If a tag was supplied... */
+      if (mp->tag[0])
+       {
+         /* Make sure it's a proper C-string */
+         mp->tag[ARRAY_LEN (mp->tag) - 1] = 0;
+         u8 *tag = format (0, "%s%c", mp->tag, 0);
+         vnet_set_sw_interface_tag (vnm, tag, sw_if_index);
+       }
+    }
+
+  /* *INDENT-OFF* */
+  REPLY_MACRO2(VL_API_CREATE_VHOST_USER_IF_REPLY,
+  ({
+    rmp->sw_if_index = ntohl (sw_if_index);
+  }));
+  /* *INDENT-ON* */
+}
+
+static void
+vl_api_modify_vhost_user_if_t_handler (vl_api_modify_vhost_user_if_t * mp)
+{
+  int rv = 0;
+  vl_api_modify_vhost_user_if_reply_t *rmp;
+  u32 sw_if_index = ntohl (mp->sw_if_index);
+
+  vnet_main_t *vnm = vnet_get_main ();
+  vlib_main_t *vm = vlib_get_main ();
+
+  rv = vhost_user_modify_if (vnm, vm, (char *) mp->sock_filename,
+                            mp->is_server, sw_if_index, (u64) ~ 0,
+                            mp->renumber, ntohl (mp->custom_dev_instance));
+
+  REPLY_MACRO (VL_API_MODIFY_VHOST_USER_IF_REPLY);
+}
+
+static void
+vl_api_delete_vhost_user_if_t_handler (vl_api_delete_vhost_user_if_t * mp)
+{
+  int rv = 0;
+  vl_api_delete_vhost_user_if_reply_t *rmp;
+  vpe_api_main_t *vam = &vpe_api_main;
+  u32 sw_if_index = ntohl (mp->sw_if_index);
+
+  vnet_main_t *vnm = vnet_get_main ();
+  vlib_main_t *vm = vlib_get_main ();
+
+  rv = vhost_user_delete_if (vnm, vm, sw_if_index);
+
+  REPLY_MACRO (VL_API_DELETE_VHOST_USER_IF_REPLY);
+  if (!rv)
+    {
+      unix_shared_memory_queue_t *q =
+       vl_api_client_index_to_input_queue (mp->client_index);
+      if (!q)
+       return;
+
+      vnet_clear_sw_interface_tag (vnm, sw_if_index);
+      send_sw_interface_flags_deleted (vam, q, sw_if_index);
+    }
+}
+
+static void
+  vl_api_sw_interface_vhost_user_details_t_handler
+  (vl_api_sw_interface_vhost_user_details_t * mp)
+{
+  clib_warning ("BUG");
+}
+
+static void
+send_sw_interface_vhost_user_details (vpe_api_main_t * am,
+                                     unix_shared_memory_queue_t * q,
+                                     vhost_user_intf_details_t * vui,
+                                     u32 context)
+{
+  vl_api_sw_interface_vhost_user_details_t *mp;
+
+  mp = vl_msg_api_alloc (sizeof (*mp));
+  memset (mp, 0, sizeof (*mp));
+  mp->_vl_msg_id = ntohs (VL_API_SW_INTERFACE_VHOST_USER_DETAILS);
+  mp->sw_if_index = ntohl (vui->sw_if_index);
+  mp->virtio_net_hdr_sz = ntohl (vui->virtio_net_hdr_sz);
+  mp->features = clib_net_to_host_u64 (vui->features);
+  mp->is_server = vui->is_server;
+  mp->num_regions = ntohl (vui->num_regions);
+  mp->sock_errno = ntohl (vui->sock_errno);
+  mp->context = context;
+
+  strncpy ((char *) mp->sock_filename,
+          (char *) vui->sock_filename, ARRAY_LEN (mp->sock_filename) - 1);
+  strncpy ((char *) mp->interface_name,
+          (char *) vui->if_name, ARRAY_LEN (mp->interface_name) - 1);
+
+  vl_msg_api_send_shmem (q, (u8 *) & mp);
+}
+
+static void
+  vl_api_sw_interface_vhost_user_dump_t_handler
+  (vl_api_sw_interface_vhost_user_dump_t * mp)
+{
+  int rv = 0;
+  vpe_api_main_t *am = &vpe_api_main;
+  vnet_main_t *vnm = vnet_get_main ();
+  vlib_main_t *vm = vlib_get_main ();
+  vhost_user_intf_details_t *ifaces = NULL;
+  vhost_user_intf_details_t *vuid = NULL;
+  unix_shared_memory_queue_t *q;
+
+  q = vl_api_client_index_to_input_queue (mp->client_index);
+  if (q == 0)
+    return;
+
+  rv = vhost_user_dump_ifs (vnm, vm, &ifaces);
+  if (rv)
+    return;
+
+  vec_foreach (vuid, ifaces)
+  {
+    send_sw_interface_vhost_user_details (am, q, vuid, mp->context);
+  }
+  vec_free (ifaces);
+}
+
+/*
+ * vhost-user_api_hookup
+ * Add vpe's API message handlers to the table.
+ * vlib has alread 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_vhost_user;
+#undef _
+}
+
+static clib_error_t *
+vhost_user_api_hookup (vlib_main_t * vm)
+{
+  api_main_t *am = &api_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 _
+
+  /*
+   * Set up the (msg_name, crc, message-id) table
+   */
+  setup_message_id_table (am);
+
+  return 0;
+}
+
+VLIB_API_INIT_FUNCTION (vhost_user_api_hookup);
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
index 6697529..4f4eb76 100644 (file)
@@ -31,6 +31,7 @@
 
 #include <vnet/devices/af_packet/af_packet.api.h>
 #include <vnet/devices/netmap/netmap.api.h>
+#include <vnet/devices/virtio/vhost_user.api.h>
 #include <vnet/interface.api.h>
 #include <vnet/map/map.api.h>
 #include <vnet/l2/l2.api.h>
index dc369d5..d1ed33d 100644 (file)
@@ -87,6 +87,7 @@ jvpp-core/io_fd_vpp_jvpp_core_JVppCoreImpl.h:         \
     jvpp-registry/io_fd_vpp_jvpp_VppJNIConnection.h    \
     $(prefix)/../vnet/vnet/af_packet.api.json          \
     $(prefix)/../vnet/vnet/netmap.api.json             \
+    $(prefix)/../vnet/vnet/vhost_user.api.json         \
     $(prefix)/../vpp/vpp-api/vpe.api.json              \
     $(prefix)/../vnet/vnet/ip.api.json                         \
     $(prefix)/../vnet/vnet/tap.api.json                \
@@ -99,6 +100,7 @@ jvpp-core/io_fd_vpp_jvpp_core_JVppCoreImpl.h:                \
                    -i $(prefix)/../vpp/vpp-api/vpe.api.json \
                    $(prefix)/../vnet/vnet/af_packet.api.json \
                    $(prefix)/../vnet/vnet/netmap.api.json \
+                   $(prefix)/../vnet/vnet/vhost_user.api.json \
                    $(prefix)/../vnet/vnet/interface.api.json \
                    $(prefix)/../vnet/vnet/l2.api.json \
                    $(prefix)/../vnet/vnet/map.api.json \
index 2a38cb3..fc07550 100644 (file)
 #include <vnet/ipsec/ipsec.h>
 #include <vnet/ipsec/ikev2.h>
 #endif /* IPSEC */
-#include <vnet/devices/virtio/vhost-user.h>
 
 #include <stats/stats.h>
 #include <oam/oam.h>
@@ -198,11 +197,6 @@ _(GRE_TUNNEL_DUMP, gre_tunnel_dump)                                     \
 _(L2_FIB_CLEAR_TABLE, l2_fib_clear_table)                               \
 _(L2_INTERFACE_EFP_FILTER, l2_interface_efp_filter)                     \
 _(L2_INTERFACE_VLAN_TAG_REWRITE, l2_interface_vlan_tag_rewrite)         \
-_(CREATE_VHOST_USER_IF, create_vhost_user_if)                           \
-_(MODIFY_VHOST_USER_IF, modify_vhost_user_if)                           \
-_(DELETE_VHOST_USER_IF, delete_vhost_user_if)                           \
-_(SW_INTERFACE_VHOST_USER_DUMP, sw_interface_vhost_user_dump)           \
-_(SW_INTERFACE_VHOST_USER_DETAILS, sw_interface_vhost_user_details)    \
 _(SHOW_VERSION, show_version)                                          \
 _(L2_FIB_TABLE_DUMP, l2_fib_table_dump)                                        \
 _(L2_FIB_TABLE_ENTRY, l2_fib_table_entry)                               \
@@ -1606,27 +1600,6 @@ static void
   REPLY_MACRO (VL_API_SW_INTERFACE_SET_MPLS_ENABLE_REPLY);
 }
 
-/*
- * WARNING: replicated pending api refactor completion
- */
-static void
-send_sw_interface_flags_deleted (vpe_api_main_t * am,
-                                unix_shared_memory_queue_t * q,
-                                u32 sw_if_index)
-{
-  vl_api_sw_interface_set_flags_t *mp;
-
-  mp = vl_msg_api_alloc (sizeof (*mp));
-  memset (mp, 0, sizeof (*mp));
-  mp->_vl_msg_id = ntohs (VL_API_SW_INTERFACE_SET_FLAGS);
-  mp->sw_if_index = ntohl (sw_if_index);
-
-  mp->admin_up_down = 0;
-  mp->link_up_down = 0;
-  mp->deleted = 1;
-  vl_msg_api_send_shmem (q, (u8 *) & mp);
-}
-
 void
 send_oam_event (oam_target_t * t)
 {
@@ -2582,145 +2555,6 @@ static void
   REPLY_MACRO (VL_API_L2_INTERFACE_VLAN_TAG_REWRITE_REPLY);
 }
 
-static void
-vl_api_create_vhost_user_if_t_handler (vl_api_create_vhost_user_if_t * mp)
-{
-  int rv = 0;
-  vl_api_create_vhost_user_if_reply_t *rmp;
-  u32 sw_if_index = (u32) ~ 0;
-  vnet_main_t *vnm = vnet_get_main ();
-  vlib_main_t *vm = vlib_get_main ();
-
-  rv = vhost_user_create_if (vnm, vm, (char *) mp->sock_filename,
-                            mp->is_server, &sw_if_index, (u64) ~ 0,
-                            mp->renumber, ntohl (mp->custom_dev_instance),
-                            (mp->use_custom_mac) ? mp->mac_address : NULL);
-
-  /* Remember an interface tag for the new interface */
-  if (rv == 0)
-    {
-      /* If a tag was supplied... */
-      if (mp->tag[0])
-       {
-         /* Make sure it's a proper C-string */
-         mp->tag[ARRAY_LEN (mp->tag) - 1] = 0;
-         u8 *tag = format (0, "%s%c", mp->tag, 0);
-         vnet_set_sw_interface_tag (vnm, tag, sw_if_index);
-       }
-    }
-
-  /* *INDENT-OFF* */
-  REPLY_MACRO2(VL_API_CREATE_VHOST_USER_IF_REPLY,
-  ({
-    rmp->sw_if_index = ntohl (sw_if_index);
-  }));
-  /* *INDENT-ON* */
-}
-
-static void
-vl_api_modify_vhost_user_if_t_handler (vl_api_modify_vhost_user_if_t * mp)
-{
-  int rv = 0;
-  vl_api_modify_vhost_user_if_reply_t *rmp;
-  u32 sw_if_index = ntohl (mp->sw_if_index);
-
-  vnet_main_t *vnm = vnet_get_main ();
-  vlib_main_t *vm = vlib_get_main ();
-
-  rv = vhost_user_modify_if (vnm, vm, (char *) mp->sock_filename,
-                            mp->is_server, sw_if_index, (u64) ~ 0,
-                            mp->renumber, ntohl (mp->custom_dev_instance));
-
-  REPLY_MACRO (VL_API_MODIFY_VHOST_USER_IF_REPLY);
-}
-
-static void
-vl_api_delete_vhost_user_if_t_handler (vl_api_delete_vhost_user_if_t * mp)
-{
-  int rv = 0;
-  vl_api_delete_vhost_user_if_reply_t *rmp;
-  vpe_api_main_t *vam = &vpe_api_main;
-  u32 sw_if_index = ntohl (mp->sw_if_index);
-
-  vnet_main_t *vnm = vnet_get_main ();
-  vlib_main_t *vm = vlib_get_main ();
-
-  rv = vhost_user_delete_if (vnm, vm, sw_if_index);
-
-  REPLY_MACRO (VL_API_DELETE_VHOST_USER_IF_REPLY);
-  if (!rv)
-    {
-      unix_shared_memory_queue_t *q =
-       vl_api_client_index_to_input_queue (mp->client_index);
-      if (!q)
-       return;
-
-      vnet_clear_sw_interface_tag (vnm, sw_if_index);
-      send_sw_interface_flags_deleted (vam, q, sw_if_index);
-    }
-}
-
-static void
-  vl_api_sw_interface_vhost_user_details_t_handler
-  (vl_api_sw_interface_vhost_user_details_t * mp)
-{
-  clib_warning ("BUG");
-}
-
-static void
-send_sw_interface_vhost_user_details (vpe_api_main_t * am,
-                                     unix_shared_memory_queue_t * q,
-                                     vhost_user_intf_details_t * vui,
-                                     u32 context)
-{
-  vl_api_sw_interface_vhost_user_details_t *mp;
-
-  mp = vl_msg_api_alloc (sizeof (*mp));
-  memset (mp, 0, sizeof (*mp));
-  mp->_vl_msg_id = ntohs (VL_API_SW_INTERFACE_VHOST_USER_DETAILS);
-  mp->sw_if_index = ntohl (vui->sw_if_index);
-  mp->virtio_net_hdr_sz = ntohl (vui->virtio_net_hdr_sz);
-  mp->features = clib_net_to_host_u64 (vui->features);
-  mp->is_server = vui->is_server;
-  mp->num_regions = ntohl (vui->num_regions);
-  mp->sock_errno = ntohl (vui->sock_errno);
-  mp->context = context;
-
-  strncpy ((char *) mp->sock_filename,
-          (char *) vui->sock_filename, ARRAY_LEN (mp->sock_filename) - 1);
-  strncpy ((char *) mp->interface_name,
-          (char *) vui->if_name, ARRAY_LEN (mp->interface_name) - 1);
-
-  vl_msg_api_send_shmem (q, (u8 *) & mp);
-}
-
-static void
-  vl_api_sw_interface_vhost_user_dump_t_handler
-  (vl_api_sw_interface_vhost_user_dump_t * mp)
-{
-  int rv = 0;
-  vpe_api_main_t *am = &vpe_api_main;
-  vnet_main_t *vnm = vnet_get_main ();
-  vlib_main_t *vm = vlib_get_main ();
-  vhost_user_intf_details_t *ifaces = NULL;
-  vhost_user_intf_details_t *vuid = NULL;
-  unix_shared_memory_queue_t *q;
-
-  q = vl_api_client_index_to_input_queue (mp->client_index);
-  if (q == 0)
-    return;
-
-  rv = vhost_user_dump_ifs (vnm, vm, &ifaces);
-  if (rv)
-    return;
-
-  vec_foreach (vuid, ifaces)
-  {
-    send_sw_interface_vhost_user_details (am, q, vuid, mp->context);
-  }
-  vec_free (ifaces);
-}
-
 static void
 send_sw_if_l2tpv3_tunnel_details (vpe_api_main_t * am,
                                  unix_shared_memory_queue_t * q,
index 38561b6..2bd3006 100644 (file)
@@ -28,6 +28,7 @@
  * VXLAN APIs: see .../vnet/vnet/vxlan/{vxlan.api, vxlan_api.c}
  * AF-PACKET APIs: ... see /vnet/devices/af_packet/{af_packet.api, af_packet_api.c}
  * NETMAP APIs: see ... /vnet/vnet/devices/netmap/{netmap.api, netmap_api.c}
+ * VHOST-USER APIs: see .../vnet/devices/virtio/{vhost_user.api, vhost_user_api.c}
  */
 
 /** \brief Create a new subinterface with the given vlan id
@@ -1542,84 +1543,6 @@ define l2_interface_vlan_tag_rewrite_reply
   i32 retval;
 };
 
-/** \brief vhost-user interface create request
-    @param client_index - opaque cookie to identify the sender
-    @param is_server - our side is socket server
-    @param sock_filename - unix socket filename, used to speak with frontend
-    @param use_custom_mac - enable or disable the use of the provided hardware address
-    @param mac_address - hardware address to use if 'use_custom_mac' is set
-*/
-define create_vhost_user_if
-{
-  u32 client_index;
-  u32 context;
-  u8 is_server;
-  u8 sock_filename[256];
-  u8 renumber;
-  u32 custom_dev_instance;
-  u8 use_custom_mac;
-  u8 mac_address[6];
-  u8 tag[64];
-};
-
-/** \brief vhost-user interface create response
-    @param context - sender context, to match reply w/ request
-    @param retval - return code for the request
-    @param sw_if_index - interface the operation is applied to
-*/
-define create_vhost_user_if_reply
-{
-  u32 context;
-  i32 retval;
-  u32 sw_if_index;
-};
-
-/** \brief vhost-user interface modify request
-    @param client_index - opaque cookie to identify the sender
-    @param is_server - our side is socket server
-    @param sock_filename - unix socket filename, used to speak with frontend
-*/
-define modify_vhost_user_if
-{
-  u32 client_index;
-  u32 context;
-  u32 sw_if_index;
-  u8 is_server;
-  u8 sock_filename[256];
-  u8 renumber;
-  u32 custom_dev_instance;
-};
-
-/** \brief vhost-user interface modify response
-    @param context - sender context, to match reply w/ request
-    @param retval - return code for the request
-*/
-define modify_vhost_user_if_reply
-{
-  u32 context;
-  i32 retval;
-};
-
-/** \brief vhost-user interface delete request
-    @param client_index - opaque cookie to identify the sender
-*/
-define delete_vhost_user_if
-{
-  u32 client_index;
-  u32 context;
-  u32 sw_if_index;
-};
-
-/** \brief vhost-user interface delete response
-    @param context - sender context, to match reply w/ request
-    @param retval - return code for the request
-*/
-define delete_vhost_user_if_reply
-{
-  u32 context;
-  i32 retval;
-};
-
 define create_subif
 {
   u32 client_index;
@@ -1674,35 +1597,6 @@ define show_version_reply
   u8 build_directory[256];
 };
 
-/** \brief Vhost-user interface details structure (fix this)
-    @param sw_if_index - index of the interface
-    @param interface_name - name of interface
-    @param virtio_net_hdr_sz - net header size
-    @param features - interface features
-    @param is_server - vhost-user server socket
-    @param sock_filename - socket filename
-    @param num_regions - number of used memory regions
-*/
-define sw_interface_vhost_user_details
-{
-  u32 context;
-  u32 sw_if_index;
-  u8 interface_name[64];
-  u32 virtio_net_hdr_sz;
-  u64 features;
-  u8 is_server;
-  u8 sock_filename[256];
-  u32 num_regions;
-  i32 sock_errno;
-};
-
-/* works */
-define sw_interface_vhost_user_dump
-{
-  u32 client_index;
-  u32 context;
-};
-
 /** \brief l2 fib table entry structure
     @param bd_id - the l2 fib / bridge domain table id
     @param mac - the entry's mac address