crypto: add vnet_crypto_op_init (...)
[vpp.git] / src / vnet / crypto / crypto.h
index ad6286c..7a9ca2c 100644 (file)
@@ -57,9 +57,12 @@ typedef enum
   foreach_hmac_alg
 #undef _
     VNET_CRYPTO_N_OP_TYPES,
-} vnet_crypto_op_type_t;
+} __attribute__ ((packed)) vnet_crypto_op_type_t;
 /* *INDENT-ON* */
 
+STATIC_ASSERT (sizeof (vnet_crypto_op_type_t) <= 2,
+              "crypto op type > 2 bytes");
+
 typedef struct
 {
   char *name;
@@ -70,13 +73,16 @@ typedef enum
   VNET_CRYPTO_OP_STATUS_PENDING,
   VNET_CRYPTO_OP_STATUS_COMPLETED,
   VNET_CRYPTO_OP_STATUS_FAIL_NO_HANDLER,
-} vnet_crypto_op_status_t;
+} __attribute__ ((packed)) vnet_crypto_op_status_t;
+
+STATIC_ASSERT (sizeof (vnet_crypto_op_status_t) == 1,
+              "crypto op status > 1 byte");
 
 typedef struct
 {
   CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
-  vnet_crypto_op_type_t op:16;
-  vnet_crypto_op_status_t status:8;
+  vnet_crypto_op_type_t op;
+  vnet_crypto_op_status_t status;
   u8 key_len, hmac_trunc_len;
   u16 flags;
 #define VNET_CRYPTO_OP_FLAG_INIT_IV 1
@@ -159,6 +165,16 @@ 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 */
 
 /*