DPDK  17.05.2
Data Structures | Macros | Typedefs | Enumerations | Functions | Variables
rte_cryptodev.h File Reference
#include "rte_kvargs.h"
#include "rte_crypto.h"
#include "rte_dev.h"
#include <rte_common.h>

Go to the source code of this file.

Data Structures

struct  rte_crypto_param_range
struct  rte_cryptodev_symmetric_capability
struct  rte_cryptodev_capabilities
struct  rte_cryptodev_sym_capability_idx
struct  rte_cryptodev_info
struct  rte_cryptodev_qp_conf
struct  rte_cryptodev_stats
struct  rte_cryptodev_config
struct  rte_cryptodev
struct  rte_cryptodev_data
struct  rte_cryptodev_sym_session

Macros

#define CRYPTODEV_NAME_NULL_PMD   crypto_null
#define CRYPTODEV_NAME_AESNI_MB_PMD   crypto_aesni_mb
#define CRYPTODEV_NAME_AESNI_GCM_PMD   crypto_aesni_gcm
#define CRYPTODEV_NAME_OPENSSL_PMD   crypto_openssl
#define CRYPTODEV_NAME_QAT_SYM_PMD   crypto_qat
#define CRYPTODEV_NAME_SNOW3G_PMD   crypto_snow3g
#define CRYPTODEV_NAME_KASUMI_PMD   crypto_kasumi
#define CRYPTODEV_NAME_ZUC_PMD   crypto_zuc
#define CRYPTODEV_NAME_ARMV8_PMD   crypto_armv8
#define CRYPTODEV_NAME_SCHEDULER_PMD   crypto_scheduler
#define CRYPTODEV_NAME_DPAA2_SEC_PMD   cryptodev_dpaa2_sec_pmd
#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_MBUF_SCATTER_GATHER   (1ULL << 9)
#define RTE_CRYPTODEV_FF_CPU_NEON   (1ULL << 10)
#define RTE_CRYPTODEV_FF_CPU_ARM_CE   (1ULL << 11)
#define RTE_CRYPTODEV_NAME_MAX_LEN   (64)

Typedefs

typedef void(* rte_cryptodev_cb_fn )(uint8_t dev_id, enum rte_cryptodev_event_type event, void *cb_arg)
typedef uint16_t(* dequeue_pkt_burst_t )(void *qp, struct rte_crypto_op **ops, uint16_t nb_ops)
typedef uint16_t(* enqueue_pkt_burst_t )(void *qp, struct rte_crypto_op **ops, uint16_t nb_ops)

Enumerations

enum  rte_cryptodev_type {
  RTE_CRYPTODEV_NULL_PMD = 1, RTE_CRYPTODEV_AESNI_GCM_PMD, RTE_CRYPTODEV_AESNI_MB_PMD, RTE_CRYPTODEV_QAT_SYM_PMD,
  RTE_CRYPTODEV_SNOW3G_PMD, RTE_CRYPTODEV_KASUMI_PMD, RTE_CRYPTODEV_ZUC_PMD, RTE_CRYPTODEV_OPENSSL_PMD,
  RTE_CRYPTODEV_ARMV8_PMD, RTE_CRYPTODEV_SCHEDULER_PMD, RTE_CRYPTODEV_DPAA2_SEC_PMD
}
enum  rte_cryptodev_event_type { RTE_CRYPTODEV_EVENT_UNKNOWN, RTE_CRYPTODEV_EVENT_ERROR, RTE_CRYPTODEV_EVENT_MAX }

Functions

