IPSEC-GRE: fixes and API update to common types.
[vpp.git] / src / vnet / crypto / crypto.h
index 4ce4d25..2bd40dc 100644 (file)
@@ -70,16 +70,18 @@ typedef enum
   VNET_CRYPTO_OP_STATUS_PENDING,
   VNET_CRYPTO_OP_STATUS_COMPLETED,
   VNET_CRYPTO_OP_STATUS_FAIL_NO_HANDLER,
+  VNET_CRYPTO_OP_STATUS_FAIL_BAD_HMAC,
 } vnet_crypto_op_status_t;
 
 typedef struct
 {
   CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
-  vnet_crypto_op_type_t op:16;
+  vnet_crypto_op_type_t op:8;
   vnet_crypto_op_status_t status:8;
   u8 key_len, hmac_trunc_len;
   u16 flags;
-#define VNET_CRYPTO_OP_FLAG_INIT_IV 1
+#define VNET_CRYPTO_OP_FLAG_INIT_IV (1 << 0)
+#define VNET_CRYPTO_OP_FLAG_HMAC_CHECK (1 << 1)
   u32 len;
   u8 *key;
   u8 *iv;
@@ -140,6 +142,8 @@ typedef struct
   vnet_crypto_ops_handler_t **ops_handlers;
   vnet_crypto_op_type_data_t opt_data[VNET_CRYPTO_N_OP_TYPES];
   vnet_crypto_engine_t *engines;
+  uword *engine_index_by_name;
+  uword *ops_handler_index_by_name;
 } vnet_crypto_main_t;
 
 extern vnet_crypto_main_t crypto_main;
@@ -150,10 +154,23 @@ u32 vnet_crypto_submit_ops (vlib_main_t * vm, vnet_crypto_op_t ** jobs,
 u32 vnet_crypto_process_ops (vlib_main_t * vm, vnet_crypto_op_t ops[],
                             u32 n_ops);
 
+
+int vnet_crypto_set_handler (char *ops_handler_name, char *engine);
+
 format_function_t format_vnet_crypto_alg;
 format_function_t format_vnet_crypto_engine;
 format_function_t format_vnet_crypto_op;
 
+
+static_always_inline void
+vnet_crypto_op_init (vnet_crypto_op_t * op, vnet_crypto_op_type_t type)
+{
+  if (CLIB_DEBUG > 0)
+    clib_memset (op, 0xfe, sizeof (*op));
+  op->op = type;
+  op->flags = 0;
+}
+
 #endif /* included_vnet_crypto_crypto_h */
 
 /*