diff options
author | Steven Luong <sluong@cisco.com> | 2020-10-21 16:55:49 -0700 |
---|---|---|
committer | Damjan Marion <dmarion@me.com> | 2020-10-24 08:56:59 +0000 |
commit | 490e077fb9a2295d704db3c1bee5901823d2441b (patch) | |
tree | 7ac87d956707a8700bc8c54f2fbedbf6923ab31c /src/plugins/vmxnet3/vmxnet3_api.c | |
parent | 94a92aaa4e3762e671b3a982e5ffc2795c09caa9 (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.c | 43 |
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 * |