DPDK  24.11.0
Data Structures | Macros | Typedefs | Enumerations | Functions
rte_cryptodev.h File Reference
#include <rte_compat.h>
#include "rte_kvargs.h"
#include "rte_crypto.h"
#include <rte_common.h>
#include <rte_rcu_qsbr.h>
#include "rte_cryptodev_trace_fp.h"
#include <rte_cryptodev_core.h>

Go to the source code of this file.

Data Structures

struct  rte_crypto_param_range
 
struct  rte_cryptodev_symmetric_capability
 
struct  rte_cryptodev_asymmetric_xform_capability
 
struct  rte_cryptodev_asymmetric_capability
 
struct  rte_cryptodev_capabilities
 
struct  rte_cryptodev_sym_capability_idx
 
struct  rte_cryptodev_asym_capability_idx
 
struct  rte_cryptodev_info
 
struct  rte_cryptodev_qp_conf
 
struct  rte_cryptodev_stats
 
struct  rte_cryptodev_config
 
struct  rte_cryptodev_cb
 
union  rte_cryptodev_session_ctx
 
struct  rte_crypto_raw_dp_ctx
 

Macros

#define rte_crypto_op_ctod_offset(c, t, o)   ((t)((char *)(c) + (o)))
 
#define rte_crypto_op_ctophys_offset(c, o)   (rte_iova_t)((c)->phys_addr + (o))
 
#define RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_512_BYTES   RTE_BIT32(0)
 
#define RTE_CRYPTODEV_END_OF_CAPABILITIES_LIST()   { RTE_CRYPTO_OP_TYPE_UNDEFINED }
 
#define RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO   (1ULL << 0)
 
#define RTE_CRYPTODEV_FF_ASYMMETRIC_CRYPTO   (1ULL << 1)
 
#define RTE_CRYPTODEV_FF_SYM_OPERATION_CHAINING   (1ULL << 2)
 
#define RTE_CRYPTODEV_FF_CPU_SSE   (1ULL << 3)
 
#define RTE_CRYPTODEV_FF_CPU_AVX   (1ULL << 4)
 
#define RTE_CRYPTODEV_FF_CPU_AVX2   (1ULL << 5)
 
#define RTE_CRYPTODEV_FF_CPU_AESNI   (1ULL << 6)
 
#define RTE_CRYPTODEV_FF_HW_ACCELERATED   (1ULL << 7)
 
#define RTE_CRYPTODEV_FF_CPU_AVX512   (1ULL << 8)
 
#define RTE_CRYPTODEV_FF_IN_PLACE_SGL   (1ULL << 9)
 
#define RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT   (1ULL << 10)
 
#define RTE_CRYPTODEV_FF_OOP_SGL_IN_LB_OUT   (1ULL << 11)
 
#define RTE_CRYPTODEV_FF_OOP_LB_IN_SGL_OUT   (1ULL << 12)
 
#define RTE_CRYPTODEV_FF_OOP_LB_IN_LB_OUT   (1ULL << 13)
 
#define RTE_CRYPTODEV_FF_CPU_NEON   (1ULL << 14)
 
#define RTE_CRYPTODEV_FF_CPU_ARM_CE   (1ULL << 15)
 
#define RTE_CRYPTODEV_FF_SECURITY   (1ULL << 16)
 
#define RTE_CRYPTODEV_FF_RSA_PRIV_OP_KEY_EXP   (1ULL << 17)
 
#define RTE_CRYPTODEV_FF_RSA_PRIV_OP_KEY_QT   (1ULL << 18)
 
#define RTE_CRYPTODEV_FF_DIGEST_ENCRYPTED   (1ULL << 19)
 
#define RTE_CRYPTODEV_FF_ASYM_SESSIONLESS   (1ULL << 20)
 
#define RTE_CRYPTODEV_FF_SYM_CPU_CRYPTO   (1ULL << 21)
 
#define RTE_CRYPTODEV_FF_SYM_SESSIONLESS   (1ULL << 22)
 
#define RTE_CRYPTODEV_FF_NON_BYTE_ALIGNED_DATA   (1ULL << 23)
 
#define RTE_CRYPTODEV_FF_SYM_RAW_DP   (1ULL << 24)
 
#define RTE_CRYPTODEV_FF_CIPHER_MULTIPLE_DATA_UNITS   (1ULL << 25)
 
#define RTE_CRYPTODEV_FF_CIPHER_WRAPPED_KEY   (1ULL << 26)
 
#define RTE_CRYPTODEV_FF_SECURITY_INNER_CSUM   (1ULL << 27)
 
#define RTE_CRYPTODEV_FF_SECURITY_RX_INJECT   (1ULL << 28)
 
#define RTE_CRYPTODEV_QP_PRIORITY_HIGHEST   0
 
#define RTE_CRYPTODEV_QP_PRIORITY_NORMAL   128
 
#define RTE_CRYPTODEV_QP_PRIORITY_LOWEST   255
 
#define RTE_CRYPTODEV_NAME_MAX_LEN   (64)
 

Typedefs

typedef uint16_t(* rte_cryptodev_callback_fn) (uint16_t dev_id, uint16_t qp_id, struct rte_crypto_op **ops, uint16_t nb_ops, void *user_param)
 
typedef void(* rte_cryptodev_cb_fn) (uint8_t dev_id, enum rte_cryptodev_event_type event, void *cb_arg)
 
typedef uint32_t(* cryptodev_sym_raw_enqueue_burst_t) (void *qp, uint8_t *drv_ctx, struct rte_crypto_sym_vec *vec, union rte_crypto_sym_ofs ofs, void *user_data[], int *enqueue_status)
 
typedef int(* cryptodev_sym_raw_enqueue_t) (void *qp, uint8_t *drv_ctx, struct rte_crypto_vec *data_vec, uint16_t n_data_vecs, union rte_crypto_sym_ofs ofs, struct rte_crypto_va_iova_ptr *iv, struct rte_crypto_va_iova_ptr *digest, struct rte_crypto_va_iova_ptr *aad_or_auth_iv, void *user_data)
 
typedef int(* cryptodev_sym_raw_operation_done_t) (void *qp, uint8_t *drv_ctx, uint32_t n)
 
typedef uint32_t(* rte_cryptodev_raw_get_dequeue_count_t) (void *user_data)
 
typedef void(* rte_cryptodev_raw_post_dequeue_t) (void *user_data, uint32_t index, uint8_t is_op_success)
 
typedef uint32_t(* cryptodev_sym_raw_dequeue_burst_t) (void *qp, uint8_t *drv_ctx, rte_cryptodev_raw_get_dequeue_count_t get_dequeue_count, uint32_t max_nb_to_dequeue, rte_cryptodev_raw_post_dequeue_t post_dequeue, void **out_user_data, uint8_t is_user_data_array, uint32_t *n_success, int *dequeue_status)
 
typedef void *(* cryptodev_sym_raw_dequeue_t) (void *qp, uint8_t *drv_ctx, int *dequeue_status, enum rte_crypto_op_status *op_status)
 

Enumerations

enum  rte_cryptodev_event_type { RTE_CRYPTODEV_EVENT_UNKNOWN, RTE_CRYPTODEV_EVENT_ERROR, RTE_CRYPTODEV_EVENT_MAX }
 

Functions

const struct rte_cryptodev_symmetric_capabilityrte_cryptodev_sym_capability_get (uint8_t dev_id, const struct rte_cryptodev_sym_capability_idx *idx)
 
const struct rte_cryptodev_asymmetric_xform_capabilityrte_cryptodev_asym_capability_get (uint8_t dev_id, const struct rte_cryptodev_asym_capability_idx *idx)
 
int rte_cryptodev_sym_capability_check_cipher (const struct rte_cryptodev_symmetric_capability *capability, uint16_t key_size, uint16_t iv_size)
 
int rte_cryptodev_sym_capability_check_auth (const struct rte_cryptodev_symmetric_capability *capability, uint16_t key_size, uint16_t digest_size, uint16_t iv_size)
 
int rte_cryptodev_sym_capability_check_aead (const struct rte_cryptodev_symmetric_capability *capability, uint16_t key_size, uint16_t digest_size, uint16_t aad_size, uint16_t iv_size)
 
int rte_cryptodev_asym_xform_capability_check_optype (const struct rte_cryptodev_asymmetric_xform_capability *capability, enum rte_crypto_asym_op_type op_type)
 
int rte_cryptodev_asym_xform_capability_check_modlen (const struct rte_cryptodev_asymmetric_xform_capability *capability, uint16_t modlen)
 
bool rte_cryptodev_asym_xform_capability_check_hash (const struct rte_cryptodev_asymmetric_xform_capability *capability, enum rte_crypto_auth_algorithm hash)
 
__rte_experimental int rte_cryptodev_asym_xform_capability_check_opcap (const struct rte_cryptodev_asymmetric_xform_capability *capability, enum rte_crypto_asym_op_type op_type, uint8_t cap)
 
int rte_cryptodev_get_cipher_algo_enum (enum rte_crypto_cipher_algorithm *algo_enum, const char *algo_string)
 
int rte_cryptodev_get_auth_algo_enum (enum rte_crypto_auth_algorithm *algo_enum, const char *algo_string)
 
int rte_cryptodev_get_aead_algo_enum (enum rte_crypto_aead_algorithm *algo_enum, const char *algo_string)
 
int rte_cryptodev_asym_get_xform_enum (enum rte_crypto_asym_xform_type *xform_enum, const char *xform_string)
 
__rte_experimental const char * rte_cryptodev_get_cipher_algo_string (enum rte_crypto_cipher_algorithm algo_enum)
 
__rte_experimental const char * rte_cryptodev_get_auth_algo_string (enum rte_crypto_auth_algorithm algo_enum)
 
__rte_experimental const char * rte_cryptodev_get_aead_algo_string (enum rte_crypto_aead_algorithm algo_enum)
 
__rte_experimental const char * rte_cryptodev_asym_get_xform_string (enum rte_crypto_asym_xform_type xform_enum)
 
const char * rte_cryptodev_get_feature_name (uint64_t flag)
 
int rte_cryptodev_get_dev_id (const char *name)
 
const char * rte_cryptodev_name_get (uint8_t dev_id)
 
uint8_t rte_cryptodev_count (void)
 
uint8_t rte_cryptodev_device_count_by_driver (uint8_t driver_id)
 
uint8_t rte_cryptodev_devices_get (const char *driver_name, uint8_t *devices, uint8_t nb_devices)
 
int rte_cryptodev_configure (uint8_t dev_id, struct rte_cryptodev_config *config)
 
