crypto: introduce async crypto infra
[vpp.git] / src / vnet / crypto / format.c
index 88c7c0f..b58ab7f 100644 (file)
@@ -26,14 +26,68 @@ format_vnet_crypto_alg (u8 * s, va_list * args)
   return format (s, "%s", d->name);
 }
 
+uword
+unformat_vnet_crypto_alg (unformat_input_t * input, va_list * args)
+{
+  vnet_crypto_main_t *cm = &crypto_main;
+  vnet_crypto_alg_t *alg = va_arg (*args, vnet_crypto_alg_t *);
+  uword *p;
+  u8 *name;
+
+  if (!unformat (input, "%s", &name))
+    return 0;
+
+  p = hash_get_mem (cm->alg_index_by_name, name);
+  vec_free (name);
+  if (p == 0)
+    return 0;
+
+  *alg = p[0];
+
+  return 1;
+}
+
 u8 *
 format_vnet_crypto_op (u8 * s, va_list * args)
 {
   vnet_crypto_main_t *cm = &crypto_main;
-  vnet_crypto_op_type_t op = va_arg (*args, vnet_crypto_op_type_t);
-  vnet_crypto_op_type_data_t *otd = cm->opt_data + op;
+  vnet_crypto_op_id_t op = va_arg (*args, int);        // vnet_crypto_op_id_t);
+  vnet_crypto_op_data_t *otd = cm->opt_data + op;
+
+  return format (s, "%U-%U", format_vnet_crypto_op_type, otd->type,
+                format_vnet_crypto_alg, otd->alg);
+}
+
+u8 *
+format_vnet_crypto_op_type (u8 * s, va_list * args)
+{
+  vnet_crypto_op_type_t opt = va_arg (*args, vnet_crypto_op_type_t);
+  char *strings[] = {
+#define _(n, s) [VNET_CRYPTO_OP_TYPE_##n] = s,
+    foreach_crypto_op_type
+#undef _
+  };
+
+  if (opt >= VNET_CRYPTO_OP_N_TYPES)
+    return format (s, "unknown");
+
+  return format (s, "%s", strings[opt]);
+}
+
+u8 *
+format_vnet_crypto_op_status (u8 * s, va_list * args)
+{
+  vnet_crypto_op_status_t st = va_arg (*args, vnet_crypto_op_status_t);
+  char *strings[] = {
+#define _(n, s) [VNET_CRYPTO_OP_STATUS_##n] = s,
+    foreach_crypto_op_status
+#undef _
+  };
+
+  if (st >= VNET_CRYPTO_OP_N_STATUS)
+    return format (s, "unknown");
 
-  return format (s, "%s-%U", otd->desc, format_vnet_crypto_alg, otd->alg);
+  return format (s, "%s", strings[st]);
 }
 
 u8 *
@@ -51,6 +105,61 @@ format_vnet_crypto_engine (u8 * s, va_list * args)
   return format (s, "%s", e->name);
 }
 
+u8 *
+format_vnet_crypto_async_op_type (u8 * s, va_list * args)
+{
+  vnet_crypto_async_op_type_t opt =
+    va_arg (*args, vnet_crypto_async_op_type_t);
+  char *strings[] = {
+#define _(n, s) [VNET_CRYPTO_ASYNC_OP_TYPE_##n] = s,
+    foreach_crypto_async_op_type
+#undef _
+  };
+
+  if (opt >= VNET_CRYPTO_ASYNC_OP_N_TYPES)
+    return format (s, "unknown");
+
+  return format (s, "%s", strings[opt]);
+}
+
+u8 *
+format_vnet_crypto_async_alg (u8 * s, va_list * args)
+{
+  vnet_crypto_async_alg_t alg = va_arg (*args, vnet_crypto_async_alg_t);
+  vnet_crypto_main_t *cm = &crypto_main;
+  vnet_crypto_async_alg_data_t *d = vec_elt_at_index (cm->async_algs, alg);
+  return format (s, "%s", d->name);
+}
+
+u8 *
+format_vnet_crypto_async_op (u8 * s, va_list * args)
+{
+  vnet_crypto_main_t *cm = &crypto_main;
+  vnet_crypto_async_op_id_t op = va_arg (*args, int);  // vnet_crypto_op_id_t);
+  vnet_crypto_async_op_data_t *otd = cm->async_opt_data + op;
+
+  return format (s, "%U-%U", format_vnet_crypto_async_op_type, otd->type,
+                format_vnet_crypto_async_alg, otd->alg);
+
+  vnet_crypto_async_op_id_t opt = va_arg (*args, vnet_crypto_async_op_id_t);
+  char *strings[] = {
+#define _(n, s, k, t, a) \
+               [VNET_CRYPTO_OP_##n##_TAG##t##_AAD##a##_ENC] = s "-enc", \
+               [VNET_CRYPTO_OP_##n##_TAG##t##_AAD##a##_DEC] = s "-dec",
+    foreach_crypto_aead_async_alg
+#undef _
+#define _(c, h, s, k ,d) \
+               [VNET_CRYPTO_OP_##c##_##h##_TAG##d##_ENC] = s "-enc", \
+               [VNET_CRYPTO_OP_##c##_##h##_TAG##d##_DEC] = s "-dec",
+      foreach_crypto_link_async_alg
+#undef _
+  };
+
+  if (opt >= VNET_CRYPTO_ASYNC_OP_N_IDS)
+    return format (s, "unknown");
+
+  return format (s, "%s", strings[opt]);
+}
 
 /*
  * fd.io coding-style-patch-verification: ON