15 #ifndef __DPDK_IPSEC_H__ 16 #define __DPDK_IPSEC_H__ 21 #include <rte_config.h> 22 #include <rte_crypto.h> 23 #include <rte_cryptodev.h> 26 #define always_inline static inline 28 #define always_inline static inline __attribute__ ((__always_inline__)) 32 #define MAX_QP_PER_LCORE 16 93 #define CRYPTO_N_FREE_COPS (VLIB_FRAME_SIZE * 3) 101 unsigned socket_id = rte_socket_id ();
116 n_alloc = rte_crypto_op_bulk_alloc (dcm->
cop_pools[socket_id],
117 RTE_CRYPTO_OP_TYPE_SYMMETRIC,
135 rte_mempool_put_bulk (cops[0]->mempool,
150 enum rte_crypto_sym_xform_type type;
153 enum rte_crypto_auth_algorithm auth;
154 enum rte_crypto_cipher_algorithm cipher;
160 .type = RTE_CRYPTO_SYM_XFORM_CIPHER,.cipher =
161 RTE_CRYPTO_CIPHER_NULL,.name =
"NULL"},
163 .type = RTE_CRYPTO_SYM_XFORM_CIPHER,.cipher =
164 RTE_CRYPTO_CIPHER_AES_CBC,.name =
"AES_CBC"},
166 .type = RTE_CRYPTO_SYM_XFORM_CIPHER,.cipher =
167 RTE_CRYPTO_CIPHER_AES_CTR,.name =
"AES_CTR"},
169 .type = RTE_CRYPTO_SYM_XFORM_CIPHER,.cipher =
170 RTE_CRYPTO_CIPHER_3DES_CBC,.name =
"3DES-CBC"},
172 .type = RTE_CRYPTO_SYM_XFORM_CIPHER,.cipher =
173 RTE_CRYPTO_CIPHER_AES_GCM,.name =
"AES-GCM"},
175 .type = RTE_CRYPTO_SYM_XFORM_AUTH,.auth =
176 RTE_CRYPTO_AUTH_SHA1_HMAC,.name =
"HMAC-SHA1"},
178 .type = RTE_CRYPTO_SYM_XFORM_AUTH,.auth =
179 RTE_CRYPTO_AUTH_SHA256_HMAC,.name =
"HMAC-SHA256"},
181 .type = RTE_CRYPTO_SYM_XFORM_AUTH,.auth =
182 RTE_CRYPTO_AUTH_SHA384_HMAC,.name =
"HMAC-SHA384"},
184 .type = RTE_CRYPTO_SYM_XFORM_AUTH,.auth =
185 RTE_CRYPTO_AUTH_SHA512_HMAC,.name =
"HMAC-SHA512"},
187 .type = RTE_CRYPTO_SYM_XFORM_AUTH,.auth =
188 RTE_CRYPTO_AUTH_AES_XCBC_MAC,.name =
"AES-XCBC-MAC"},
190 .type = RTE_CRYPTO_SYM_XFORM_AUTH,.auth =
191 RTE_CRYPTO_AUTH_AES_GCM,.name =
"AES-GCM"},
194 .type = RTE_CRYPTO_SYM_XFORM_NOT_SPECIFIED},};
197 if (cap->op != RTE_CRYPTO_OP_TYPE_SYMMETRIC)
200 while (supported_algo[i].type != RTE_CRYPTO_SYM_XFORM_NOT_SPECIFIED)
202 if (cap->sym.xform_type == supported_algo[i].type)
204 if ((cap->sym.xform_type == RTE_CRYPTO_SYM_XFORM_CIPHER &&
205 cap->sym.cipher.algo == supported_algo[i].cipher) ||
206 (cap->sym.xform_type == RTE_CRYPTO_SYM_XFORM_AUTH &&
207 cap->sym.auth.algo == supported_algo[i].auth))
210 strcpy (name, supported_algo[i].name);
struct rte_crypto_op ** free_cops
sll srl srl sll sra u16x4 i
struct _vlib_node_registration vlib_node_registration_t
#define vec_alloc(V, N)
Allocate space for N more elements (no header, unspecified alignment)
static_always_inline void crypto_free_cop(crypto_qp_data_t *qpd, struct rte_crypto_op **cops, u32 n)
dpdk_crypto_main_t dpdk_crypto_main
#define static_always_inline
static_always_inline void crypto_alloc_cops()
vlib_node_registration_t dpdk_crypto_input_node
(constructor) VLIB_REGISTER_NODE (dpdk_crypto_input_node)
static_always_inline uword vlib_get_thread_index(void)
#define clib_memcpy(a, b, c)
struct rte_mempool ** cop_pools
crypto_worker_main_t * workers_main
crypto_qp_data_t * qp_data
#define vec_len(v)
Number of elements in vector (rvalue-only, NULL tolerant)
#define CRYPTO_N_FREE_COPS
static_always_inline int check_algo_is_supported(const struct rte_cryptodev_capabilities *cap, char *name)
#define vec_foreach(var, vec)
Vector iterator.