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 15:13:56 +0000 |
commit | 4035daffd540c23db1195216303cba79e8ca17c3 (patch) | |
tree | 690f2b9d2a4f2f1c97994cec95cdcacddf3eeeb4 /src/vnet | |
parent | fb66fcf3fb7de414534650b3fce9627fefbe6a13 (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)
Diffstat (limited to 'src/vnet')
-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); } |