int rte_cryptodev_start (uint8_t dev_id)
 
void rte_cryptodev_stop (uint8_t dev_id)
 
int rte_cryptodev_close (uint8_t dev_id)
 
int rte_cryptodev_queue_pair_setup (uint8_t dev_id, uint16_t queue_pair_id, const struct rte_cryptodev_qp_conf *qp_conf, int socket_id)
 
__rte_experimental int rte_cryptodev_queue_pair_reset (uint8_t dev_id, uint16_t queue_pair_id, const struct rte_cryptodev_qp_conf *qp_conf, int socket_id)
 
int rte_cryptodev_get_qp_status (uint8_t dev_id, uint16_t queue_pair_id)
 
uint16_t rte_cryptodev_queue_pair_count (uint8_t dev_id)
 
int rte_cryptodev_stats_get (uint8_t dev_id, struct rte_cryptodev_stats *stats)
 
void rte_cryptodev_stats_reset (uint8_t dev_id)
 
void rte_cryptodev_info_get (uint8_t dev_id, struct rte_cryptodev_info *dev_info)
 
int rte_cryptodev_callback_register (uint8_t dev_id, enum rte_cryptodev_event_type event, rte_cryptodev_cb_fn cb_fn, void *cb_arg)
 
int rte_cryptodev_callback_unregister (uint8_t dev_id, enum rte_cryptodev_event_type event, rte_cryptodev_cb_fn cb_fn, void *cb_arg)
 
__rte_experimental int rte_cryptodev_queue_pair_event_error_query (uint8_t dev_id, uint16_t qp_id)
 
 RTE_TAILQ_HEAD (rte_cryptodev_cb_list, rte_cryptodev_callback)
 
void * rte_cryptodev_get_sec_ctx (uint8_t dev_id)
 
struct rte_mempoolrte_cryptodev_sym_session_pool_create (const char *name, uint32_t nb_elts, uint32_t elt_size, uint32_t cache_size, uint16_t priv_size, int socket_id)
 
struct rte_mempoolrte_cryptodev_asym_session_pool_create (const char *name, uint32_t nb_elts, uint32_t cache_size, uint16_t user_data_size, int socket_id)
 
void * rte_cryptodev_sym_session_create (uint8_t dev_id, struct rte_crypto_sym_xform *xforms, struct rte_mempool *mp)
 
int rte_cryptodev_asym_session_create (uint8_t dev_id, struct rte_crypto_asym_xform *xforms, struct rte_mempool *mp, void **session)
 
int rte_cryptodev_sym_session_free (uint8_t dev_id, void *sess)
 
int rte_cryptodev_asym_session_free (uint8_t dev_id, void *sess)
 
unsigned int rte_cryptodev_asym_get_header_session_size (void)
 
unsigned int rte_cryptodev_sym_get_private_session_size (uint8_t dev_id)
 
unsigned int rte_cryptodev_asym_get_private_session_size (uint8_t dev_id)
 
unsigned int rte_cryptodev_is_valid_dev (uint8_t dev_id)
 
int rte_cryptodev_driver_id_get (const char *name)
 
const char * rte_cryptodev_driver_name_get (uint8_t driver_id)
 
int rte_cryptodev_sym_session_set_user_data (void *sess, void *data, uint16_t size)
 
static uint64_t rte_cryptodev_sym_session_opaque_data_get (void *sess)
 
static void rte_cryptodev_sym_session_opaque_data_set (void *sess, uint64_t opaque)
 
void * rte_cryptodev_sym_session_get_user_data (void *sess)
 
int rte_cryptodev_asym_session_set_user_data (void *sess, void *data, uint16_t size)
 
void * rte_cryptodev_asym_session_get_user_data (void *sess)
 
uint32_t rte_cryptodev_sym_cpu_crypto_process (uint8_t dev_id, void *sess, union rte_crypto_sym_ofs ofs, struct rte_crypto_sym_vec *vec)
 
int rte_cryptodev_get_raw_dp_ctx_size (uint8_t dev_id)
 
int rte_cryptodev_session_event_mdata_set (uint8_t dev_id, void *sess, enum rte_crypto_op_type op_type, enum rte_crypto_op_sess_type sess_type, void *ev_mdata, uint16_t size)
 
int rte_cryptodev_configure_raw_dp_ctx (uint8_t dev_id, uint16_t qp_id, struct rte_crypto_raw_dp_ctx *ctx, enum rte_crypto_op_sess_type sess_type, union rte_cryptodev_session_ctx session_ctx, uint8_t is_update)
 
uint32_t rte_cryptodev_raw_enqueue_burst (struct rte_crypto_raw_dp_ctx *ctx, struct rte_crypto_sym_vec *vec, union rte_crypto_sym_ofs ofs, void **user_data, int *enqueue_status)
 
static __rte_experimental __rte_always_inline int rte_cryptodev_raw_enqueue (struct rte_crypto_raw_dp_ctx *ctx, struct rte_crypto_vec *data_vec, uint16_t n_data_vecs, union rte_crypto_sym_ofs ofs, struct rte_crypto_va_iova_ptr *iv, struct rte_crypto_va_iova_ptr *digest, struct rte_crypto_va_iova_ptr *aad_or_auth_iv, void *user_data)
 
int rte_cryptodev_raw_enqueue_done (struct rte_crypto_raw_dp_ctx *ctx, uint32_t n)
 
uint32_t rte_cryptodev_raw_dequeue_burst (struct rte_crypto_raw_dp_ctx *ctx, rte_cryptodev_raw_get_dequeue_count_t get_dequeue_count, uint32_t max_nb_to_dequeue, rte_cryptodev_raw_post_dequeue_t post_dequeue, void **out_user_data, uint8_t is_user_data_array, uint32_t *n_success, int *dequeue_status)
 
static __rte_experimental __rte_always_inline void * rte_cryptodev_raw_dequeue (struct rte_crypto_raw_dp_ctx *ctx, int *dequeue_status, enum rte_crypto_op_status *op_status)
 
int rte_cryptodev_raw_dequeue_done (struct rte_crypto_raw_dp_ctx *ctx, uint32_t n)
 
struct rte_cryptodev_cbrte_cryptodev_add_enq_callback (uint8_t dev_id, uint16_t qp_id, rte_cryptodev_callback_fn cb_fn, void *cb_arg)
 
int rte_cryptodev_remove_enq_callback (uint8_t dev_id, uint16_t qp_id, struct rte_cryptodev_cb *cb)
 
struct rte_cryptodev_cbrte_cryptodev_add_deq_callback (uint8_t dev_id, uint16_t qp_id, rte_cryptodev_callback_fn cb_fn, void *cb_arg)
 
int rte_cryptodev_remove_deq_callback (uint8_t dev_id, uint16_t qp_id, struct rte_cryptodev_cb *cb)
 
static uint16_t rte_cryptodev_dequeue_burst (uint8_t dev_id, uint16_t qp_id, struct rte_crypto_op **ops, uint16_t nb_ops)
 
static uint16_t rte_cryptodev_enqueue_burst (uint8_t dev_id, uint16_t qp_id, struct rte_crypto_op **ops, uint16_t nb_ops)
 
static __rte_experimental int rte_cryptodev_qp_depth_used (uint8_t dev_id, uint16_t qp_id)
 

Detailed Description

RTE Cryptographic Device APIs

Defines RTE Crypto Device APIs for the provisioning of cipher and authentication operations.

Definition in file rte_cryptodev.h.

Macro Definition Documentation

◆ rte_crypto_op_ctod_offset

#define rte_crypto_op_ctod_offset (   c,
  t,
 
)    ((t)((char *)(c) + (o)))

A macro that points to an offset from the start of the crypto operation structure (rte_crypto_op)

The returned pointer is cast to type t.

Parameters
cThe crypto operation.
oThe offset from the start of the crypto operation.
tThe type to cast the result into.
Examples:
examples/fips_validation/fips_dev_self_test.c, examples/fips_validation/main.c, examples/ipsec-secgw/esp.c, and examples/l2fwd-crypto/main.c.

Definition at line 60 of file rte_cryptodev.h.

◆ rte_crypto_op_ctophys_offset

#define rte_crypto_op_ctophys_offset (   c,
 
)    (rte_iova_t)((c)->phys_addr + (o))

A macro that returns the physical address that points to an offset from the start of the crypto operation (rte_crypto_op)

Parameters
cThe crypto operation.
oThe offset from the start of the crypto operation to calculate address from.

Definition at line 74 of file rte_cryptodev.h.

◆ RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_512_BYTES

#define RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_512_BYTES   RTE_BIT32(0)

Data-unit supported lengths of cipher algorithms. A bit can represent any set of data-unit sizes (single size, multiple size, range, etc).

Examples:
examples/l2fwd-crypto/main.c.

Definition at line 96 of file rte_cryptodev.h.

◆ RTE_CRYPTODEV_END_OF_CAPABILITIES_LIST

#define RTE_CRYPTODEV_END_OF_CAPABILITIES_LIST ( )    { RTE_CRYPTO_OP_TYPE_UNDEFINED }

Macro used at end of crypto PMD list

Definition at line 495 of file rte_cryptodev.h.

◆ RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO

#define RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO   (1ULL << 0)

Crypto device supported feature flags

Note: New features flags should be added to the end of the list

Keep these flags synchronised with rte_cryptodev_get_feature_name()Symmetric crypto operations are supported

Definition at line 507 of file rte_cryptodev.h.

◆ RTE_CRYPTODEV_FF_ASYMMETRIC_CRYPTO

#define RTE_CRYPTODEV_FF_ASYMMETRIC_CRYPTO   (1ULL << 1)

Asymmetric crypto operations are supported

Examples:
examples/ipsec-secgw/ipsec-secgw.c.

Definition at line 509 of file rte_cryptodev.h.

◆ RTE_CRYPTODEV_FF_SYM_OPERATION_CHAINING

#define RTE_CRYPTODEV_FF_SYM_OPERATION_CHAINING   (1ULL << 2)

Chaining symmetric crypto operations are supported

Examples:
examples/ipsec-secgw/ipsec-secgw.c.

Definition at line 511 of file rte_cryptodev.h.

◆ RTE_CRYPTODEV_FF_CPU_SSE

#define RTE_CRYPTODEV_FF_CPU_SSE   (1ULL << 3)

Utilises CPU SIMD SSE instructions

Definition at line 513 of file rte_cryptodev.h.

◆ RTE_CRYPTODEV_FF_CPU_AVX

#define RTE_CRYPTODEV_FF_CPU_AVX   (1ULL << 4)

