DPDK
19.11.14
|
#include "rte_kvargs.h"
#include "rte_crypto.h"
#include "rte_dev.h"
#include <rte_common.h>
#include <rte_config.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 |
struct | rte_cryptodev_data |
struct | rte_cryptodev_sym_session |
struct | rte_cryptodev_asym_session |
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_event_type { RTE_CRYPTODEV_EVENT_UNKNOWN, RTE_CRYPTODEV_EVENT_ERROR, RTE_CRYPTODEV_EVENT_MAX } |
RTE Cryptographic Device APIs
Defines RTE Crypto Device APIs for the provisioning of cipher and authentication operations.
Definition in file rte_cryptodev.h.
#define rte_crypto_op_ctod_offset | ( | c, | |
t, | |||
o | |||
) | ((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.
c | The crypto operation. |
o | The offset from the start of the crypto operation. |
t | The type to cast the result into. |
Definition at line 64 of file rte_cryptodev.h.
#define rte_crypto_op_ctophys_offset | ( | c, | |
o | |||
) | (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)
c | The crypto operation. |
o | The offset from the start of the crypto operation to calculate address from. |
Definition at line 78 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 388 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 400 of file rte_cryptodev.h.
#define RTE_CRYPTODEV_FF_ASYMMETRIC_CRYPTO (1ULL << 1) |
Asymmetric crypto operations are supported
Definition at line 402 of file rte_cryptodev.h.
#define RTE_CRYPTODEV_FF_SYM_OPERATION_CHAINING (1ULL << 2) |
Chaining symmetric crypto operations are supported
Definition at line 404 of file rte_cryptodev.h.
#define RTE_CRYPTODEV_FF_CPU_SSE (1ULL << 3) |
Utilises CPU SIMD SSE instructions
Definition at line 406 of file rte_cryptodev.h.
#define RTE_CRYPTODEV_FF_CPU_AVX (1ULL << 4) |
Utilises CPU SIMD AVX instructions
Definition at line 408 of file rte_cryptodev.h.
#define RTE_CRYPTODEV_FF_CPU_AVX2 (1ULL << 5) |
Utilises CPU SIMD AVX2 instructions
Definition at line 410 of file rte_cryptodev.h.
#define RTE_CRYPTODEV_FF_CPU_AESNI (1ULL << 6) |
Utilises CPU AES-NI instructions
Definition at line 412 of file rte_cryptodev.h.
#define RTE_CRYPTODEV_FF_HW_ACCELERATED (1ULL << 7) |
Operations are off-loaded to an external hardware accelerator
Definition at line 414 of file rte_cryptodev.h.
#define RTE_CRYPTODEV_FF_CPU_AVX512 (1ULL << 8) |
Utilises CPU SIMD AVX512 instructions
Definition at line 418 of file rte_cryptodev.h.
#define RTE_CRYPTODEV_FF_IN_PLACE_SGL (1ULL << 9) |
In-place Scatter-gather (SGL) buffers, with multiple segments, are supported
Definition at line 420 of file rte_cryptodev.h.
#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 424 of file rte_cryptodev.h.
#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 428 of file rte_cryptodev.h.
#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 433 of file rte_cryptodev.h.
#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 437 of file rte_cryptodev.h.
#define RTE_CRYPTODEV_FF_CPU_NEON (1ULL << 14) |
Utilises CPU NEON instructions
Definition at line 439 of file rte_cryptodev.h.
#define RTE_CRYPTODEV_FF_CPU_ARM_CE (1ULL << 15) |
Utilises ARM CPU Cryptographic Extensions
Definition at line 441 of file rte_cryptodev.h.
#define RTE_CRYPTODEV_FF_SECURITY (1ULL << 16) |
Support Security Protocol Processing
Definition at line 443 of file rte_cryptodev.h.
#define RTE_CRYPTODEV_FF_RSA_PRIV_OP_KEY_EXP (1ULL << 17) |
Support RSA Private Key OP with exponent
Definition at line 445 of file rte_cryptodev.h.
#define RTE_CRYPTODEV_FF_RSA_PRIV_OP_KEY_QT (1ULL << 18) |
Support RSA Private Key OP with CRT (quintuple) Keys
Definition at line 447 of file rte_cryptodev.h.
#define RTE_CRYPTODEV_FF_DIGEST_ENCRYPTED (1ULL << 19) |
Support encrypted-digest operations where digest is appended to data
Definition at line 449 of file rte_cryptodev.h.
#define RTE_CRYPTODEV_FF_ASYM_SESSIONLESS (1ULL << 20) |
Support asymmetric session-less operations
Definition at line 451 of file rte_cryptodev.h.
#define RTE_CRYPTODEV_NAME_MAX_LEN (64) |
Max length of name of crypto PMD
Definition at line 542 of file rte_cryptodev.h.
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
dev_id | Crypto device identifier |
event | Crypto device event to register for notification of. |
cb_arg | User specified parameter to be passed as to passed to users callback function. |
Definition at line 525 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 800 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 804 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 501 of file rte_cryptodev.h.
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
dev_id | The identifier of the device. |
idx | Description of crypto algorithms. |
__rte_experimental 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
dev_id | The identifier of the device. |
idx | Description of asym crypto xform. |
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
capability | Description of the symmetric crypto capability. |
key_size | Cipher key size. |
iv_size | Cipher initial vector 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 | ||
) |
Check if key size and initial vector are supported in crypto auth capability
capability | Description of the symmetric crypto capability. |
key_size | Auth key size. |
digest_size | Auth digest size. |
iv_size | Auth initial vector 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 | ||
) |
Check if key, digest, AAD and initial vector sizes are supported in crypto AEAD capability
capability | Description of the symmetric crypto capability. |
key_size | AEAD key size. |
digest_size | AEAD digest size. |
aad_size | AEAD AAD size. |
iv_size | AEAD IV size. |
__rte_experimental 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
capability | Description of the asymmetric crypto capability. |
op_type | op type |
__rte_experimental 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
capability | Description of the asymmetric crypto capability. |
modlen | modulus length. |
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
algo_enum | A pointer to the cipher algorithm enum to be filled |
algo_string | Authentication algo string |
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
algo_enum | A pointer to the authentication algorithm enum to be filled |
algo_string | Authentication algo string |
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
algo_enum | A pointer to the AEAD algorithm enum to be filled |
algo_string | AEAD algorithm string |
__rte_experimental 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
xform_enum | A pointer to the xform type enum to be filled |
xform_string | xform string |
const char* rte_cryptodev_get_feature_name | ( | uint64_t | flag | ) |
Get the name of a crypto device feature flag
flag | The mask describing the flag. |
int rte_cryptodev_get_dev_id | ( | const char * | name | ) |
Get the device identifier for the named crypto device.
name | device name to select the device structure. |
const char* rte_cryptodev_name_get | ( | uint8_t | dev_id | ) |
Get the crypto device name given a device identifier.
dev_id | The identifier of the device |
uint8_t rte_cryptodev_count | ( | void | ) |
Get the total number of crypto devices that have been successfully initialised.
uint8_t rte_cryptodev_device_count_by_driver | ( | uint8_t | driver_id | ) |
Get number of crypto device defined type.
driver_id | driver identifier. |
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.
driver_name | driver name. |
devices | output devices identifiers. |
nb_devices | maximal number of devices. |
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.
dev_id | The identifier of the device to configure. |
config | The crypto device configuration structure. |
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.
dev_id | The identifier of the device. |
void rte_cryptodev_stop | ( | uint8_t | dev_id | ) |
Stop an device. The device can be restarted with a call to rte_cryptodev_start()
dev_id | The identifier of the device. |
int rte_cryptodev_close | ( | uint8_t | dev_id | ) |
Close an device. The device cannot be restarted!
dev_id | The identifier of the 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.
dev_id | The identifier of the device. |
queue_pair_id | The index of the queue pairs to set up. The value must be in the range [0, nb_queue_pair
|
qp_conf | The pointer to the configuration data to be used for the queue pair. |
socket_id | The 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. |
uint16_t rte_cryptodev_queue_pair_count | ( | uint8_t | dev_id | ) |
Get the number of queue pairs on a specific crypto device
dev_id | Crypto device identifier. |
int rte_cryptodev_stats_get | ( | uint8_t | dev_id, |
struct rte_cryptodev_stats * | stats | ||
) |
Retrieve the general I/O statistics of a device.
dev_id | The identifier of the device. |
stats | A pointer to a structure of type rte_cryptodev_stats to be filled with the values of device counters. |
void rte_cryptodev_stats_reset | ( | uint8_t | dev_id | ) |
Reset the general I/O statistics of a device.
dev_id | The 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.
dev_id | The identifier of the device. |
dev_info | A pointer to a structure of type rte_cryptodev_info to be filled with the contextual information of the device. |
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.
dev_id | Device id. |
event | Event interested. |
cb_fn | User supplied callback function to be called. |
cb_arg | Pointer to the parameters for the registered callback. |
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.
dev_id | The device identifier. |
event | Event interested. |
cb_fn | User supplied callback function to be called. |
cb_arg | Pointer to the parameters for the registered callback. |
TAILQ_HEAD | ( | rte_cryptodev_cb_list | , |
rte_cryptodev_callback | |||
) |
Structure to keep track of registered callbacks
|
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.
dev_id | The symmetric crypto device identifier |
qp_id | The 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(). |
ops | The address of an array of pointers to rte_crypto_op structures that must be large enough to store nb_ops pointers in it. |
nb_ops | The maximum number of operations to dequeue. |
Definition at line 917 of file rte_cryptodev.h.
|
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.
dev_id | The identifier of the device. |
qp_id | The 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. |
ops | The address of an array of nb_ops pointers to rte_crypto_op structures which contain the crypto operations to be processed. |
nb_ops | The number of operations to process. |
Definition at line 960 of file rte_cryptodev.h.
__rte_experimental 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.
name | The unique mempool name. |
nb_elts | The number of elements in the mempool. |
elt_size | The size of the element. This value will be ignored if it is smaller than the minimum session header size required for the system. For the user who want to use the same mempool for sym session and session private data it can be the maximum value of all existing devices' private data and session header sizes. |
cache_size | The number of per-lcore cache elements |
priv_size | The private data size of each session. |
socket_id | The 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. |
struct rte_cryptodev_sym_session* rte_cryptodev_sym_session_create | ( | struct rte_mempool * | mempool | ) |
Create symmetric crypto session header (generic with no private data)
mempool | Symmetric session mempool to allocate session objects from |
__rte_experimental struct rte_cryptodev_asym_session* rte_cryptodev_asym_session_create | ( | struct rte_mempool * | mempool | ) |
Create asymmetric crypto session header (generic with no private data)
mempool | mempool to allocate asymmetric session objects from |
int rte_cryptodev_sym_session_free | ( | struct rte_cryptodev_sym_session * | sess | ) |
Frees symmetric crypto session header, after checking that all the device private data has been freed, returning it to its original mempool.
sess | Session header to be freed. |
__rte_experimental int rte_cryptodev_asym_session_free | ( | struct rte_cryptodev_asym_session * | sess | ) |
Frees asymmetric crypto session header, after checking that all the device private data has been freed, returning it to its original mempool.
sess | Session header to be freed. |
int rte_cryptodev_sym_session_init | ( | uint8_t | dev_id, |
struct rte_cryptodev_sym_session * | sess, | ||
struct rte_crypto_sym_xform * | xforms, | ||
struct rte_mempool * | mempool | ||
) |
Fill out private data for the device id, based on its device type.
dev_id | ID of device that we want the session to be used on |
sess | Session where the private data will be attached to |
xforms | Symmetric crypto transform operations to apply on flow processed with this session |
mempool | Mempool where the private data is allocated. |
__rte_experimental int rte_cryptodev_asym_session_init | ( | uint8_t | dev_id, |
struct rte_cryptodev_asym_session * | sess, | ||
struct rte_crypto_asym_xform * | xforms, | ||
struct rte_mempool * | mempool | ||
) |
Initialize asymmetric session on a device with specific asymmetric xform
dev_id | ID of device that we want the session to be used on |
sess | Session to be set up on a device |
xforms | Asymmetric crypto transform operations to apply on flow processed with this session |
mempool | Mempool to be used for internal allocation. |
int rte_cryptodev_sym_session_clear | ( | uint8_t | dev_id, |
struct rte_cryptodev_sym_session * | sess | ||
) |
Frees private data for the device id, based on its device type, returning it to its mempool. It is the application's responsibility to ensure that private session data is not cleared while there are still in-flight operations using it.
dev_id | ID of device that uses the session. |
sess | Session containing the reference to the private data |
__rte_experimental int rte_cryptodev_asym_session_clear | ( | uint8_t | dev_id, |
struct rte_cryptodev_asym_session * | sess | ||
) |
Frees resources held by asymmetric session during rte_cryptodev_session_init
dev_id | ID of device that uses the asymmetric session. |
sess | Asymmetric session setup on device using rte_cryptodev_session_init |
unsigned int rte_cryptodev_sym_get_header_session_size | ( | void | ) |
Get the size of the header session, for all registered drivers excluding the user data size.
__rte_experimental unsigned int rte_cryptodev_sym_get_existing_header_session_size | ( | struct rte_cryptodev_sym_session * | sess | ) |
Get the size of the header session from created session.
sess | The sym cryptodev session pointer |
__rte_experimental unsigned int rte_cryptodev_asym_get_header_session_size | ( | void | ) |
Get the size of the asymmetric session header, for all registered drivers.
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.
dev_id | The device identifier. |
__rte_experimental 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
dev_id | The device identifier. |
int rte_cryptodev_driver_id_get | ( | const char * | name | ) |
Provide driver identifier.
name | The pointer to a driver name. |
const char* rte_cryptodev_driver_name_get | ( | uint8_t | driver_id | ) |
Provide driver name.
driver_id | The driver identifier. |
__rte_experimental int rte_cryptodev_sym_session_set_user_data | ( | struct rte_cryptodev_sym_session * | sess, |
void * | data, | ||
uint16_t | size | ||
) |
Store user data in a session.
sess | Session pointer allocated by rte_cryptodev_sym_session_create. |
data | Pointer to the user data. |
size | Size of the user data. |
__rte_experimental void* rte_cryptodev_sym_session_get_user_data | ( | struct rte_cryptodev_sym_session * | sess | ) |
Get user data stored in a session.
sess | Session pointer allocated by rte_cryptodev_sym_session_create. |