struct
rte_cryptodev_symmetric_capability
rte_cryptodev_sym_capability_get (uint8_t dev_id, const struct rte_cryptodev_sym_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 aad_size)
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)
const char * rte_cryptodev_get_feature_name (uint64_t flag)
int rte_cryptodev_parse_vdev_init_params (struct rte_crypto_vdev_init_params *params, const char *input_args)
int rte_cryptodev_create_vdev (const char *name, const char *args)
int rte_cryptodev_get_dev_id (const char *name)
uint8_t rte_cryptodev_count (void)
uint8_t rte_cryptodev_count_devtype (enum rte_cryptodev_type type)
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)
int rte_cryptodev_queue_pair_start (uint8_t dev_id, uint16_t queue_pair_id)
int rte_cryptodev_queue_pair_stop (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)
 TAILQ_HEAD (rte_cryptodev_cb_list, rte_cryptodev_callback)
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)
struct rte_cryptodev_sym_sessionrte_cryptodev_sym_session_create (uint8_t dev_id, struct rte_crypto_sym_xform *xform)
struct rte_cryptodev_sym_sessionrte_cryptodev_sym_session_free (uint8_t dev_id, struct rte_cryptodev_sym_session *session)
int rte_cryptodev_queue_pair_attach_sym_session (uint16_t qp_id, struct rte_cryptodev_sym_session *session)
int rte_cryptodev_queue_pair_detach_sym_session (uint16_t qp_id, struct rte_cryptodev_sym_session *session)

Variables

uint8_t dev_id
struct rte_mempoolmp

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

#define CRYPTODEV_NAME_NULL_PMD   crypto_null

Null crypto PMD device name

Definition at line 53 of file rte_cryptodev.h.

#define CRYPTODEV_NAME_AESNI_MB_PMD   crypto_aesni_mb

AES-NI Multi buffer PMD device name

Definition at line 55 of file rte_cryptodev.h.

#define CRYPTODEV_NAME_AESNI_GCM_PMD   crypto_aesni_gcm

AES-NI GCM PMD device name

Definition at line 57 of file rte_cryptodev.h.

#define CRYPTODEV_NAME_OPENSSL_PMD   crypto_openssl

Open SSL Crypto PMD device name

Definition at line 59 of file rte_cryptodev.h.

#define CRYPTODEV_NAME_QAT_SYM_PMD   crypto_qat

Intel QAT Symmetric Crypto PMD device name

Definition at line 61 of file rte_cryptodev.h.

#define CRYPTODEV_NAME_SNOW3G_PMD   crypto_snow3g

SNOW 3G PMD device name

Definition at line 63 of file rte_cryptodev.h.

#define CRYPTODEV_NAME_KASUMI_PMD   crypto_kasumi

KASUMI PMD device name

Definition at line 65 of file rte_cryptodev.h.

#define CRYPTODEV_NAME_ZUC_PMD   crypto_zuc

KASUMI PMD device name

Definition at line 67 of file rte_cryptodev.h.

#define CRYPTODEV_NAME_ARMV8_PMD   crypto_armv8

ARMv8 Crypto PMD device name

Definition at line 69 of file rte_cryptodev.h.

#define CRYPTODEV_NAME_SCHEDULER_PMD   crypto_scheduler

Scheduler Crypto PMD device name

Definition at line 71 of file rte_cryptodev.h.

#define CRYPTODEV_NAME_DPAA2_SEC_PMD   cryptodev_dpaa2_sec_pmd

NXP DPAA2 - SEC PMD device name

Definition at line 73 of file rte_cryptodev.h.

#define RTE_CRYPTODEV_END_OF_CAPABILITIES_LIST ( )    { RTE_CRYPTO_OP_TYPE_UNDEFINED }

Macro used at end of crypto PMD list

Definition at line 271 of file rte_cryptodev.h.

#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 283 of file rte_cryptodev.h.

#define RTE_CRYPTODEV_FF_ASYMMETRIC_CRYPTO   (1ULL << 1)

Asymmetric crypto operations are supported

Definition at line 285 of file rte_cryptodev.h.

#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 287 of file rte_cryptodev.h.

#define RTE_CRYPTODEV_FF_CPU_SSE   (1ULL << 3)

Utilises CPU SIMD SSE instructions

Definition at line 289 of file rte_cryptodev.h.

#define RTE_CRYPTODEV_FF_CPU_AVX   (1ULL << 4)

Utilises CPU SIMD AVX instructions

Definition at line 291 of file rte_cryptodev.h.

#define RTE_CRYPTODEV_FF_CPU_AVX2   (1ULL << 5)

Utilises CPU SIMD AVX2 instructions

Definition at line 293 of file rte_cryptodev.h.

#define RTE_CRYPTODEV_FF_CPU_AESNI   (1ULL << 6)

Utilises CPU AES-NI instructions

Definition at line 295 of file rte_cryptodev.h.

