X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fcrypto%2Fcrypto.h;h=7a9ca2c2278fdf39c9603bc4850948a28bd31a0c;hb=a03d18238350f9941357caca28957395ad737810;hp=4c9467f272f56e13a68e158062df1bb4ef5f768d;hpb=e225f71766a75364523e6892a709ca95a3e043c1;p=vpp.git diff --git a/src/vnet/crypto/crypto.h b/src/vnet/crypto/crypto.h index 4c9467f272f..7a9ca2c2278 100644 --- a/src/vnet/crypto/crypto.h +++ b/src/vnet/crypto/crypto.h @@ -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,14 +73,17 @@ 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; - u8 key_len; + 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 u32 len; @@ -85,6 +91,7 @@ typedef struct u8 *iv; u8 *src; u8 *dst; + uword user_data; } vnet_crypto_op_t; typedef struct @@ -139,6 +146,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; @@ -149,10 +158,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 */ /*