Utilises CPU SIMD AVX instructions

Definition at line 515 of file rte_cryptodev.h.

◆ RTE_CRYPTODEV_FF_CPU_AVX2

#define RTE_CRYPTODEV_FF_CPU_AVX2   (1ULL << 5)

Utilises CPU SIMD AVX2 instructions

Definition at line 517 of file rte_cryptodev.h.

◆ RTE_CRYPTODEV_FF_CPU_AESNI

#define RTE_CRYPTODEV_FF_CPU_AESNI   (1ULL << 6)

Utilises CPU AES-NI instructions

Definition at line 519 of file rte_cryptodev.h.

◆ RTE_CRYPTODEV_FF_HW_ACCELERATED

#define RTE_CRYPTODEV_FF_HW_ACCELERATED   (1ULL << 7)

Operations are off-loaded to an external hardware accelerator

Examples:
examples/l2fwd-crypto/main.c.

Definition at line 521 of file rte_cryptodev.h.

◆ RTE_CRYPTODEV_FF_CPU_AVX512

#define RTE_CRYPTODEV_FF_CPU_AVX512   (1ULL << 8)

Utilises CPU SIMD AVX512 instructions

Definition at line 525 of file rte_cryptodev.h.

◆ RTE_CRYPTODEV_FF_IN_PLACE_SGL

#define RTE_CRYPTODEV_FF_IN_PLACE_SGL   (1ULL << 9)

In-place Scatter-gather (SGL) buffers, with multiple segments, are supported

Examples:
examples/fips_validation/main.c, and examples/ipsec-secgw/ipsec-secgw.c.

Definition at line 527 of file rte_cryptodev.h.

◆ RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT

#define RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT   (1ULL << 10)

Out-of-place Scatter-gather (SGL) buffers are supported in input and output

Definition at line 531 of file rte_cryptodev.h.

◆ RTE_CRYPTODEV_FF_OOP_SGL_IN_LB_OUT

#define RTE_CRYPTODEV_FF_OOP_SGL_IN_LB_OUT   (1ULL << 11)

Out-of-place Scatter-gather (SGL) buffers are supported in input, combined with linear buffers (LB), with a single segment in output

Definition at line 535 of file rte_cryptodev.h.

◆ RTE_CRYPTODEV_FF_OOP_LB_IN_SGL_OUT

#define RTE_CRYPTODEV_FF_OOP_LB_IN_SGL_OUT   (1ULL << 12)

Out-of-place Scatter-gather (SGL) buffers are supported in output, combined with linear buffers (LB) in input

Definition at line 540 of file rte_cryptodev.h.

◆ RTE_CRYPTODEV_FF_OOP_LB_IN_LB_OUT

#define RTE_CRYPTODEV_FF_OOP_LB_IN_LB_OUT   (1ULL << 13)

Out-of-place linear buffers (LB) are supported in input and output

Definition at line 544 of file rte_cryptodev.h.

◆ RTE_CRYPTODEV_FF_CPU_NEON

#define RTE_CRYPTODEV_FF_CPU_NEON   (1ULL << 14)

Utilises CPU NEON instructions

Definition at line 546 of file rte_cryptodev.h.

◆ RTE_CRYPTODEV_FF_CPU_ARM_CE

#define RTE_CRYPTODEV_FF_CPU_ARM_CE   (1ULL << 15)

Utilises ARM CPU Cryptographic Extensions

Definition at line 548 of file rte_cryptodev.h.

◆ RTE_CRYPTODEV_FF_SECURITY

#define RTE_CRYPTODEV_FF_SECURITY   (1ULL << 16)

Support Security Protocol Processing

Examples:
examples/ipsec-secgw/ipsec-secgw.c, examples/l2fwd-crypto/main.c, and examples/vhost_crypto/main.c.

Definition at line 550 of file rte_cryptodev.h.

◆ RTE_CRYPTODEV_FF_RSA_PRIV_OP_KEY_EXP

#define RTE_CRYPTODEV_FF_RSA_PRIV_OP_KEY_EXP   (1ULL << 17)

Support RSA Private Key OP with exponent

Examples:
examples/fips_validation/main.c.

Definition at line 552 of file rte_cryptodev.h.

◆ RTE_CRYPTODEV_FF_RSA_PRIV_OP_KEY_QT

#define RTE_CRYPTODEV_FF_RSA_PRIV_OP_KEY_QT   (1ULL << 18)

Support RSA Private Key OP with CRT (quintuple) Keys

Examples:
examples/fips_validation/main.c.

Definition at line 554 of file rte_cryptodev.h.

◆ RTE_CRYPTODEV_FF_DIGEST_ENCRYPTED

#define RTE_CRYPTODEV_FF_DIGEST_ENCRYPTED   (1ULL << 19)

Support encrypted-digest operations where digest is appended to data

Definition at line 556 of file rte_cryptodev.h.

◆ RTE_CRYPTODEV_FF_ASYM_SESSIONLESS

#define RTE_CRYPTODEV_FF_ASYM_SESSIONLESS   (1ULL << 20)

Support asymmetric session-less operations

Definition at line 558 of file rte_cryptodev.h.

◆ RTE_CRYPTODEV_FF_SYM_CPU_CRYPTO

#define RTE_CRYPTODEV_FF_SYM_CPU_CRYPTO   (1ULL << 21)

Support symmetric cpu-crypto processing

Examples:
examples/ipsec-secgw/ipsec.c.

Definition at line 560 of file rte_cryptodev.h.

◆ RTE_CRYPTODEV_FF_SYM_SESSIONLESS

#define RTE_CRYPTODEV_FF_SYM_SESSIONLESS   (1ULL << 22)

Support symmetric session-less operations

Definition at line 562 of file rte_cryptodev.h.

◆ RTE_CRYPTODEV_FF_NON_BYTE_ALIGNED_DATA

#define RTE_CRYPTODEV_FF_NON_BYTE_ALIGNED_DATA   (1ULL << 23)

Support operations on data which is not byte aligned

Definition at line 564 of file rte_cryptodev.h.

◆ RTE_CRYPTODEV_FF_SYM_RAW_DP

#define RTE_CRYPTODEV_FF_SYM_RAW_DP   (1ULL << 24)

Support accelerator specific symmetric raw data-path APIs

Definition at line 566 of file rte_cryptodev.h.

◆ RTE_CRYPTODEV_FF_CIPHER_MULTIPLE_DATA_UNITS

#define RTE_CRYPTODEV_FF_CIPHER_MULTIPLE_DATA_UNITS   (1ULL << 25)

Support operations on multiple data-units message

Examples:
examples/l2fwd-crypto/main.c.

Definition at line 568 of file rte_cryptodev.h.

◆ RTE_CRYPTODEV_FF_CIPHER_WRAPPED_KEY

#define RTE_CRYPTODEV_FF_CIPHER_WRAPPED_KEY   (1ULL << 26)

Support wrapped key in cipher xform

Examples:
examples/l2fwd-crypto/main.c.

Definition at line 570 of file rte_cryptodev.h.

◆ RTE_CRYPTODEV_FF_SECURITY_INNER_CSUM

#define RTE_CRYPTODEV_FF_SECURITY_INNER_CSUM   (1ULL << 27)

Support inner checksum computation/verification

Definition at line 572 of file rte_cryptodev.h.

◆ RTE_CRYPTODEV_FF_SECURITY_RX_INJECT

#define RTE_CRYPTODEV_FF_SECURITY_RX_INJECT   (1ULL << 28)

Support Rx injection after security processing

Definition at line 574 of file rte_cryptodev.h.

◆ RTE_CRYPTODEV_QP_PRIORITY_HIGHEST

#define RTE_CRYPTODEV_QP_PRIORITY_HIGHEST   0

Highest priority of a cryptodev queue pair

See also
rte_cryptodev_queue_pair_setup(), rte_cryptodev_enqueue_burst()

Definition at line 631 of file rte_cryptodev.h.

◆ RTE_CRYPTODEV_QP_PRIORITY_NORMAL

#define RTE_CRYPTODEV_QP_PRIORITY_NORMAL   128

Normal priority of a cryptodev queue pair

See also
rte_cryptodev_queue_pair_setup(), rte_cryptodev_enqueue_burst()

Definition at line 635 of file rte_cryptodev.h.

◆ RTE_CRYPTODEV_QP_PRIORITY_LOWEST

#define RTE_CRYPTODEV_QP_PRIORITY_LOWEST   255

Lowest priority of a cryptodev queue pair

See also
rte_cryptodev_queue_pair_setup(), rte_cryptodev_enqueue_burst()

Definition at line 639 of file rte_cryptodev.h.

◆ RTE_CRYPTODEV_NAME_MAX_LEN

#define RTE_CRYPTODEV_NAME_MAX_LEN   (64)

Max length of name of crypto PMD

Definition at line 711 of file rte_cryptodev.h.

Typedef Documentation

◆ rte_cryptodev_callback_fn

typedef uint16_t(* rte_cryptodev_callback_fn) (uint16_t dev_id, uint16_t qp_id, struct rte_crypto_op **ops, uint16_t nb_ops, void *user_param)

Function type used for processing crypto ops when enqueue/dequeue burst is called.

The callback function is called on enqueue/dequeue burst immediately.

Parameters
dev_idThe identifier of the device.
qp_idThe index of the queue pair on which ops are enqueued/dequeued. The value must be in the range [0, nb_queue_pairs - 1] previously supplied to rte_cryptodev_configure.
opsThe address of an array of nb_ops pointers to rte_crypto_op structures which contain the crypto operations to be processed.
nb_opsThe number of operations to process.
user_paramThe arbitrary user parameter passed in by the application when the callback was originally registered.
Returns
The number of ops to be enqueued to the crypto device.

Definition at line 682 of file rte_cryptodev.h.

◆ rte_cryptodev_cb_fn

typedef void(* rte_cryptodev_cb_fn) (uint8_t dev_id, enum rte_cryptodev_event_type event, void *cb_arg)

Typedef for application callback function to be registered by application software for notification of device events

Parameters
dev_idCrypto device identifier
eventCrypto device event to register for notification of.
cb_argUser specified parameter to be passed as to passed to users callback function.

Definition at line 694 of file rte_cryptodev.h.

◆ cryptodev_sym_raw_enqueue_burst_t

typedef uint32_t(* cryptodev_sym_raw_enqueue_burst_t) (void *qp, uint8_t *drv_ctx, struct rte_crypto_sym_vec *vec, union rte_crypto_sym_ofs ofs, void *user_data[], int *enqueue_status)

