diff options
author | Yulong Pei <yulong.pei@intel.com> | 2020-09-14 19:45:03 -0700 |
---|---|---|
committer | Andrew Yourtchenko <ayourtch@gmail.com> | 2020-09-16 13:54:28 +0000 |
commit | 8c91b2ae2b32d428ef35605707788fe064621cb3 (patch) | |
tree | 3b419fcd7d628690be4f4fadd295ae6c779fcfc6 | |
parent | b3a8f4e350eb1a5f08d5af4fd3a64da377ee5a5d (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
-rw-r--r-- | src/vnet/crypto/crypto.api | 2 | ||||
-rw-r--r-- | src/vnet/crypto/crypto_api.c | 39 |
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); } |