<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div class="elementToProof" style="margin: 0in; font-family: "IntelOne Text"; font-size: 10pt; color: rgb(0, 0, 0);">
Series-acked-by: Kai Ji <kai.ji@intel.com></div>
<div class="elementToProof" style="font-family: "IntelOne Text"; font-size: 10pt; color: rgb(0, 0, 0);">
<br>
</div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> Nicolau, Radu <radu.nicolau@intel.com><br>
<b>Sent:</b> 02 October 2026 10:56<br>
<b>To:</b> dev@dpdk.org <dev@dpdk.org><br>
<b>Cc:</b> Nicolau, Radu <radu.nicolau@intel.com>; Ji, Kai <kai.ji@intel.com>; De Lara Guarch, Pablo <pablo.de.lara.guarch@intel.com><br>
<b>Subject:</b> [PATCH 1/4] crypto/ipsec_mb: add support for IPsecMB 3.0</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">Add support for IPsecMB release 3.0<br>
- removed all _BITLEN enums, all lengths are in bytes<br>
- removed feature flag<br>
- use non const IMB_MGR<br>
- use IMB API instead of function pointers in the GCM PMD<br>
- remove ZUC 256 support<br>
<br>
Signed-off-by: Radu Nicolau <radu.nicolau@intel.com><br>
---<br>
doc/guides/cryptodevs/aesni_gcm.rst | 4 +-<br>
doc/guides/cryptodevs/aesni_mb.rst | 11 +-<br>
doc/guides/rel_notes/release_26_11.rst | 4 +<br>
drivers/crypto/ipsec_mb/pmd_aesni_gcm.c | 267 +++++++++++++++----<br>
drivers/crypto/ipsec_mb/pmd_aesni_gcm_priv.h | 31 +--<br>
drivers/crypto/ipsec_mb/pmd_aesni_mb.c | 107 +++++---<br>
drivers/crypto/ipsec_mb/pmd_aesni_mb_priv.h | 47 +++-<br>
7 files changed, 349 insertions(+), 122 deletions(-)<br>
<br>
diff --git a/doc/guides/cryptodevs/aesni_gcm.rst b/doc/guides/cryptodevs/aesni_gcm.rst<br>
index aefc1cedcb..e68dc4eb1e 100644<br>
--- a/doc/guides/cryptodevs/aesni_gcm.rst<br>
+++ b/doc/guides/cryptodevs/aesni_gcm.rst<br>
@@ -40,8 +40,8 @@ Installation<br>
To build DPDK with the AESNI_GCM_PMD the user is required to download the multi-buffer<br>
library from `here <<a href="https://github.com/01org/intel-ipsec-mb">https://github.com/01org/intel-ipsec-mb</a>>`_<br>
and compile it on their user system before building DPDK.<br>
-The latest version of the library supported by this PMD is v2.0, which<br>
-can be downloaded from `<<a href="https://github.com/01org/intel-ipsec-mb/archive/v2.0.zip">https://github.com/01org/intel-ipsec-mb/archive/v2.0.zip</a>>`_.<br>
+The latest version of the library supported by this PMD is v3.0, which<br>
+can be downloaded from `<<a href="https://github.com/01org/intel-ipsec-mb/archive/v3.0.zip">https://github.com/01org/intel-ipsec-mb/archive/v3.0.zip</a>>`_.<br>
<br>
For Arm system, ARM64 port of the multi-buffer library can be downloaded from<br>
<a href="https://gitlab.arm.com/arm-reference-solutions/ipsec-mb/-/tree/main/">https://gitlab.arm.com/arm-reference-solutions/ipsec-mb/-/tree/main/</a>.<br>
diff --git a/doc/guides/cryptodevs/aesni_mb.rst b/doc/guides/cryptodevs/aesni_mb.rst<br>
index add3c03b74..4851997fd9 100644<br>
--- a/doc/guides/cryptodevs/aesni_mb.rst<br>
+++ b/doc/guides/cryptodevs/aesni_mb.rst<br>
@@ -73,6 +73,13 @@ Protocol offloads:<br>
<br>
* RTE_SECURITY_PROTOCOL_DOCSIS<br>
<br>
+Note<br>
+----<br>
+Version 3.0 of the multi-buffer library removed support for:<br>
+<br>
+* the 256 bit versions of ZUC EEA3 and ZUC EIA3 algorithms.<br>
+* non byte aligned bit length (``RTE_CRYPTODEV_FF_NON_BYTE_ALIGNED_DATA`` removed).<br>
+<br>
Limitations<br>
-----------<br>
<br>
@@ -96,8 +103,8 @@ Installation<br>
To build DPDK with the AESNI_MB_PMD the user is required to download the multi-buffer<br>
library from `here <<a href="https://github.com/01org/intel-ipsec-mb">https://github.com/01org/intel-ipsec-mb</a>>`_<br>
and compile it on their user system before building DPDK.<br>
-The latest version of the library supported by this PMD is v2.0, which<br>
-can be downloaded from `<<a href="https://github.com/01org/intel-ipsec-mb/archive/v2.0.zip">https://github.com/01org/intel-ipsec-mb/archive/v2.0.zip</a>>`_.<br>
+The latest version of the library supported by this PMD is v3.0, which<br>
+can be downloaded from `<<a href="https://github.com/01org/intel-ipsec-mb/archive/v3.0.zip">https://github.com/01org/intel-ipsec-mb/archive/v3.0.zip</a>>`_.<br>
<br>
For Arm system, ARM64 port of the multi-buffer library can be downloaded from<br>
<a href="https://gitlab.arm.com/arm-reference-solutions/ipsec-mb/-/tree/main/">https://gitlab.arm.com/arm-reference-solutions/ipsec-mb/-/tree/main/</a>.<br>
diff --git a/doc/guides/rel_notes/release_26_11.rst b/doc/guides/rel_notes/release_26_11.rst<br>
index 69ab5af8a3..ea126aa9bb 100644<br>
--- a/doc/guides/rel_notes/release_26_11.rst<br>
+++ b/doc/guides/rel_notes/release_26_11.rst<br>
@@ -33,6 +33,10 @@ New Features<br>
``pss_salt`` field in ``rte_crypto_rsa_op_param`` to carry it per<br>
sign operation.<br>
<br>
+* **Updated AESNI_MB crypto driver.**<br>
+<br>
+ * Added support for version 3.0 of IPsec MB Library.<br>
+<br>
.. This section should contain new features added in this release.<br>
Sample format:<br>
<br>
diff --git a/drivers/crypto/ipsec_mb/pmd_aesni_gcm.c b/drivers/crypto/ipsec_mb/pmd_aesni_gcm.c<br>
index 3c266cc47e..0c4358a7b1 100644<br>
--- a/drivers/crypto/ipsec_mb/pmd_aesni_gcm.c<br>
+++ b/drivers/crypto/ipsec_mb/pmd_aesni_gcm.c<br>
@@ -6,56 +6,205 @@<br>
<br>
#include "pmd_aesni_gcm_priv.h"<br>
<br>
+/* wrapper functions for library versions < 3.0.0 */<br>
+#if IMB_VERSION(3, 0, 0) > IMB_VERSION_NUM<br>
+<br>
+#define _fn(bitlen) static void imb_aes##bitlen##_gcm_pre(const void *key, \<br>
+ struct gcm_key_data *key_data, IMB_MGR *state) \<br>
+{ \<br>
+ state->gcm##bitlen##_pre(key, key_data); \<br>
+}<br>
+_fn(128)<br>
+_fn(192)<br>
+_fn(256)<br>
+#undef _fn<br>
+<br>
+#define _fn(bitlen) static void imb_aes##bitlen##_gcm_init( \<br>
+ const struct gcm_key_data *key_data, \<br>
+ struct gcm_context_data *context_data, const void *iv, \<br>
+ const void *aad, uint64_t aad_len, IMB_MGR *state) \<br>
+{ \<br>
+ state->gcm##bitlen##_init(key_data, context_data, iv, aad, aad_len); \<br>
+}<br>
+_fn(128)<br>
+_fn(192)<br>
+_fn(256)<br>
+#undef _fn<br>
+<br>
+#define _fn(bitlen) static void imb_aes##bitlen##_gcm_enc( \<br>
+ const struct gcm_key_data *key_data, \<br>
+ struct gcm_context_data *context_data, void *out, \<br>
+ const void *in, uint64_t len, const void *iv, \<br>
+ const void *aad, uint64_t aad_len, void *auth_tag, \<br>
+ uint64_t auth_tag_len, IMB_MGR *state) \<br>
+{ \<br>
+ state->gcm##bitlen##_enc(key_data, context_data, out, in, len, iv, \<br>
+ aad, aad_len, auth_tag, auth_tag_len); \<br>
+}<br>
+_fn(128)<br>
+_fn(192)<br>
+_fn(256)<br>
+#undef _fn<br>
+<br>
+#define _fn(bitlen) static void imb_aes##bitlen##_gcm_enc_update( \<br>
+ const struct gcm_key_data *key_data, \<br>
+ struct gcm_context_data *context_data, void *out, \<br>
+ const void *in, const uint64_t len, IMB_MGR *state) \<br>
+{ \<br>
+ state->gcm##bitlen##_enc_update(key_data, context_data, out, in, len); \<br>
+}<br>
+_fn(128)<br>
+_fn(192)<br>
+_fn(256)<br>
+#undef _fn<br>
+<br>
+#define _fn(bitlen) static void imb_aes##bitlen##_gcm_enc_finalize( \<br>
+ const struct gcm_key_data *key_data, \<br>
+ struct gcm_context_data *context_data, void *auth_tag, \<br>
+ const uint64_t auth_tag_len, IMB_MGR *state) \<br>
+{ \<br>
+ state->gcm##bitlen##_enc_finalize(key_data, context_data, auth_tag, \<br>
+ auth_tag_len); \<br>
+}<br>
+_fn(128)<br>
+_fn(192)<br>
+_fn(256)<br>
+#undef _fn<br>
+<br>
+#define _fn(bitlen) static void imb_aes##bitlen##_gcm_dec( \<br>
+ const struct gcm_key_data *key_data, \<br>
+ struct gcm_context_data *context_data, void *out, \<br>
+ const void *in, uint64_t len, const void *iv, \<br>
+ const void *aad, uint64_t aad_len, void *auth_tag, \<br>
+ uint64_t auth_tag_len, IMB_MGR *state) \<br>
+{ \<br>
+ state->gcm##bitlen##_dec(key_data, context_data, out, in, len, iv, \<br>
+ aad, aad_len, auth_tag, auth_tag_len); \<br>
+}<br>
+_fn(128)<br>
+_fn(192)<br>
+_fn(256)<br>
+#undef _fn<br>
+<br>
+#define _fn(bitlen) static void imb_aes##bitlen##_gcm_dec_update( \<br>
+ const struct gcm_key_data *key_data, \<br>
+ struct gcm_context_data *context_data, void *out, \<br>
+ const void *in, const uint64_t len, IMB_MGR *state) \<br>
+{ \<br>
+ state->gcm##bitlen##_dec_update(key_data, context_data, out, in, len); \<br>
+}<br>
+_fn(128)<br>
+_fn(192)<br>
+_fn(256)<br>
+#undef _fn<br>
+<br>
+#define _fn(bitlen) static void imb_aes##bitlen##_gcm_dec_finalize( \<br>
+ const struct gcm_key_data *key_data, \<br>
+ struct gcm_context_data *context_data, void *auth_tag, \<br>
+ const uint64_t auth_tag_len, IMB_MGR *state) \<br>
+{ \<br>
+ state->gcm##bitlen##_dec_finalize(key_data, context_data, auth_tag, \<br>
+ auth_tag_len); \<br>
+}<br>
+_fn(128)<br>
+_fn(192)<br>
+_fn(256)<br>
+#undef _fn<br>
+<br>
+#define _fn(bitlen) static void imb_aes##bitlen##_gmac_init( \<br>
+ const struct gcm_key_data *key_data, \<br>
+ struct gcm_context_data *context_data, const void *iv, \<br>
+ const uint64_t iv_len, IMB_MGR *state) \<br>
+{ \<br>
+ state->gmac##bitlen##_init(key_data, context_data, iv, iv_len); \<br>
+}<br>
+_fn(128)<br>
+_fn(192)<br>
+_fn(256)<br>
+#undef _fn<br>
+<br>
+#define _fn(bitlen) static void imb_aes##bitlen##_gmac_update( \<br>
+ const struct gcm_key_data *key_data, \<br>
+ struct gcm_context_data *context_data, const void *in, \<br>
+ const uint64_t len, IMB_MGR *state) \<br>
+{ \<br>
+ state->gmac##bitlen##_update(key_data, context_data, in, len); \<br>
+}<br>
+_fn(128)<br>
+_fn(192)<br>
+_fn(256)<br>
+#undef _fn<br>
+<br>
+#define _fn(bitlen) static void imb_aes##bitlen##_gmac_finalize( \<br>
+ const struct gcm_key_data *key_data, \<br>
+ struct gcm_context_data *context_data, void *auth_tag, \<br>
+ const uint64_t auth_tag_len, IMB_MGR *state) \<br>
+{ \<br>
+ state->gmac##bitlen##_finalize(key_data, context_data, auth_tag, \<br>
+ auth_tag_len); \<br>
+}<br>
+_fn(128)<br>
+_fn(192)<br>
+_fn(256)<br>
+#undef _fn<br>
+<br>
+#endif<br>
+<br>
static void<br>
aesni_gcm_set_ops(struct aesni_gcm_ops *ops, IMB_MGR *mb_mgr)<br>
{<br>
+ /* Set IMB_MGR pointers. */<br>
+ ops[GCM_KEY_128].mb_mgr = mb_mgr;<br>
+ ops[GCM_KEY_192].mb_mgr = mb_mgr;<br>
+ ops[GCM_KEY_256].mb_mgr = mb_mgr;<br>
+<br>
/* Set 128 bit function pointers. */<br>
- ops[GCM_KEY_128].pre = mb_mgr->gcm128_pre;<br>
- ops[GCM_KEY_128].init = mb_mgr->gcm128_init;<br>
+ ops[GCM_KEY_128].pre = imb_aes128_gcm_pre;<br>
+ ops[GCM_KEY_128].init = imb_aes128_gcm_init;<br>
<br>
- ops[GCM_KEY_128].enc = mb_mgr->gcm128_enc;<br>
- ops[GCM_KEY_128].update_enc = mb_mgr->gcm128_enc_update;<br>
- ops[GCM_KEY_128].finalize_enc = mb_mgr->gcm128_enc_finalize;<br>
+ ops[GCM_KEY_128].enc = imb_aes128_gcm_enc;<br>
+ ops[GCM_KEY_128].update_enc = imb_aes128_gcm_enc_update;<br>
+ ops[GCM_KEY_128].finalize_enc = imb_aes128_gcm_enc_finalize;<br>
<br>
- ops[GCM_KEY_128].dec = mb_mgr->gcm128_dec;<br>
- ops[GCM_KEY_128].update_dec = mb_mgr->gcm128_dec_update;<br>
- ops[GCM_KEY_128].finalize_dec = mb_mgr->gcm128_dec_finalize;<br>
+ ops[GCM_KEY_128].dec = imb_aes128_gcm_dec;<br>
+ ops[GCM_KEY_128].update_dec = imb_aes128_gcm_dec_update;<br>
+ ops[GCM_KEY_128].finalize_dec = imb_aes128_gcm_dec_finalize;<br>
<br>
- ops[GCM_KEY_128].gmac_init = mb_mgr->gmac128_init;<br>
- ops[GCM_KEY_128].gmac_update = mb_mgr->gmac128_update;<br>
- ops[GCM_KEY_128].gmac_finalize = mb_mgr->gmac128_finalize;<br>
+ ops[GCM_KEY_128].gmac_init = imb_aes128_gmac_init;<br>
+ ops[GCM_KEY_128].gmac_update = imb_aes128_gmac_update;<br>
+ ops[GCM_KEY_128].gmac_finalize = imb_aes128_gmac_finalize;<br>
<br>
/* Set 192 bit function pointers. */<br>
- ops[GCM_KEY_192].pre = mb_mgr->gcm192_pre;<br>
- ops[GCM_KEY_192].init = mb_mgr->gcm192_init;<br>
+ ops[GCM_KEY_192].pre = imb_aes192_gcm_pre;<br>
+ ops[GCM_KEY_192].init = imb_aes192_gcm_init;<br>
<br>
- ops[GCM_KEY_192].enc = mb_mgr->gcm192_enc;<br>
- ops[GCM_KEY_192].update_enc = mb_mgr->gcm192_enc_update;<br>
- ops[GCM_KEY_192].finalize_enc = mb_mgr->gcm192_enc_finalize;<br>
+ ops[GCM_KEY_192].enc = imb_aes192_gcm_enc;<br>
+ ops[GCM_KEY_192].update_enc = imb_aes192_gcm_enc_update;<br>
+ ops[GCM_KEY_192].finalize_enc = imb_aes192_gcm_enc_finalize;<br>
<br>
- ops[GCM_KEY_192].dec = mb_mgr->gcm192_dec;<br>
- ops[GCM_KEY_192].update_dec = mb_mgr->gcm192_dec_update;<br>
- ops[GCM_KEY_192].finalize_dec = mb_mgr->gcm192_dec_finalize;<br>
+ ops[GCM_KEY_192].dec = imb_aes192_gcm_dec;<br>
+ ops[GCM_KEY_192].update_dec = imb_aes192_gcm_dec_update;<br>
+ ops[GCM_KEY_192].finalize_dec = imb_aes192_gcm_dec_finalize;<br>
<br>
- ops[GCM_KEY_192].gmac_init = mb_mgr->gmac192_init;<br>
- ops[GCM_KEY_192].gmac_update = mb_mgr->gmac192_update;<br>
- ops[GCM_KEY_192].gmac_finalize = mb_mgr->gmac192_finalize;<br>
+ ops[GCM_KEY_192].gmac_init = imb_aes192_gmac_init;<br>
+ ops[GCM_KEY_192].gmac_update = imb_aes192_gmac_update;<br>
+ ops[GCM_KEY_192].gmac_finalize = imb_aes192_gmac_finalize;<br>
<br>
/* Set 256 bit function pointers. */<br>
- ops[GCM_KEY_256].pre = mb_mgr->gcm256_pre;<br>
- ops[GCM_KEY_256].init = mb_mgr->gcm256_init;<br>
+ ops[GCM_KEY_256].pre = imb_aes256_gcm_pre;<br>
+ ops[GCM_KEY_256].init = imb_aes256_gcm_init;<br>
<br>
- ops[GCM_KEY_256].enc = mb_mgr->gcm256_enc;<br>
- ops[GCM_KEY_256].update_enc = mb_mgr->gcm256_enc_update;<br>
- ops[GCM_KEY_256].finalize_enc = mb_mgr->gcm256_enc_finalize;<br>
+ ops[GCM_KEY_256].enc = imb_aes256_gcm_enc;<br>
+ ops[GCM_KEY_256].update_enc = imb_aes256_gcm_enc_update;<br>
+ ops[GCM_KEY_256].finalize_enc = imb_aes256_gcm_enc_finalize;<br>
<br>
- ops[GCM_KEY_256].dec = mb_mgr->gcm256_dec;<br>
- ops[GCM_KEY_256].update_dec = mb_mgr->gcm256_dec_update;<br>
- ops[GCM_KEY_256].finalize_dec = mb_mgr->gcm256_dec_finalize;<br>
+ ops[GCM_KEY_256].dec = imb_aes256_gcm_dec;<br>
+ ops[GCM_KEY_256].update_dec = imb_aes256_gcm_dec_update;<br>
+ ops[GCM_KEY_256].finalize_dec = imb_aes256_gcm_dec_finalize;<br>
<br>
- ops[GCM_KEY_256].gmac_init = mb_mgr->gmac256_init;<br>
- ops[GCM_KEY_256].gmac_update = mb_mgr->gmac256_update;<br>
- ops[GCM_KEY_256].gmac_finalize = mb_mgr->gmac256_finalize;<br>
+ ops[GCM_KEY_256].gmac_init = imb_aes256_gmac_init;<br>
+ ops[GCM_KEY_256].gmac_update = imb_aes256_gmac_update;<br>
+ ops[GCM_KEY_256].gmac_finalize = imb_aes256_gmac_finalize;<br>
}<br>
<br>
static int<br>
@@ -135,15 +284,15 @@ aesni_gcm_session_configure(IMB_MGR *mb_mgr, void *session,<br>
switch (key_length) {<br>
case 16:<br>
sess->key_length = GCM_KEY_128;<br>
- mb_mgr->gcm128_pre(key, &sess->gdata_key);<br>
+ imb_aes128_gcm_pre(key, &sess->gdata_key, mb_mgr);<br>
break;<br>
case 24:<br>
sess->key_length = GCM_KEY_192;<br>
- mb_mgr->gcm192_pre(key, &sess->gdata_key);<br>
+ imb_aes192_gcm_pre(key, &sess->gdata_key, mb_mgr);<br>
break;<br>
case 32:<br>
sess->key_length = GCM_KEY_256;<br>
- mb_mgr->gcm256_pre(key, &sess->gdata_key);<br>
+ imb_aes256_gcm_pre(key, &sess->gdata_key, mb_mgr);<br>
break;<br>
default:<br>
IPSEC_MB_LOG(ERR, "Invalid key length");<br>
@@ -324,10 +473,10 @@ process_gcm_crypto_op(struct ipsec_mb_qp *qp, struct rte_crypto_op *op,<br>
if (session->op == IPSEC_MB_OP_AEAD_AUTHENTICATED_ENCRYPT) {<br>
ops->init(&session->gdata_key, &qp_data->gcm_ctx_data, iv_ptr,<br>
sym_op->aead.aad.data,<br>
- (uint64_t)session->aad_length);<br>
+ (uint64_t)session->aad_length, ops->mb_mgr);<br>
<br>
ops->update_enc(&session->gdata_key, &qp_data->gcm_ctx_data,<br>
- dst, src, (uint64_t)part_len);<br>
+ dst, src, (uint64_t)part_len, ops->mb_mgr);<br>
total_len = data_length - part_len;<br>
<br>
while (total_len) {<br>
@@ -345,7 +494,7 @@ process_gcm_crypto_op(struct ipsec_mb_qp *qp, struct rte_crypto_op *op,<br>
<br>
ops->update_enc(&session->gdata_key,<br>
&qp_data->gcm_ctx_data,<br>
- dst, src, (uint64_t)part_len);<br>
+ dst, src, (uint64_t)part_len, ops->mb_mgr);<br>
total_len -= part_len;<br>
}<br>
<br>
@@ -355,14 +504,14 @@ process_gcm_crypto_op(struct ipsec_mb_qp *qp, struct rte_crypto_op *op,<br>
tag = sym_op->aead.digest.data;<br>
<br>
ops->finalize_enc(&session->gdata_key, &qp_data->gcm_ctx_data,<br>
- tag, session->gen_digest_length);<br>
+ tag, session->gen_digest_length, ops->mb_mgr);<br>
} else if (session->op == IPSEC_MB_OP_AEAD_AUTHENTICATED_DECRYPT) {<br>
ops->init(&session->gdata_key, &qp_data->gcm_ctx_data, iv_ptr,<br>
sym_op->aead.aad.data,<br>
- (uint64_t)session->aad_length);<br>
+ (uint64_t)session->aad_length, ops->mb_mgr);<br>
<br>
ops->update_dec(&session->gdata_key, &qp_data->gcm_ctx_data,<br>
- dst, src, (uint64_t)part_len);<br>
+ dst, src, (uint64_t)part_len, ops->mb_mgr);<br>
total_len = data_length - part_len;<br>
<br>
while (total_len) {<br>
@@ -380,19 +529,19 @@ process_gcm_crypto_op(struct ipsec_mb_qp *qp, struct rte_crypto_op *op,<br>
<br>
ops->update_dec(&session->gdata_key,<br>
&qp_data->gcm_ctx_data,<br>
- dst, src, (uint64_t)part_len);<br>
+ dst, src, (uint64_t)part_len, ops->mb_mgr);<br>
total_len -= part_len;<br>
}<br>
<br>
tag = qp_data->temp_digest;<br>
ops->finalize_dec(&session->gdata_key, &qp_data->gcm_ctx_data,<br>
- tag, session->gen_digest_length);<br>
+ tag, session->gen_digest_length, ops->mb_mgr);<br>
} else if (session->op == IPSEC_MB_OP_HASH_GEN_ONLY) {<br>
ops->gmac_init(&session->gdata_key, &qp_data->gcm_ctx_data,<br>
- iv_ptr, session->iv.length);<br>
+ iv_ptr, session->iv.length, ops->mb_mgr);<br>
<br>
ops->gmac_update(&session->gdata_key, &qp_data->gcm_ctx_data,<br>
- src, (uint64_t)part_len);<br>
+ src, (uint64_t)part_len, ops->mb_mgr);<br>
total_len = data_length - part_len;<br>
<br>
while (total_len) {<br>
@@ -406,7 +555,7 @@ process_gcm_crypto_op(struct ipsec_mb_qp *qp, struct rte_crypto_op *op,<br>
<br>
ops->gmac_update(&session->gdata_key,<br>
&qp_data->gcm_ctx_data, src,<br>
- (uint64_t)part_len);<br>
+ (uint64_t)part_len, ops->mb_mgr);<br>
total_len -= part_len;<br>
}<br>
<br>
@@ -416,13 +565,13 @@ process_gcm_crypto_op(struct ipsec_mb_qp *qp, struct rte_crypto_op *op,<br>
tag = sym_op->auth.digest.data;<br>
<br>
ops->gmac_finalize(&session->gdata_key, &qp_data->gcm_ctx_data,<br>
- tag, session->gen_digest_length);<br>
+ tag, session->gen_digest_length, ops->mb_mgr);<br>
} else { /* IPSEC_MB_OP_HASH_VERIFY_ONLY */<br>
ops->gmac_init(&session->gdata_key, &qp_data->gcm_ctx_data,<br>
- iv_ptr, session->iv.length);<br>
+ iv_ptr, session->iv.length, ops->mb_mgr);<br>
<br>
ops->gmac_update(&session->gdata_key, &qp_data->gcm_ctx_data,<br>
- src, (uint64_t)part_len);<br>
+ src, (uint64_t)part_len, ops->mb_mgr);<br>
total_len = data_length - part_len;<br>
<br>
while (total_len) {<br>
@@ -436,14 +585,14 @@ process_gcm_crypto_op(struct ipsec_mb_qp *qp, struct rte_crypto_op *op,<br>
<br>
ops->gmac_update(&session->gdata_key,<br>
&qp_data->gcm_ctx_data, src,<br>
- (uint64_t)part_len);<br>
+ (uint64_t)part_len, ops->mb_mgr);<br>
total_len -= part_len;<br>
}<br>
<br>
tag = qp_data->temp_digest;<br>
<br>
ops->gmac_finalize(&session->gdata_key, &qp_data->gcm_ctx_data,<br>
- tag, session->gen_digest_length);<br>
+ tag, session->gen_digest_length, ops->mb_mgr);<br>
}<br>
return 0;<br>
}<br>
@@ -540,11 +689,11 @@ aesni_gcm_sgl_op_finalize_encryption(const struct aesni_gcm_session *s,<br>
uint8_t tmpdigest[s->gen_digest_length];<br>
<br>
ops.finalize_enc(&s->gdata_key, gdata_ctx, tmpdigest,<br>
- s->gen_digest_length);<br>
+ s->gen_digest_length, ops.mb_mgr);<br>
memcpy(digest, tmpdigest, s->req_digest_length);<br>
} else {<br>
ops.finalize_enc(&s->gdata_key, gdata_ctx, digest,<br>
- s->gen_digest_length);<br>
+ s->gen_digest_length, ops.mb_mgr);<br>
}<br>
<br>
return 0;<br>
@@ -558,7 +707,7 @@ aesni_gcm_sgl_op_finalize_decryption(const struct aesni_gcm_session *s,<br>
uint8_t tmpdigest[s->gen_digest_length];<br>
<br>
ops.finalize_dec(&s->gdata_key, gdata_ctx, tmpdigest,<br>
- s->gen_digest_length);<br>
+ s->gen_digest_length, ops.mb_mgr);<br>
<br>
return rte_memeq_timingsafe(digest, tmpdigest, s->req_digest_length) ? 0 : EBADMSG;<br>
}<br>
@@ -573,7 +722,7 @@ aesni_gcm_process_gcm_sgl_op(const struct aesni_gcm_session *s,<br>
<br>
/* init crypto operation */<br>
ops.init(&s->gdata_key, gdata_ctx, iv, aad,<br>
- (uint64_t)s->aad_length);<br>
+ (uint64_t)s->aad_length, ops.mb_mgr);<br>
<br>
/* update with sgl data */<br>
for (i = 0; i < sgl->num; i++) {<br>
@@ -582,11 +731,11 @@ aesni_gcm_process_gcm_sgl_op(const struct aesni_gcm_session *s,<br>
switch (s->op) {<br>
case IPSEC_MB_OP_AEAD_AUTHENTICATED_ENCRYPT:<br>
ops.update_enc(&s->gdata_key, gdata_ctx,<br>
- vec->base, vec->base, vec->len);<br>
+ vec->base, vec->base, vec->len, ops.mb_mgr);<br>
break;<br>
case IPSEC_MB_OP_AEAD_AUTHENTICATED_DECRYPT:<br>
ops.update_dec(&s->gdata_key, gdata_ctx,<br>
- vec->base, vec->base, vec->len);<br>
+ vec->base, vec->base, vec->len, ops.mb_mgr);<br>
break;<br>
default:<br>
IPSEC_MB_LOG(ERR, "Invalid session op");<br>
@@ -603,7 +752,7 @@ aesni_gcm_process_gmac_sgl_op(const struct aesni_gcm_session *s,<br>
struct aesni_gcm_ops ops)<br>
{<br>
ops.init(&s->gdata_key, gdata_ctx, iv, sgl->vec[0].base,<br>
- sgl->vec[0].len);<br>
+ sgl->vec[0].len, ops.mb_mgr);<br>
}<br>
<br>
static inline uint32_t<br>
diff --git a/drivers/crypto/ipsec_mb/pmd_aesni_gcm_priv.h b/drivers/crypto/ipsec_mb/pmd_aesni_gcm_priv.h<br>
index 8a5a41fb19..4074430d6e 100644<br>
--- a/drivers/crypto/ipsec_mb/pmd_aesni_gcm_priv.h<br>
+++ b/drivers/crypto/ipsec_mb/pmd_aesni_gcm_priv.h<br>
@@ -79,41 +79,41 @@ enum aesni_gcm_key_length {<br>
<br>
typedef void (*aesni_gcm_t)(const struct gcm_key_data *gcm_key_data,<br>
struct gcm_context_data *gcm_ctx_data,<br>
- uint8_t *out, const uint8_t *in,<br>
- uint64_t plaintext_len, const uint8_t *iv,<br>
- const uint8_t *aad, uint64_t aad_len,<br>
- uint8_t *auth_tag, uint64_t auth_tag_len);<br>
+ void *out, const void *in,<br>
+ uint64_t plaintext_len, const void *iv,<br>
+ const void *aad, uint64_t aad_len,<br>
+ void *auth_tag, uint64_t auth_tag_len, IMB_MGR *state);<br>
<br>
typedef void (*aesni_gcm_pre_t)(const void *key,<br>
- struct gcm_key_data *gcm_data);<br>
+ struct gcm_key_data *gcm_data, IMB_MGR *state);<br>
<br>
typedef void (*aesni_gcm_init_t)(const struct gcm_key_data *gcm_key_data,<br>
struct gcm_context_data *gcm_ctx_data,<br>
- const uint8_t *iv, uint8_t const *aad,<br>
- uint64_t aad_len);<br>
+ const void *iv, const void *aad,<br>
+ uint64_t aad_len, IMB_MGR *state);<br>
<br>
typedef void (*aesni_gcm_update_t)(const struct gcm_key_data *gcm_key_data,<br>
struct gcm_context_data *gcm_ctx_data,<br>
- uint8_t *out, const uint8_t *in,<br>
- uint64_t plaintext_len);<br>
+ void *out, const void *in,<br>
+ uint64_t plaintext_len, IMB_MGR *state);<br>
<br>
typedef void (*aesni_gcm_finalize_t)(const struct gcm_key_data *gcm_key_data,<br>
struct gcm_context_data *gcm_ctx_data,<br>
- uint8_t *auth_tag, uint64_t auth_tag_len);<br>
+ void *auth_tag, uint64_t auth_tag_len, IMB_MGR *state);<br>
<br>
typedef void (*aesni_gmac_init_t)(const struct gcm_key_data *gcm_key_data,<br>
struct gcm_context_data *gcm_ctx_data,<br>
- const uint8_t *iv, const uint64_t iv_len);<br>
+ const void *iv, const uint64_t iv_len, IMB_MGR *state);<br>
<br>
typedef void (*aesni_gmac_update_t)(const struct gcm_key_data *gcm_key_data,<br>
struct gcm_context_data *gcm_ctx_data,<br>
- const uint8_t *in,<br>
- const uint64_t plaintext_len);<br>
+ const void *in,<br>
+ const uint64_t plaintext_len, IMB_MGR *state);<br>
<br>
typedef void (*aesni_gmac_finalize_t)(const struct gcm_key_data *gcm_key_data,<br>
struct gcm_context_data *gcm_ctx_data,<br>
- uint8_t *auth_tag,<br>
- const uint64_t auth_tag_len);<br>
+ void *auth_tag,<br>
+ const uint64_t auth_tag_len, IMB_MGR *state);<br>
<br>
/** GCM operation handlers */<br>
struct aesni_gcm_ops {<br>
@@ -128,6 +128,7 @@ struct aesni_gcm_ops {<br>
aesni_gmac_init_t gmac_init;<br>
aesni_gmac_update_t gmac_update;<br>
aesni_gmac_finalize_t gmac_finalize;<br>
+ IMB_MGR *mb_mgr;<br>
};<br>
<br>
RTE_DEFINE_PER_LCORE(struct aesni_gcm_ops, gcm_ops[GCM_NUM_KEY_TYPES]);<br>
diff --git a/drivers/crypto/ipsec_mb/pmd_aesni_mb.c b/drivers/crypto/ipsec_mb/pmd_aesni_mb.c<br>
index 02bacd020b..e8f6e77d21 100644<br>
--- a/drivers/crypto/ipsec_mb/pmd_aesni_mb.c<br>
+++ b/drivers/crypto/ipsec_mb/pmd_aesni_mb.c<br>
@@ -161,20 +161,22 @@ aesni_mb_set_session_auth_parameters(IMB_MGR *mb_mgr,<br>
<br>
if (xform->auth.algo == RTE_CRYPTO_AUTH_ZUC_EIA3) {<br>
if (xform->auth.key.length == 16) {<br>
- sess->template_job.hash_alg = IMB_AUTH_ZUC_EIA3_BITLEN;<br>
+ sess->template_job.hash_alg = IMB_AUTH_ZUC_EIA3;<br>
<br>
if (sess->auth.req_digest_len != 4) {<br>
IPSEC_MB_LOG(ERR, "Invalid digest size");<br>
return -EINVAL;<br>
}<br>
+#if IMB_VERSION(3, 0, 0) > IMB_VERSION_NUM<br>
} else if (xform->auth.key.length == 32) {<br>
- sess->template_job.hash_alg = IMB_AUTH_ZUC256_EIA3_BITLEN;<br>
+ sess->template_job.hash_alg = IMB_AUTH_ZUC256_EIA3;<br>
if (sess->auth.req_digest_len != 4 &&<br>
sess->auth.req_digest_len != 8 &&<br>
sess->auth.req_digest_len != 16) {<br>
IPSEC_MB_LOG(ERR, "Invalid digest size");<br>
return -EINVAL;<br>
}<br>
+#endif<br>
} else {<br>
IPSEC_MB_LOG(ERR, "Invalid authentication key length");<br>
return -EINVAL;<br>
@@ -187,10 +189,10 @@ aesni_mb_set_session_auth_parameters(IMB_MGR *mb_mgr,<br>
sess->template_job.u.ZUC_EIA3._key = sess->auth.zuc_auth_key;<br>
return 0;<br>
} else if (xform->auth.algo == RTE_CRYPTO_AUTH_SNOW3G_UIA2) {<br>
- sess->template_job.hash_alg = IMB_AUTH_SNOW3G_UIA2_BITLEN;<br>
+ sess->template_job.hash_alg = IMB_AUTH_SNOW3G_UIA2;<br>
uint16_t snow3g_uia2_digest_len =<br>
get_truncated_digest_byte_length(<br>
- IMB_AUTH_SNOW3G_UIA2_BITLEN);<br>
+ IMB_AUTH_SNOW3G_UIA2);<br>
if (sess->auth.req_digest_len != snow3g_uia2_digest_len) {<br>
IPSEC_MB_LOG(ERR, "Invalid digest size");<br>
return -EINVAL;<br>
@@ -339,7 +341,7 @@ aesni_mb_set_session_auth_parameters(IMB_MGR *mb_mgr,<br>
<br>
/** Set session cipher parameters */<br>
static int<br>
-aesni_mb_set_session_cipher_parameters(const IMB_MGR *mb_mgr,<br>
+aesni_mb_set_session_cipher_parameters(IMB_MGR *mb_mgr,<br>
struct aesni_mb_session *sess,<br>
const struct rte_crypto_sym_xform *xform)<br>
{<br>
@@ -407,11 +409,11 @@ aesni_mb_set_session_cipher_parameters(const IMB_MGR *mb_mgr,<br>
is_zuc = 1;<br>
break;<br>
case RTE_CRYPTO_CIPHER_SNOW3G_UEA2:<br>
- sess->template_job.cipher_mode = IMB_CIPHER_SNOW3G_UEA2_BITLEN;<br>
+ sess->template_job.cipher_mode = IMB_CIPHER_SNOW3G_UEA2;<br>
is_snow3g = 1;<br>
break;<br>
case RTE_CRYPTO_CIPHER_KASUMI_F8:<br>
- sess->template_job.cipher_mode = IMB_CIPHER_KASUMI_UEA1_BITLEN;<br>
+ sess->template_job.cipher_mode = IMB_CIPHER_KASUMI_UEA1;<br>
is_kasumi = 1;<br>
break;<br>
case RTE_CRYPTO_CIPHER_NULL:<br>
@@ -536,8 +538,11 @@ aesni_mb_set_session_cipher_parameters(const IMB_MGR *mb_mgr,<br>
sess->template_job.dec_keys = sess->cipher.exp_3des_keys.ks_ptr;<br>
sess->template_job.key_len_in_bytes = 24;<br>
} else if (is_zuc) {<br>
- if (xform->cipher.key.length != 16 &&<br>
- xform->cipher.key.length != 32) {<br>
+ if (xform->cipher.key.length != 16<br>
+#if IMB_VERSION(3, 0, 0) > IMB_VERSION_NUM<br>
+ && xform->cipher.key.length != 32<br>
+#endif<br>
+ ) {<br>
IPSEC_MB_LOG(ERR, "Invalid cipher key length");<br>
return -EINVAL;<br>
}<br>
@@ -1177,19 +1182,23 @@ sgl_linear_cipher_auth_len(IMB_JOB *job, uint64_t *auth_len)<br>
{<br>
uint64_t cipher_len;<br>
<br>
- if (job->cipher_mode == IMB_CIPHER_SNOW3G_UEA2_BITLEN ||<br>
- job->cipher_mode == IMB_CIPHER_KASUMI_UEA1_BITLEN)<br>
+#if IMB_VERSION(3, 0, 0) > IMB_VERSION_NUM<br>
+ if (job->cipher_mode == IMB_CIPHER_SNOW3G_UEA2 ||<br>
+ job->cipher_mode == IMB_CIPHER_KASUMI_UEA1)<br>
cipher_len = (job->msg_len_to_cipher_in_bits >> 3) +<br>
(job->cipher_start_src_offset_in_bits >> 3);<br>
else<br>
+#endif<br>
cipher_len = job->msg_len_to_cipher_in_bytes +<br>
job->cipher_start_src_offset_in_bytes;<br>
<br>
- if (job->hash_alg == IMB_AUTH_SNOW3G_UIA2_BITLEN ||<br>
- job->hash_alg == IMB_AUTH_ZUC_EIA3_BITLEN)<br>
+#if IMB_VERSION(3, 0, 0) > IMB_VERSION_NUM<br>
+ if (job->hash_alg == IMB_AUTH_SNOW3G_UIA2 ||<br>
+ job->hash_alg == IMB_AUTH_ZUC_EIA3)<br>
*auth_len = (job->msg_len_to_hash_in_bits >> 3) +<br>
job->hash_start_src_offset_in_bytes;<br>
else<br>
+#endif<br>
*auth_len = job->msg_len_to_hash_in_bytes +<br>
job->hash_start_src_offset_in_bytes;<br>
<br>
@@ -1457,18 +1466,20 @@ aesni_mb_digest_appended_in_src(struct rte_crypto_op *op, IMB_JOB *job,<br>
return NULL;<br>
<br>
if (job->cipher_mode == IMB_CIPHER_ZUC_EEA3 ||<br>
- job->cipher_mode == IMB_CIPHER_SNOW3G_UEA2_BITLEN ||<br>
- job->cipher_mode == IMB_CIPHER_KASUMI_UEA1_BITLEN) {<br>
+ job->cipher_mode == IMB_CIPHER_SNOW3G_UEA2 ||<br>
+ job->cipher_mode == IMB_CIPHER_KASUMI_UEA1) {<br>
cipher_size = (op->sym->cipher.data.offset >> 3) +<br>
(op->sym->cipher.data.length >> 3);<br>
} else {<br>
cipher_size = (op->sym->cipher.data.offset) +<br>
(op->sym->cipher.data.length);<br>
}<br>
- if (job->hash_alg == IMB_AUTH_ZUC_EIA3_BITLEN ||<br>
- job->hash_alg == IMB_AUTH_SNOW3G_UIA2_BITLEN ||<br>
- job->hash_alg == IMB_AUTH_KASUMI_UIA1 ||<br>
- job->hash_alg == IMB_AUTH_ZUC256_EIA3_BITLEN) {<br>
+ if (job->hash_alg == IMB_AUTH_ZUC_EIA3 ||<br>
+ job->hash_alg == IMB_AUTH_SNOW3G_UIA2 ||<br>
+#if IMB_VERSION(3, 0, 0) > IMB_VERSION_NUM<br>
+ job->hash_alg == IMB_AUTH_ZUC256_EIA3 ||<br>
+#endif<br>
+ job->hash_alg == IMB_AUTH_KASUMI_UIA1) {<br>
auth_size = (op->sym->auth.data.offset >> 3) +<br>
(op->sym->auth.data.length >> 3);<br>
} else {<br>
@@ -1585,12 +1596,14 @@ set_mb_job_params(IMB_JOB *job, struct ipsec_mb_qp *qp,<br>
job->u.GMAC._iv = rte_crypto_op_ctod_offset(op, uint8_t *,<br>
session->auth_iv.offset);<br>
break;<br>
- case IMB_AUTH_ZUC_EIA3_BITLEN:<br>
- case IMB_AUTH_ZUC256_EIA3_BITLEN:<br>
+ case IMB_AUTH_ZUC_EIA3:<br>
+#if IMB_VERSION(3, 0, 0) > IMB_VERSION_NUM<br>
+ case IMB_AUTH_ZUC256_EIA3:<br>
+#endif<br>
job->u.ZUC_EIA3._iv = rte_crypto_op_ctod_offset(op, uint8_t *,<br>
session->auth_iv.offset);<br>
break;<br>
- case IMB_AUTH_SNOW3G_UIA2_BITLEN:<br>
+ case IMB_AUTH_SNOW3G_UIA2:<br>
job->u.SNOW3G_UIA2._iv =<br>
rte_crypto_op_ctod_offset(op, uint8_t *,<br>
session->auth_iv.offset);<br>
@@ -1616,12 +1629,19 @@ set_mb_job_params(IMB_JOB *job, struct ipsec_mb_qp *qp,<br>
else<br>
m_offset = op->sym->cipher.data.offset;<br>
<br>
+#if IMB_VERSION(3, 0, 0) > IMB_VERSION_NUM<br>
if (cipher_mode == IMB_CIPHER_ZUC_EEA3)<br>
m_offset >>= 3;<br>
- else if (cipher_mode == IMB_CIPHER_SNOW3G_UEA2_BITLEN)<br>
+ else if (cipher_mode == IMB_CIPHER_SNOW3G_UEA2)<br>
m_offset = 0;<br>
- else if (cipher_mode == IMB_CIPHER_KASUMI_UEA1_BITLEN)<br>
+ else if (cipher_mode == IMB_CIPHER_KASUMI_UEA1)<br>
m_offset = 0;<br>
+#else<br>
+ if (cipher_mode == IMB_CIPHER_ZUC_EEA3 ||<br>
+ cipher_mode == IMB_CIPHER_SNOW3G_UEA2 ||<br>
+ cipher_mode == IMB_CIPHER_KASUMI_UEA1)<br>
+ m_offset >>= 3;<br>
+#endif<br>
<br>
/* Set digest output location */<br>
if (job->hash_alg != IMB_AUTH_NULL &&<br>
@@ -1701,9 +1721,11 @@ set_mb_job_params(IMB_JOB *job, struct ipsec_mb_qp *qp,<br>
session->iv.offset);<br>
break;<br>
/* ZUC and SNOW3G require length in bits and offset in bytes */<br>
- case IMB_AUTH_ZUC_EIA3_BITLEN:<br>
- case IMB_AUTH_ZUC256_EIA3_BITLEN:<br>
- case IMB_AUTH_SNOW3G_UIA2_BITLEN:<br>
+ case IMB_AUTH_ZUC_EIA3:<br>
+#if IMB_VERSION(3, 0, 0) > IMB_VERSION_NUM<br>
+ case IMB_AUTH_ZUC256_EIA3:<br>
+#endif<br>
+ case IMB_AUTH_SNOW3G_UIA2:<br>
auth_off_in_bytes = op->sym->auth.data.offset >> 3;<br>
ciph_off_in_bytes = op->sym->cipher.data.offset >> 3;<br>
auth_len_in_bytes = op->sym->auth.data.length >> 3;<br>
@@ -1714,7 +1736,11 @@ set_mb_job_params(IMB_JOB *job, struct ipsec_mb_qp *qp,<br>
session, oop, auth_off_in_bytes,<br>
ciph_off_in_bytes, auth_len_in_bytes,<br>
ciph_len_in_bytes, lb_sgl);<br>
+#if IMB_VERSION(3, 0, 0) > IMB_VERSION_NUM<br>
job->msg_len_to_hash_in_bits = op->sym->auth.data.length;<br>
+#else<br>
+ job->msg_len_to_hash_in_bytes = op->sym->auth.data.length >> 3;<br>
+#endif<br>
<br>
job->iv = rte_crypto_op_ctod_offset(op, uint8_t *,<br>
session->iv.offset);<br>
@@ -1772,12 +1798,19 @@ set_mb_job_params(IMB_JOB *job, struct ipsec_mb_qp *qp,<br>
op->sym->cipher.data.length >> 3;<br>
break;<br>
/* ZUC and SNOW3G require length and offset in bits */<br>
- case IMB_CIPHER_SNOW3G_UEA2_BITLEN:<br>
- case IMB_CIPHER_KASUMI_UEA1_BITLEN:<br>
+ case IMB_CIPHER_SNOW3G_UEA2:<br>
+ case IMB_CIPHER_KASUMI_UEA1:<br>
+#if IMB_VERSION(3, 0, 0) > IMB_VERSION_NUM<br>
job->cipher_start_src_offset_in_bits =<br>
op->sym->cipher.data.offset;<br>
job->msg_len_to_cipher_in_bits =<br>
op->sym->cipher.data.length;<br>
+#else<br>
+ job->cipher_start_src_offset_in_bytes =<br>
+ op->sym->cipher.data.offset >> 3;<br>
+ job->msg_len_to_cipher_in_bytes =<br>
+ op->sym->cipher.data.length >> 3;<br>
+#endif<br>
break;<br>
case IMB_CIPHER_GCM:<br>
job->cipher_start_src_offset_in_bytes =<br>
@@ -2047,8 +2080,8 @@ post_process_mb_job(struct ipsec_mb_qp *qp, IMB_JOB *job)<br>
aesni_mb_digest_appended_in_src(op, job, oop) != NULL) {<br>
unsigned int auth_size, cipher_size;<br>
int unencrypted_bytes = 0;<br>
- if (job->cipher_mode == IMB_CIPHER_SNOW3G_UEA2_BITLEN ||<br>
- job->cipher_mode == IMB_CIPHER_KASUMI_UEA1_BITLEN ||<br>
+ if (job->cipher_mode == IMB_CIPHER_SNOW3G_UEA2 ||<br>
+ job->cipher_mode == IMB_CIPHER_KASUMI_UEA1 ||<br>
job->cipher_mode == IMB_CIPHER_ZUC_EEA3) {<br>
cipher_size = (op->sym->cipher.data.offset >> 3) +<br>
(op->sym->cipher.data.length >> 3);<br>
@@ -2056,10 +2089,12 @@ post_process_mb_job(struct ipsec_mb_qp *qp, IMB_JOB *job)<br>
cipher_size = (op->sym->cipher.data.offset) +<br>
(op->sym->cipher.data.length);<br>
}<br>
- if (job->hash_alg == IMB_AUTH_ZUC_EIA3_BITLEN ||<br>
- job->hash_alg == IMB_AUTH_SNOW3G_UIA2_BITLEN ||<br>
- job->hash_alg == IMB_AUTH_KASUMI_UIA1 ||<br>
- job->hash_alg == IMB_AUTH_ZUC256_EIA3_BITLEN) {<br>
+ if (job->hash_alg == IMB_AUTH_ZUC_EIA3 ||<br>
+ job->hash_alg == IMB_AUTH_SNOW3G_UIA2 ||<br>
+#if IMB_VERSION(3, 0, 0) > IMB_VERSION_NUM<br>
+ job->hash_alg == IMB_AUTH_ZUC256_EIA3 ||<br>
+#endif<br>
+ job->hash_alg == IMB_AUTH_KASUMI_UIA1) {<br>
auth_size = (op->sym->auth.data.offset >> 3) +<br>
(op->sym->auth.data.length >> 3);<br>
} else {<br>
@@ -2550,7 +2585,9 @@ RTE_INIT(ipsec_mb_register_aesni_mb)<br>
RTE_CRYPTODEV_FF_SYM_OPERATION_CHAINING |<br>
RTE_CRYPTODEV_FF_OOP_LB_IN_LB_OUT |<br>
RTE_CRYPTODEV_FF_SYM_CPU_CRYPTO |<br>
+#if IMB_VERSION(3, 0, 0) > IMB_VERSION_NUM<br>
RTE_CRYPTODEV_FF_NON_BYTE_ALIGNED_DATA |<br>
+#endif<br>
RTE_CRYPTODEV_FF_SYM_SESSIONLESS |<br>
RTE_CRYPTODEV_FF_IN_PLACE_SGL |<br>
RTE_CRYPTODEV_FF_OOP_SGL_IN_SGL_OUT |<br>
diff --git a/drivers/crypto/ipsec_mb/pmd_aesni_mb_priv.h b/drivers/crypto/ipsec_mb/pmd_aesni_mb_priv.h<br>
index ad38a1e28a..6afda45414 100644<br>
--- a/drivers/crypto/ipsec_mb/pmd_aesni_mb_priv.h<br>
+++ b/drivers/crypto/ipsec_mb/pmd_aesni_mb_priv.h<br>
@@ -19,6 +19,15 @@<br>
<br>
#define MAX_NUM_SEGS 16<br>
<br>
+/* bit len removed in 3.0 */<br>
+#if IMB_VERSION(3, 0, 0) > IMB_VERSION_NUM<br>
+#define IMB_CIPHER_SNOW3G_UEA2 IMB_CIPHER_SNOW3G_UEA2_BITLEN<br>
+#define IMB_CIPHER_KASUMI_UEA1 IMB_CIPHER_KASUMI_UEA1_BITLEN<br>
+#define IMB_AUTH_ZUC_EIA3 IMB_AUTH_ZUC_EIA3_BITLEN<br>
+#define IMB_AUTH_SNOW3G_UIA2 IMB_AUTH_SNOW3G_UIA2_BITLEN<br>
+#define IMB_AUTH_ZUC256_EIA3 IMB_AUTH_ZUC256_EIA3_BITLEN<br>
+#endif<br>
+<br>
int<br>
aesni_mb_session_configure(IMB_MGR * m __rte_unused, void *priv_sess,<br>
const struct rte_crypto_sym_xform *xform);<br>
@@ -573,8 +582,13 @@ static const struct rte_cryptodev_capabilities aesni_mb_capabilities[] = {<br>
.block_size = 16,<br>
.key_size = {<br>
.min = 16,<br>
+#if IMB_VERSION(3, 0, 0) > IMB_VERSION_NUM<br>
.max = 32,<br>
.increment = 16<br>
+#else<br>
+ .max = 16,<br>
+ .increment = 0<br>
+#endif<br>
},<br>
.digest_size = {<br>
.min = 4,<br>
@@ -583,8 +597,13 @@ static const struct rte_cryptodev_capabilities aesni_mb_capabilities[] = {<br>
},<br>
.iv_size = {<br>
.min = 16,<br>
+#if IMB_VERSION(3, 0, 0) > IMB_VERSION_NUM<br>
.max = 25,<br>
.increment = 9<br>
+#else<br>
+ .max = 16,<br>
+ .increment = 0<br>
+#endif<br>
}<br>
}, }<br>
}, }<br>
@@ -598,13 +617,23 @@ static const struct rte_cryptodev_capabilities aesni_mb_capabilities[] = {<br>
.block_size = 16,<br>
.key_size = {<br>
.min = 16,<br>
+#if IMB_VERSION(3, 0, 0) > IMB_VERSION_NUM<br>
.max = 32,<br>
.increment = 16<br>
+#else<br>
+ .max = 16,<br>
+ .increment = 0<br>
+#endif<br>
},<br>
.iv_size = {<br>
.min = 16,<br>
+#if IMB_VERSION(3, 0, 0) > IMB_VERSION_NUM<br>
.max = 25,<br>
.increment = 9<br>
+#else<br>
+ .max = 16,<br>
+ .increment = 0<br>
+#endif<br>
},<br>
}, }<br>
}, }<br>
@@ -888,9 +917,9 @@ static const unsigned int auth_blocksize[] = {<br>
[IMB_AUTH_SHA_256] = 64,<br>
[IMB_AUTH_SHA_384] = 128,<br>
[IMB_AUTH_SHA_512] = 128,<br>
- [IMB_AUTH_ZUC_EIA3_BITLEN] = 16,<br>
- [IMB_AUTH_SNOW3G_UIA2_BITLEN] = 16,<br>
- [IMB_AUTH_KASUMI_UIA1] = 16<br>
+ [IMB_AUTH_ZUC_EIA3] = 16,<br>
+ [IMB_AUTH_SNOW3G_UIA2] = 16,<br>
+ [IMB_AUTH_KASUMI_UIA1] = 16<br>
};<br>
<br>
/**<br>
@@ -922,9 +951,9 @@ static const unsigned int auth_truncated_digest_byte_lengths[] = {<br>
[IMB_AUTH_SHA_256] = 32,<br>
[IMB_AUTH_SHA_384] = 48,<br>
[IMB_AUTH_SHA_512] = 64,<br>
- [IMB_AUTH_ZUC_EIA3_BITLEN] = 4,<br>
- [IMB_AUTH_SNOW3G_UIA2_BITLEN] = 4,<br>
- [IMB_AUTH_KASUMI_UIA1] = 4<br>
+ [IMB_AUTH_ZUC_EIA3] = 4,<br>
+ [IMB_AUTH_SNOW3G_UIA2] = 4,<br>
+ [IMB_AUTH_KASUMI_UIA1] = 4<br>
};<br>
<br>
/**<br>
@@ -957,9 +986,9 @@ static const unsigned int auth_digest_byte_lengths[] = {<br>
[IMB_AUTH_SHA_256] = 32,<br>
[IMB_AUTH_SHA_384] = 48,<br>
[IMB_AUTH_SHA_512] = 64,<br>
- [IMB_AUTH_ZUC_EIA3_BITLEN] = 4,<br>
- [IMB_AUTH_SNOW3G_UIA2_BITLEN] = 4,<br>
- [IMB_AUTH_KASUMI_UIA1] = 4,<br>
+ [IMB_AUTH_ZUC_EIA3] = 4,<br>
+ [IMB_AUTH_SNOW3G_UIA2] = 4,<br>
+ [IMB_AUTH_KASUMI_UIA1] = 4,<br>
[IMB_AUTH_SM3] = 32,<br>
[IMB_AUTH_HMAC_SM3] = 32,<br>
/**< Vector mode dependent pointer table of the multi-buffer APIs */<br>
-- <br>
2.52.0<br>
<br>
</div>
</span></font></div>
</body>
</html>