Enqueue a vectorized operation descriptor into the device queue but the driver may or may not start processing until rte_cryptodev_raw_enqueue_done() is called.

Parameters
qpDriver specific queue pair data.
drv_ctxDriver specific context data.
vecVectorized operation descriptor.
ofsStart and stop offsets for auth and cipher operations.
user_dataThe array of user data for dequeue later.
enqueue_statusDriver written value to specify the enqueue status. Possible values:
  • 1: The number of operations returned are enqueued successfully.
  • 0: The number of operations returned are cached into the queue but are not processed until rte_cryptodev_raw_enqueue_done() is called.
  • negative integer: Error occurred.
Returns
  • The number of operations in the descriptor successfully enqueued or cached into the queue but not enqueued yet, depends on the "enqueue_status" value.

Definition at line 1437 of file rte_cryptodev.h.

◆ cryptodev_sym_raw_enqueue_t

typedef int(* cryptodev_sym_raw_enqueue_t) (void *qp, uint8_t *drv_ctx, struct rte_crypto_vec *data_vec, uint16_t n_data_vecs, union rte_crypto_sym_ofs ofs, struct rte_crypto_va_iova_ptr *iv, struct rte_crypto_va_iova_ptr *digest, struct rte_crypto_va_iova_ptr *aad_or_auth_iv, void *user_data)

Enqueue single raw data vector into the device queue but the driver may or may not start processing until rte_cryptodev_raw_enqueue_done() is called.

Parameters
qpDriver specific queue pair data.
drv_ctxDriver specific context data.
data_vecThe buffer data vector.
n_data_vecsNumber of buffer data vectors.
ofsStart and stop offsets for auth and cipher operations.
ivIV virtual and IOVA addresses
digestdigest virtual and IOVA addresses
aad_or_auth_ivAAD or auth IV virtual and IOVA addresses, depends on the algorithm used.
user_dataThe user data.
Returns
  • 1: The data vector is enqueued successfully.
  • 0: The data vector is cached into the queue but is not processed until rte_cryptodev_raw_enqueue_done() is called.
  • negative integer: failure.

Definition at line 1462 of file rte_cryptodev.h.

◆ cryptodev_sym_raw_operation_done_t

typedef int(* cryptodev_sym_raw_operation_done_t) (void *qp, uint8_t *drv_ctx, uint32_t n)

Inform the cryptodev queue pair to start processing or finish dequeuing all enqueued/dequeued operations.

Parameters
qpDriver specific queue pair data.
drv_ctxDriver specific context data.
nThe total number of processed operations.
Returns
  • On success return 0.
  • On failure return negative integer.

Definition at line 1481 of file rte_cryptodev.h.

◆ rte_cryptodev_raw_get_dequeue_count_t

typedef uint32_t(* rte_cryptodev_raw_get_dequeue_count_t) (void *user_data)

Typedef that the user provided for the driver to get the dequeue count. The function may return a fixed number or the number parsed from the user data stored in the first processed operation.

Parameters
user_dataDequeued user data.
Returns
  • The number of operations to be dequeued.

Definition at line 1493 of file rte_cryptodev.h.

◆ rte_cryptodev_raw_post_dequeue_t

typedef void(* rte_cryptodev_raw_post_dequeue_t) (void *user_data, uint32_t index, uint8_t is_op_success)

Typedef that the user provided to deal with post dequeue operation, such as filling status.

Parameters
user_dataDequeued user data.
indexIndex number of the processed descriptor.
is_op_successOperation status provided by the driver.

Definition at line 1503 of file rte_cryptodev.h.

◆ cryptodev_sym_raw_dequeue_burst_t

typedef uint32_t(* cryptodev_sym_raw_dequeue_burst_t) (void *qp, uint8_t *drv_ctx, rte_cryptodev_raw_get_dequeue_count_t get_dequeue_count, uint32_t max_nb_to_dequeue, rte_cryptodev_raw_post_dequeue_t post_dequeue, void **out_user_data, uint8_t is_user_data_array, uint32_t *n_success, int *dequeue_status)

Dequeue a burst of symmetric crypto processing.

Parameters
qpDriver specific queue pair data.
drv_ctxDriver specific context data.
get_dequeue_countUser provided callback function to obtain dequeue operation count.
max_nb_to_dequeueWhen get_dequeue_count is NULL this value is used to pass the maximum number of operations to be dequeued.
post_dequeueUser provided callback function to post-process a dequeued operation.
out_user_dataUser data pointer array to be retrieve from device queue. In case of is_user_data_array is set there should be enough room to store all user data.
is_user_data_arraySet 1 if every dequeued user data will be written into out_user_data array. Set 0 if only the first user data will be written into out_user_data array.
n_successDriver written value to specific the total successful operations count.
dequeue_statusDriver written value to specify the dequeue status. Possible values:
  • 1: Successfully dequeued the number of operations returned. The user data previously set during enqueue is stored in the "out_user_data".
  • 0: The number of operations returned are completed and the user data is stored in the "out_user_data", but they are not freed from the queue until rte_cryptodev_raw_dequeue_done() is called.
  • negative integer: Error occurred.
Returns
  • The number of operations dequeued or completed but not freed from the queue, depends on "dequeue_status" value.

Definition at line 1547 of file rte_cryptodev.h.

◆ cryptodev_sym_raw_dequeue_t

typedef void*(* cryptodev_sym_raw_dequeue_t) (void *qp, uint8_t *drv_ctx, int *dequeue_status, enum rte_crypto_op_status *op_status)

Dequeue a symmetric crypto processing.

Parameters
qpDriver specific queue pair data.
drv_ctxDriver specific context data.
dequeue_statusDriver written value to specify the dequeue status. Possible values:
  • 1: Successfully dequeued a operation. The user data is returned.
  • 0: The first operation in the queue is completed and the user data previously set during enqueue is returned, but it is not freed from the queue until rte_cryptodev_raw_dequeue_done() is called.
  • negative integer: Error occurred.
op_statusDriver written value to specify operation status.
Returns
  • The user data pointer retrieved from device queue or NULL if no operation is ready for dequeue.

Definition at line 1578 of file rte_cryptodev.h.

Enumeration Type Documentation

◆ rte_cryptodev_event_type

Definitions of Crypto device event types

Enumerator
RTE_CRYPTODEV_EVENT_UNKNOWN 

unknown event type

RTE_CRYPTODEV_EVENT_ERROR 

error interrupt event

RTE_CRYPTODEV_EVENT_MAX 

max value of this enum

Definition at line 624 of file rte_cryptodev.h.

Function Documentation

◆ rte_cryptodev_sym_capability_get()

const struct rte_cryptodev_symmetric_capability* rte_cryptodev_sym_capability_get ( uint8_t  dev_id,
const struct rte_cryptodev_sym_capability_idx idx 
)

Provide capabilities available for defined device and algorithm

Parameters
dev_idThe identifier of the device.
idxDescription of crypto algorithms.
Returns
  • Return description of the symmetric crypto capability if exist.
  • Return NULL if the capability not exist.
Examples:
examples/fips_validation/fips_dev_self_test.c, and examples/fips_validation/main.c.

◆ rte_cryptodev_asym_capability_get()

const struct rte_cryptodev_asymmetric_xform_capability* rte_cryptodev_asym_capability_get ( uint8_t  dev_id,
const struct rte_cryptodev_asym_capability_idx idx 
)

Provide capabilities available for defined device and xform

Parameters
dev_idThe identifier of the device.
idxDescription of asym crypto xform.
Returns
  • Return description of the asymmetric crypto capability if exist.
  • Return NULL if the capability not exist.
Examples:
examples/fips_validation/main.c.

◆ rte_cryptodev_sym_capability_check_cipher()

int rte_cryptodev_sym_capability_check_cipher ( const struct rte_cryptodev_symmetric_capability capability,
uint16_t  key_size,
uint16_t  iv_size 
)

Check if key size and initial vector are supported in crypto cipher capability

Parameters
capabilityDescription of the symmetric crypto capability.
key_sizeCipher key size.
iv_sizeCipher initial vector size.
Returns
  • Return 0 if the parameters are in range of the capability.
  • Return -1 if the parameters are out of range of the capability.
Examples:
examples/fips_validation/fips_dev_self_test.c, examples/fips_validation/main.c, and examples/ipsec-secgw/ipsec.c.

◆ rte_cryptodev_sym_capability_check_auth()

int rte_cryptodev_sym_capability_check_auth ( const struct rte_cryptodev_symmetric_capability capability,
uint16_t  key_size,
uint16_t  digest_size,
uint16_t  iv_size 
)

Check if key size and initial vector are supported in crypto auth capability

Parameters
capabilityDescription of the symmetric crypto capability.
key_sizeAuth key size.
digest_sizeAuth digest size.
iv_sizeAuth initial vector size.
Returns
  • Return 0 if the parameters are in range of the capability.
  • Return -1 if the parameters are out of range of the capability.
Examples:
examples/fips_validation/fips_dev_self_test.c, examples/fips_validation/main.c, and examples/ipsec-secgw/ipsec.c.

◆ rte_cryptodev_sym_capability_check_aead()

int rte_cryptodev_sym_capability_check_aead ( const struct rte_cryptodev_symmetric_capability capability,
uint16_t  key_size,
uint16_t  digest_size,
uint16_t  aad_size,
uint16_t  iv_size 
)

Check if key, digest, AAD and initial vector sizes are supported in crypto AEAD capability

Parameters
capabilityDescription of the symmetric crypto capability.
key_sizeAEAD key size.
digest_sizeAEAD digest size.
aad_sizeAEAD AAD size.
iv_sizeAEAD IV size.
Returns
  • Return 0 if the parameters are in range of the capability.
  • Return -1 if the parameters are out of range of the capability.
Examples:
examples/fips_validation/fips_dev_self_test.c, examples/fips_validation/main.c, and examples/ipsec-secgw/ipsec.c.

◆ rte_cryptodev_asym_xform_capability_check_optype()

int rte_cryptodev_asym_xform_capability_check_optype ( const struct rte_cryptodev_asymmetric_xform_capability capability,
enum rte_crypto_asym_op_type  op_type 
)

Check if op type is supported

Parameters
capabilityDescription of the asymmetric crypto capability.
op_typeop type
Returns
  • Return 1 if the op type is supported
  • Return 0 if unsupported
Examples:
examples/fips_validation/main.c.

◆ rte_cryptodev_asym_xform_capability_check_modlen()

int rte_cryptodev_asym_xform_capability_check_modlen ( const struct rte_cryptodev_asymmetric_xform_capability capability,
uint16_t  modlen 
)

