aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYulong Pei <yulong.pei@intel.com>2020-09-14 19:45:03 -0700
committerAndrew Yourtchenko <ayourtch@gmail.com>2020-09-16 15:13:56 +0000
commit4035daffd540c23db1195216303cba79e8ca17c3 (patch)
tree690f2b9d2a4f2f1c97994cec95cdcacddf3eeeb4
parentfb66fcf3fb7de414534650b3fce9627fefbe6a13 (diff)
crypto: Crypto set handler API to support set all as CLI
Type: improvement Signed-off-by: Yulong Pei <yulong.pei@intel.com> Change-Id: I43556f8c76c7aae64d9c927e1fda3c1774d7e49d (cherry picked from commit 8c91b2ae2b32d428ef35605707788fe064621cb3)
-rw-r--r--src/vnet/crypto/crypto.api2
-rw-r--r--src/vnet/crypto/crypto_api.c39
2 files changed, 37 insertions, 4 deletions
diff --git a/src/vnet/crypto/crypto.api b/src/vnet/crypto/crypto.api
index 04b0cfdeaa3..6eccd8524ba 100644
--- a/src/vnet/crypto/crypto.api
+++ b/src/vnet/crypto/crypto.api
@@ -41,7 +41,7 @@ autoreply define crypto_set_async_dispatch
vl_api_crypto_dispatch_mode_t mode;
};
- /** \brief crypto: use polling or interrupt dispatch
+ /** \brief crypto: set crypto handler
@param client_index - opaque cookie to identify the sender
@param context - sender context, to match reply w/ request
@param alg_name - Name of the algorithm to add
diff --git a/src/vnet/crypto/crypto_api.c b/src/vnet/crypto/crypto_api.c
index 49b12a3d377..8766614c02d 100644
--- a/src/vnet/crypto/crypto_api.c
+++ b/src/vnet/crypto/crypto_api.c
@@ -54,6 +54,7 @@ vl_api_crypto_set_async_dispatch_t_handler (vl_api_crypto_set_async_dispatch_t
static void
vl_api_crypto_set_handler_t_handler (vl_api_crypto_set_handler_t * mp)
{
+ vnet_crypto_main_t *cm = &crypto_main;
vl_api_crypto_set_handler_reply_t *rmp;
int rv = 0;
char *engine;
@@ -64,10 +65,42 @@ vl_api_crypto_set_handler_t_handler (vl_api_crypto_set_handler_t * mp)
alg_name = (char *) mp->alg_name;
oct = (crypto_op_class_type_t) mp->oct;
- if (mp->is_async)
- rv = vnet_crypto_set_async_handler2 (alg_name, engine);
+ if (strcmp ("all", alg_name) == 0)
+ {
+ if (mp->is_async)
+ {
+ char *key;
+ u8 *value;
+
+ /* *INDENT-OFF* */
+ hash_foreach_mem (key, value, cm->async_alg_index_by_name,
+ ({
+ (void) value;
+ rv += vnet_crypto_set_async_handler2 (key, engine);
+ }));
+ /* *INDENT-ON* */
+ }
+ else
+ {
+ char *key;
+ u8 *value;
+
+ /* *INDENT-OFF* */
+ hash_foreach_mem (key, value, cm->alg_index_by_name,
+ ({
+ (void) value;
+ rv += vnet_crypto_set_handler2 (key, engine, oct);
+ }));
+ /* *INDENT-ON* */
+ }
+ }
else
- rv = vnet_crypto_set_handler2 (alg_name, engine, oct);
+ {
+ if (mp->is_async)
+ rv = vnet_crypto_set_async_handler2 (alg_name, engine);
+ else
+ rv = vnet_crypto_set_handler2 (alg_name, engine, oct);
+ }
REPLY_MACRO (VL_API_CRYPTO_SET_HANDLER_REPLY);
}