diff options
-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); } |