aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/vmxnet3/vmxnet3_api.c
diff options
context:
space:
mode:
authorSteven Luong <sluong@cisco.com>2020-10-21 16:55:49 -0700
committerDamjan Marion <dmarion@me.com>2020-10-24 08:56:59 +0000
commit490e077fb9a2295d704db3c1bee5901823d2441b (patch)
tree7ac87d956707a8700bc8c54f2fbedbf6923ab31c /src/plugins/vmxnet3/vmxnet3_api.c
parent94a92aaa4e3762e671b3a982e5ffc2795c09caa9 (diff)
vmxnet3: add sw_if_index filter to vmxnet3 interface dump
Introduce a replacement API for vmxnet3_dump which supports interface filter. Type: improvement Signed-off-by: Steven Luong <sluong@cisco.com> Change-Id: I76074db2aa34b397ce570a2019c43e042a9c7838
Diffstat (limited to 'src/plugins/vmxnet3/vmxnet3_api.c')
-rw-r--r--src/plugins/vmxnet3/vmxnet3_api.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/plugins/vmxnet3/vmxnet3_api.c b/src/plugins/vmxnet3/vmxnet3_api.c
index cdb68708f57..decb7b64c61 100644
--- a/src/plugins/vmxnet3/vmxnet3_api.c
+++ b/src/plugins/vmxnet3/vmxnet3_api.c
@@ -187,6 +187,49 @@ vl_api_vmxnet3_dump_t_handler (vl_api_vmxnet3_dump_t * mp)
vec_free (if_name);
}
+/**
+ * @brief Message handler for vmxnet3_dump API.
+ * @param mp vl_api_vmxnet3_dump_t * mp the api message
+ */
+static void vl_api_sw_vmxnet3_interface_dump_t_handler
+ (vl_api_sw_vmxnet3_interface_dump_t * mp)
+{
+ vmxnet3_main_t *vmxm = &vmxnet3_main;
+ vnet_main_t *vnm = vnet_get_main ();
+ vnet_sw_interface_t *swif;
+ vmxnet3_device_t *vd;
+ u8 *if_name = 0;
+ vl_api_registration_t *reg;
+ u32 filter_sw_if_index;
+
+ reg = vl_api_client_index_to_registration (mp->client_index);
+ if (!reg)
+ return;
+
+ filter_sw_if_index = htonl (mp->sw_if_index);
+ if ((filter_sw_if_index != ~0) &&
+ (vnet_sw_interface_is_api_valid (vnm, filter_sw_if_index) == 0))
+ goto bad_sw_if_index;
+
+ /* *INDENT-OFF* */
+ pool_foreach (vd, vmxm->devices,
+ ({
+ if ((filter_sw_if_index == ~0) ||
+ (vd->sw_if_index == filter_sw_if_index))
+ {
+ swif = vnet_get_sw_interface (vnm, vd->sw_if_index);
+ if_name = format (if_name, "%U%c", format_vnet_sw_interface_name, vnm,
+ swif, 0);
+ send_vmxnet3_details (reg, vd, swif, if_name, mp->context);
+ _vec_len (if_name) = 0;
+ }
+ }));
+ /* *INDENT-ON* */
+
+ BAD_SW_IF_INDEX_LABEL;
+ vec_free (if_name);
+}
+
/* set tup the API message handling tables */
#include <vmxnet3/vmxnet3.api.c>
clib_error_t *