From 490e077fb9a2295d704db3c1bee5901823d2441b Mon Sep 17 00:00:00 2001 From: Steven Luong Date: Wed, 21 Oct 2020 16:55:49 -0700 Subject: 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 Change-Id: I76074db2aa34b397ce570a2019c43e042a9c7838 --- src/plugins/vmxnet3/vmxnet3_api.c | 43 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) (limited to 'src/plugins/vmxnet3/vmxnet3_api.c') 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 clib_error_t * -- cgit 1.2.3-korg