Check if modulus length is in supported range

Parameters
capabilityDescription of the asymmetric crypto capability.
modlenmodulus length.
Returns
  • Return 0 if the parameters are in range of the capability.
  • Return -1 if the parameters are out of range of the capability.

◆ rte_cryptodev_asym_xform_capability_check_hash()

bool rte_cryptodev_asym_xform_capability_check_hash ( const struct rte_cryptodev_asymmetric_xform_capability capability,
enum rte_crypto_auth_algorithm  hash 
)

Check if hash algorithm is supported.

Parameters
capabilityAsymmetric crypto capability.
hashHash algorithm.
Returns
  • Return true if the hash algorithm is supported.
  • Return false if the hash algorithm is not supported.

◆ rte_cryptodev_asym_xform_capability_check_opcap()

__rte_experimental int rte_cryptodev_asym_xform_capability_check_opcap ( const struct rte_cryptodev_asymmetric_xform_capability capability,
enum rte_crypto_asym_op_type  op_type,
uint8_t  cap 
)
Warning
EXPERIMENTAL: this API may change without prior notice.

Check if op capability is supported

Parameters
capabilityDescription of the asymmetric crypto capability.
op_typeop type
capop capability
Returns
  • Return 1 if the op capability is supported
  • Return 0 if unsupported

◆ rte_cryptodev_get_cipher_algo_enum()

int rte_cryptodev_get_cipher_algo_enum ( enum rte_crypto_cipher_algorithm algo_enum,
const char *  algo_string 
)

Provide the cipher algorithm enum, given an algorithm string

Parameters
algo_enumA pointer to the cipher algorithm enum to be filled
algo_stringAuthentication algo string
Returns
  • Return -1 if string is not valid
  • Return 0 is the string is valid
Examples:
examples/ip_pipeline/cli.c, and examples/l2fwd-crypto/main.c.

◆ rte_cryptodev_get_auth_algo_enum()

int rte_cryptodev_get_auth_algo_enum ( enum rte_crypto_auth_algorithm algo_enum,
const char *  algo_string 
)

Provide the authentication algorithm enum, given an algorithm string

Parameters
algo_enumA pointer to the authentication algorithm enum to be filled
algo_stringAuthentication algo string
Returns
  • Return -1 if string is not valid
  • Return 0 is the string is valid
Examples:
examples/ip_pipeline/cli.c, and examples/l2fwd-crypto/main.c.

◆ rte_cryptodev_get_aead_algo_enum()

int rte_cryptodev_get_aead_algo_enum ( enum rte_crypto_aead_algorithm algo_enum,
const char *  algo_string 
)

Provide the AEAD algorithm enum, given an algorithm string

Parameters
algo_enumA pointer to the AEAD algorithm enum to be filled
algo_stringAEAD algorithm string
Returns
  • Return -1 if string is not valid
  • Return 0 is the string is valid
Examples:
examples/ip_pipeline/cli.c, and examples/l2fwd-crypto/main.c.

◆ rte_cryptodev_asym_get_xform_enum()

int rte_cryptodev_asym_get_xform_enum ( enum rte_crypto_asym_xform_type xform_enum,
const char *  xform_string 
)

Provide the Asymmetric xform enum, given an xform string

Parameters
xform_enumA pointer to the xform type enum to be filled
xform_stringxform string
Returns
  • Return -1 if string is not valid
  • Return 0 if the string is valid

◆ rte_cryptodev_get_cipher_algo_string()

__rte_experimental const char* rte_cryptodev_get_cipher_algo_string ( enum rte_crypto_cipher_algorithm  algo_enum)

Provide the cipher algorithm string, given an algorithm enum.

Parameters
algo_enumcipher algorithm enum
Returns
  • Return NULL if enum is not valid
  • Return algo_string corresponding to enum
Examples:
examples/l2fwd-crypto/main.c.

◆ rte_cryptodev_get_auth_algo_string()

__rte_experimental const char* rte_cryptodev_get_auth_algo_string ( enum rte_crypto_auth_algorithm  algo_enum)

Provide the authentication algorithm string, given an algorithm enum.

Parameters
algo_enumauth algorithm enum
Returns
  • Return NULL if enum is not valid
  • Return algo_string corresponding to enum
Examples:
examples/l2fwd-crypto/main.c.

◆ rte_cryptodev_get_aead_algo_string()

__rte_experimental const char* rte_cryptodev_get_aead_algo_string ( enum rte_crypto_aead_algorithm  algo_enum)

Provide the AEAD algorithm string, given an algorithm enum.

Parameters
algo_enumAEAD algorithm enum
Returns
  • Return NULL if enum is not valid
  • Return algo_string corresponding to enum
Examples:
examples/l2fwd-crypto/main.c.

◆ rte_cryptodev_asym_get_xform_string()

__rte_experimental const char* rte_cryptodev_asym_get_xform_string ( enum rte_crypto_asym_xform_type  xform_enum)

Provide the Asymmetric xform string, given an xform enum.

Parameters
xform_enumxform type enum
Returns
  • Return NULL, if enum is not valid.
  • Return xform string, for valid enum.

◆ rte_cryptodev_get_feature_name()

const char* rte_cryptodev_get_feature_name ( uint64_t  flag)

Get the name of a crypto device feature flag

Parameters
flagThe mask describing the flag.
Returns
The name of this flag, or NULL if it's not a valid feature flag.
Examples:
examples/ipsec-secgw/ipsec-secgw.c.

◆ rte_cryptodev_get_dev_id()

int rte_cryptodev_get_dev_id ( const char *  name)

Get the device identifier for the named crypto device.

Parameters
namedevice name to select the device structure.
Returns
  • Returns crypto device identifier on success.
  • Return -1 on failure to find named crypto device.
Examples:
examples/fips_validation/main.c, examples/ip_pipeline/cryptodev.c, and examples/pipeline/obj.c.

◆ rte_cryptodev_name_get()

const char* rte_cryptodev_name_get ( uint8_t  dev_id)

Get the crypto device name given a device identifier.

Parameters
dev_idThe identifier of the device
Returns
  • Returns crypto device name.
  • Returns NULL if crypto device is not present.
Examples:
examples/fips_validation/fips_dev_self_test.c, and examples/fips_validation/main.c.

◆ rte_cryptodev_count()

uint8_t rte_cryptodev_count ( void  )

Get the total number of crypto devices that have been successfully initialised.

Returns
  • The total number of usable crypto devices.
Examples:
examples/fips_validation/main.c, examples/ipsec-secgw/event_helper.c, examples/ipsec-secgw/ipsec-secgw.c, and examples/l2fwd-crypto/main.c.

◆ rte_cryptodev_device_count_by_driver()

uint8_t rte_cryptodev_device_count_by_driver ( uint8_t  driver_id)

Get number of crypto device defined type.

Parameters
driver_iddriver identifier.
Returns
Returns number of crypto device.

◆ rte_cryptodev_devices_get()

uint8_t rte_cryptodev_devices_get ( const char *  driver_name,
uint8_t *  devices,
uint8_t  nb_devices 
)

Get number and identifiers of attached crypto devices that use the same crypto driver.

Parameters
driver_namedriver name.
devicesoutput devices identifiers.
nb_devicesmaximal number of devices.
Returns
Returns number of attached crypto device.

◆ rte_cryptodev_configure()

int rte_cryptodev_configure ( uint8_t  dev_id,
struct rte_cryptodev_config config 
)

Configure a device.

This function must be invoked first before any other function in the API. This function can also be re-invoked when a device is in the stopped state.

Parameters
dev_idThe identifier of the device to configure.
configThe crypto device configuration structure.
Returns
  • 0: Success, device configured.
  • <0: Error code returned by the driver configuration function.
Examples:
examples/fips_validation/fips_dev_self_test.c, examples/fips_validation/main.c, examples/ip_pipeline/cryptodev.c, examples/ipsec-secgw/ipsec-secgw.c, examples/l2fwd-crypto/main.c, examples/pipeline/obj.c, and examples/vhost_crypto/main.c.

◆ rte_cryptodev_start()

int rte_cryptodev_start ( uint8_t  dev_id)

Start an device.

The device start step is the last one and consists of setting the configured offload features and in starting the transmit and the receive units of the device. On success, all basic functions exported by the API (link status, receive/transmit, and so on) can be invoked.

Parameters
dev_idThe identifier of the device.
Returns
  • 0: Success, device started.
  • <0: Error code of the driver device start function.
Examples:
examples/fips_validation/fips_dev_self_test.c, examples/fips_validation/main.c, examples/ip_pipeline/cryptodev.c, examples/ipsec-secgw/ipsec-secgw.c, examples/l2fwd-crypto/main.c, examples/pipeline/obj.c, and examples/vhost_crypto/main.c.

◆ rte_cryptodev_stop()

void rte_cryptodev_stop ( uint8_t  dev_id)

Stop an device. The device can be restarted with a call to rte_cryptodev_start()

Parameters
dev_idThe identifier of the device.
Examples:
examples/fips_validation/fips_dev_self_test.c, examples/fips_validation/main.c, examples/ip_pipeline/cryptodev.c, and examples/ipsec-secgw/ipsec-secgw.c.

◆ rte_cryptodev_close()

int rte_cryptodev_close ( uint8_t  dev_id)

Close an device. The device cannot be restarted!

Parameters
dev_idThe identifier of the device.
Returns
  • 0 on successfully closing device
  • <0 on failure to close device
Examples:
examples/fips_validation/main.c, and examples/ipsec-secgw/ipsec-secgw.c.

◆ rte_cryptodev_queue_pair_setup()

int rte_cryptodev_queue_pair_setup ( uint8_t  dev_id,
uint16_t  queue_pair_id,
const struct rte_cryptodev_qp_conf qp_conf,
int  socket_id 
)

Allocate and set up a receive queue pair for a device.

