diff options
author | Dave Barach <dave@barachs.net> | 2019-07-23 16:28:36 -0400 |
---|---|---|
committer | Dave Barach <dave@barachs.net> | 2019-07-23 16:29:10 -0400 |
commit | 3940de36728b768574a3e998389bb90d55f690d1 (patch) | |
tree | f3c04d65748319ca38cbabce43c918f7ea745f1d /src | |
parent | b725ebb3f47302c416e41c7be3f5a8bb3c9fe547 (diff) |
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 <dave@barachs.net>
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/avf/avf_api.c | 4 | ||||
-rw-r--r-- | src/plugins/avf/cli.c | 4 | ||||
-rw-r--r-- | src/plugins/marvell/pp2/cli.c | 2 | ||||
-rw-r--r-- | src/plugins/memif/cli.c | 2 | ||||
-rw-r--r-- | src/plugins/memif/memif_api.c | 7 | ||||
-rw-r--r-- | src/plugins/rdma/cli.c | 2 | ||||
-rw-r--r-- | src/plugins/vmxnet3/cli.c | 4 | ||||
-rw-r--r-- | src/plugins/vmxnet3/vmxnet3_api.c | 6 | ||||
-rw-r--r-- | src/vnet/adj/rewrite.c | 2 | ||||
-rw-r--r-- | src/vnet/bfd/bfd_cli.c | 2 | ||||
-rw-r--r-- | src/vnet/bfd/bfd_udp.c | 8 | ||||
-rw-r--r-- | src/vnet/devices/tap/tap.c | 6 | ||||
-rw-r--r-- | src/vnet/devices/virtio/cli.c | 2 | ||||
-rw-r--r-- | src/vnet/devices/virtio/vhost_user.c | 14 | ||||
-rw-r--r-- | src/vnet/devices/virtio/virtio_api.c | 6 | ||||
-rw-r--r-- | src/vnet/interface_api.c | 3 | ||||
-rw-r--r-- | src/vnet/interface_format.c | 2 | ||||
-rw-r--r-- | src/vnet/interface_funcs.h | 20 | ||||
-rw-r--r-- | src/vnet/l2/l2_fib.c | 5 | ||||
-rw-r--r-- | src/vnet/l2/l2_vtr.c | 6 | ||||
-rw-r--r-- | src/vnet/session/application_namespace.c | 3 | ||||
-rw-r--r-- | src/vpp/api/custom_dump.c | 20 |
22 files changed, 90 insertions, 40 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 76db1cab7ed..e1d74e8464b 100644 --- a/src/plugins/vmxnet3/cli.c +++ b/src/plugins/vmxnet3/cli.c @@ -109,7 +109,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"); @@ -166,7 +166,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 8395f158c9a..8afc40e3280 100644 --- a/src/plugins/vmxnet3/vmxnet3_api.c +++ b/src/plugins/vmxnet3/vmxnet3_api.c @@ -125,10 +125,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 cf3cf416202..c8508c4b37a 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 5c0da0ad35e..cc3b40c4075 100644 --- a/src/vnet/bfd/bfd_udp.c +++ b/src/vnet/bfd/bfd_udp.c @@ -82,7 +82,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; @@ -114,8 +114,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) @@ -566,7 +566,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 c090bedbd7f..974a4175fa6 100644 --- a/src/vnet/devices/tap/tap.c +++ b/src/vnet/devices/tap/tap.c @@ -514,7 +514,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; @@ -565,9 +565,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 10b545edb5e..86639e486c9 100644 --- a/src/vnet/devices/virtio/cli.c +++ b/src/vnet/devices/virtio/cli.c @@ -96,7 +96,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 5c552f9be27..e26cfdfd8c8 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 d73e6f877d5..e354958d5aa 100644 --- a/src/vnet/devices/virtio/virtio_api.c +++ b/src/vnet/devices/virtio/virtio_api.c @@ -99,10 +99,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 50921f24e3f..fb1982ae8b0 100644 --- a/src/vnet/interface_api.c +++ b/src/vnet/interface_api.c @@ -1385,6 +1385,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 1a3ef026081..209da18979f 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 6d404b46098..c0ad81c6d87 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/l2/l2_fib.c b/src/vnet/l2/l2_fib.c index b7646cac4cd..600d0c910fc 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 c6427f282bf..840889d6cc3 100644 --- a/src/vpp/api/custom_dump.c +++ b/src/vpp/api/custom_dump.c @@ -3775,6 +3775,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) \ @@ -3791,7 +3803,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) \ @@ -3993,8 +4005,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] \ |