FD.io VPP  v20.09-64-g4f7b92f0a
Vector Packet Processing
cryptodev.c File Reference
+ Include dependency graph for cryptodev.c:

Go to the source code of this file.

Data Structures

struct  cryptodev_op_t
 
struct  cryptodev_key_t
 
struct  cryptodev_inst_t
 
struct  cryptodev_numa_data_t
 
struct  cryptodev_engine_thread_t
 
struct  cryptodev_main_t
 

Macros

#define always_inline   static inline
 
#define CRYPTODEV_NB_CRYPTO_OPS   1024
 
#define CRYPTODEV_NB_SESSION   10240
 
#define CRYPTODEV_DEF_DRIVE   crypto_aesni_mb
 
#define CRYPTODEV_IV_OFFSET   (offsetof (cryptodev_op_t, iv))
 
#define CRYPTODEV_AAD_OFFSET   (offsetof (cryptodev_op_t, aad))
 
#define foreach_vnet_aead_crypto_conversion
 
#define foreach_cryptodev_link_async_alg
 crypto (alg, cryptodev_alg), hash (alg, digest-size) More...
 
#define foreach_vnet_crypto_status_conversion
 

Enumerations

enum  cryptodev_op_type_t {
  CRYPTODEV_OP_TYPE_ENCRYPT = 0, CRYPTODEV_OP_TYPE_DECRYPT, CRYPTODEV_N_OP_TYPES, CRYPTODEV_OP_TYPE_ENCRYPT = 0,
  CRYPTODEV_OP_TYPE_DECRYPT, CRYPTODEV_N_OP_TYPES
}
 
enum  cryptodev_resource_assign_op_t { CRYPTODEV_RESOURCE_ASSIGN_AUTO = 0, CRYPTODEV_RESOURCE_ASSIGN_UPDATE, CRYPTODEV_RESOURCE_ASSIGN_AUTO = 0, CRYPTODEV_RESOURCE_ASSIGN_UPDATE }
 

Functions

static int prepare_aead_xform (struct rte_crypto_sym_xform *xform, cryptodev_op_type_t op_type, const vnet_crypto_key_t *key, u32 aad_len)
 
static int prepare_linked_xform (struct rte_crypto_sym_xform *xforms, cryptodev_op_type_t op_type, const vnet_crypto_key_t *key)
 
static int cryptodev_session_create (vnet_crypto_key_t *const key, struct rte_mempool *sess_priv_pool, cryptodev_key_t *session_pair, u32 aad_len)
 
static void cryptodev_session_del (struct rte_cryptodev_sym_session *sess)
 
static int cryptodev_check_supported_vnet_alg (vnet_crypto_key_t *key)
 
static_always_inline void cryptodev_sess_handler (vlib_main_t *vm, vnet_crypto_key_op_t kop, vnet_crypto_key_index_t idx, u32 aad_len)
 
void cryptodev_key_handler (vlib_main_t *vm, vnet_crypto_key_op_t kop, vnet_crypto_key_index_t idx)
 
static_always_inline void cryptodev_mark_frame_err_status (vnet_crypto_async_frame_t *f, vnet_crypto_op_status_t s)
 
static_always_inline rte_iova_t cryptodev_get_iova (clib_pmalloc_main_t *pm, enum rte_iova_mode mode, void *data)
 
static_always_inline void cryptodev_validate_mbuf_chain (vlib_main_t *vm, struct rte_mbuf *mb, vlib_buffer_t *b)
 
static_always_inline int cryptodev_frame_linked_algs_enqueue (vlib_main_t *vm, vnet_crypto_async_frame_t *frame, cryptodev_op_type_t op_type)
 
static_always_inline int cryptodev_frame_gcm_enqueue (vlib_main_t *vm, vnet_crypto_async_frame_t *frame, cryptodev_op_type_t op_type, u8 aad_len)
 
static_always_inline cryptodev_op_tcryptodev_get_ring_head (struct rte_ring *ring)
 
static_always_inline vnet_crypto_async_frame_tcryptodev_frame_dequeue (vlib_main_t *vm, u32 *nb_elts_processed, u32 *enqueue_thread_idx)
 
static_always_inline int cryptodev_enqueue_gcm_aad_8_enc (vlib_main_t *vm, vnet_crypto_async_frame_t *frame)
 