#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 297 of file rte_cryptodev.h.

#define RTE_CRYPTODEV_FF_CPU_AVX512   (1ULL << 8)

Utilises CPU SIMD AVX512 instructions

Definition at line 299 of file rte_cryptodev.h.

#define RTE_CRYPTODEV_FF_MBUF_SCATTER_GATHER   (1ULL << 9)

Scatter-gather mbufs are supported

Definition at line 301 of file rte_cryptodev.h.

#define RTE_CRYPTODEV_FF_CPU_NEON   (1ULL << 10)

Utilises CPU NEON instructions

Definition at line 303 of file rte_cryptodev.h.

#define RTE_CRYPTODEV_FF_CPU_ARM_CE   (1ULL << 11)

Utilises ARM CPU Cryptographic Extensions

Definition at line 305 of file rte_cryptodev.h.

#define RTE_CRYPTODEV_NAME_MAX_LEN   (64)

Max length of name of crypto PMD

Definition at line 386 of file rte_cryptodev.h.

Typedef Documentation

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 369 of file rte_cryptodev.h.

typedef uint16_t(* dequeue_pkt_burst_t)(void *qp, struct rte_crypto_op **ops, uint16_t nb_ops)

Dequeue processed packets from queue pair of a device.

Definition at line 702 of file rte_cryptodev.h.

typedef uint16_t(* enqueue_pkt_burst_t)(void *qp, struct rte_crypto_op **ops, uint16_t nb_ops)

Enqueue packets for processing on queue pair of a device.

Definition at line 706 of file rte_cryptodev.h.

Enumeration Type Documentation

Crypto device type

Enumerator:
RTE_CRYPTODEV_NULL_PMD 

Null crypto PMD

RTE_CRYPTODEV_AESNI_GCM_PMD 

AES-NI GCM PMD

RTE_CRYPTODEV_AESNI_MB_PMD 

AES-NI multi buffer PMD

RTE_CRYPTODEV_QAT_SYM_PMD 

QAT PMD Symmetric Crypto

RTE_CRYPTODEV_SNOW3G_PMD 

SNOW 3G PMD

RTE_CRYPTODEV_KASUMI_PMD 

KASUMI PMD

RTE_CRYPTODEV_ZUC_PMD 

ZUC PMD

RTE_CRYPTODEV_OPENSSL_PMD 

OpenSSL PMD

RTE_CRYPTODEV_ARMV8_PMD 

ARMv8 crypto PMD

RTE_CRYPTODEV_SCHEDULER_PMD 

Crypto Scheduler PMD

RTE_CRYPTODEV_DPAA2_SEC_PMD 

NXP DPAA2 - SEC PMD

Definition at line 77 of file rte_cryptodev.h.

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 349 of file rte_cryptodev.h.

