crypto: introduce async crypto infra
[vpp.git] / src / plugins / crypto_native / main.c
index 2c03ee2..7a42e4b 100644 (file)
@@ -45,6 +45,10 @@ crypto_native_key_handler (vlib_main_t * vm, vnet_crypto_key_op_t kop,
       return;
     }
 
+  /** TODO: add linked alg support **/
+  if (key->type == VNET_CRYPTO_KEY_TYPE_LINK)
+    return;
+
   vec_validate_aligned (cm->key_data, idx, CLIB_CACHE_LINE_BYTES);
 
   if (kop == VNET_CRYPTO_KEY_OP_MODIFY && cm->key_data[idx])
@@ -62,7 +66,8 @@ crypto_native_init (vlib_main_t * vm)
   vlib_thread_main_t *tm = vlib_get_thread_main ();
   clib_error_t *error = 0;
 
-  if (clib_cpu_supports_x86_aes () == 0)
+  if (clib_cpu_supports_x86_aes () == 0 &&
+      clib_cpu_supports_aarch64_aes () == 0)
     return 0;
 
   vec_validate_aligned (cm->per_thread_data, tm->n_vlib_mains - 1,
@@ -72,6 +77,7 @@ crypto_native_init (vlib_main_t * vm)
     vnet_crypto_register_engine (vm, "native", 100,
                                 "Native ISA Optimized Crypto");
 
+#if __x86_64__
   if (clib_cpu_supports_vaes ())
     error = crypto_native_aes_cbc_init_vaes (vm);
   else if (clib_cpu_supports_avx512f ())
@@ -98,6 +104,14 @@ crypto_native_init (vlib_main_t * vm)
       if (error)
        goto error;
     }
+#endif
+#if __aarch64__
+  if ((error = crypto_native_aes_cbc_init_neon (vm)))
+    goto error;
+
+  if ((error = crypto_native_aes_gcm_init_neon (vm)))
+    goto error;
+#endif
 
   vnet_crypto_register_key_handler (vm, cm->crypto_engine_index,
                                    crypto_native_key_handler);