static_always_inline int cryptodev_enqueue_gcm_aad_12_enc (vlib_main_t *vm, vnet_crypto_async_frame_t *frame)
 
static_always_inline int cryptodev_enqueue_gcm_aad_8_dec (vlib_main_t *vm, vnet_crypto_async_frame_t *frame)
 
static_always_inline int cryptodev_enqueue_gcm_aad_12_dec (vlib_main_t *vm, vnet_crypto_async_frame_t *frame)
 
static_always_inline int cryptodev_enqueue_linked_alg_enc (vlib_main_t *vm, vnet_crypto_async_frame_t *frame)
 
static_always_inline int cryptodev_enqueue_linked_alg_dec (vlib_main_t *vm, vnet_crypto_async_frame_t *frame)
 
static_always_inline int cryptodev_assign_resource (cryptodev_engine_thread_t *cet, u32 cryptodev_inst_index, cryptodev_resource_assign_op_t op)
 assign a cryptodev resource to a worker. More...
 
static u8format_cryptodev_inst (u8 *s, va_list *args)
 
static clib_error_tcryptodev_show_assignment_fn (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
 
static clib_error_tcryptodev_set_assignment_fn (vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
 
static int check_cryptodev_alg_support (u32 dev_id)
 
static u32 cryptodev_count_queue (u32 numa)
 
static int cryptodev_configure (vlib_main_t *vm, uint32_t cryptodev_id)
 
static int cryptodev_create_device (vlib_main_t *vm, u32 n_queues)
 
static int cryptodev_cmp (void *v1, void *v2)
 
static int cryptodev_probe (vlib_main_t *vm, u32 n_workers)
 
static int cryptodev_get_session_sz (vlib_main_t *vm, uint32_t n_workers)
 
static void dpdk_disable_cryptodev_engine (vlib_main_t *vm)
 
static void crypto_op_init (struct rte_mempool *mempool, void *_arg, void *_obj, unsigned i)
 
clib_error_tdpdk_cryptodev_init (vlib_main_t *vm)
 

Variables

static const vnet_crypto_op_status_t cryptodev_status_conversion []
 
cryptodev_main_t cryptodev_main
 
static vlib_cli_command_t show_cryptodev_assignment
 (constructor) VLIB_CLI_COMMAND (show_cryptodev_assignment) More...
 
static vlib_cli_command_t set_cryptodev_assignment
 (constructor) VLIB_CLI_COMMAND (set_cryptodev_assignment) More...
 

Macro Definition Documentation

◆ always_inline

#define always_inline   static inline

Definition at line 36 of file cryptodev.c.

◆ CRYPTODEV_AAD_OFFSET

#define CRYPTODEV_AAD_OFFSET   (offsetof (cryptodev_op_t, aad))

Definition at line 46 of file cryptodev.c.

◆ CRYPTODEV_DEF_DRIVE

#define CRYPTODEV_DEF_DRIVE   crypto_aesni_mb

Definition at line 43 of file cryptodev.c.

◆ CRYPTODEV_IV_OFFSET

#define CRYPTODEV_IV_OFFSET   (offsetof (cryptodev_op_t, iv))

Definition at line 45 of file cryptodev.c.

◆ CRYPTODEV_NB_CRYPTO_OPS

#define CRYPTODEV_NB_CRYPTO_OPS   1024

Definition at line 41 of file cryptodev.c.

◆ CRYPTODEV_NB_SESSION

#define CRYPTODEV_NB_SESSION   10240

Definition at line 42 of file cryptodev.c.

◆ foreach_cryptodev_link_async_alg

#define foreach_cryptodev_link_async_alg
Value:
_ (AES_128_CBC, AES_CBC, SHA1, 12) \
_ (AES_192_CBC, AES_CBC, SHA1, 12) \
_ (AES_256_CBC, AES_CBC, SHA1, 12) \
_ (AES_128_CBC, AES_CBC, SHA224, 14) \
_ (AES_192_CBC, AES_CBC, SHA224, 14) \
_ (AES_256_CBC, AES_CBC, SHA224, 14) \
_ (AES_128_CBC, AES_CBC, SHA256, 16) \
_ (AES_192_CBC, AES_CBC, SHA256, 16) \
_ (AES_256_CBC, AES_CBC, SHA256, 16) \
_ (AES_128_CBC, AES_CBC, SHA384, 24) \
_ (AES_192_CBC, AES_CBC, SHA384, 24) \
_ (AES_256_CBC, AES_CBC, SHA384, 24) \
_ (AES_128_CBC, AES_CBC, SHA512, 32) \
_ (AES_192_CBC, AES_CBC, SHA512, 32) \
_ (AES_256_CBC, AES_CBC, SHA512, 32)

crypto (alg, cryptodev_alg), hash (alg, digest-size)

Definition at line 60 of file cryptodev.c.

◆ foreach_vnet_aead_crypto_conversion

#define foreach_vnet_aead_crypto_conversion
Value:
_(AES_128_GCM, AEAD, AES_GCM, 12, 16, 8) \
_(AES_128_GCM, AEAD, AES_GCM, 12, 16, 12) \
_(AES_192_GCM, AEAD, AES_GCM, 12, 16, 8) \
_(AES_192_GCM, AEAD, AES_GCM, 12, 16, 12) \
_(AES_256_GCM, AEAD, AES_GCM, 12, 16, 8) \
_(AES_256_GCM, AEAD, AES_GCM, 12, 16, 12)

Definition at line 49 of file cryptodev.c.

◆ foreach_vnet_crypto_status_conversion

#define foreach_vnet_crypto_status_conversion
Value:
_(SUCCESS, COMPLETED) \
_(NOT_PROCESSED, WORK_IN_PROGRESS) \
_(AUTH_FAILED, FAIL_BAD_HMAC) \
_(INVALID_SESSION, FAIL_ENGINE_ERR) \
_(INVALID_ARGS, FAIL_ENGINE_ERR) \
_(ERROR, FAIL_ENGINE_ERR)

Definition at line 77 of file cryptodev.c.

Enumeration Type Documentation

◆ cryptodev_op_type_t

Enumerator
CRYPTODEV_OP_TYPE_ENCRYPT 
CRYPTODEV_OP_TYPE_DECRYPT 
CRYPTODEV_N_OP_TYPES 
CRYPTODEV_OP_TYPE_ENCRYPT 
CRYPTODEV_OP_TYPE_DECRYPT 
CRYPTODEV_N_OP_TYPES 

Definition at line 102 of file cryptodev.c.

◆ cryptodev_resource_assign_op_t

Enumerator
CRYPTODEV_RESOURCE_ASSIGN_AUTO 
CRYPTODEV_RESOURCE_ASSIGN_UPDATE 
CRYPTODEV_RESOURCE_ASSIGN_AUTO 
CRYPTODEV_RESOURCE_ASSIGN_UPDATE 

Definition at line 824 of file cryptodev.c.

Function Documentation

◆ check_cryptodev_alg_support()

static int check_cryptodev_alg_support ( u32  dev_id)
static

Definition at line 1025 of file cryptodev.c.

+ Here is the caller graph for this function:

◆ crypto_op_init()

static void crypto_op_init ( struct rte_mempool *  mempool,
void *  _arg,
void *  _obj,
unsigned  i 
)
static

Definition at line 1273 of file cryptodev.c.

+ Here is the caller graph for this function:

◆ cryptodev_assign_resource()

static_always_inline int cryptodev_assign_resource ( cryptodev_engine_thread_t cet,
u32  cryptodev_inst_index,
cryptodev_resource_assign_op_t  op 
)

assign a cryptodev resource to a worker.

Parameters
cetthe worker thread data
cryptodev_inst_indexif op is "ASSIGN_AUTO" this param is ignored.
opthe assignment method.
Returns
: 0 if successfully, negative number otherwise.

Definition at line 838 of file cryptodev.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ cryptodev_check_supported_vnet_alg()

static int cryptodev_check_supported_vnet_alg ( vnet_crypto_key_t key)
static

Definition at line 310 of file cryptodev.c.

+ Here is the caller graph for this function:

◆ cryptodev_cmp()

static int cryptodev_cmp ( void *  v1,
void *  v2 
)
static

Definition at line 1187 of file cryptodev.c.

+ Here is the caller graph for this function:

◆ cryptodev_configure()

static int cryptodev_configure ( vlib_main_t vm,
uint32_t  cryptodev_id 
)
static

If the device is already started, we reuse it, otherwise configure both the device and queue pair.

Definition at line 1089 of file cryptodev.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ cryptodev_count_queue()

static u32 cryptodev_count_queue ( u32  numa)
static

Definition at line 1067 of file cryptodev.c.

+ Here is the caller graph for this function:

◆ cryptodev_create_device()

static int cryptodev_create_device ( vlib_main_t vm,
u32  n_queues 
)
static

Definition at line 1155 of file cryptodev.c.

+ Here is the caller graph for this function:

◆ cryptodev_enqueue_gcm_aad_12_dec()

static_always_inline int cryptodev_enqueue_gcm_aad_12_dec ( vlib_main_t vm,
vnet_crypto_async_frame_t frame 
)

Definition at line 801 of file cryptodev.c.

+ Here is the call graph for this function:

◆ cryptodev_enqueue_gcm_aad_12_enc()

static_always_inline int cryptodev_enqueue_gcm_aad_12_enc ( vlib_main_t vm,
vnet_crypto_async_frame_t frame 
)

Definition at line 786 of file cryptodev.c.

+ Here is the call graph for this function:

◆ cryptodev_enqueue_gcm_aad_8_dec()

static_always_inline int cryptodev_enqueue_gcm_aad_8_dec ( vlib_main_t vm,
vnet_crypto_async_frame_t frame 
)

Definition at line 794 of file cryptodev.c.

+ Here is the call graph for this function:

◆ cryptodev_enqueue_gcm_aad_8_enc()

static_always_inline int cryptodev_enqueue_gcm_aad_8_enc ( vlib_main_t vm,
vnet_crypto_async_frame_t frame 
)

Definition at line 779 of file cryptodev.c.

+ Here is the call graph for this function:

◆ cryptodev_enqueue_linked_alg_dec()

static_always_inline int cryptodev_enqueue_linked_alg_dec ( vlib_main_t vm,
vnet_crypto_async_frame_t frame 
)

Definition at line 817 of file cryptodev.c.

+ Here is the call graph for this function:

◆ cryptodev_enqueue_linked_alg_enc()

static_always_inline int cryptodev_enqueue_linked_alg_enc ( vlib_main_t vm,
vnet_crypto_async_frame_t frame 
)

Definition at line 809 of file cryptodev.c.

+ Here is the call graph for this function:

◆ cryptodev_frame_dequeue()

static_always_inline vnet_crypto_async_frame_t* cryptodev_frame_dequeue ( vlib_main_t vm,
u32 nb_elts_processed,
u32 enqueue_thread_idx 
)

Definition at line 709 of file cryptodev.c.

+ Here is the call graph for this function:

◆ cryptodev_frame_gcm_enqueue()

static_always_inline int cryptodev_frame_gcm_enqueue ( vlib_main_t vm,
vnet_crypto_async_frame_t frame,
cryptodev_op_type_t  op_type,
u8  aad_len 
)

Definition at line 581 of file cryptodev.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ cryptodev_frame_linked_algs_enqueue()

static_always_inline int cryptodev_frame_linked_algs_enqueue ( vlib_main_t vm,
vnet_crypto_async_frame_t frame,
cryptodev_op_type_t  op_type 
)

Definition at line 469 of file cryptodev.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ cryptodev_get_iova()

static_always_inline rte_iova_t cryptodev_get_iova ( clib_pmalloc_main_t pm,
enum rte_iova_mode  mode,
void *  data 
)

Definition at line 419 of file cryptodev.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ cryptodev_get_ring_head()

static_always_inline cryptodev_op_t* cryptodev_get_ring_head ( struct rte_ring *  ring)

Definition at line 702 of file cryptodev.c.

+ Here is the caller graph for this function:

◆ cryptodev_get_session_sz()

static int cryptodev_get_session_sz ( vlib_main_t vm,
uint32_t  n_workers 
)
static

Definition at line 1229 of file cryptodev.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ cryptodev_key_handler()

void cryptodev_key_handler ( vlib_main_t vm,
vnet_crypto_key_op_t  kop,
vnet_crypto_key_index_t  idx 
)

Definition at line 401 of file cryptodev.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ cryptodev_mark_frame_err_status()

static_always_inline void cryptodev_mark_frame_err_status ( vnet_crypto_async_frame_t f,
vnet_crypto_op_status_t  s 
)

Definition at line 408 of file cryptodev.c.

+ Here is the caller graph for this function:

◆ cryptodev_probe()

static int cryptodev_probe ( vlib_main_t vm,
u32  n_workers 
)
static

Definition at line 1200 of file cryptodev.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ cryptodev_sess_handler()

static_always_inline void cryptodev_sess_handler ( vlib_main_t vm,
vnet_crypto_key_op_t  kop,
vnet_crypto_key_index_t  idx,
u32  aad_len 
)

Definition at line 328 of file cryptodev.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ cryptodev_session_create()

static int cryptodev_session_create ( vnet_crypto_key_t *const  key,
struct rte_mempool *  sess_priv_pool,
cryptodev_key_t session_pair,
u32  aad_len 
)
static

Definition at line 244 of file cryptodev.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ cryptodev_session_del()

static void cryptodev_session_del ( struct rte_cryptodev_sym_session *  sess)
static

Definition at line 294 of file cryptodev.c.

+ Here is the caller graph for this function:

◆ cryptodev_set_assignment_fn()

static clib_error_t* cryptodev_set_assignment_fn ( vlib_main_t vm,
unformat_input_t input,
vlib_cli_command_t cmd 
)
static

Definition at line 955 of file cryptodev.c.

+ Here is the call graph for this function:

◆ cryptodev_show_assignment_fn()

static clib_error_t* cryptodev_show_assignment_fn ( vlib_main_t vm,
unformat_input_t input,
vlib_cli_command_t cmd 
)
static

Definition at line 928 of file cryptodev.c.

+ Here is the call graph for this function:

◆ cryptodev_validate_mbuf_chain()

static_always_inline void cryptodev_validate_mbuf_chain ( vlib_main_t vm,
struct rte_mbuf *  mb,
vlib_buffer_t b 
)

< last mbuf

Definition at line 431 of file cryptodev.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ dpdk_cryptodev_init()

clib_error_t* dpdk_cryptodev_init ( vlib_main_t vm)

Definition at line 1288 of file cryptodev.c.

+ Here is the caller graph for this function:

◆ dpdk_disable_cryptodev_engine()

static void dpdk_disable_cryptodev_engine ( vlib_main_t vm)
static

Definition at line 1256 of file cryptodev.c.

+ Here is the caller graph for this function:

◆ format_cryptodev_inst()

static u8* format_cryptodev_inst ( u8 s,
va_list *  args 
)
static

Definition at line 896 of file cryptodev.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ prepare_aead_xform()

static int prepare_aead_xform ( struct rte_crypto_sym_xform *  xform,
cryptodev_op_type_t  op_type,
const vnet_crypto_key_t key,
u32  aad_len 
)
static

Definition at line 152 of file cryptodev.c.

+ Here is the caller graph for this function:

◆ prepare_linked_xform()

static int prepare_linked_xform ( struct rte_crypto_sym_xform *  xforms,
cryptodev_op_type_t  op_type,
const vnet_crypto_key_t key 
)
static

Definition at line 180 of file cryptodev.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Variable Documentation

◆ cryptodev_main

cryptodev_main_t cryptodev_main

Definition at line 149 of file cryptodev.c.

◆ cryptodev_status_conversion

const vnet_crypto_op_status_t cryptodev_status_conversion[]
static
Initial value:
= {
#define _(a, b)
}
#define foreach_vnet_crypto_status_conversion
Definition: cryptodev.c:77

Definition at line 85 of file cryptodev.c.

◆ set_cryptodev_assignment

vlib_cli_command_t set_cryptodev_assignment
static
Initial value:
= {
.path = "set cryptodev assignment",
.short_help = "set cryptodev assignment thread <thread_index> "
"resource <inst_index>",
}
static clib_error_t * cryptodev_set_assignment_fn(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
Definition: cryptodev.c:955

(constructor) VLIB_CLI_COMMAND (set_cryptodev_assignment)

Definition at line 1017 of file cryptodev.c.

◆ show_cryptodev_assignment

vlib_cli_command_t show_cryptodev_assignment
static
Initial value:
= {
.path = "show cryptodev assignment",
.short_help = "show cryptodev assignment",
}
static clib_error_t * cryptodev_show_assignment_fn(vlib_main_t *vm, unformat_input_t *input, vlib_cli_command_t *cmd)
Definition: cryptodev.c:928

(constructor) VLIB_CLI_COMMAND (show_cryptodev_assignment)

Definition at line 948 of file cryptodev.c.