Function Documentation

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

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.
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.
int rte_cryptodev_sym_capability_check_auth ( const struct rte_cryptodev_symmetric_capability capability,
uint16_t  key_size,
uint16_t  digest_size,
uint16_t  aad_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.
aad_sizeAuth aad 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.
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/l2fwd-crypto/main.c.
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/l2fwd-crypto/main.c.
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.
int rte_cryptodev_parse_vdev_init_params ( struct rte_crypto_vdev_init_params *  params,
const char *  input_args 
)

Parse virtual device initialisation parameters input arguments

int rte_cryptodev_create_vdev ( const char *  name,
const char *  args 
)

Create a virtual crypto device

Parameters
nameCryptodev PMD name of device to be created.
argsOptions arguments for device.
Returns
  • On successful creation of the cryptodev the device index is returned, which will be between 0 and rte_cryptodev_count().
  • In the case of a failure, returns -1.
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.
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/ipsec-secgw/ipsec-secgw.c, and examples/l2fwd-crypto/main.c.
uint8_t rte_cryptodev_count_devtype ( enum rte_cryptodev_type  type)

Get number of crypto device defined type.

Parameters
typetype of device.
Returns
Returns number of crypto device.
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.
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/ipsec-secgw/ipsec-secgw.c, and examples/l2fwd-crypto/main.c.
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/ipsec-secgw/ipsec-secgw.c, and examples/l2fwd-crypto/main.c.
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.
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
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. NULL value is allowed, in which case default configuration will be used.
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/ipsec-secgw/ipsec-secgw.c, and examples/l2fwd-crypto/main.c.
int rte_cryptodev_queue_pair_start ( uint8_t  dev_id,
uint16_t  queue_pair_id 
)

Start a specified queue pair of a device. It is used when deferred_start flag of the specified queue is true.

Parameters
dev_idThe identifier of the device
queue_pair_idThe index of the queue pair to start. The value must be in the range [0, nb_queue_pair - 1] previously supplied to rte_crypto_dev_configure().
Returns
  • 0: Success, the transmit queue is correctly set up.
  • -EINVAL: The dev_id or the queue_id out of range.
  • -ENOTSUP: The function not supported in PMD driver.
int rte_cryptodev_queue_pair_stop ( uint8_t  dev_id,
uint16_t  queue_pair_id 
)

Stop specified queue pair of a device

Parameters
dev_idThe identifier of the device
queue_pair_idThe index of the queue pair to stop. The value must be in the range [0, nb_queue_pair - 1] previously supplied to rte_cryptodev_configure().
Returns
  • 0: Success, the transmit queue is correctly set up.
  • -EINVAL: The dev_id or the queue_id out of range.
  • -ENOTSUP: The function not supported in PMD driver.
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.
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.
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.
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.
Examples:
examples/ipsec-secgw/ipsec-secgw.c, examples/ipsec-secgw/ipsec.c, and examples/l2fwd-crypto/main.c.
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.
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.
TAILQ_HEAD ( rte_cryptodev_cb_list  ,
rte_cryptodev_callback   
)

Structure to keep track of registered callbacks

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/ipsec-secgw/ipsec.c, and examples/l2fwd-crypto/main.c.

Definition at line 815 of file rte_cryptodev.h.

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/ipsec-secgw/ipsec.c, and examples/l2fwd-crypto/main.c.

Definition at line 858 of file rte_cryptodev.h.

struct rte_cryptodev_sym_session* rte_cryptodev_sym_session_create ( uint8_t  dev_id,
struct rte_crypto_sym_xform xform 
)
read

Initialise a session for symmetric cryptographic operations.

This function is used by the client to initialize immutable parameters of symmetric cryptographic operation. To perform the operation the rte_cryptodev_enqueue_burst function is used. Each mbuf should contain a reference to the session pointer returned from this function contained within it's crypto_op if a session-based operation is being provisioned. Memory to contain the session information is allocated from within mempool managed by the cryptodev.

The rte_cryptodev_session_free must be called to free allocated memory when the session is no longer required.

Parameters
dev_idThe device identifier.
xformCrypto transform chain.
Returns
Pointer to the created session or NULL
Examples:
examples/ipsec-secgw/ipsec.c, and examples/l2fwd-crypto/main.c.
struct rte_cryptodev_sym_session* rte_cryptodev_sym_session_free ( uint8_t  dev_id,
struct rte_cryptodev_sym_session session 
)
read

Free the memory associated with a previously allocated session.

Parameters
dev_idThe device identifier.
sessionSession pointer previously allocated by rte_cryptodev_sym_session_create.
Returns
NULL on successful freeing of session. Session pointer on failure to free session.
int rte_cryptodev_queue_pair_attach_sym_session ( uint16_t  qp_id,
struct rte_cryptodev_sym_session session 
)

Attach queue pair with sym session.

Parameters
qp_idQueue pair to which session will be attached.
sessionSession pointer previously allocated by rte_cryptodev_sym_session_create.
Returns
  • On success, zero.
  • On failure, a negative value.
Examples:
examples/ipsec-secgw/ipsec.c.
int rte_cryptodev_queue_pair_detach_sym_session ( uint16_t  qp_id,
struct rte_cryptodev_sym_session session 
)

Detach queue pair with sym session.

Parameters
qp_idQueue pair to which session is attached.
sessionSession pointer previously allocated by rte_cryptodev_sym_session_create.
Returns
  • On success, zero.
  • On failure, a negative value.

Variable Documentation

uint8_t dev_id

Device Id

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

Definition at line 881 of file rte_cryptodev.h.

struct rte_mempool* mp