<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>