From: Kirill A. Khalitov Date: Thu, 27 Mar 2025 10:59:58 +0000 (+0100) Subject: vnet: add vapi interface feature enablement check function X-Git-Tag: v25.10-rc0~47 X-Git-Url: https://gerrit.fd.io/r/gitweb?a=commitdiff_plain;h=6022e9566f0d84afdd35e95a3d9f458f5a3d2e88;p=vpp.git vnet: add vapi interface feature enablement check function Type: improvement Change-Id: I813c832cf6673eae91bd38ab60e7f19a609a5025 Signed-off-by: Kirill A. Khalitov --- diff --git a/src/vnet/feature/feature.api b/src/vnet/feature/feature.api index 7b52a6630cb..e3054b53b9d 100644 --- a/src/vnet/feature/feature.api +++ b/src/vnet/feature/feature.api @@ -38,6 +38,25 @@ autoreply define feature_enable_disable { string feature_name[64]; }; +autoendian define feature_is_enabled +{ + u32 client_index; + u32 context; + + string arc_name[64]; + string feature_name[64]; + vl_api_interface_index_t sw_if_index; +}; + +autoendian define feature_is_enabled_reply +{ + u32 client_index; + u32 context; + i32 retval; + + bool is_enabled; +}; + /* * Local Variables: * eval: (c-set-style "gnu") diff --git a/src/vnet/feature/feature_api.c b/src/vnet/feature/feature_api.c index a8c74277788..152e44bd288 100644 --- a/src/vnet/feature/feature_api.c +++ b/src/vnet/feature/feature_api.c @@ -74,6 +74,30 @@ vl_api_feature_enable_disable_t_handler (vl_api_feature_enable_disable_t * mp) REPLY_MACRO (VL_API_FEATURE_ENABLE_DISABLE_REPLY); } +static void +vl_api_feature_is_enabled_t_handler (vl_api_feature_is_enabled_t *mp) +{ + vl_api_feature_is_enabled_reply_t *rmp = NULL; + i32 rv = 0; + bool is_enabled = false; + + VALIDATE_SW_IF_INDEX_END (mp); + + u8 *arc_name = format (0, "%s%c", mp->arc_name, 0); + u8 *feature_name = format (0, "%s%c", mp->feature_name, 0); + + is_enabled = vnet_feature_is_enabled ( + (const char *) arc_name, (const char *) feature_name, mp->sw_if_index); + + vec_free (feature_name); + vec_free (arc_name); + + BAD_SW_IF_INDEX_LABEL; + + REPLY_MACRO2_END (VL_API_FEATURE_IS_ENABLED_REPLY, + ({ rmp->is_enabled = is_enabled; })); +} + #include static clib_error_t *