From b71b5ffbfb2ddbad408a22ef17046dfe5fea1cad Mon Sep 17 00:00:00 2001 From: Dave Barach Date: Tue, 23 Jul 2019 16:28:36 -0400 Subject: api: binary api cleanup Multiple API message handlers call vnet_get_sup_hw_interface(...) without checking the inbound sw_if_index. This can cause a pool_elt_at_index ASSERT in a debug image, and major disorder in a production image. Given that a number of places are coded as follows, add an "api_visible_or_null" variant of vnet_get_sup_hw_interface, which returns NULL given an invalid sw_if_index, or a hidden sw interface: - hw = vnet_get_sup_hw_interface (vnm, sw_if_index); + hw = vnet_get_sup_hw_interface_api_visible_or_null (vnm, sw_if_index); if (hw == NULL || memif_device_class.index != hw->dev_class_index) return clib_error_return (0, "not a memif interface"); Rename two existing xxx_safe functions -> xxx_or_null to make it obvious what they return. Type: fix Change-Id: I29996e8d0768fd9e0c5495bd91ff8bedcf2c5697 Signed-off-by: Dave Barach (cherry picked from commit 3940de36728b768574a3e998389bb90d55f690d1) --- src/plugins/avf/avf_api.c | 4 +++- src/plugins/avf/cli.c | 4 ++-- src/plugins/marvell/pp2/cli.c | 2 +- src/plugins/memif/cli.c | 2 +- src/plugins/memif/memif_api.c | 7 +++++-- src/plugins/rdma/cli.c | 2 +- src/plugins/vmxnet3/cli.c | 4 ++-- src/plugins/vmxnet3/vmxnet3_api.c | 6 ++++-- src/vnet/adj/rewrite.c | 2 +- src/vnet/bfd/bfd_cli.c | 2 +- src/vnet/bfd/bfd_udp.c | 8 ++++---- src/vnet/devices/tap/tap.c | 6 ++++-- src/vnet/devices/virtio/cli.c | 2 +- src/vnet/devices/virtio/vhost_user.c | 14 +++++++++----- src/vnet/devices/virtio/virtio_api.c | 6 ++++-- src/vnet/interface_api.c | 3 +++ src/vnet/interface_format.c | 2 +- src/vnet/interface_funcs.h | 20 ++++++++++++++++++-- src/vnet/ip/ip4_punt_drop.c | 2 +- src/vnet/l2/l2_fib.c | 5 +++-- src/vnet/l2/l2_vtr.c | 6 +++--- src/vnet/session/application_namespace.c | 3 ++- src/vpp/api/custom_dump.c | 20 +++++++++++++++++--- 23 files changed, 91 insertions(+), 41 deletions(-) diff --git a/src/plugins/avf/avf_api.c b/src/plugins/avf/avf_api.c index 3503177837f..e9c7f49e2e5 100644 --- a/src/plugins/avf/avf_api.c +++ b/src/plugins/avf/avf_api.c @@ -94,7 +94,9 @@ vl_api_avf_delete_t_handler (vl_api_avf_delete_t * mp) vnet_hw_interface_t *hw; int rv = 0; - hw = vnet_get_sup_hw_interface (vnm, htonl (mp->sw_if_index)); + hw = + vnet_get_sup_hw_interface_api_visible_or_null (vnm, + htonl (mp->sw_if_index)); if (hw == NULL || avf_device_class.index != hw->dev_class_index) { rv = VNET_API_ERROR_INVALID_INTERFACE; diff --git a/src/plugins/avf/cli.c b/src/plugins/avf/cli.c index f8fc05a9812..414163ac8a2 100644 --- a/src/plugins/avf/cli.c +++ b/src/plugins/avf/cli.c @@ -109,7 +109,7 @@ avf_delete_command_fn (vlib_main_t * vm, unformat_input_t * input, return clib_error_return (0, "please specify interface name or sw_if_index"); - hw = vnet_get_sup_hw_interface (vnm, sw_if_index); + hw = vnet_get_sup_hw_interface_api_visible_or_null (vnm, sw_if_index); if (hw == NULL || avf_device_class.index != hw->dev_class_index) return clib_error_return (0, "not an AVF interface"); @@ -168,7 +168,7 @@ avf_test_command_fn (vlib_main_t * vm, unformat_input_t * input, return clib_error_return (0, "please specify interface name or sw_if_index"); - hw = vnet_get_sup_hw_interface (vnm, sw_if_index); + hw = vnet_get_sup_hw_interface_api_visible_or_null (vnm, sw_if_index); if (hw == NULL || avf_device_class.index != hw->dev_class_index) return clib_error_return (0, "not a AVF interface"); diff --git a/src/plugins/marvell/pp2/cli.c b/src/plugins/marvell/pp2/cli.c index 3264cc8638b..761cdb5b6b6 100644 --- a/src/plugins/marvell/pp2/cli.c +++ b/src/plugins/marvell/pp2/cli.c @@ -94,7 +94,7 @@ mrvl_pp2_delete_command_fn (vlib_main_t * vm, unformat_input_t * input, return clib_error_return (0, "please specify interface name or sw_if_index"); - hw = vnet_get_sup_hw_interface (vnm, sw_if_index); + hw = vnet_get_sup_hw_interface_api_visible_or_null (vnm, sw_if_index); if (hw == NULL || mrvl_pp2_device_class.index != hw->dev_class_index) return clib_error_return (0, "not a Marvell PP2 interface"); diff --git a/src/plugins/memif/cli.c b/src/plugins/memif/cli.c index dd13adb929b..00c947a594a 100644 --- a/src/plugins/memif/cli.c +++ b/src/plugins/memif/cli.c @@ -298,7 +298,7 @@ memif_delete_command_fn (vlib_main_t * vm, unformat_input_t * input, return clib_error_return (0, "please specify interface name or sw_if_index"); - hw = vnet_get_sup_hw_interface (vnm, sw_if_index); + hw = vnet_get_sup_hw_interface_api_visible_or_null (vnm, sw_if_index); if (hw == NULL || memif_device_class.index != hw->dev_class_index) return clib_error_return (0, "not a memif interface"); diff --git a/src/plugins/memif/memif_api.c b/src/plugins/memif/memif_api.c index bbc9e5c7c4a..ebe7a35c820 100644 --- a/src/plugins/memif/memif_api.c +++ b/src/plugins/memif/memif_api.c @@ -209,11 +209,14 @@ vl_api_memif_delete_t_handler (vl_api_memif_delete_t * mp) vlib_main_t *vm = vlib_get_main (); vnet_main_t *vnm = vnet_get_main (); vl_api_memif_delete_reply_t *rmp; - vnet_hw_interface_t *hi = - vnet_get_sup_hw_interface (vnm, ntohl (mp->sw_if_index)); + vnet_hw_interface_t *hi; memif_if_t *mif; int rv = 0; + hi = + vnet_get_sup_hw_interface_api_visible_or_null (vnm, + ntohl (mp->sw_if_index)); + if (hi == NULL || memif_device_class.index != hi->dev_class_index) rv = VNET_API_ERROR_INVALID_SW_IF_INDEX; else diff --git a/src/plugins/rdma/cli.c b/src/plugins/rdma/cli.c index 1f377a738fc..d4ef17d020c 100644 --- a/src/plugins/rdma/cli.c +++ b/src/plugins/rdma/cli.c @@ -107,7 +107,7 @@ rdma_delete_command_fn (vlib_main_t * vm, unformat_input_t * input, return clib_error_return (0, "please specify interface name or sw_if_index"); - hw = vnet_get_sup_hw_interface (vnm, sw_if_index); + hw = vnet_get_sup_hw_interface_api_visible_or_null (vnm, sw_if_index); if (hw == NULL || rdma_device_class.index != hw->dev_class_index) return clib_error_return (0, "not a RDMA interface"); diff --git a/src/plugins/vmxnet3/cli.c b/src/plugins/vmxnet3/cli.c index 776901e8ac2..1d75b0cf7df 100644 --- a/src/plugins/vmxnet3/cli.c +++ b/src/plugins/vmxnet3/cli.c @@ -108,7 +108,7 @@ vmxnet3_delete_command_fn (vlib_main_t * vm, unformat_input_t * input, return clib_error_return (0, "please specify interface name or sw_if_index"); - hw = vnet_get_sup_hw_interface (vnm, sw_if_index); + hw = vnet_get_sup_hw_interface_api_visible_or_null (vnm, sw_if_index); if (hw == NULL || vmxnet3_device_class.index != hw->dev_class_index) return clib_error_return (0, "not a vmxnet3 interface"); @@ -165,7 +165,7 @@ vmxnet3_test_command_fn (vlib_main_t * vm, unformat_input_t * input, return clib_error_return (0, "please specify interface name or sw_if_index"); - hw = vnet_get_sup_hw_interface (vnm, sw_if_index); + hw = vnet_get_sup_hw_interface_api_visible_or_null (vnm, sw_if_index); if (hw == NULL || vmxnet3_device_class.index != hw->dev_class_index) return clib_error_return (0, "not a vmxnet3 interface"); diff --git a/src/plugins/vmxnet3/vmxnet3_api.c b/src/plugins/vmxnet3/vmxnet3_api.c index 5e1bb9e2f18..541ca732e6d 100644 --- a/src/plugins/vmxnet3/vmxnet3_api.c +++ b/src/plugins/vmxnet3/vmxnet3_api.c @@ -97,10 +97,12 @@ vl_api_vmxnet3_delete_t_handler (vl_api_vmxnet3_delete_t * mp) vnet_hw_interface_t *hw; int rv = 0; - hw = vnet_get_sup_hw_interface (vnm, htonl (mp->sw_if_index)); + hw = + vnet_get_sup_hw_interface_api_visible_or_null (vnm, + htonl (mp->sw_if_index)); if (hw == NULL || vmxnet3_device_class.index != hw->dev_class_index) { - rv = VNET_API_ERROR_INVALID_INTERFACE; + rv = VNET_API_ERROR_INVALID_SW_IF_INDEX; goto reply; } diff --git a/src/vnet/adj/rewrite.c b/src/vnet/adj/rewrite.c index 95671b06930..181d85943b4 100644 --- a/src/vnet/adj/rewrite.c +++ b/src/vnet/adj/rewrite.c @@ -53,7 +53,7 @@ format_vnet_rewrite (u8 * s, va_list * args) if (rw->sw_if_index != ~0) { vnet_sw_interface_t *si; - si = vnet_get_sw_interface_safe (vnm, rw->sw_if_index); + si = vnet_get_sw_interface_or_null (vnm, rw->sw_if_index); if (NULL != si) s = format (s, "%U:", format_vnet_sw_interface_name, vnm, si); else diff --git a/src/vnet/bfd/bfd_cli.c b/src/vnet/bfd/bfd_cli.c index cab20a65b0b..4b5f75eb01b 100644 --- a/src/vnet/bfd/bfd_cli.c +++ b/src/vnet/bfd/bfd_cli.c @@ -170,7 +170,7 @@ show_bfd (vlib_main_t * vm, unformat_input_t * input, if (is_set) { vnet_sw_interface_t *sw_if = - vnet_get_sw_interface_safe (&vnet_main, sw_if_index); + vnet_get_sw_interface_or_null (&vnet_main, sw_if_index); vnet_hw_interface_t *hw_if = vnet_get_hw_interface (&vnet_main, sw_if->hw_if_index); u8 *s = format (NULL, "UDP echo source is: %v\n", hw_if->name); diff --git a/src/vnet/bfd/bfd_udp.c b/src/vnet/bfd/bfd_udp.c index 147cd6eda99..ca5bae51561 100644 --- a/src/vnet/bfd/bfd_udp.c +++ b/src/vnet/bfd/bfd_udp.c @@ -78,7 +78,7 @@ vnet_api_error_t bfd_udp_set_echo_source (u32 sw_if_index) { vnet_sw_interface_t *sw_if = - vnet_get_sw_interface_safe (bfd_udp_main.vnet_main, sw_if_index); + vnet_get_sw_interface_or_null (bfd_udp_main.vnet_main, sw_if_index); if (sw_if) { bfd_udp_main.echo_source_sw_if_index = sw_if_index; @@ -110,8 +110,8 @@ bfd_udp_is_echo_available (bfd_transport_e transport) * pick an unused address from that subnet */ vnet_sw_interface_t *sw_if = - vnet_get_sw_interface_safe (bfd_udp_main.vnet_main, - bfd_udp_main.echo_source_sw_if_index); + vnet_get_sw_interface_or_null (bfd_udp_main.vnet_main, + bfd_udp_main.echo_source_sw_if_index); if (sw_if && sw_if->flags & VNET_SW_INTERFACE_FLAG_ADMIN_UP) { if (BFD_TRANSPORT_UDP4 == transport) @@ -545,7 +545,7 @@ bfd_udp_validate_api_input (u32 sw_if_index, { bfd_udp_main_t *bum = &bfd_udp_main; vnet_sw_interface_t *sw_if = - vnet_get_sw_interface_safe (bfd_udp_main.vnet_main, sw_if_index); + vnet_get_sw_interface_or_null (bfd_udp_main.vnet_main, sw_if_index); u8 local_ip_valid = 0; ip_interface_address_t *ia = NULL; if (!sw_if) diff --git a/src/vnet/devices/tap/tap.c b/src/vnet/devices/tap/tap.c index e05ceff92d6..7e5890b87f6 100644 --- a/src/vnet/devices/tap/tap.c +++ b/src/vnet/devices/tap/tap.c @@ -447,7 +447,7 @@ tap_delete_if (vlib_main_t * vm, u32 sw_if_index) virtio_if_t *vif; vnet_hw_interface_t *hw; - hw = vnet_get_sup_hw_interface (vnm, sw_if_index); + hw = vnet_get_sup_hw_interface_api_visible_or_null (vnm, sw_if_index); if (hw == NULL || virtio_device_class.index != hw->dev_class_index) return VNET_API_ERROR_INVALID_SW_IF_INDEX; @@ -493,9 +493,11 @@ tap_gso_enable_disable (vlib_main_t * vm, u32 sw_if_index, int enable_disable) vnet_main_t *vnm = vnet_get_main (); virtio_main_t *mm = &virtio_main; virtio_if_t *vif; - vnet_hw_interface_t *hw = vnet_get_sup_hw_interface (vnm, sw_if_index); + vnet_hw_interface_t *hw; clib_error_t *err = 0; + hw = vnet_get_sup_hw_interface_api_visible_or_null (vnm, sw_if_index); + if (hw == NULL || virtio_device_class.index != hw->dev_class_index) return VNET_API_ERROR_INVALID_SW_IF_INDEX; diff --git a/src/vnet/devices/virtio/cli.c b/src/vnet/devices/virtio/cli.c index 92e7e93831a..f6cb2b3e6b1 100644 --- a/src/vnet/devices/virtio/cli.c +++ b/src/vnet/devices/virtio/cli.c @@ -99,7 +99,7 @@ virtio_pci_delete_command_fn (vlib_main_t * vm, unformat_input_t * input, return clib_error_return (0, "please specify interface name or sw_if_index"); - hw = vnet_get_sup_hw_interface (vnm, sw_if_index); + hw = vnet_get_sup_hw_interface_api_visible_or_null (vnm, sw_if_index); if (hw == NULL || virtio_device_class.index != hw->dev_class_index) return clib_error_return (0, "not a virtio interface"); diff --git a/src/vnet/devices/virtio/vhost_user.c b/src/vnet/devices/virtio/vhost_user.c index f16d015ef5a..a18313b2038 100644 --- a/src/vnet/devices/virtio/vhost_user.c +++ b/src/vnet/devices/virtio/vhost_user.c @@ -1250,8 +1250,10 @@ vhost_user_delete_if (vnet_main_t * vnm, vlib_main_t * vm, u32 sw_if_index) vnet_hw_interface_t *hwif; u16 qid; - if (!(hwif = vnet_get_sup_hw_interface (vnm, sw_if_index)) || - hwif->dev_class_index != vhost_user_device_class.index) + if (! + (hwif = + vnet_get_sup_hw_interface_api_visible_or_null (vnm, sw_if_index)) + || hwif->dev_class_index != vhost_user_device_class.index) return VNET_API_ERROR_INVALID_SW_IF_INDEX; vui = pool_elt_at_index (vum->vhost_user_interfaces, hwif->dev_instance); @@ -1534,8 +1536,10 @@ vhost_user_modify_if (vnet_main_t * vnm, vlib_main_t * vm, vnet_hw_interface_t *hwif; uword *if_index; - if (!(hwif = vnet_get_sup_hw_interface (vnm, sw_if_index)) || - hwif->dev_class_index != vhost_user_device_class.index) + if (! + (hwif = + vnet_get_sup_hw_interface_api_visible_or_null (vnm, sw_if_index)) + || hwif->dev_class_index != vhost_user_device_class.index) return VNET_API_ERROR_INVALID_SW_IF_INDEX; if (sock_filename == NULL || !(strlen (sock_filename) > 0)) @@ -1658,7 +1662,7 @@ vhost_user_delete_command_fn (vlib_main_t * vm, &sw_if_index)) { vnet_hw_interface_t *hwif = - vnet_get_sup_hw_interface (vnm, sw_if_index); + vnet_get_sup_hw_interface_api_visible_or_null (vnm, sw_if_index); if (hwif == NULL || vhost_user_device_class.index != hwif->dev_class_index) { diff --git a/src/vnet/devices/virtio/virtio_api.c b/src/vnet/devices/virtio/virtio_api.c index ff123ae081c..6e8d34f872e 100644 --- a/src/vnet/devices/virtio/virtio_api.c +++ b/src/vnet/devices/virtio/virtio_api.c @@ -97,10 +97,12 @@ vl_api_virtio_pci_delete_t_handler (vl_api_virtio_pci_delete_t * mp) vl_api_virtio_pci_delete_reply_t *rmp; vl_api_registration_t *reg; - hw = vnet_get_sup_hw_interface (vnm, htonl (mp->sw_if_index)); + hw = + vnet_get_sup_hw_interface_api_visible_or_null (vnm, + htonl (mp->sw_if_index)); if (hw == NULL || virtio_device_class.index != hw->dev_class_index) { - rv = VNET_API_ERROR_INVALID_INTERFACE; + rv = VNET_API_ERROR_INVALID_SW_IF_INDEX; goto reply; } diff --git a/src/vnet/interface_api.c b/src/vnet/interface_api.c index b973ea1aa97..608104ae5c6 100644 --- a/src/vnet/interface_api.c +++ b/src/vnet/interface_api.c @@ -1399,6 +1399,9 @@ interface_api_hookup (vlib_main_t * vm) am->is_mp_safe[VL_API_SW_INTERFACE_DETAILS] = 1; am->is_mp_safe[VL_API_SW_INTERFACE_TAG_ADD_DEL] = 1; + /* Do not replay VL_API_SW_INTERFACE_DUMP messages */ + am->api_trace_cfg[VL_API_SW_INTERFACE_DUMP].replay_enable = 0; + /* * Set up the (msg_name, crc, message-id) table */ diff --git a/src/vnet/interface_format.c b/src/vnet/interface_format.c index ee332f398e9..fc2dea96cc8 100644 --- a/src/vnet/interface_format.c +++ b/src/vnet/interface_format.c @@ -190,7 +190,7 @@ format_vnet_sw_if_index_name (u8 * s, va_list * args) u32 sw_if_index = va_arg (*args, u32); vnet_sw_interface_t *si; - si = vnet_get_sw_interface_safe (vnm, sw_if_index); + si = vnet_get_sw_interface_or_null (vnm, sw_if_index); if (NULL == si) { diff --git a/src/vnet/interface_funcs.h b/src/vnet/interface_funcs.h index b862f48ef36..18a1065201b 100644 --- a/src/vnet/interface_funcs.h +++ b/src/vnet/interface_funcs.h @@ -47,7 +47,7 @@ vnet_get_hw_interface (vnet_main_t * vnm, u32 hw_if_index) } always_inline vnet_hw_interface_t * -vnet_get_hw_interface_safe (vnet_main_t * vnm, u32 hw_if_index) +vnet_get_hw_interface_or_null (vnet_main_t * vnm, u32 hw_if_index) { if (!pool_is_free_index (vnm->interface_main.hw_interfaces, hw_if_index)) return pool_elt_at_index (vnm->interface_main.hw_interfaces, hw_if_index); @@ -61,7 +61,7 @@ vnet_get_sw_interface (vnet_main_t * vnm, u32 sw_if_index) } always_inline vnet_sw_interface_t * -vnet_get_sw_interface_safe (vnet_main_t * vnm, u32 sw_if_index) +vnet_get_sw_interface_or_null (vnet_main_t * vnm, u32 sw_if_index) { if (!pool_is_free_index (vnm->interface_main.sw_interfaces, sw_if_index)) return pool_elt_at_index (vnm->interface_main.sw_interfaces, sw_if_index); @@ -97,6 +97,22 @@ vnet_get_sup_hw_interface (vnet_main_t * vnm, u32 sw_if_index) return vnet_get_hw_interface (vnm, sw->hw_if_index); } +always_inline vnet_hw_interface_t * +vnet_get_sup_hw_interface_api_visible_or_null (vnet_main_t * vnm, + u32 sw_if_index) +{ + vnet_sw_interface_t *si; + if (PREDICT_FALSE (pool_is_free_index (vnm->interface_main.sw_interfaces, + sw_if_index))) + return NULL; + si = vnet_get_sup_sw_interface (vnm, sw_if_index); + if (PREDICT_FALSE (si->flags & VNET_SW_INTERFACE_FLAG_HIDDEN)) + return NULL; + ASSERT ((si->type == VNET_SW_INTERFACE_TYPE_HARDWARE) || + (si->type == VNET_SW_INTERFACE_TYPE_PIPE)); + return vnet_get_hw_interface (vnm, si->hw_if_index); +} + always_inline vnet_hw_interface_class_t * vnet_get_hw_interface_class (vnet_main_t * vnm, u32 hw_class_index) { diff --git a/src/vnet/ip/ip4_punt_drop.c b/src/vnet/ip/ip4_punt_drop.c index 85409857f38..76b92c6a4a0 100644 --- a/src/vnet/ip/ip4_punt_drop.c +++ b/src/vnet/ip/ip4_punt_drop.c @@ -99,7 +99,7 @@ format_ip_punt_redirect_trace (u8 * s, va_list * args) vnet_main_t *vnm = vnet_get_main (); vnet_sw_interface_t *si; - si = vnet_get_sw_interface_safe (vnm, t->redirect.tx_sw_if_index); + si = vnet_get_sw_interface_or_null (vnm, t->redirect.tx_sw_if_index); if (NULL != si) s = format (s, "via %U on %U using adj:%d", diff --git a/src/vnet/l2/l2_fib.c b/src/vnet/l2/l2_fib.c index fc518fe9dbf..04fd975c319 100644 --- a/src/vnet/l2/l2_fib.c +++ b/src/vnet/l2/l2_fib.c @@ -95,12 +95,13 @@ format_vnet_sw_if_index_name_with_NA (u8 * s, va_list * args) if (sw_if_index == ~0) return format (s, "N/A"); - vnet_sw_interface_t *swif = vnet_get_sw_interface_safe (vnm, sw_if_index); + vnet_sw_interface_t *swif = + vnet_get_sw_interface_or_null (vnm, sw_if_index); if (!swif) return format (s, "Stale"); return format (s, "%U", format_vnet_sw_interface_name, vnm, - vnet_get_sw_interface_safe (vnm, sw_if_index)); + vnet_get_sw_interface_or_null (vnm, sw_if_index)); } typedef struct l2fib_dump_walk_ctx_t_ diff --git a/src/vnet/l2/l2_vtr.c b/src/vnet/l2/l2_vtr.c index aa3d5c45bee..bfd1dcb9280 100644 --- a/src/vnet/l2/l2_vtr.c +++ b/src/vnet/l2/l2_vtr.c @@ -61,7 +61,7 @@ l2pbb_configure (vlib_main_t * vlib_main, l2_output_config_t *config = 0; vnet_hw_interface_t *hi; - hi = vnet_get_sup_hw_interface (vnet_main, sw_if_index); + hi = vnet_get_sup_hw_interface_api_visible_or_null (vnet_main, sw_if_index); if (!hi) { @@ -149,7 +149,7 @@ l2vtr_configure (vlib_main_t * vlib_main, vnet_main_t * vnet_main, u32 sw_if_ind u32 push_outer_et; u32 cfg_tags; - hi = vnet_get_sup_hw_interface (vnet_main, sw_if_index); + hi = vnet_get_sup_hw_interface_api_visible_or_null (vnet_main, sw_if_index); if (!hi || (hi->hw_class_index != ethernet_hw_interface_class.index)) { error = VNET_API_ERROR_INVALID_INTERFACE; /* non-ethernet interface */ @@ -364,7 +364,7 @@ l2vtr_get (vlib_main_t * vlib_main, vnet_main_t * vnet_main, u32 sw_if_index, u3 *vtr_tag2 = 0; *push_dot1q = 0; - hi = vnet_get_sup_hw_interface (vnet_main, sw_if_index); + hi = vnet_get_sup_hw_interface_api_visible_or_null (vnet_main, sw_if_index); if (!hi || (hi->hw_class_index != ethernet_hw_interface_class.index)) { /* non-ethernet interface */ diff --git a/src/vnet/session/application_namespace.c b/src/vnet/session/application_namespace.c index 47a369ed765..294192ceea1 100644 --- a/src/vnet/session/application_namespace.c +++ b/src/vnet/session/application_namespace.c @@ -70,7 +70,8 @@ vnet_app_namespace_add_del (vnet_app_namespace_add_del_args_t * a) if (a->is_add) { if (a->sw_if_index != APP_NAMESPACE_INVALID_INDEX - && !vnet_get_sw_interface_safe (vnet_get_main (), a->sw_if_index)) + && !vnet_get_sw_interface_or_null (vnet_get_main (), + a->sw_if_index)) return VNET_API_ERROR_INVALID_SW_IF_INDEX; diff --git a/src/vpp/api/custom_dump.c b/src/vpp/api/custom_dump.c index 9e150e91a7b..161d7fbfdce 100644 --- a/src/vpp/api/custom_dump.c +++ b/src/vpp/api/custom_dump.c @@ -3756,6 +3756,18 @@ static void *vl_api_qos_record_enable_disable_t_print FINISH; } +#define foreach_no_print_function \ +_(memclnt_keepalive_reply) + +#define _(f) \ +static void * vl_api_ ## f ## _t_print \ + (vl_api_ ## f ## _t * mp, void * handle) \ +{ \ + return handle; \ +} +foreach_no_print_function; +#undef _ + #define foreach_custom_print_no_arg_function \ _(lisp_eid_table_vni_dump) \ _(lisp_map_resolver_dump) \ @@ -3772,7 +3784,7 @@ static void * vl_api_ ## f ## _t_print \ s = format (0, "SCRIPT: " #f ); \ FINISH; \ } -foreach_custom_print_no_arg_function +foreach_custom_print_no_arg_function; #undef _ #define foreach_custom_print_function \ _(CREATE_LOOPBACK, create_loopback) \ @@ -3969,8 +3981,10 @@ _(DNS_RESOLVE_NAME, dns_resolve_name) \ _(DNS_RESOLVE_IP, dns_resolve_ip) \ _(SESSION_RULE_ADD_DEL, session_rule_add_del) \ _(OUTPUT_ACL_SET_INTERFACE, output_acl_set_interface) \ -_(QOS_RECORD_ENABLE_DISABLE, qos_record_enable_disable) - void +_(QOS_RECORD_ENABLE_DISABLE, qos_record_enable_disable) \ +_(MEMCLNT_KEEPALIVE_REPLY, memclnt_keepalive_reply) + +void vl_msg_api_custom_dump_configure (api_main_t * am) { #define _(n,f) am->msg_print_handlers[VL_API_##n] \ -- cgit 1.2.3-korg