summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Barach <dave@barachs.net>2019-07-23 16:28:36 -0400
committerDave Barach <dave@barachs.net>2019-07-23 16:29:10 -0400
commit3940de36728b768574a3e998389bb90d55f690d1 (patch)
treef3c04d65748319ca38cbabce43c918f7ea745f1d
parentb725ebb3f47302c416e41c7be3f5a8bb3c9fe547 (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>
-rw-r--r--src/plugins/avf/avf_api.c4
-rw-r--r--src/plugins/avf/cli.c4
-rw-r--r--src/plugins/marvell/pp2/cli.c2
-rw-r--r--src/plugins/memif/cli.c2
-rw-r--r--src/plugins/memif/memif_api.c7
-rw-r--r--src/plugins/rdma/cli.c2
-rw-r--r--src/plugins/vmxnet3/cli.c4
-rw-r--r--src/plugins/vmxnet3/vmxnet3_api.c6
-rw-r--r--src/vnet/adj/rewrite.c2
-rw-r--r--src/vnet/bfd/bfd_cli.c2
-rw-r--r--src/vnet/bfd/bfd_udp.c8
-rw-r--r--src/vnet/devices/tap/tap.c6
-rw-r--r--src/vnet/devices/virtio/cli.c2
-rw-r--r--src/vnet/devices/virtio/vhost_user.c14
-rw-r--r--src/vnet/devices/virtio/virtio_api.c6
-rw-r--r--src/vnet/interface_api.c3
-rw-r--r--src/vnet/interface_format.c2
-rw-r--r--src/vnet/interface_funcs.h20
-rw-r--r--src/vnet/l2/l2_fib.c5
-rw-r--r--src/vnet/l2/l2_vtr.c6
-rw-r--r--src/vnet/session/application_namespace.c3
-rw-r--r--src/vpp/api/custom_dump.c20
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] \