From a0e8d9669e980c673f5302e7bff0c06b31d46b56 Mon Sep 17 00:00:00 2001 From: Steven Luong Date: Mon, 18 May 2020 17:12:56 -0700 Subject: [PATCH] virtio: add vhost sw_if_index filter for sw_interface_vhost_user_dump The filter sw_if_index was in the API sw_interface_vhost_user_dump. But it was never implemented in the backend. This patch is to add the backend, vat, and custom dump support for the filter. Type: feature Signed-off-by: Steven Luong Change-Id: Iaa41a7e11bfbcbb4c60092375e4b0dcf0950077b --- src/vat/api_format.c | 17 +++++++++++++++-- src/vnet/devices/virtio/vhost_user.api | 2 +- src/vnet/devices/virtio/vhost_user_api.c | 7 +++++-- src/vpp/api/custom_dump.c | 3 ++- 4 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/vat/api_format.c b/src/vat/api_format.c index 60cfa504480..a3a67c1eb57 100644 --- a/src/vat/api_format.c +++ b/src/vat/api_format.c @@ -12675,15 +12675,28 @@ static void vl_api_sw_interface_vhost_user_details_t_handler_json static int api_sw_interface_vhost_user_dump (vat_main_t * vam) { + unformat_input_t *i = vam->input; vl_api_sw_interface_vhost_user_dump_t *mp; vl_api_control_ping_t *mp_ping; int ret; + u32 sw_if_index = ~0; + + 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 + break; + } + print (vam->ofp, "Interface name idx hdr_sz features server regions filename"); /* Get list of vhost-user interfaces */ M (SW_INTERFACE_VHOST_USER_DUMP, mp); - mp->sw_if_index = ntohl (~0); + mp->sw_if_index = ntohl (sw_if_index); S (mp); /* Use a control ping for synchronization */ @@ -20729,7 +20742,7 @@ _(modify_vhost_user_if, \ " | sw_if_index socket \n" \ "[server] [renumber ] [gso] [packed]") \ _(delete_vhost_user_if, " | sw_if_index ") \ -_(sw_interface_vhost_user_dump, "") \ +_(sw_interface_vhost_user_dump, " | sw_if_index ") \ _(show_version, "") \ _(show_threads, "") \ _(vxlan_gpe_add_del_tunnel, \ diff --git a/src/vnet/devices/virtio/vhost_user.api b/src/vnet/devices/virtio/vhost_user.api index 127b0a27fc7..338fd710bc0 100644 --- a/src/vnet/devices/virtio/vhost_user.api +++ b/src/vnet/devices/virtio/vhost_user.api @@ -115,7 +115,7 @@ define sw_interface_vhost_user_details }; /** \brief Vhost-user interface dump request - @param sw_if_index - filter by sw_if_index UNIMPLEMENTED + @param sw_if_index - filter by sw_if_index */ define sw_interface_vhost_user_dump { diff --git a/src/vnet/devices/virtio/vhost_user_api.c b/src/vnet/devices/virtio/vhost_user_api.c index 67365334d95..80fe5548efd 100644 --- a/src/vnet/devices/virtio/vhost_user_api.c +++ b/src/vnet/devices/virtio/vhost_user_api.c @@ -211,7 +211,7 @@ static void filter_sw_if_index = htonl (mp->sw_if_index); if (filter_sw_if_index != ~0) - return; /* UNIMPLEMENTED */ + VALIDATE_SW_IF_INDEX (mp); rv = vhost_user_dump_ifs (vnm, vm, &ifaces); if (rv) @@ -219,8 +219,11 @@ static void vec_foreach (vuid, ifaces) { - send_sw_interface_vhost_user_details (am, reg, vuid, mp->context); + if ((filter_sw_if_index == ~0) || + (vuid->sw_if_index == filter_sw_if_index)) + send_sw_interface_vhost_user_details (am, reg, vuid, mp->context); } + BAD_SW_IF_INDEX_LABEL; vec_free (ifaces); } diff --git a/src/vpp/api/custom_dump.c b/src/vpp/api/custom_dump.c index f1798de16c0..be6b094913b 100644 --- a/src/vpp/api/custom_dump.c +++ b/src/vpp/api/custom_dump.c @@ -1785,7 +1785,8 @@ static void *vl_api_sw_interface_vhost_user_dump_t_print u8 *s; s = format (0, "SCRIPT: sw_interface_vhost_user_dump "); - s = format (s, "sw_if_index %d ", (mp->sw_if_index)); + if (mp->sw_if_index != ~0) + s = format (s, "sw_if_index %d ", (mp->sw_if_index)); FINISH; } -- 2.16.6