Parameters
dev_idThe identifier of the device.
queue_pair_idThe index of the queue pairs to set up. The value must be in the range [0, nb_queue_pair
qp_confThe pointer to the configuration data to be used for the queue pair.
socket_idThe socket_id argument is the socket identifier in case of NUMA. The value can be SOCKET_ID_ANY if there is no NUMA constraint for the DMA memory allocated for the receive queue pair.
Returns
  • 0: Success, queue pair correctly set up.
  • <0: Queue pair configuration failed
Examples:
examples/fips_validation/fips_dev_self_test.c, examples/fips_validation/main.c, examples/ip_pipeline/cryptodev.c, examples/ipsec-secgw/ipsec-secgw.c, examples/l2fwd-crypto/main.c, examples/pipeline/obj.c, and examples/vhost_crypto/main.c.

◆ rte_cryptodev_queue_pair_reset()

__rte_experimental int rte_cryptodev_queue_pair_reset ( uint8_t  dev_id,
uint16_t  queue_pair_id,
const struct rte_cryptodev_qp_conf qp_conf,
int  socket_id 
)
Warning
EXPERIMENTAL: this API may change without prior notice.

Reset a queue pair for a device. The caller of this API must ensure that, there are no enqueues to the queue and there are no pending/inflight packets in the queue when the API is called. The API can reconfigure the queue pair when the queue pair configuration data is provided.

Parameters
dev_idThe identifier of the device.
queue_pair_idThe index of the queue pairs to set up. The value must be in the range [0, nb_queue_pair - 1] previously supplied to rte_cryptodev_configure().
qp_confThe pointer to configuration data to be used for the queue pair. It should be NULL, if the API is called from an interrupt context.
socket_idThe socket_id argument is the socket identifier in case of NUMA. The value can be SOCKET_ID_ANY if there is no NUMA constraint for the DMA memory allocated for the queue pair.
Returns
  • 0: Queue pair is reset successfully.
  • ENOTSUP: If the operation is not supported by the PMD.
  • <0: Queue pair reset failed

◆ rte_cryptodev_get_qp_status()

int rte_cryptodev_get_qp_status ( uint8_t  dev_id,
uint16_t  queue_pair_id 
)

Get the status of queue pairs setup on a specific crypto device

Parameters
dev_idCrypto device identifier.
queue_pair_idThe index of the queue pairs to set up. The value must be in the range [0, nb_queue_pair
Returns
  • 0: qp was not configured
  • 1: qp was configured
  • -EINVAL: device was not configured

◆ rte_cryptodev_queue_pair_count()

uint16_t rte_cryptodev_queue_pair_count ( uint8_t  dev_id)

Get the number of queue pairs on a specific crypto device

Parameters
dev_idCrypto device identifier.
Returns
  • The number of configured queue pairs.

◆ rte_cryptodev_stats_get()

int rte_cryptodev_stats_get ( uint8_t  dev_id,
struct rte_cryptodev_stats stats 
)

Retrieve the general I/O statistics of a device.

Parameters
dev_idThe identifier of the device.
statsA pointer to a structure of type rte_cryptodev_stats to be filled with the values of device counters.
Returns
  • Zero if successful.
  • Non-zero otherwise.

◆ rte_cryptodev_stats_reset()

void rte_cryptodev_stats_reset ( uint8_t  dev_id)

Reset the general I/O statistics of a device.

Parameters
dev_idThe identifier of the device.

◆ rte_cryptodev_info_get()

void rte_cryptodev_info_get ( uint8_t  dev_id,
struct rte_cryptodev_info dev_info 
)

Retrieve the contextual information of a device.

Parameters
dev_idThe identifier of the device.
dev_infoA pointer to a structure of type rte_cryptodev_info to be filled with the contextual information of the device.
Note
The capabilities field of dev_info is set to point to the first element of an array of struct rte_cryptodev_capabilities. The element after the last valid element has it's op field set to RTE_CRYPTO_OP_TYPE_UNDEFINED.
Examples:
examples/fips_validation/main.c, examples/ip_pipeline/cryptodev.c, examples/ipsec-secgw/ipsec-secgw.c, examples/ipsec-secgw/ipsec.c, examples/l2fwd-crypto/main.c, examples/pipeline/obj.c, and examples/vhost_crypto/main.c.

◆ rte_cryptodev_callback_register()

int rte_cryptodev_callback_register ( uint8_t  dev_id,
enum rte_cryptodev_event_type  event,
rte_cryptodev_cb_fn  cb_fn,
void *  cb_arg 
)

Register a callback function for specific device id.

Parameters
dev_idDevice id.
eventEvent interested.
cb_fnUser supplied callback function to be called.
cb_argPointer to the parameters for the registered callback.
Returns
  • On success, zero.
  • On failure, a negative value.

◆ rte_cryptodev_callback_unregister()

int rte_cryptodev_callback_unregister ( uint8_t  dev_id,
enum rte_cryptodev_event_type  event,
rte_cryptodev_cb_fn  cb_fn,
void *  cb_arg 
)

Unregister a callback function for specific device id.

Parameters
dev_idThe device identifier.
eventEvent interested.
cb_fnUser supplied callback function to be called.
cb_argPointer to the parameters for the registered callback.
Returns
  • On success, zero.
  • On failure, a negative value.

◆ rte_cryptodev_queue_pair_event_error_query()

__rte_experimental int rte_cryptodev_queue_pair_event_error_query ( uint8_t  dev_id,
uint16_t  qp_id 
)
Warning
EXPERIMENTAL: this API may change without prior notice.

Query a cryptodev queue pair if there are pending RTE_CRYPTODEV_EVENT_ERROR events.

Parameters
dev_idThe device identifier.
qp_idQueue pair index to be queried.
Returns
  • 1 if requested queue has a pending event.
  • 0 if no pending event is found.
  • a negative value on failure

◆ RTE_TAILQ_HEAD()

RTE_TAILQ_HEAD ( rte_cryptodev_cb_list  ,
rte_cryptodev_callback   
)

Structure to keep track of registered callbacks

◆ rte_cryptodev_get_sec_ctx()

void* rte_cryptodev_get_sec_ctx ( uint8_t  dev_id)

Get the security context for the cryptodev.

Parameters
dev_idThe device identifier.
Returns
  • NULL on error.
  • Pointer to security context on success.
Examples:
examples/ipsec-secgw/ipsec-secgw.c, and examples/ipsec-secgw/ipsec.c.

◆ rte_cryptodev_sym_session_pool_create()

struct rte_mempool* rte_cryptodev_sym_session_pool_create ( const char *  name,
uint32_t  nb_elts,
uint32_t  elt_size,
uint32_t  cache_size,
uint16_t  priv_size,
int  socket_id 
)

Create a symmetric session mempool.

Parameters
nameThe unique mempool name.
nb_eltsThe number of elements in the mempool.
elt_sizeThe size of the element. This should be the size of the cryptodev PMD session private data obtained through rte_cryptodev_sym_get_private_session_size() function call. For the user who wants to use the same mempool for heterogeneous PMDs this value should be the maximum value of their private session sizes. Please note the created mempool will have bigger elt size than this value as necessary session header and the possible padding are filled into each elt.
cache_sizeThe number of per-lcore cache elements
priv_sizeThe private data size of each session.
socket_idThe socket_id argument is the socket identifier in the case of NUMA. The value can be SOCKET_ID_ANY if there is no NUMA constraint for the reserved zone.
Returns
  • On success returns the created session mempool pointer
  • On failure returns NULL
Examples:
examples/fips_validation/fips_dev_self_test.c, examples/fips_validation/main.c, examples/ip_pipeline/cryptodev.c, examples/ipsec-secgw/ipsec-secgw.c, examples/l2fwd-crypto/main.c, and examples/vhost_crypto/main.c.

◆ rte_cryptodev_asym_session_pool_create()

struct rte_mempool* rte_cryptodev_asym_session_pool_create ( const char *  name,
uint32_t  nb_elts,
uint32_t  cache_size,
uint16_t  user_data_size,
int  socket_id 
)

Create an asymmetric session mempool.

Parameters
nameThe unique mempool name.
nb_eltsThe number of elements in the mempool.
cache_sizeThe number of per-lcore cache elements
user_data_sizeThe size of user data to be placed after session private data.
socket_idThe socket_id argument is the socket identifier in the case of NUMA. The value can be SOCKET_ID_ANY if there is no NUMA constraint for the reserved zone.
Returns
  • On success return mempool
  • On failure returns NULL
Examples:
examples/fips_validation/main.c.

◆ rte_cryptodev_sym_session_create()

void* rte_cryptodev_sym_session_create ( uint8_t  dev_id,
struct rte_crypto_sym_xform xforms,
struct rte_mempool mp 
)

Create symmetric crypto session and fill out private data for the device id, based on its device type.

Parameters
dev_idID of device that we want the session to be used on
xformsSymmetric crypto transform operations to apply on flow processed with this session
mpMempool to allocate symmetric session objects from
Returns
  • On success return pointer to sym-session.
  • On failure returns NULL and rte_errno is set to the error code:
    • EINVAL on invalid arguments.
    • ENOMEM on memory error for session allocation.
    • ENOTSUP if device doesn't support session configuration.
Examples:
examples/fips_validation/fips_dev_self_test.c, examples/fips_validation/main.c, examples/ipsec-secgw/ipsec.c, and examples/l2fwd-crypto/main.c.

◆ rte_cryptodev_asym_session_create()

int rte_cryptodev_asym_session_create ( uint8_t  dev_id,
struct rte_crypto_asym_xform xforms,
struct rte_mempool mp,
void **  session 
)

Create and initialise an asymmetric crypto session structure. Calls the PMD to configure the private session data.

Parameters
dev_idID of device that we want the session to be used on
xformsAsymmetric crypto transform operations to apply on flow processed with this session
mpmempool to allocate asymmetric session objects from
sessionvoid ** for session to be used
Returns
  • 0 on success.
  • -EINVAL on invalid arguments.
  • -ENOMEM on memory error for session allocation.
  • -ENOTSUP if device doesn't support session configuration.
Examples:
examples/fips_validation/main.c.

◆ rte_cryptodev_sym_session_free()

int rte_cryptodev_sym_session_free ( uint8_t  dev_id,
void *  sess 
)

Frees session for the device id and returning it to its mempool. It is the application's responsibility to ensure that the session is not still in-flight operations using it.

Parameters
dev_idID of device that uses the session.
sessSession header to be freed.
Returns
  • 0 if successful.
  • -EINVAL if session is NULL or the mismatched device ids.
Examples:
examples/fips_validation/fips_dev_self_test.c, examples/fips_validation/main.c, and examples/ipsec-secgw/ipsec-secgw.c.

◆ rte_cryptodev_asym_session_free()

int rte_cryptodev_asym_session_free ( uint8_t  dev_id,
void *  sess 
)

Clears and frees asymmetric crypto session header and private data, returning it to its original mempool.

Parameters
dev_idID of device that uses the asymmetric session.
sessSession header to be freed.
Returns
  • 0 if successful.
  • -EINVAL if device is invalid or session is NULL.
Examples:
examples/fips_validation/main.c.

◆ rte_cryptodev_asym_get_header_session_size()

unsigned int rte_cryptodev_asym_get_header_session_size ( void  )

Get the size of the asymmetric session header.

Returns
Size of the asymmetric header session.

◆ rte_cryptodev_sym_get_private_session_size()

unsigned int rte_cryptodev_sym_get_private_session_size ( uint8_t  dev_id)

Get the size of the private symmetric session data for a device.

Parameters
dev_idThe device identifier.
Returns
  • Size of the private data, if successful
  • 0 if device is invalid or does not have private symmetric session
Examples:
examples/fips_validation/fips_dev_self_test.c, examples/fips_validation/main.c, examples/ip_pipeline/cryptodev.c, examples/ipsec-secgw/ipsec-secgw.c, examples/l2fwd-crypto/main.c, and examples/vhost_crypto/main.c.

◆ rte_cryptodev_asym_get_private_session_size()

unsigned int rte_cryptodev_asym_get_private_session_size ( uint8_t  dev_id)

Get the size of the private data for asymmetric session on device

Parameters
dev_idThe device identifier.
Returns
  • Size of the asymmetric private data, if successful
  • 0 if device is invalid or does not have private session

◆ rte_cryptodev_is_valid_dev()

unsigned int rte_cryptodev_is_valid_dev ( uint8_t  dev_id)

Validate if the crypto device index is valid attached crypto device.

Parameters
dev_idCrypto device index.
Returns
  • If the device index is valid (1) or not (0).
Examples:
examples/fips_validation/main.c, and examples/ip_pipeline/cryptodev.c.

◆ rte_cryptodev_driver_id_get()

int rte_cryptodev_driver_id_get ( const char *  name)

Provide driver identifier.

Parameters
nameThe pointer to a driver name.
Returns
The driver type identifier or -1 if no driver found

◆ rte_cryptodev_driver_name_get()

const char* rte_cryptodev_driver_name_get ( uint8_t  driver_id)

Provide driver name.

Parameters
driver_idThe driver identifier.
Returns
The driver name or null if no driver found

◆ rte_cryptodev_sym_session_set_user_data()

int rte_cryptodev_sym_session_set_user_data ( void *  sess,
void *  data,
uint16_t  size 
)

Store user data in a session.

Parameters
sessSession pointer allocated by rte_cryptodev_sym_session_create.
dataPointer to the user data.
sizeSize of the user data.
Returns
  • On success, zero.
  • On failure, a negative value.

◆ rte_cryptodev_sym_session_opaque_data_get()

static uint64_t rte_cryptodev_sym_session_opaque_data_get ( void *  sess)
inlinestatic

Get opaque data from session handle

Definition at line 1295 of file rte_cryptodev.h.

◆ rte_cryptodev_sym_session_opaque_data_set()

static void rte_cryptodev_sym_session_opaque_data_set ( void *  sess,
uint64_t  opaque 
)
inlinestatic

Set opaque data in session handle

Definition at line 1304 of file rte_cryptodev.h.

◆ rte_cryptodev_sym_session_get_user_data()

void* rte_cryptodev_sym_session_get_user_data ( void *  sess)

Get user data stored in a session.

Parameters
sessSession pointer allocated by rte_cryptodev_sym_session_create.
Returns
  • On success return pointer to user data.
  • On failure returns NULL.

◆ rte_cryptodev_asym_session_set_user_data()

int rte_cryptodev_asym_session_set_user_data ( void *  sess,
void *  data,
uint16_t  size 
)

Store user data in an asymmetric session.

Parameters
sessSession pointer allocated by rte_cryptodev_asym_session_create.
dataPointer to the user data.
sizeSize of the user data.
Returns
  • On success, zero.
  • -EINVAL if the session pointer is invalid.
  • -ENOMEM if the available user data size is smaller than the size parameter.

◆ rte_cryptodev_asym_session_get_user_data()

void* rte_cryptodev_asym_session_get_user_data ( void *  sess)

Get user data stored in an asymmetric session.

Parameters
sessSession pointer allocated by rte_cryptodev_asym_session_create.
Returns
  • On success return pointer to user data.
  • On failure returns NULL.

◆ rte_cryptodev_sym_cpu_crypto_process()

uint32_t rte_cryptodev_sym_cpu_crypto_process ( uint8_t  dev_id,
void *  sess,
union rte_crypto_sym_ofs  ofs,
struct rte_crypto_sym_vec vec 
)

Perform actual crypto processing (encrypt/digest or auth/decrypt) on user provided data.

Parameters
dev_idThe device identifier.
sessCryptodev session structure
ofsStart and stop offsets for auth and cipher operations
vecVectorized operation descriptor
Returns
  • Returns number of successfully processed packets.

◆ rte_cryptodev_get_raw_dp_ctx_size()

int rte_cryptodev_get_raw_dp_ctx_size ( uint8_t  dev_id)

Get the size of the raw data-path context buffer.

Parameters
dev_idThe device identifier.
Returns
  • If the device supports raw data-path APIs, return the context size.
  • If the device does not support the APIs, return -1.

◆ rte_cryptodev_session_event_mdata_set()

int rte_cryptodev_session_event_mdata_set ( uint8_t  dev_id,
void *  sess,
enum rte_crypto_op_type  op_type,
enum rte_crypto_op_sess_type  sess_type,
void *  ev_mdata,
uint16_t  size 
)

Set session event meta data

Parameters
dev_idThe device identifier.
sessCrypto or security session.
op_typeOperation type.
sess_typeSession type.
ev_mdataPointer to the event crypto meta data (aka union rte_event_crypto_metadata)
sizeSize of ev_mdata.
Returns
  • On success, zero.
  • On failure, a negative value.
Examples:
examples/ipsec-secgw/ipsec.c.

◆ rte_cryptodev_configure_raw_dp_ctx()

int rte_cryptodev_configure_raw_dp_ctx ( uint8_t  dev_id,
uint16_t  qp_id,
struct rte_crypto_raw_dp_ctx ctx,
enum rte_crypto_op_sess_type  sess_type,
union rte_cryptodev_session_ctx  session_ctx,
uint8_t  is_update 
)

Configure raw data-path context data.

Parameters
dev_idThe device identifier.
qp_idThe index of the queue pair from which to retrieve processed packets. The value must be in the range [0, nb_queue_pair - 1] previously supplied to rte_cryptodev_configure().
ctxThe raw data-path context data.
sess_typeSession type.
session_ctxSession context data.
is_updateSet 0 if it is to initialize the ctx. Set 1 if ctx is initialized and only to update session context data.
Returns
  • On success return 0.
  • On failure return negative integer.
    • -EINVAL if input parameters are invalid.
    • -ENOTSUP if crypto device does not support raw DP operations with the provided session.

◆ rte_cryptodev_raw_enqueue_burst()

uint32_t rte_cryptodev_raw_enqueue_burst ( struct rte_crypto_raw_dp_ctx ctx,
struct rte_crypto_sym_vec vec,
union rte_crypto_sym_ofs  ofs,
void **  user_data,
int *  enqueue_status 
)

Enqueue a vectorized operation descriptor into the device queue but the driver may or may not start processing until rte_cryptodev_raw_enqueue_done() is called.

Parameters
ctxThe initialized raw data-path context data.
vecVectorized operation descriptor.
ofsStart and stop offsets for auth and cipher operations.
user_dataThe array of user data for dequeue later.
enqueue_statusDriver written value to specify the enqueue status. Possible values:
  • 1: The number of operations returned are enqueued successfully.
  • 0: The number of operations returned are cached into the queue but are not processed until rte_cryptodev_raw_enqueue_done() is called.
  • negative integer: Error occurred.
Returns
  • The number of operations in the descriptor successfully enqueued or cached into the queue but not enqueued yet, depends on the "enqueue_status" value.

◆ rte_cryptodev_raw_enqueue()

static __rte_experimental __rte_always_inline int rte_cryptodev_raw_enqueue ( struct rte_crypto_raw_dp_ctx ctx,
struct rte_crypto_vec data_vec,
uint16_t  n_data_vecs,
union rte_crypto_sym_ofs  ofs,
struct rte_crypto_va_iova_ptr iv,
struct rte_crypto_va_iova_ptr digest,
struct rte_crypto_va_iova_ptr aad_or_auth_iv,
void *  user_data 
)
static

Enqueue single raw data vector into the device queue but the driver may or may not start processing until rte_cryptodev_raw_enqueue_done() is called.

Parameters
ctxThe initialized raw data-path context data.
data_vecThe buffer data vector.
n_data_vecsNumber of buffer data vectors.
ofsStart and stop offsets for auth and cipher operations.
ivIV virtual and IOVA addresses
digestdigest virtual and IOVA addresses
aad_or_auth_ivAAD or auth IV virtual and IOVA addresses, depends on the algorithm used.
user_dataThe user data.
Returns
  • 1: The data vector is enqueued successfully.
  • 0: The data vector is cached into the queue but is not processed until rte_cryptodev_raw_enqueue_done() is called.
  • negative integer: failure.

Definition at line 1680 of file rte_cryptodev.h.

◆ rte_cryptodev_raw_enqueue_done()

int rte_cryptodev_raw_enqueue_done ( struct rte_crypto_raw_dp_ctx ctx,
uint32_t  n 
)

Start processing all enqueued operations from last rte_cryptodev_configure_raw_dp_ctx() call.

Parameters
ctxThe initialized raw data-path context data.
nThe number of operations cached.
Returns
  • On success return 0.
  • On failure return negative integer.

◆ rte_cryptodev_raw_dequeue_burst()

uint32_t rte_cryptodev_raw_dequeue_burst ( struct rte_crypto_raw_dp_ctx ctx,
rte_cryptodev_raw_get_dequeue_count_t  get_dequeue_count,
uint32_t  max_nb_to_dequeue,
rte_cryptodev_raw_post_dequeue_t  post_dequeue,
void **  out_user_data,
uint8_t  is_user_data_array,
uint32_t *  n_success,
int *  dequeue_status 
)

Dequeue a burst of symmetric crypto processing.

Parameters
ctxThe initialized raw data-path context data.
get_dequeue_countUser provided callback function to obtain dequeue operation count.
max_nb_to_dequeueWhen get_dequeue_count is NULL this value is used to pass the maximum number of operations to be dequeued.
post_dequeueUser provided callback function to post-process a dequeued operation.
out_user_dataUser data pointer array to be retrieve from device queue. In case of is_user_data_array is set there should be enough room to store all user data.
is_user_data_arraySet 1 if every dequeued user data will be written into out_user_data array. Set 0 if only the first user data will be written into out_user_data array.
n_successDriver written value to specific the total successful operations count.
dequeue_statusDriver written value to specify the dequeue status. Possible values:
  • 1: Successfully dequeued the number of operations returned. The user data previously set during enqueue is stored in the "out_user_data".
  • 0: The number of operations returned are completed and the user data is stored in the "out_user_data", but they are not freed from the queue until rte_cryptodev_raw_dequeue_done() is called.
  • negative integer: Error occurred.
Returns
  • The number of operations dequeued or completed but not freed from the queue, depends on "dequeue_status" value.

◆ rte_cryptodev_raw_dequeue()

static __rte_experimental __rte_always_inline void* rte_cryptodev_raw_dequeue ( struct rte_crypto_raw_dp_ctx ctx,
int *  dequeue_status,
enum rte_crypto_op_status op_status 
)
static

Dequeue a symmetric crypto processing.

Parameters
ctxThe initialized raw data-path context data.
dequeue_statusDriver written value to specify the dequeue status. Possible values:
  • 1: Successfully dequeued a operation. The user data is returned.
  • 0: The first operation in the queue is completed and the user data previously set during enqueue is returned, but it is not freed from the queue until rte_cryptodev_raw_dequeue_done() is called.
  • negative integer: Error occurred.
op_statusDriver written value to specify operation status.
Returns
  • The user data pointer retrieved from device queue or NULL if no operation is ready for dequeue.

Definition at line 1780 of file rte_cryptodev.h.

◆ rte_cryptodev_raw_dequeue_done()

int rte_cryptodev_raw_dequeue_done ( struct rte_crypto_raw_dp_ctx ctx,
uint32_t  n 
)

Inform the queue pair dequeue operations is finished.

Parameters
ctxThe initialized raw data-path context data.
nThe number of operations.
Returns
  • On success return 0.
  • On failure return negative integer.

◆ rte_cryptodev_add_enq_callback()

struct rte_cryptodev_cb* rte_cryptodev_add_enq_callback ( uint8_t  dev_id,
uint16_t  qp_id,
rte_cryptodev_callback_fn  cb_fn,
void *  cb_arg 
)

Add a user callback for a given crypto device and queue pair which will be called on crypto ops enqueue.

This API configures a function to be called for each burst of crypto ops received on a given crypto device queue pair. The return value is a pointer that can be used later to remove the callback using rte_cryptodev_remove_enq_callback().

Callbacks registered by application would not survive rte_cryptodev_configure() as it reinitializes the callback list. It is user responsibility to remove all installed callbacks before calling rte_cryptodev_configure() to avoid possible memory leakage. Application is expected to call add API after rte_cryptodev_configure().

Multiple functions can be registered per queue pair & they are called in the order they were added. The API does not restrict on maximum number of callbacks.

Parameters
dev_idThe identifier of the device.
qp_idThe index of the queue pair on which ops are to be enqueued for processing. The value must be in the range [0, nb_queue_pairs - 1] previously supplied to rte_cryptodev_configure.
cb_fnThe callback function
cb_argA generic pointer parameter which will be passed to each invocation of the callback function on this crypto device and queue pair.
Returns
  • NULL on error & rte_errno will contain the error code.
  • On success, a pointer value which can later be used to remove the callback.

◆ rte_cryptodev_remove_enq_callback()

int rte_cryptodev_remove_enq_callback ( uint8_t  dev_id,
uint16_t  qp_id,
struct rte_cryptodev_cb cb 
)

Remove a user callback function for given crypto device and queue pair.

This function is used to remove enqueue callbacks that were added to a crypto device queue pair using rte_cryptodev_add_enq_callback().

Parameters
dev_idThe identifier of the device.
qp_idThe index of the queue pair on which ops are to be enqueued. The value must be in the range [0, nb_queue_pairs - 1] previously supplied to rte_cryptodev_configure.
cbPointer to user supplied callback created via rte_cryptodev_add_enq_callback().
Returns
  • 0: Success. Callback was removed.
  • <0: The dev_id or the qp_id is out of range, or the callback is NULL or not found for the crypto device queue pair.

◆ rte_cryptodev_add_deq_callback()

struct rte_cryptodev_cb* rte_cryptodev_add_deq_callback ( uint8_t  dev_id,
uint16_t  qp_id,
rte_cryptodev_callback_fn  cb_fn,
void *  cb_arg 
)

Add a user callback for a given crypto device and queue pair which will be called on crypto ops dequeue.

This API configures a function to be called for each burst of crypto ops received on a given crypto device queue pair. The return value is a pointer that can be used later to remove the callback using rte_cryptodev_remove_deq_callback().

Callbacks registered by application would not survive rte_cryptodev_configure() as it reinitializes the callback list. It is user responsibility to remove all installed callbacks before calling rte_cryptodev_configure() to avoid possible memory leakage. Application is expected to call add API after rte_cryptodev_configure().

Multiple functions can be registered per queue pair & they are called in the order they were added. The API does not restrict on maximum number of callbacks.

Parameters
dev_idThe identifier of the device.
qp_idThe index of the queue pair on which ops are to be dequeued. The value must be in the range [0, nb_queue_pairs - 1] previously supplied to rte_cryptodev_configure.
cb_fnThe callback function
cb_argA generic pointer parameter which will be passed to each invocation of the callback function on this crypto device and queue pair.
Returns
  • NULL on error & rte_errno will contain the error code.
  • On success, a pointer value which can later be used to remove the callback.

◆ rte_cryptodev_remove_deq_callback()

int rte_cryptodev_remove_deq_callback ( uint8_t  dev_id,
uint16_t  qp_id,
struct rte_cryptodev_cb cb 
)

Remove a user callback function for given crypto device and queue pair.

This function is used to remove dequeue callbacks that were added to a crypto device queue pair using rte_cryptodev_add_deq_callback().

Parameters
dev_idThe identifier of the device.
qp_idThe index of the queue pair on which ops are to be dequeued. The value must be in the range [0, nb_queue_pairs - 1] previously supplied to rte_cryptodev_configure.
cbPointer to user supplied callback created via rte_cryptodev_add_deq_callback().
Returns
  • 0: Success. Callback was removed.
  • <0: The dev_id or the qp_id is out of range, or the callback is NULL or not found for the crypto device queue pair.

◆ rte_cryptodev_dequeue_burst()

static uint16_t rte_cryptodev_dequeue_burst ( uint8_t  dev_id,
uint16_t  qp_id,
struct rte_crypto_op **  ops,
uint16_t  nb_ops 
)
inlinestatic

Dequeue a burst of processed crypto operations from a queue on the crypto device. The dequeued operation are stored in rte_crypto_op structures whose pointers are supplied in the ops array.

The rte_cryptodev_dequeue_burst() function returns the number of ops actually dequeued, which is the number of rte_crypto_op data structures effectively supplied into the ops array.

A return value equal to nb_ops indicates that the queue contained at least nb_ops operations, and this is likely to signify that other processed operations remain in the devices output queue. Applications implementing a "retrieve as many processed operations as possible" policy can check this specific case and keep invoking the rte_cryptodev_dequeue_burst() function until a value less than nb_ops is returned.

The rte_cryptodev_dequeue_burst() function does not provide any error notification to avoid the corresponding overhead.

Parameters
dev_idThe symmetric crypto device identifier
qp_idThe index of the queue pair from which to retrieve processed packets. The value must be in the range [0, nb_queue_pair - 1] previously supplied to rte_cryptodev_configure().
opsThe address of an array of pointers to rte_crypto_op structures that must be large enough to store nb_ops pointers in it.
nb_opsThe maximum number of operations to dequeue.
Returns
  • The number of operations actually dequeued, which is the number of pointers to rte_crypto_op structures effectively supplied to the ops array.
Examples:
examples/fips_validation/fips_dev_self_test.c, examples/fips_validation/main.c, examples/ipsec-secgw/ipsec.c, examples/ipsec-secgw/ipsec_process.c, examples/l2fwd-crypto/main.c, and examples/vhost_crypto/main.c.

Definition at line 1973 of file rte_cryptodev.h.

◆ rte_cryptodev_enqueue_burst()

static uint16_t rte_cryptodev_enqueue_burst ( uint8_t  dev_id,
uint16_t  qp_id,
struct rte_crypto_op **  ops,
uint16_t  nb_ops 
)
inlinestatic

Enqueue a burst of operations for processing on a crypto device.

The rte_cryptodev_enqueue_burst() function is invoked to place crypto operations on the queue qp_id of the device designated by its dev_id.

The nb_ops parameter is the number of operations to process which are supplied in the ops array of rte_crypto_op structures.

The rte_cryptodev_enqueue_burst() function returns the number of operations it actually enqueued for processing. A return value equal to nb_ops means that all packets have been enqueued.

Parameters
dev_idThe identifier of the device.
qp_idThe index of the queue pair which packets are to be enqueued for processing. The value must be in the range [0, nb_queue_pairs - 1] previously supplied to rte_cryptodev_configure.
opsThe address of an array of nb_ops pointers to rte_crypto_op structures which contain the crypto operations to be processed.
nb_opsThe number of operations to process.
Returns
The number of operations actually enqueued on the crypto device. The return value can be less than the value of the nb_ops parameter when the crypto devices queue is full or if invalid parameters are specified in a rte_crypto_op.
Examples:
examples/fips_validation/fips_dev_self_test.c, examples/fips_validation/main.c, examples/ipsec-secgw/ipsec.c, examples/ipsec-secgw/ipsec_process.c, examples/l2fwd-crypto/main.c, and examples/vhost_crypto/main.c.

Definition at line 2045 of file rte_cryptodev.h.

◆ rte_cryptodev_qp_depth_used()

static __rte_experimental int rte_cryptodev_qp_depth_used ( uint8_t  dev_id,
uint16_t  qp_id 
)
inlinestatic
Warning
EXPERIMENTAL: this API may change, or be removed, without prior notice

Get the number of used descriptors or depth of a cryptodev queue pair.

This function retrieves the number of used descriptors in a crypto queue. Applications can use this API in the fast path to inspect QP occupancy and take appropriate action.

Since it is a fast-path function, no check is performed on dev_id and qp_id. Caller must therefore ensure that the device is enabled and queue pair is setup.

Parameters
dev_idThe identifier of the device.
qp_idThe index of the queue pair for which used descriptor count is to be retrieved. The value must be in the range [0, nb_queue_pairs - 1] previously supplied to rte_cryptodev_configure.
Returns
The number of used descriptors on the specified queue pair, or:
  • (-ENOTSUP) if the device does not support this function.

Definition at line 2108 of file rte_cryptodev.h.