crypto: Crypto set handler API to support set all as CLI 39/28839/2
authorYulong Pei <yulong.pei@intel.com>
Tue, 15 Sep 2020 02:45:03 +0000 (19:45 -0700)
committerAndrew Yourtchenko <ayourtch@gmail.com>
Wed, 16 Sep 2020 13:54:28 +0000 (13:54 +0000)
Type: improvement

Signed-off-by: Yulong Pei <yulong.pei@intel.com>
Change-Id: I43556f8c76c7aae64d9c927e1fda3c1774d7e49d

src/vnet/crypto/crypto.api
src/vnet/crypto/crypto_api.c

index 04b0cfd..6eccd85 100644 (file)
@@ -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
index 49b12a3..8766614 100644 (file)
@@ -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);
 }