get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/126393/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 126393,
    "url": "http://patches.dpdk.org/api/patches/126393/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20230421131221.1732314-6-ciara.power@intel.com/",
    "project": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20230421131221.1732314-6-ciara.power@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20230421131221.1732314-6-ciara.power@intel.com",
    "date": "2023-04-21T13:12:17",
    "name": "[5/8] crypto/ipsec_mb: store template job",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "5e0363866450018e54a6db8dd3ab1df65b278d73",
    "submitter": {
        "id": 978,
        "url": "http://patches.dpdk.org/api/people/978/?format=api",
        "name": "Power, Ciara",
        "email": "ciara.power@intel.com"
    },
    "delegate": {
        "id": 6690,
        "url": "http://patches.dpdk.org/api/users/6690/?format=api",
        "username": "akhil",
        "first_name": "akhil",
        "last_name": "goyal",
        "email": "gakhil@marvell.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20230421131221.1732314-6-ciara.power@intel.com/mbox/",
    "series": [
        {
            "id": 27817,
            "url": "http://patches.dpdk.org/api/series/27817/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=27817",
            "date": "2023-04-21T13:12:12",
            "name": "add AESNI_MB optimisations",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/27817/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/126393/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/126393/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 2D3FD429AD;\n\tFri, 21 Apr 2023 15:13:06 +0200 (CEST)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 1A2D642D38;\n\tFri, 21 Apr 2023 15:12:39 +0200 (CEST)",
            "from mga06.intel.com (mga06b.intel.com [134.134.136.31])\n by mails.dpdk.org (Postfix) with ESMTP id E336E42D17\n for <dev@dpdk.org>; Fri, 21 Apr 2023 15:12:36 +0200 (CEST)",
            "from orsmga001.jf.intel.com ([10.7.209.18])\n by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 21 Apr 2023 06:12:36 -0700",
            "from silpixa00400355.ir.intel.com (HELO\n silpixa00400355.ger.corp.intel.com) ([10.237.222.80])\n by orsmga001.jf.intel.com with ESMTP; 21 Apr 2023 06:12:34 -0700"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple;\n d=intel.com; i=@intel.com; q=dns/txt; s=Intel;\n t=1682082757; x=1713618757;\n h=from:to:cc:subject:date:message-id:in-reply-to:\n references:mime-version:content-transfer-encoding;\n bh=dnlJ/8S4kkwz/pPb4P9ZiCU5kpo8YWkKOLdTGVf1Hd4=;\n b=UJ7yYpKXa3C1DqVAB9BHofsTfclfjkmy2hYehgzVQO/faVIUcCstkEfE\n g+ylKvR5ke6DUm9/xC/QoKxJU5e2jmbdj1ziODv6tpQWP31H+2kFQGyM4\n UWNaK8k+PxGywvNRzc9GSPc/tqkEvs1W7tIAs0BTi/WfMjX0FPMyeGxqQ\n niX0v8kyYoBr0a+i8LtbEAXFqtOc7s45egNtGEbgHhaa0IpNsF8mz9xA8\n iTZZtWF6DvNCeVGJ8ZePY47LNsT4t9306rx0TqsSyWCy/47FhnBdHQh9C\n 7rMbyU6e5TOyOnHMHD/DsF00k0DoPsA2hZ8X5yAU8cExAbIv/uG5oXBsJ A==;",
        "X-IronPort-AV": [
            "E=McAfee;i=\"6600,9927,10686\"; a=\"408927717\"",
            "E=Sophos;i=\"5.99,214,1677571200\"; d=\"scan'208\";a=\"408927717\"",
            "E=McAfee;i=\"6600,9927,10686\"; a=\"724817378\"",
            "E=Sophos;i=\"5.99,214,1677571200\"; d=\"scan'208\";a=\"724817378\""
        ],
        "X-ExtLoop1": "1",
        "From": "Ciara Power <ciara.power@intel.com>",
        "To": "dev@dpdk.org",
        "Cc": "kai.ji@intel.com, Pablo de Lara <pablo.de.lara.guarch@intel.com>,\n Ciara Power <ciara.power@intel.com>",
        "Subject": "[PATCH 5/8] crypto/ipsec_mb: store template job",
        "Date": "Fri, 21 Apr 2023 13:12:17 +0000",
        "Message-Id": "<20230421131221.1732314-6-ciara.power@intel.com>",
        "X-Mailer": "git-send-email 2.25.1",
        "In-Reply-To": "<20230421131221.1732314-1-ciara.power@intel.com>",
        "References": "<20230421131221.1732314-1-ciara.power@intel.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org"
    },
    "content": "From: Pablo de Lara <pablo.de.lara.guarch@intel.com>\n\nStore template IMB_JOB in session that\nwill have filled all session-related fields.\nThese fields include cipher direction, chain order, cipher mode,\nhash algorithm, key length, IV lengths, AAD length, digest length,\nand key pointers.\n\nSigned-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>\nSigned-off-by: Ciara Power <ciara.power@intel.com>\n---\n drivers/crypto/ipsec_mb/pmd_aesni_mb.c      | 403 ++++++++------------\n drivers/crypto/ipsec_mb/pmd_aesni_mb_priv.h |  20 +-\n 2 files changed, 159 insertions(+), 264 deletions(-)",
    "diff": "diff --git a/drivers/crypto/ipsec_mb/pmd_aesni_mb.c b/drivers/crypto/ipsec_mb/pmd_aesni_mb.c\nindex 3ebbade8ca..8ccdd2ad2e 100644\n--- a/drivers/crypto/ipsec_mb/pmd_aesni_mb.c\n+++ b/drivers/crypto/ipsec_mb/pmd_aesni_mb.c\n@@ -76,7 +76,7 @@ aesni_mb_set_session_auth_parameters(const IMB_MGR *mb_mgr,\n \tuint32_t auth_precompute = 1;\n \n \tif (xform == NULL) {\n-\t\tsess->auth.algo = IMB_AUTH_NULL;\n+\t\tsess->template_job.hash_alg = IMB_AUTH_NULL;\n \t\treturn 0;\n \t}\n \n@@ -87,7 +87,6 @@ aesni_mb_set_session_auth_parameters(const IMB_MGR *mb_mgr,\n \n \t/* Set IV parameters */\n \tsess->auth_iv.offset = xform->auth.iv.offset;\n-\tsess->auth_iv.length = xform->auth.iv.length;\n \n \t/* Set the request digest size */\n \tsess->auth.req_digest_len = xform->auth.digest_length;\n@@ -97,13 +96,13 @@ aesni_mb_set_session_auth_parameters(const IMB_MGR *mb_mgr,\n \n \t/* Set Authentication Parameters */\n \tif (xform->auth.algo == RTE_CRYPTO_AUTH_NULL) {\n-\t\tsess->auth.algo = IMB_AUTH_NULL;\n-\t\tsess->auth.gen_digest_len = 0;\n+\t\tsess->template_job.hash_alg = IMB_AUTH_NULL;\n+\t\tsess->template_job.auth_tag_output_len_in_bytes = 0;\n \t\treturn 0;\n \t}\n \n \tif (xform->auth.algo == RTE_CRYPTO_AUTH_AES_XCBC_MAC) {\n-\t\tsess->auth.algo = IMB_AUTH_AES_XCBC;\n+\t\tsess->template_job.hash_alg = IMB_AUTH_AES_XCBC;\n \n \t\tuint16_t xcbc_mac_digest_len =\n \t\t\tget_truncated_digest_byte_length(IMB_AUTH_AES_XCBC);\n@@ -111,18 +110,21 @@ aesni_mb_set_session_auth_parameters(const IMB_MGR *mb_mgr,\n \t\t\tIPSEC_MB_LOG(ERR, \"Invalid digest size\\n\");\n \t\t\treturn -EINVAL;\n \t\t}\n-\t\tsess->auth.gen_digest_len = sess->auth.req_digest_len;\n+\t\tsess->template_job.auth_tag_output_len_in_bytes = sess->auth.req_digest_len;\n \n \t\tIMB_AES_XCBC_KEYEXP(mb_mgr, xform->auth.key.data,\n \t\t\t\tsess->auth.xcbc.k1_expanded,\n \t\t\t\tsess->auth.xcbc.k2, sess->auth.xcbc.k3);\n+\t\tsess->template_job.u.XCBC._k1_expanded = sess->auth.xcbc.k1_expanded;\n+\t\tsess->template_job.u.XCBC._k2 = sess->auth.xcbc.k2;\n+\t\tsess->template_job.u.XCBC._k3 = sess->auth.xcbc.k3;\n \t\treturn 0;\n \t}\n \n \tif (xform->auth.algo == RTE_CRYPTO_AUTH_AES_CMAC) {\n \t\tuint32_t dust[4*15];\n \n-\t\tsess->auth.algo = IMB_AUTH_AES_CMAC;\n+\t\tsess->template_job.hash_alg = IMB_AUTH_AES_CMAC;\n \n \t\tuint16_t cmac_digest_len =\n \t\t\t\tget_digest_byte_length(IMB_AUTH_AES_CMAC);\n@@ -140,70 +142,74 @@ aesni_mb_set_session_auth_parameters(const IMB_MGR *mb_mgr,\n \t\t * the requested number of bytes.\n \t\t */\n \t\tif (sess->auth.req_digest_len < 4)\n-\t\t\tsess->auth.gen_digest_len = cmac_digest_len;\n+\t\t\tsess->template_job.auth_tag_output_len_in_bytes = cmac_digest_len;\n \t\telse\n-\t\t\tsess->auth.gen_digest_len = sess->auth.req_digest_len;\n+\t\t\tsess->template_job.auth_tag_output_len_in_bytes = sess->auth.req_digest_len;\n \n \t\tIMB_AES_KEYEXP_128(mb_mgr, xform->auth.key.data,\n \t\t\t\tsess->auth.cmac.expkey, dust);\n \t\tIMB_AES_CMAC_SUBKEY_GEN_128(mb_mgr, sess->auth.cmac.expkey,\n \t\t\t\tsess->auth.cmac.skey1, sess->auth.cmac.skey2);\n+\t\tsess->template_job.u.CMAC._key_expanded = sess->auth.cmac.expkey;\n+\t\tsess->template_job.u.CMAC._skey1 = sess->auth.cmac.skey1;\n+\t\tsess->template_job.u.CMAC._skey2 = sess->auth.cmac.skey2;\n \t\treturn 0;\n \t}\n \n \tif (xform->auth.algo == RTE_CRYPTO_AUTH_AES_GMAC) {\n \t\tif (xform->auth.op == RTE_CRYPTO_AUTH_OP_GENERATE) {\n-\t\t\tsess->cipher.direction = IMB_DIR_ENCRYPT;\n-\t\t\tsess->chain_order = IMB_ORDER_CIPHER_HASH;\n+\t\t\tsess->template_job.cipher_direction = IMB_DIR_ENCRYPT;\n+\t\t\tsess->template_job.chain_order = IMB_ORDER_CIPHER_HASH;\n \t\t} else\n-\t\t\tsess->cipher.direction = IMB_DIR_DECRYPT;\n+\t\t\tsess->template_job.cipher_direction = IMB_DIR_DECRYPT;\n \n \t\tif (sess->auth.req_digest_len >\n \t\t\tget_digest_byte_length(IMB_AUTH_AES_GMAC)) {\n \t\t\tIPSEC_MB_LOG(ERR, \"Invalid digest size\\n\");\n \t\t\treturn -EINVAL;\n \t\t}\n-\t\tsess->auth.gen_digest_len = sess->auth.req_digest_len;\n-\t\tsess->iv.length = xform->auth.iv.length;\n+\t\tsess->template_job.auth_tag_output_len_in_bytes = sess->auth.req_digest_len;\n+\t\tsess->template_job.u.GMAC.iv_len_in_bytes = xform->auth.iv.length;\n \t\tsess->iv.offset = xform->auth.iv.offset;\n \n \t\tswitch (xform->auth.key.length) {\n \t\tcase IMB_KEY_128_BYTES:\n-\t\t\tsess->auth.algo = IMB_AUTH_AES_GMAC_128;\n+\t\t\tsess->template_job.hash_alg = IMB_AUTH_AES_GMAC_128;\n \t\t\tIMB_AES128_GCM_PRE(mb_mgr, xform->auth.key.data,\n \t\t\t\t&sess->cipher.gcm_key);\n-\t\t\tsess->cipher.key_length_in_bytes = IMB_KEY_128_BYTES;\n+\t\t\tsess->template_job.key_len_in_bytes = IMB_KEY_128_BYTES;\n \t\t\tbreak;\n \t\tcase IMB_KEY_192_BYTES:\n-\t\t\tsess->auth.algo = IMB_AUTH_AES_GMAC_192;\n+\t\t\tsess->template_job.hash_alg = IMB_AUTH_AES_GMAC_192;\n \t\t\tIMB_AES192_GCM_PRE(mb_mgr, xform->auth.key.data,\n \t\t\t\t&sess->cipher.gcm_key);\n-\t\t\tsess->cipher.key_length_in_bytes = IMB_KEY_192_BYTES;\n+\t\t\tsess->template_job.key_len_in_bytes = IMB_KEY_192_BYTES;\n \t\t\tbreak;\n \t\tcase IMB_KEY_256_BYTES:\n-\t\t\tsess->auth.algo = IMB_AUTH_AES_GMAC_256;\n+\t\t\tsess->template_job.hash_alg = IMB_AUTH_AES_GMAC_256;\n \t\t\tIMB_AES256_GCM_PRE(mb_mgr, xform->auth.key.data,\n \t\t\t\t&sess->cipher.gcm_key);\n-\t\t\tsess->cipher.key_length_in_bytes = IMB_KEY_256_BYTES;\n+\t\t\tsess->template_job.key_len_in_bytes = IMB_KEY_256_BYTES;\n \t\t\tbreak;\n \t\tdefault:\n \t\t\tIPSEC_MB_LOG(ERR, \"Invalid authentication key length\\n\");\n \t\t\treturn -EINVAL;\n \t\t}\n+\t\tsess->template_job.u.GMAC._key = &sess->cipher.gcm_key;\n \n \t\treturn 0;\n \t}\n \n \tif (xform->auth.algo == RTE_CRYPTO_AUTH_ZUC_EIA3) {\n \t\tif (xform->auth.key.length == 16) {\n-\t\t\tsess->auth.algo = IMB_AUTH_ZUC_EIA3_BITLEN;\n+\t\t\tsess->template_job.hash_alg = IMB_AUTH_ZUC_EIA3_BITLEN;\n \n \t\t\tif (sess->auth.req_digest_len != 4) {\n \t\t\t\tIPSEC_MB_LOG(ERR, \"Invalid digest size\\n\");\n \t\t\t\treturn -EINVAL;\n \t\t\t}\n \t\t} else if (xform->auth.key.length == 32) {\n-\t\t\tsess->auth.algo = IMB_AUTH_ZUC256_EIA3_BITLEN;\n+\t\t\tsess->template_job.hash_alg = IMB_AUTH_ZUC256_EIA3_BITLEN;\n #if IMB_VERSION(1, 2, 0) < IMB_VERSION_NUM\n \t\t\tif (sess->auth.req_digest_len != 4 &&\n \t\t\t\t\tsess->auth.req_digest_len != 8 &&\n@@ -219,13 +225,14 @@ aesni_mb_set_session_auth_parameters(const IMB_MGR *mb_mgr,\n \t\t\treturn -EINVAL;\n \t\t}\n \n-\t\tsess->auth.gen_digest_len = sess->auth.req_digest_len;\n+\t\tsess->template_job.auth_tag_output_len_in_bytes = sess->auth.req_digest_len;\n \n \t\tmemcpy(sess->auth.zuc_auth_key, xform->auth.key.data,\n \t\t\txform->auth.key.length);\n+\t\tsess->template_job.u.ZUC_EIA3._key = sess->auth.zuc_auth_key;\n \t\treturn 0;\n \t} else if (xform->auth.algo == RTE_CRYPTO_AUTH_SNOW3G_UIA2) {\n-\t\tsess->auth.algo = IMB_AUTH_SNOW3G_UIA2_BITLEN;\n+\t\tsess->template_job.hash_alg = IMB_AUTH_SNOW3G_UIA2_BITLEN;\n \t\tuint16_t snow3g_uia2_digest_len =\n \t\t\tget_truncated_digest_byte_length(\n \t\t\t\t\t\tIMB_AUTH_SNOW3G_UIA2_BITLEN);\n@@ -233,33 +240,37 @@ aesni_mb_set_session_auth_parameters(const IMB_MGR *mb_mgr,\n \t\t\tIPSEC_MB_LOG(ERR, \"Invalid digest size\\n\");\n \t\t\treturn -EINVAL;\n \t\t}\n-\t\tsess->auth.gen_digest_len = sess->auth.req_digest_len;\n+\t\tsess->template_job.auth_tag_output_len_in_bytes = sess->auth.req_digest_len;\n \n \t\tIMB_SNOW3G_INIT_KEY_SCHED(mb_mgr, xform->auth.key.data,\n \t\t\t\t\t&sess->auth.pKeySched_snow3g_auth);\n+\t\tsess->template_job.u.SNOW3G_UIA2._key = (void *)\n+\t\t\t&sess->auth.pKeySched_snow3g_auth;\n \t\treturn 0;\n \t} else if (xform->auth.algo == RTE_CRYPTO_AUTH_KASUMI_F9) {\n-\t\tsess->auth.algo = IMB_AUTH_KASUMI_UIA1;\n+\t\tsess->template_job.hash_alg = IMB_AUTH_KASUMI_UIA1;\n \t\tuint16_t kasumi_f9_digest_len =\n \t\t\tget_truncated_digest_byte_length(IMB_AUTH_KASUMI_UIA1);\n \t\tif (sess->auth.req_digest_len != kasumi_f9_digest_len) {\n \t\t\tIPSEC_MB_LOG(ERR, \"Invalid digest size\\n\");\n \t\t\treturn -EINVAL;\n \t\t}\n-\t\tsess->auth.gen_digest_len = sess->auth.req_digest_len;\n+\t\tsess->template_job.auth_tag_output_len_in_bytes = sess->auth.req_digest_len;\n \n \t\tIMB_KASUMI_INIT_F9_KEY_SCHED(mb_mgr, xform->auth.key.data,\n \t\t\t\t\t&sess->auth.pKeySched_kasumi_auth);\n+\t\tsess->template_job.u.KASUMI_UIA1._key = (void *)\n+\t\t\t&sess->auth.pKeySched_kasumi_auth;\n \t\treturn 0;\n \t}\n \n \tswitch (xform->auth.algo) {\n \tcase RTE_CRYPTO_AUTH_MD5_HMAC:\n-\t\tsess->auth.algo = IMB_AUTH_MD5;\n+\t\tsess->template_job.hash_alg = IMB_AUTH_MD5;\n \t\thash_oneblock_fn = mb_mgr->md5_one_block;\n \t\tbreak;\n \tcase RTE_CRYPTO_AUTH_SHA1_HMAC:\n-\t\tsess->auth.algo = IMB_AUTH_HMAC_SHA_1;\n+\t\tsess->template_job.hash_alg = IMB_AUTH_HMAC_SHA_1;\n \t\thash_oneblock_fn = mb_mgr->sha1_one_block;\n \t\tif (xform->auth.key.length > get_auth_algo_blocksize(\n \t\t\t\tIMB_AUTH_HMAC_SHA_1)) {\n@@ -271,11 +282,11 @@ aesni_mb_set_session_auth_parameters(const IMB_MGR *mb_mgr,\n \t\t}\n \t\tbreak;\n \tcase RTE_CRYPTO_AUTH_SHA1:\n-\t\tsess->auth.algo = IMB_AUTH_SHA_1;\n+\t\tsess->template_job.hash_alg = IMB_AUTH_SHA_1;\n \t\tauth_precompute = 0;\n \t\tbreak;\n \tcase RTE_CRYPTO_AUTH_SHA224_HMAC:\n-\t\tsess->auth.algo = IMB_AUTH_HMAC_SHA_224;\n+\t\tsess->template_job.hash_alg = IMB_AUTH_HMAC_SHA_224;\n \t\thash_oneblock_fn = mb_mgr->sha224_one_block;\n \t\tif (xform->auth.key.length > get_auth_algo_blocksize(\n \t\t\t\tIMB_AUTH_HMAC_SHA_224)) {\n@@ -287,11 +298,11 @@ aesni_mb_set_session_auth_parameters(const IMB_MGR *mb_mgr,\n \t\t}\n \t\tbreak;\n \tcase RTE_CRYPTO_AUTH_SHA224:\n-\t\tsess->auth.algo = IMB_AUTH_SHA_224;\n+\t\tsess->template_job.hash_alg = IMB_AUTH_SHA_224;\n \t\tauth_precompute = 0;\n \t\tbreak;\n \tcase RTE_CRYPTO_AUTH_SHA256_HMAC:\n-\t\tsess->auth.algo = IMB_AUTH_HMAC_SHA_256;\n+\t\tsess->template_job.hash_alg = IMB_AUTH_HMAC_SHA_256;\n \t\thash_oneblock_fn = mb_mgr->sha256_one_block;\n \t\tif (xform->auth.key.length > get_auth_algo_blocksize(\n \t\t\t\tIMB_AUTH_HMAC_SHA_256)) {\n@@ -303,11 +314,11 @@ aesni_mb_set_session_auth_parameters(const IMB_MGR *mb_mgr,\n \t\t}\n \t\tbreak;\n \tcase RTE_CRYPTO_AUTH_SHA256:\n-\t\tsess->auth.algo = IMB_AUTH_SHA_256;\n+\t\tsess->template_job.hash_alg = IMB_AUTH_SHA_256;\n \t\tauth_precompute = 0;\n \t\tbreak;\n \tcase RTE_CRYPTO_AUTH_SHA384_HMAC:\n-\t\tsess->auth.algo = IMB_AUTH_HMAC_SHA_384;\n+\t\tsess->template_job.hash_alg = IMB_AUTH_HMAC_SHA_384;\n \t\thash_oneblock_fn = mb_mgr->sha384_one_block;\n \t\tif (xform->auth.key.length > get_auth_algo_blocksize(\n \t\t\t\tIMB_AUTH_HMAC_SHA_384)) {\n@@ -319,11 +330,11 @@ aesni_mb_set_session_auth_parameters(const IMB_MGR *mb_mgr,\n \t\t}\n \t\tbreak;\n \tcase RTE_CRYPTO_AUTH_SHA384:\n-\t\tsess->auth.algo = IMB_AUTH_SHA_384;\n+\t\tsess->template_job.hash_alg = IMB_AUTH_SHA_384;\n \t\tauth_precompute = 0;\n \t\tbreak;\n \tcase RTE_CRYPTO_AUTH_SHA512_HMAC:\n-\t\tsess->auth.algo = IMB_AUTH_HMAC_SHA_512;\n+\t\tsess->template_job.hash_alg = IMB_AUTH_HMAC_SHA_512;\n \t\thash_oneblock_fn = mb_mgr->sha512_one_block;\n \t\tif (xform->auth.key.length > get_auth_algo_blocksize(\n \t\t\t\tIMB_AUTH_HMAC_SHA_512)) {\n@@ -335,7 +346,7 @@ aesni_mb_set_session_auth_parameters(const IMB_MGR *mb_mgr,\n \t\t}\n \t\tbreak;\n \tcase RTE_CRYPTO_AUTH_SHA512:\n-\t\tsess->auth.algo = IMB_AUTH_SHA_512;\n+\t\tsess->template_job.hash_alg = IMB_AUTH_SHA_512;\n \t\tauth_precompute = 0;\n \t\tbreak;\n \tdefault:\n@@ -344,9 +355,9 @@ aesni_mb_set_session_auth_parameters(const IMB_MGR *mb_mgr,\n \t\treturn -ENOTSUP;\n \t}\n \tuint16_t trunc_digest_size =\n-\t\t\tget_truncated_digest_byte_length(sess->auth.algo);\n+\t\t\tget_truncated_digest_byte_length(sess->template_job.hash_alg);\n \tuint16_t full_digest_size =\n-\t\t\tget_digest_byte_length(sess->auth.algo);\n+\t\t\tget_digest_byte_length(sess->template_job.hash_alg);\n \n \tif (sess->auth.req_digest_len > full_digest_size ||\n \t\t\tsess->auth.req_digest_len == 0) {\n@@ -356,9 +367,9 @@ aesni_mb_set_session_auth_parameters(const IMB_MGR *mb_mgr,\n \n \tif (sess->auth.req_digest_len != trunc_digest_size &&\n \t\t\tsess->auth.req_digest_len != full_digest_size)\n-\t\tsess->auth.gen_digest_len = full_digest_size;\n+\t\tsess->template_job.auth_tag_output_len_in_bytes = full_digest_size;\n \telse\n-\t\tsess->auth.gen_digest_len = sess->auth.req_digest_len;\n+\t\tsess->template_job.auth_tag_output_len_in_bytes = sess->auth.req_digest_len;\n \n \t/* Plain SHA does not require precompute key */\n \tif (auth_precompute == 0)\n@@ -370,14 +381,18 @@ aesni_mb_set_session_auth_parameters(const IMB_MGR *mb_mgr,\n \t\t\tsess->auth.pads.inner, sess->auth.pads.outer,\n \t\t\thashed_key,\n \t\t\txform->auth.key.length,\n-\t\t\tget_auth_algo_blocksize(sess->auth.algo));\n+\t\t\tget_auth_algo_blocksize(sess->template_job.hash_alg));\n \t} else {\n \t\tcalculate_auth_precomputes(hash_oneblock_fn,\n \t\t\tsess->auth.pads.inner, sess->auth.pads.outer,\n \t\t\txform->auth.key.data,\n \t\t\txform->auth.key.length,\n-\t\t\tget_auth_algo_blocksize(sess->auth.algo));\n+\t\t\tget_auth_algo_blocksize(sess->template_job.hash_alg));\n \t}\n+\tsess->template_job.u.HMAC._hashed_auth_key_xor_ipad =\n+\t\tsess->auth.pads.inner;\n+\tsess->template_job.u.HMAC._hashed_auth_key_xor_opad =\n+\t\tsess->auth.pads.outer;\n \n \treturn 0;\n }\n@@ -396,7 +411,7 @@ aesni_mb_set_session_cipher_parameters(const IMB_MGR *mb_mgr,\n \tuint8_t is_kasumi = 0;\n \n \tif (xform == NULL) {\n-\t\tsess->cipher.mode = IMB_CIPHER_NULL;\n+\t\tsess->template_job.cipher_mode = IMB_CIPHER_NULL;\n \t\treturn 0;\n \t}\n \n@@ -408,10 +423,10 @@ aesni_mb_set_session_cipher_parameters(const IMB_MGR *mb_mgr,\n \t/* Select cipher direction */\n \tswitch (xform->cipher.op) {\n \tcase RTE_CRYPTO_CIPHER_OP_ENCRYPT:\n-\t\tsess->cipher.direction = IMB_DIR_ENCRYPT;\n+\t\tsess->template_job.cipher_direction = IMB_DIR_ENCRYPT;\n \t\tbreak;\n \tcase RTE_CRYPTO_CIPHER_OP_DECRYPT:\n-\t\tsess->cipher.direction = IMB_DIR_DECRYPT;\n+\t\tsess->template_job.cipher_direction = IMB_DIR_DECRYPT;\n \t\tbreak;\n \tdefault:\n \t\tIPSEC_MB_LOG(ERR, \"Invalid cipher operation parameter\");\n@@ -421,48 +436,48 @@ aesni_mb_set_session_cipher_parameters(const IMB_MGR *mb_mgr,\n \t/* Select cipher mode */\n \tswitch (xform->cipher.algo) {\n \tcase RTE_CRYPTO_CIPHER_AES_CBC:\n-\t\tsess->cipher.mode = IMB_CIPHER_CBC;\n+\t\tsess->template_job.cipher_mode = IMB_CIPHER_CBC;\n \t\tis_aes = 1;\n \t\tbreak;\n \tcase RTE_CRYPTO_CIPHER_AES_CTR:\n-\t\tsess->cipher.mode = IMB_CIPHER_CNTR;\n+\t\tsess->template_job.cipher_mode = IMB_CIPHER_CNTR;\n \t\tis_aes = 1;\n \t\tbreak;\n \tcase RTE_CRYPTO_CIPHER_AES_DOCSISBPI:\n-\t\tsess->cipher.mode = IMB_CIPHER_DOCSIS_SEC_BPI;\n+\t\tsess->template_job.cipher_mode = IMB_CIPHER_DOCSIS_SEC_BPI;\n \t\tis_docsis = 1;\n \t\tbreak;\n \tcase RTE_CRYPTO_CIPHER_DES_CBC:\n-\t\tsess->cipher.mode = IMB_CIPHER_DES;\n+\t\tsess->template_job.cipher_mode = IMB_CIPHER_DES;\n \t\tbreak;\n \tcase RTE_CRYPTO_CIPHER_DES_DOCSISBPI:\n-\t\tsess->cipher.mode = IMB_CIPHER_DOCSIS_DES;\n+\t\tsess->template_job.cipher_mode = IMB_CIPHER_DOCSIS_DES;\n \t\tbreak;\n \tcase RTE_CRYPTO_CIPHER_3DES_CBC:\n-\t\tsess->cipher.mode = IMB_CIPHER_DES3;\n+\t\tsess->template_job.cipher_mode = IMB_CIPHER_DES3;\n \t\tis_3DES = 1;\n \t\tbreak;\n \tcase RTE_CRYPTO_CIPHER_AES_ECB:\n-\t\tsess->cipher.mode = IMB_CIPHER_ECB;\n+\t\tsess->template_job.cipher_mode = IMB_CIPHER_ECB;\n \t\tis_aes = 1;\n \t\tbreak;\n \tcase RTE_CRYPTO_CIPHER_ZUC_EEA3:\n-\t\tsess->cipher.mode = IMB_CIPHER_ZUC_EEA3;\n+\t\tsess->template_job.cipher_mode = IMB_CIPHER_ZUC_EEA3;\n \t\tis_zuc = 1;\n \t\tbreak;\n \tcase RTE_CRYPTO_CIPHER_SNOW3G_UEA2:\n-\t\tsess->cipher.mode = IMB_CIPHER_SNOW3G_UEA2_BITLEN;\n+\t\tsess->template_job.cipher_mode = IMB_CIPHER_SNOW3G_UEA2_BITLEN;\n \t\tis_snow3g = 1;\n \t\tbreak;\n \tcase RTE_CRYPTO_CIPHER_KASUMI_F8:\n-\t\tsess->cipher.mode = IMB_CIPHER_KASUMI_UEA1_BITLEN;\n+\t\tsess->template_job.cipher_mode = IMB_CIPHER_KASUMI_UEA1_BITLEN;\n \t\tis_kasumi = 1;\n \t\tbreak;\n \tcase RTE_CRYPTO_CIPHER_NULL:\n-\t\tsess->cipher.mode = IMB_CIPHER_NULL;\n-\t\tsess->cipher.key_length_in_bytes = 0;\n+\t\tsess->template_job.cipher_mode = IMB_CIPHER_NULL;\n+\t\tsess->template_job.key_len_in_bytes = 0;\n \t\tsess->iv.offset = xform->cipher.iv.offset;\n-\t\tsess->iv.length = xform->cipher.iv.length;\n+\t\tsess->template_job.iv_len_in_bytes = xform->cipher.iv.length;\n \t\treturn 0;\n \tdefault:\n \t\tIPSEC_MB_LOG(ERR, \"Unsupported cipher mode parameter\");\n@@ -471,25 +486,25 @@ aesni_mb_set_session_cipher_parameters(const IMB_MGR *mb_mgr,\n \n \t/* Set IV parameters */\n \tsess->iv.offset = xform->cipher.iv.offset;\n-\tsess->iv.length = xform->cipher.iv.length;\n+\tsess->template_job.iv_len_in_bytes = xform->cipher.iv.length;\n \n \t/* Check key length and choose key expansion function for AES */\n \tif (is_aes) {\n \t\tswitch (xform->cipher.key.length) {\n \t\tcase IMB_KEY_128_BYTES:\n-\t\t\tsess->cipher.key_length_in_bytes = IMB_KEY_128_BYTES;\n+\t\t\tsess->template_job.key_len_in_bytes = IMB_KEY_128_BYTES;\n \t\t\tIMB_AES_KEYEXP_128(mb_mgr, xform->cipher.key.data,\n \t\t\t\t\tsess->cipher.expanded_aes_keys.encode,\n \t\t\t\t\tsess->cipher.expanded_aes_keys.decode);\n \t\t\tbreak;\n \t\tcase IMB_KEY_192_BYTES:\n-\t\t\tsess->cipher.key_length_in_bytes = IMB_KEY_192_BYTES;\n+\t\t\tsess->template_job.key_len_in_bytes = IMB_KEY_192_BYTES;\n \t\t\tIMB_AES_KEYEXP_192(mb_mgr, xform->cipher.key.data,\n \t\t\t\t\tsess->cipher.expanded_aes_keys.encode,\n \t\t\t\t\tsess->cipher.expanded_aes_keys.decode);\n \t\t\tbreak;\n \t\tcase IMB_KEY_256_BYTES:\n-\t\t\tsess->cipher.key_length_in_bytes = IMB_KEY_256_BYTES;\n+\t\t\tsess->template_job.key_len_in_bytes = IMB_KEY_256_BYTES;\n \t\t\tIMB_AES_KEYEXP_256(mb_mgr, xform->cipher.key.data,\n \t\t\t\t\tsess->cipher.expanded_aes_keys.encode,\n \t\t\t\t\tsess->cipher.expanded_aes_keys.decode);\n@@ -498,16 +513,19 @@ aesni_mb_set_session_cipher_parameters(const IMB_MGR *mb_mgr,\n \t\t\tIPSEC_MB_LOG(ERR, \"Invalid cipher key length\");\n \t\t\treturn -EINVAL;\n \t\t}\n+\n+\t\tsess->template_job.enc_keys = sess->cipher.expanded_aes_keys.encode;\n+\t\tsess->template_job.dec_keys = sess->cipher.expanded_aes_keys.decode;\n \t} else if (is_docsis) {\n \t\tswitch (xform->cipher.key.length) {\n \t\tcase IMB_KEY_128_BYTES:\n-\t\t\tsess->cipher.key_length_in_bytes = IMB_KEY_128_BYTES;\n+\t\t\tsess->template_job.key_len_in_bytes = IMB_KEY_128_BYTES;\n \t\t\tIMB_AES_KEYEXP_128(mb_mgr, xform->cipher.key.data,\n \t\t\t\t\tsess->cipher.expanded_aes_keys.encode,\n \t\t\t\t\tsess->cipher.expanded_aes_keys.decode);\n \t\t\tbreak;\n \t\tcase IMB_KEY_256_BYTES:\n-\t\t\tsess->cipher.key_length_in_bytes = IMB_KEY_256_BYTES;\n+\t\t\tsess->template_job.key_len_in_bytes = IMB_KEY_256_BYTES;\n \t\t\tIMB_AES_KEYEXP_256(mb_mgr, xform->cipher.key.data,\n \t\t\t\t\tsess->cipher.expanded_aes_keys.encode,\n \t\t\t\t\tsess->cipher.expanded_aes_keys.decode);\n@@ -516,6 +534,8 @@ aesni_mb_set_session_cipher_parameters(const IMB_MGR *mb_mgr,\n \t\t\tIPSEC_MB_LOG(ERR, \"Invalid cipher key length\");\n \t\t\treturn -EINVAL;\n \t\t}\n+\t\tsess->template_job.enc_keys = sess->cipher.expanded_aes_keys.encode;\n+\t\tsess->template_job.dec_keys = sess->cipher.expanded_aes_keys.decode;\n \t} else if (is_3DES) {\n \t\tuint64_t *keys[3] = {sess->cipher.exp_3des_keys.key[0],\n \t\t\t\tsess->cipher.exp_3des_keys.key[1],\n@@ -559,38 +579,46 @@ aesni_mb_set_session_cipher_parameters(const IMB_MGR *mb_mgr,\n \t\t\treturn -EINVAL;\n \t\t}\n \n-\t\tsess->cipher.key_length_in_bytes = 24;\n+\t\tsess->template_job.enc_keys = sess->cipher.exp_3des_keys.ks_ptr;\n+\t\tsess->template_job.dec_keys = sess->cipher.exp_3des_keys.ks_ptr;\n+\t\tsess->template_job.key_len_in_bytes = 24;\n \t} else if (is_zuc) {\n \t\tif (xform->cipher.key.length != 16 &&\n \t\t\t\txform->cipher.key.length != 32) {\n \t\t\tIPSEC_MB_LOG(ERR, \"Invalid cipher key length\");\n \t\t\treturn -EINVAL;\n \t\t}\n-\t\tsess->cipher.key_length_in_bytes = xform->cipher.key.length;\n+\t\tsess->template_job.key_len_in_bytes = xform->cipher.key.length;\n \t\tmemcpy(sess->cipher.zuc_cipher_key, xform->cipher.key.data,\n \t\t\txform->cipher.key.length);\n+\t\tsess->template_job.enc_keys = sess->cipher.zuc_cipher_key;\n+\t\tsess->template_job.dec_keys = sess->cipher.zuc_cipher_key;\n \t} else if (is_snow3g) {\n \t\tif (xform->cipher.key.length != 16) {\n \t\t\tIPSEC_MB_LOG(ERR, \"Invalid cipher key length\");\n \t\t\treturn -EINVAL;\n \t\t}\n-\t\tsess->cipher.key_length_in_bytes = 16;\n+\t\tsess->template_job.key_len_in_bytes = 16;\n \t\tIMB_SNOW3G_INIT_KEY_SCHED(mb_mgr, xform->cipher.key.data,\n \t\t\t\t\t&sess->cipher.pKeySched_snow3g_cipher);\n+\t\tsess->template_job.enc_keys = &sess->cipher.pKeySched_snow3g_cipher;\n+\t\tsess->template_job.dec_keys = &sess->cipher.pKeySched_snow3g_cipher;\n \t} else if (is_kasumi) {\n \t\tif (xform->cipher.key.length != 16) {\n \t\t\tIPSEC_MB_LOG(ERR, \"Invalid cipher key length\");\n \t\t\treturn -EINVAL;\n \t\t}\n-\t\tsess->cipher.key_length_in_bytes = 16;\n+\t\tsess->template_job.key_len_in_bytes = 16;\n \t\tIMB_KASUMI_INIT_F8_KEY_SCHED(mb_mgr, xform->cipher.key.data,\n \t\t\t\t\t&sess->cipher.pKeySched_kasumi_cipher);\n+\t\tsess->template_job.enc_keys = &sess->cipher.pKeySched_kasumi_cipher;\n+\t\tsess->template_job.dec_keys = &sess->cipher.pKeySched_kasumi_cipher;\n \t} else {\n \t\tif (xform->cipher.key.length != 8) {\n \t\t\tIPSEC_MB_LOG(ERR, \"Invalid cipher key length\");\n \t\t\treturn -EINVAL;\n \t\t}\n-\t\tsess->cipher.key_length_in_bytes = 8;\n+\t\tsess->template_job.key_len_in_bytes = 8;\n \n \t\tIMB_DES_KEYSCHED(mb_mgr,\n \t\t\t(uint64_t *)sess->cipher.expanded_aes_keys.encode,\n@@ -598,6 +626,8 @@ aesni_mb_set_session_cipher_parameters(const IMB_MGR *mb_mgr,\n \t\tIMB_DES_KEYSCHED(mb_mgr,\n \t\t\t(uint64_t *)sess->cipher.expanded_aes_keys.decode,\n \t\t\t\txform->cipher.key.data);\n+\t\tsess->template_job.enc_keys = sess->cipher.expanded_aes_keys.encode;\n+\t\tsess->template_job.dec_keys = sess->cipher.expanded_aes_keys.decode;\n \t}\n \n \treturn 0;\n@@ -610,11 +640,11 @@ aesni_mb_set_session_aead_parameters(const IMB_MGR *mb_mgr,\n {\n \tswitch (xform->aead.op) {\n \tcase RTE_CRYPTO_AEAD_OP_ENCRYPT:\n-\t\tsess->cipher.direction = IMB_DIR_ENCRYPT;\n+\t\tsess->template_job.cipher_direction = IMB_DIR_ENCRYPT;\n \t\tsess->auth.operation = RTE_CRYPTO_AUTH_OP_GENERATE;\n \t\tbreak;\n \tcase RTE_CRYPTO_AEAD_OP_DECRYPT:\n-\t\tsess->cipher.direction = IMB_DIR_DECRYPT;\n+\t\tsess->template_job.cipher_direction = IMB_DIR_DECRYPT;\n \t\tsess->auth.operation = RTE_CRYPTO_AUTH_OP_VERIFY;\n \t\tbreak;\n \tdefault:\n@@ -624,27 +654,28 @@ aesni_mb_set_session_aead_parameters(const IMB_MGR *mb_mgr,\n \n \t/* Set IV parameters */\n \tsess->iv.offset = xform->aead.iv.offset;\n-\tsess->iv.length = xform->aead.iv.length;\n+\tsess->template_job.iv_len_in_bytes = xform->aead.iv.length;\n \n \t/* Set digest sizes */\n \tsess->auth.req_digest_len = xform->aead.digest_length;\n-\tsess->auth.gen_digest_len = sess->auth.req_digest_len;\n+\tsess->template_job.auth_tag_output_len_in_bytes = sess->auth.req_digest_len;\n \n \tswitch (xform->aead.algo) {\n \tcase RTE_CRYPTO_AEAD_AES_CCM:\n-\t\tsess->cipher.mode = IMB_CIPHER_CCM;\n-\t\tsess->auth.algo = IMB_AUTH_AES_CCM;\n+\t\tsess->template_job.cipher_mode = IMB_CIPHER_CCM;\n+\t\tsess->template_job.hash_alg = IMB_AUTH_AES_CCM;\n+\t\tsess->template_job.u.CCM.aad_len_in_bytes = xform->aead.aad_length;\n \n \t\t/* Check key length and choose key expansion function for AES */\n \t\tswitch (xform->aead.key.length) {\n \t\tcase IMB_KEY_128_BYTES:\n-\t\t\tsess->cipher.key_length_in_bytes = IMB_KEY_128_BYTES;\n+\t\t\tsess->template_job.key_len_in_bytes = IMB_KEY_128_BYTES;\n \t\t\tIMB_AES_KEYEXP_128(mb_mgr, xform->aead.key.data,\n \t\t\t\t\tsess->cipher.expanded_aes_keys.encode,\n \t\t\t\t\tsess->cipher.expanded_aes_keys.decode);\n \t\t\tbreak;\n \t\tcase IMB_KEY_256_BYTES:\n-\t\t\tsess->cipher.key_length_in_bytes = IMB_KEY_256_BYTES;\n+\t\t\tsess->template_job.key_len_in_bytes = IMB_KEY_256_BYTES;\n \t\t\tIMB_AES_KEYEXP_256(mb_mgr, xform->aead.key.data,\n \t\t\t\t\tsess->cipher.expanded_aes_keys.encode,\n \t\t\t\t\tsess->cipher.expanded_aes_keys.decode);\n@@ -654,6 +685,8 @@ aesni_mb_set_session_aead_parameters(const IMB_MGR *mb_mgr,\n \t\t\treturn -EINVAL;\n \t\t}\n \n+\t\tsess->template_job.enc_keys = sess->cipher.expanded_aes_keys.encode;\n+\t\tsess->template_job.dec_keys = sess->cipher.expanded_aes_keys.decode;\n \t\t/* CCM digests must be between 4 and 16 and an even number */\n \t\tif (sess->auth.req_digest_len < AES_CCM_DIGEST_MIN_LEN ||\n \t\t\tsess->auth.req_digest_len > AES_CCM_DIGEST_MAX_LEN ||\n@@ -664,22 +697,23 @@ aesni_mb_set_session_aead_parameters(const IMB_MGR *mb_mgr,\n \t\tbreak;\n \n \tcase RTE_CRYPTO_AEAD_AES_GCM:\n-\t\tsess->cipher.mode = IMB_CIPHER_GCM;\n-\t\tsess->auth.algo = IMB_AUTH_AES_GMAC;\n+\t\tsess->template_job.cipher_mode = IMB_CIPHER_GCM;\n+\t\tsess->template_job.hash_alg = IMB_AUTH_AES_GMAC;\n+\t\tsess->template_job.u.GCM.aad_len_in_bytes = xform->aead.aad_length;\n \n \t\tswitch (xform->aead.key.length) {\n \t\tcase IMB_KEY_128_BYTES:\n-\t\t\tsess->cipher.key_length_in_bytes = IMB_KEY_128_BYTES;\n+\t\t\tsess->template_job.key_len_in_bytes = IMB_KEY_128_BYTES;\n \t\t\tIMB_AES128_GCM_PRE(mb_mgr, xform->aead.key.data,\n \t\t\t\t&sess->cipher.gcm_key);\n \t\t\tbreak;\n \t\tcase IMB_KEY_192_BYTES:\n-\t\t\tsess->cipher.key_length_in_bytes = IMB_KEY_192_BYTES;\n+\t\t\tsess->template_job.key_len_in_bytes = IMB_KEY_192_BYTES;\n \t\t\tIMB_AES192_GCM_PRE(mb_mgr, xform->aead.key.data,\n \t\t\t\t&sess->cipher.gcm_key);\n \t\t\tbreak;\n \t\tcase IMB_KEY_256_BYTES:\n-\t\t\tsess->cipher.key_length_in_bytes = IMB_KEY_256_BYTES;\n+\t\t\tsess->template_job.key_len_in_bytes = IMB_KEY_256_BYTES;\n \t\t\tIMB_AES256_GCM_PRE(mb_mgr, xform->aead.key.data,\n \t\t\t\t&sess->cipher.gcm_key);\n \t\t\tbreak;\n@@ -688,6 +722,8 @@ aesni_mb_set_session_aead_parameters(const IMB_MGR *mb_mgr,\n \t\t\treturn -EINVAL;\n \t\t}\n \n+\t\tsess->template_job.enc_keys = &sess->cipher.gcm_key;\n+\t\tsess->template_job.dec_keys = &sess->cipher.gcm_key;\n \t\t/* GCM digest size must be between 1 and 16 */\n \t\tif (sess->auth.req_digest_len == 0 ||\n \t\t\t\tsess->auth.req_digest_len > 16) {\n@@ -697,16 +733,20 @@ aesni_mb_set_session_aead_parameters(const IMB_MGR *mb_mgr,\n \t\tbreak;\n \n \tcase RTE_CRYPTO_AEAD_CHACHA20_POLY1305:\n-\t\tsess->cipher.mode = IMB_CIPHER_CHACHA20_POLY1305;\n-\t\tsess->auth.algo = IMB_AUTH_CHACHA20_POLY1305;\n+\t\tsess->template_job.cipher_mode = IMB_CIPHER_CHACHA20_POLY1305;\n+\t\tsess->template_job.hash_alg = IMB_AUTH_CHACHA20_POLY1305;\n+\t\tsess->template_job.u.CHACHA20_POLY1305.aad_len_in_bytes =\n+\t\t\txform->aead.aad_length;\n \n \t\tif (xform->aead.key.length != 32) {\n \t\t\tIPSEC_MB_LOG(ERR, \"Invalid key length\");\n \t\t\treturn -EINVAL;\n \t\t}\n-\t\tsess->cipher.key_length_in_bytes = 32;\n+\t\tsess->template_job.key_len_in_bytes = 32;\n \t\tmemcpy(sess->cipher.expanded_aes_keys.encode,\n \t\t\txform->aead.key.data, 32);\n+\t\tsess->template_job.enc_keys = sess->cipher.expanded_aes_keys.encode;\n+\t\tsess->template_job.dec_keys = sess->cipher.expanded_aes_keys.decode;\n \t\tif (sess->auth.req_digest_len != 16) {\n \t\t\tIPSEC_MB_LOG(ERR, \"Invalid digest size\\n\");\n \t\t\treturn -EINVAL;\n@@ -741,16 +781,16 @@ aesni_mb_session_configure(IMB_MGR *mb_mgr,\n \t/* Select Crypto operation - hash then cipher / cipher then hash */\n \tswitch (mode) {\n \tcase IPSEC_MB_OP_HASH_VERIFY_THEN_DECRYPT:\n-\t\tsess->chain_order = IMB_ORDER_HASH_CIPHER;\n+\t\tsess->template_job.chain_order = IMB_ORDER_HASH_CIPHER;\n \t\tbreak;\n \tcase IPSEC_MB_OP_ENCRYPT_THEN_HASH_GEN:\n \tcase IPSEC_MB_OP_DECRYPT_THEN_HASH_VERIFY:\n-\t\tsess->chain_order = IMB_ORDER_CIPHER_HASH;\n+\t\tsess->template_job.chain_order = IMB_ORDER_CIPHER_HASH;\n \t\tbreak;\n \tcase IPSEC_MB_OP_HASH_GEN_ONLY:\n \tcase IPSEC_MB_OP_HASH_VERIFY_ONLY:\n \tcase IPSEC_MB_OP_HASH_GEN_THEN_ENCRYPT:\n-\t\tsess->chain_order = IMB_ORDER_HASH_CIPHER;\n+\t\tsess->template_job.chain_order = IMB_ORDER_HASH_CIPHER;\n \t\tbreak;\n \t/*\n \t * Multi buffer library operates only at two modes,\n@@ -760,18 +800,16 @@ aesni_mb_session_configure(IMB_MGR *mb_mgr,\n \t * the first operation and decryption the last one.\n \t */\n \tcase IPSEC_MB_OP_ENCRYPT_ONLY:\n-\t\tsess->chain_order = IMB_ORDER_CIPHER_HASH;\n+\t\tsess->template_job.chain_order = IMB_ORDER_CIPHER_HASH;\n \t\tbreak;\n \tcase IPSEC_MB_OP_DECRYPT_ONLY:\n-\t\tsess->chain_order = IMB_ORDER_HASH_CIPHER;\n+\t\tsess->template_job.chain_order = IMB_ORDER_HASH_CIPHER;\n \t\tbreak;\n \tcase IPSEC_MB_OP_AEAD_AUTHENTICATED_ENCRYPT:\n-\t\tsess->chain_order = IMB_ORDER_CIPHER_HASH;\n-\t\tsess->aead.aad_len = xform->aead.aad_length;\n+\t\tsess->template_job.chain_order = IMB_ORDER_CIPHER_HASH;\n \t\tbreak;\n \tcase IPSEC_MB_OP_AEAD_AUTHENTICATED_DECRYPT:\n-\t\tsess->chain_order = IMB_ORDER_HASH_CIPHER;\n-\t\tsess->aead.aad_len = xform->aead.aad_length;\n+\t\tsess->template_job.chain_order = IMB_ORDER_HASH_CIPHER;\n \t\tbreak;\n \tcase IPSEC_MB_OP_NOT_SUPPORTED:\n \tdefault:\n@@ -781,8 +819,7 @@ aesni_mb_session_configure(IMB_MGR *mb_mgr,\n \t}\n \n \t/* Default IV length = 0 */\n-\tsess->iv.length = 0;\n-\tsess->auth_iv.length = 0;\n+\tsess->template_job.iv_len_in_bytes = 0;\n \n \tret = aesni_mb_set_session_auth_parameters(mb_mgr, sess, auth_xform);\n \tif (ret != 0) {\n@@ -864,10 +901,10 @@ aesni_mb_set_docsis_sec_session_auth_parameters(struct aesni_mb_session *sess,\n \n \t/* Select CRC generate/verify */\n \tif (xform->direction == RTE_SECURITY_DOCSIS_UPLINK) {\n-\t\tsess->auth.algo = IMB_AUTH_DOCSIS_CRC32;\n+\t\tsess->template_job.hash_alg = IMB_AUTH_DOCSIS_CRC32;\n \t\tsess->auth.operation = RTE_CRYPTO_AUTH_OP_VERIFY;\n \t} else if (xform->direction == RTE_SECURITY_DOCSIS_DOWNLINK) {\n-\t\tsess->auth.algo = IMB_AUTH_DOCSIS_CRC32;\n+\t\tsess->template_job.hash_alg = IMB_AUTH_DOCSIS_CRC32;\n \t\tsess->auth.operation = RTE_CRYPTO_AUTH_OP_GENERATE;\n \t} else {\n \t\tIPSEC_MB_LOG(ERR, \"Unsupported DOCSIS direction\");\n@@ -875,7 +912,7 @@ aesni_mb_set_docsis_sec_session_auth_parameters(struct aesni_mb_session *sess,\n \t}\n \n \tsess->auth.req_digest_len = RTE_ETHER_CRC_LEN;\n-\tsess->auth.gen_digest_len = RTE_ETHER_CRC_LEN;\n+\tsess->template_job.auth_tag_output_len_in_bytes = RTE_ETHER_CRC_LEN;\n \n \treturn 0;\n }\n@@ -907,12 +944,12 @@ aesni_mb_set_docsis_sec_session_parameters(\n \n \tswitch (conf->docsis.direction) {\n \tcase RTE_SECURITY_DOCSIS_UPLINK:\n-\t\tipsec_sess->chain_order = IMB_ORDER_CIPHER_HASH;\n+\t\tipsec_sess->template_job.chain_order = IMB_ORDER_CIPHER_HASH;\n \t\tdocsis_xform = &conf->docsis;\n \t\tcipher_xform = conf->crypto_xform;\n \t\tbreak;\n \tcase RTE_SECURITY_DOCSIS_DOWNLINK:\n-\t\tipsec_sess->chain_order = IMB_ORDER_HASH_CIPHER;\n+\t\tipsec_sess->template_job.chain_order = IMB_ORDER_HASH_CIPHER;\n \t\tcipher_xform = conf->crypto_xform;\n \t\tdocsis_xform = &conf->docsis;\n \t\tbreak;\n@@ -923,7 +960,7 @@ aesni_mb_set_docsis_sec_session_parameters(\n \t}\n \n \t/* Default IV length = 0 */\n-\tipsec_sess->iv.length = 0;\n+\tipsec_sess->template_job.iv_len_in_bytes = 0;\n \n \tret = aesni_mb_set_docsis_sec_session_auth_parameters(ipsec_sess,\n \t\t\tdocsis_xform);\n@@ -958,7 +995,7 @@ auth_start_offset(struct rte_crypto_op *op, struct aesni_mb_session *session,\n \tuint32_t cipher_end, auth_end;\n \n \t/* Only cipher then hash needs special calculation. */\n-\tif (!oop || session->chain_order != IMB_ORDER_CIPHER_HASH || lb_sgl)\n+\tif (!oop || session->template_job.chain_order != IMB_ORDER_CIPHER_HASH || lb_sgl)\n \t\treturn auth_offset;\n \n \tm_src = op->sym->m_src;\n@@ -1004,80 +1041,35 @@ set_cpu_mb_job_params(IMB_JOB *job, struct aesni_mb_session *session,\n \t\tstruct rte_crypto_va_iova_ptr *iv,\n \t\tstruct rte_crypto_va_iova_ptr *aad, void *digest, void *udata)\n {\n-\t/* Set crypto operation */\n-\tjob->chain_order = session->chain_order;\n-\n-\t/* Set cipher parameters */\n-\tjob->cipher_direction = session->cipher.direction;\n-\tjob->cipher_mode = session->cipher.mode;\n-\n-\tjob->key_len_in_bytes = session->cipher.key_length_in_bytes;\n+\tmemcpy(job, &session->template_job, sizeof(IMB_JOB));\n \n \t/* Set authentication parameters */\n-\tjob->hash_alg = session->auth.algo;\n \tjob->iv = iv->va;\n \n \tswitch (job->hash_alg) {\n-\tcase IMB_AUTH_AES_XCBC:\n-\t\tjob->u.XCBC._k1_expanded = session->auth.xcbc.k1_expanded;\n-\t\tjob->u.XCBC._k2 = session->auth.xcbc.k2;\n-\t\tjob->u.XCBC._k3 = session->auth.xcbc.k3;\n-\n-\t\tjob->enc_keys = session->cipher.expanded_aes_keys.encode;\n-\t\tjob->dec_keys = session->cipher.expanded_aes_keys.decode;\n-\t\tbreak;\n-\n \tcase IMB_AUTH_AES_CCM:\n \t\tjob->u.CCM.aad = (uint8_t *)aad->va + 18;\n-\t\tjob->u.CCM.aad_len_in_bytes = session->aead.aad_len;\n-\t\tjob->enc_keys = session->cipher.expanded_aes_keys.encode;\n-\t\tjob->dec_keys = session->cipher.expanded_aes_keys.decode;\n \t\tjob->iv++;\n \t\tbreak;\n \n-\tcase IMB_AUTH_AES_CMAC:\n-\t\tjob->u.CMAC._key_expanded = session->auth.cmac.expkey;\n-\t\tjob->u.CMAC._skey1 = session->auth.cmac.skey1;\n-\t\tjob->u.CMAC._skey2 = session->auth.cmac.skey2;\n-\t\tjob->enc_keys = session->cipher.expanded_aes_keys.encode;\n-\t\tjob->dec_keys = session->cipher.expanded_aes_keys.decode;\n-\t\tbreak;\n-\n \tcase IMB_AUTH_AES_GMAC:\n \t\tjob->u.GCM.aad = aad->va;\n-\t\tjob->u.GCM.aad_len_in_bytes = session->aead.aad_len;\n-\t\tjob->enc_keys = &session->cipher.gcm_key;\n-\t\tjob->dec_keys = &session->cipher.gcm_key;\n \t\tbreak;\n \n \tcase IMB_AUTH_AES_GMAC_128:\n \tcase IMB_AUTH_AES_GMAC_192:\n \tcase IMB_AUTH_AES_GMAC_256:\n-\t\tjob->u.GMAC._key = &session->cipher.gcm_key;\n \t\tjob->u.GMAC._iv = iv->va;\n-\t\tjob->u.GMAC.iv_len_in_bytes = session->iv.length;\n \t\tbreak;\n \n \tcase IMB_AUTH_CHACHA20_POLY1305:\n \t\tjob->u.CHACHA20_POLY1305.aad = aad->va;\n-\t\tjob->u.CHACHA20_POLY1305.aad_len_in_bytes =\n-\t\t\tsession->aead.aad_len;\n-\t\tjob->enc_keys = session->cipher.expanded_aes_keys.encode;\n-\t\tjob->dec_keys = session->cipher.expanded_aes_keys.encode;\n \t\tbreak;\n \tdefault:\n \t\tjob->u.HMAC._hashed_auth_key_xor_ipad =\n \t\t\t\tsession->auth.pads.inner;\n \t\tjob->u.HMAC._hashed_auth_key_xor_opad =\n \t\t\t\tsession->auth.pads.outer;\n-\n-\t\tif (job->cipher_mode == IMB_CIPHER_DES3) {\n-\t\t\tjob->enc_keys = session->cipher.exp_3des_keys.ks_ptr;\n-\t\t\tjob->dec_keys = session->cipher.exp_3des_keys.ks_ptr;\n-\t\t} else {\n-\t\t\tjob->enc_keys = session->cipher.expanded_aes_keys.encode;\n-\t\t\tjob->dec_keys = session->cipher.expanded_aes_keys.decode;\n-\t\t}\n \t}\n \n \t/*\n@@ -1087,10 +1079,6 @@ set_cpu_mb_job_params(IMB_JOB *job, struct aesni_mb_session *session,\n \n \t/* Set digest location and length */\n \tjob->auth_tag_output = digest;\n-\tjob->auth_tag_output_len_in_bytes = session->auth.gen_digest_len;\n-\n-\t/* Set IV parameters */\n-\tjob->iv_len_in_bytes = session->iv.length;\n \n \t/* Data Parameters */\n \tjob->src = buf;\n@@ -1235,8 +1223,10 @@ handle_sgl_linear(IMB_JOB *job, struct rte_crypto_op *op, uint32_t dst_offset,\n static inline int\n imb_lib_support_sgl_algo(IMB_CIPHER_MODE alg)\n {\n-\tif (alg == IMB_CIPHER_CHACHA20_POLY1305\n-\t\t\t|| alg == IMB_CIPHER_GCM)\n+\tif (alg == IMB_CIPHER_CHACHA20_POLY1305 ||\n+\t\t\talg == IMB_CIPHER_CHACHA20_POLY1305_SGL ||\n+\t\t\talg == IMB_CIPHER_GCM_SGL ||\n+\t\t\talg == IMB_CIPHER_GCM)\n \t\treturn 1;\n \treturn 0;\n }\n@@ -1413,28 +1403,11 @@ set_mb_job_params(IMB_JOB *job, struct ipsec_mb_qp *qp,\n \t\treturn -1;\n \t}\n \n-\t/* Set crypto operation */\n-\tjob->chain_order = session->chain_order;\n-\n-\t/* Set cipher parameters */\n-\tjob->cipher_direction = session->cipher.direction;\n-\tjob->cipher_mode = session->cipher.mode;\n-\n-\tjob->key_len_in_bytes = session->cipher.key_length_in_bytes;\n+\tmemcpy(job, &session->template_job, sizeof(IMB_JOB));\n \n \t/* Set authentication parameters */\n-\tjob->hash_alg = session->auth.algo;\n-\n \tconst int aead = is_aead_algo(job->hash_alg, job->cipher_mode);\n \n-\tif (job->cipher_mode == IMB_CIPHER_DES3) {\n-\t\tjob->enc_keys = session->cipher.exp_3des_keys.ks_ptr;\n-\t\tjob->dec_keys = session->cipher.exp_3des_keys.ks_ptr;\n-\t} else {\n-\t\tjob->enc_keys = session->cipher.expanded_aes_keys.encode;\n-\t\tjob->dec_keys = session->cipher.expanded_aes_keys.decode;\n-\t}\n-\n \tif (!op->sym->m_dst) {\n \t\t/* in-place operation */\n \t\tm_dst = m_src;\n@@ -1451,89 +1424,49 @@ set_mb_job_params(IMB_JOB *job, struct ipsec_mb_qp *qp,\n \n \tif (m_src->nb_segs > 1 || m_dst->nb_segs > 1) {\n \t\tsgl = 1;\n-\t\tif (!imb_lib_support_sgl_algo(session->cipher.mode))\n+\t\tif (!imb_lib_support_sgl_algo(job->cipher_mode))\n \t\t\tlb_sgl = 1;\n \t}\n \n \tswitch (job->hash_alg) {\n-\tcase IMB_AUTH_AES_XCBC:\n-\t\tjob->u.XCBC._k1_expanded = session->auth.xcbc.k1_expanded;\n-\t\tjob->u.XCBC._k2 = session->auth.xcbc.k2;\n-\t\tjob->u.XCBC._k3 = session->auth.xcbc.k3;\n-\n-\t\tjob->enc_keys = session->cipher.expanded_aes_keys.encode;\n-\t\tjob->dec_keys = session->cipher.expanded_aes_keys.decode;\n-\t\tbreak;\n-\n \tcase IMB_AUTH_AES_CCM:\n \t\tjob->u.CCM.aad = op->sym->aead.aad.data + 18;\n-\t\tjob->u.CCM.aad_len_in_bytes = session->aead.aad_len;\n-\t\tjob->enc_keys = session->cipher.expanded_aes_keys.encode;\n-\t\tjob->dec_keys = session->cipher.expanded_aes_keys.decode;\n-\t\tbreak;\n-\n-\tcase IMB_AUTH_AES_CMAC:\n-\t\tjob->u.CMAC._key_expanded = session->auth.cmac.expkey;\n-\t\tjob->u.CMAC._skey1 = session->auth.cmac.skey1;\n-\t\tjob->u.CMAC._skey2 = session->auth.cmac.skey2;\n-\t\tjob->enc_keys = session->cipher.expanded_aes_keys.encode;\n-\t\tjob->dec_keys = session->cipher.expanded_aes_keys.decode;\n \t\tbreak;\n \n \tcase IMB_AUTH_AES_GMAC:\n \t\tjob->u.GCM.aad = op->sym->aead.aad.data;\n-\t\tjob->u.GCM.aad_len_in_bytes = session->aead.aad_len;\n \t\tif (sgl) {\n \t\t\tjob->u.GCM.ctx = &qp_data->gcm_sgl_ctx;\n \t\t\tjob->cipher_mode = IMB_CIPHER_GCM_SGL;\n \t\t\tjob->hash_alg = IMB_AUTH_GCM_SGL;\n \t\t}\n-\t\tjob->enc_keys = &session->cipher.gcm_key;\n-\t\tjob->dec_keys = &session->cipher.gcm_key;\n \t\tbreak;\n \tcase IMB_AUTH_AES_GMAC_128:\n \tcase IMB_AUTH_AES_GMAC_192:\n \tcase IMB_AUTH_AES_GMAC_256:\n-\t\tjob->u.GMAC._key = &session->cipher.gcm_key;\n \t\tjob->u.GMAC._iv = rte_crypto_op_ctod_offset(op, uint8_t *,\n \t\t\t\t\t\tsession->auth_iv.offset);\n-\t\tjob->u.GMAC.iv_len_in_bytes = session->auth_iv.length;\n \t\tbreak;\n \tcase IMB_AUTH_ZUC_EIA3_BITLEN:\n \tcase IMB_AUTH_ZUC256_EIA3_BITLEN:\n-\t\tjob->u.ZUC_EIA3._key = session->auth.zuc_auth_key;\n \t\tjob->u.ZUC_EIA3._iv = rte_crypto_op_ctod_offset(op, uint8_t *,\n \t\t\t\t\t\tsession->auth_iv.offset);\n \t\tbreak;\n \tcase IMB_AUTH_SNOW3G_UIA2_BITLEN:\n-\t\tjob->u.SNOW3G_UIA2._key = (void *)\n-\t\t\t&session->auth.pKeySched_snow3g_auth;\n \t\tjob->u.SNOW3G_UIA2._iv =\n \t\t\trte_crypto_op_ctod_offset(op, uint8_t *,\n \t\t\t\t\t\tsession->auth_iv.offset);\n \t\tbreak;\n-\tcase IMB_AUTH_KASUMI_UIA1:\n-\t\tjob->u.KASUMI_UIA1._key = (void *)\n-\t\t\t&session->auth.pKeySched_kasumi_auth;\n-\t\tbreak;\n \tcase IMB_AUTH_CHACHA20_POLY1305:\n \t\tjob->u.CHACHA20_POLY1305.aad = op->sym->aead.aad.data;\n-\t\tjob->u.CHACHA20_POLY1305.aad_len_in_bytes =\n-\t\t\tsession->aead.aad_len;\n \t\tif (sgl) {\n \t\t\tjob->u.CHACHA20_POLY1305.ctx = &qp_data->chacha_sgl_ctx;\n \t\t\tjob->cipher_mode = IMB_CIPHER_CHACHA20_POLY1305_SGL;\n \t\t\tjob->hash_alg = IMB_AUTH_CHACHA20_POLY1305_SGL;\n \t\t}\n-\t\tjob->enc_keys = session->cipher.expanded_aes_keys.encode;\n-\t\tjob->dec_keys = session->cipher.expanded_aes_keys.encode;\n \t\tbreak;\n \tdefault:\n-\t\tjob->u.HMAC._hashed_auth_key_xor_ipad =\n-\t\t\tsession->auth.pads.inner;\n-\t\tjob->u.HMAC._hashed_auth_key_xor_opad =\n-\t\t\tsession->auth.pads.outer;\n-\n+\t\tbreak;\n \t}\n \n \tif (aead)\n@@ -1542,14 +1475,10 @@ set_mb_job_params(IMB_JOB *job, struct ipsec_mb_qp *qp,\n \t\tm_offset = op->sym->cipher.data.offset;\n \n \tif (job->cipher_mode == IMB_CIPHER_ZUC_EEA3) {\n-\t\tjob->enc_keys = session->cipher.zuc_cipher_key;\n-\t\tjob->dec_keys = session->cipher.zuc_cipher_key;\n \t\tm_offset >>= 3;\n \t} else if (job->cipher_mode == IMB_CIPHER_SNOW3G_UEA2_BITLEN) {\n-\t\tjob->enc_keys = &session->cipher.pKeySched_snow3g_cipher;\n \t\tm_offset = 0;\n \t} else if (job->cipher_mode == IMB_CIPHER_KASUMI_UEA1_BITLEN) {\n-\t\tjob->enc_keys = &session->cipher.pKeySched_kasumi_cipher;\n \t\tm_offset = 0;\n \t}\n \n@@ -1565,7 +1494,7 @@ set_mb_job_params(IMB_JOB *job, struct ipsec_mb_qp *qp,\n \t\t\tjob->auth_tag_output = op->sym->auth.digest.data;\n \n \t\tif (session->auth.req_digest_len !=\n-\t\t\t\tsession->auth.gen_digest_len) {\n+\t\t\t\tjob->auth_tag_output_len_in_bytes) {\n \t\t\tjob->auth_tag_output =\n \t\t\t\tqp_data->temp_digests[*digest_idx];\n \t\t\t*digest_idx = (*digest_idx + 1) % IMB_MAX_JOBS;\n@@ -1576,12 +1505,6 @@ set_mb_job_params(IMB_JOB *job, struct ipsec_mb_qp *qp,\n \t * digest length as specified in the relevant IPsec RFCs\n \t */\n \n-\t/* Set digest length */\n-\tjob->auth_tag_output_len_in_bytes = session->auth.gen_digest_len;\n-\n-\t/* Set IV parameters */\n-\tjob->iv_len_in_bytes = session->iv.length;\n-\n \t/* Data Parameters */\n \tif (sgl) {\n \t\tjob->src = NULL;\n@@ -1773,8 +1696,8 @@ set_sec_mb_job_params(IMB_JOB *job, struct ipsec_mb_qp *qp,\n \t\treturn -1;\n \t}\n \t/* Only DOCSIS protocol operations supported now */\n-\tif (session->cipher.mode != IMB_CIPHER_DOCSIS_SEC_BPI ||\n-\t\t\tsession->auth.algo != IMB_AUTH_DOCSIS_CRC32) {\n+\tif (session->template_job.cipher_mode != IMB_CIPHER_DOCSIS_SEC_BPI ||\n+\t\t\tsession->template_job.hash_alg != IMB_AUTH_DOCSIS_CRC32) {\n \t\top->status = RTE_CRYPTO_OP_STATUS_ERROR;\n \t\treturn -1;\n \t}\n@@ -1791,31 +1714,19 @@ set_sec_mb_job_params(IMB_JOB *job, struct ipsec_mb_qp *qp,\n \t\treturn -ENOTSUP;\n \t}\n \n-\t/* Set crypto operation */\n-\tjob->chain_order = session->chain_order;\n+\tmemcpy(job, &session->template_job, sizeof(IMB_JOB));\n \n \t/* Set cipher parameters */\n-\tjob->cipher_direction = session->cipher.direction;\n-\tjob->cipher_mode = session->cipher.mode;\n-\n-\tjob->key_len_in_bytes = session->cipher.key_length_in_bytes;\n \tjob->enc_keys = session->cipher.expanded_aes_keys.encode;\n \tjob->dec_keys = session->cipher.expanded_aes_keys.decode;\n \n \t/* Set IV parameters */\n-\tjob->iv_len_in_bytes = session->iv.length;\n \tjob->iv = (uint8_t *)op + session->iv.offset;\n \n-\t/* Set authentication parameters */\n-\tjob->hash_alg = session->auth.algo;\n-\n \t/* Set digest output location */\n \tjob->auth_tag_output = qp_data->temp_digests[*digest_idx];\n \t*digest_idx = (*digest_idx + 1) % IMB_MAX_JOBS;\n \n-\t/* Set digest length */\n-\tjob->auth_tag_output_len_in_bytes = session->auth.gen_digest_len;\n-\n \t/* Set data parameters */\n \tjob->src = rte_pktmbuf_mtod(m_src, uint8_t *);\n \tjob->dst = rte_pktmbuf_mtod_offset(m_dst, uint8_t *,\n@@ -1865,7 +1776,7 @@ generate_digest(IMB_JOB *job, struct rte_crypto_op *op,\n \t\tstruct aesni_mb_session *sess)\n {\n \t/* No extra copy needed */\n-\tif (likely(sess->auth.req_digest_len == sess->auth.gen_digest_len))\n+\tif (likely(sess->auth.req_digest_len == job->auth_tag_output_len_in_bytes))\n \t\treturn;\n \n \t/*\n@@ -1940,7 +1851,7 @@ post_process_mb_job(struct ipsec_mb_qp *qp, IMB_JOB *job)\n \t\t\tif ((op->sym->m_src->nb_segs > 1 ||\n \t\t\t\t\t(op->sym->m_dst != NULL &&\n \t\t\t\t\top->sym->m_dst->nb_segs > 1)) &&\n-\t\t\t\t\t!imb_lib_support_sgl_algo(sess->cipher.mode)) {\n+\t\t\t\t\t!imb_lib_support_sgl_algo(job->cipher_mode)) {\n \t\t\t\tlinear_buf = (uint8_t *) job->user_data2;\n \t\t\t\tpost_process_sgl_linear(op, job, sess, linear_buf);\n \t\t\t}\n@@ -1950,7 +1861,7 @@ post_process_mb_job(struct ipsec_mb_qp *qp, IMB_JOB *job)\n \n \t\t\tif (sess->auth.operation == RTE_CRYPTO_AUTH_OP_VERIFY) {\n \t\t\t\tif (is_aead_algo(job->hash_alg,\n-\t\t\t\t\t\tsess->cipher.mode))\n+\t\t\t\t\t\tjob->cipher_mode))\n \t\t\t\t\tverify_digest(job,\n \t\t\t\t\t\top->sym->aead.digest.data,\n \t\t\t\t\t\tsess->auth.req_digest_len,\ndiff --git a/drivers/crypto/ipsec_mb/pmd_aesni_mb_priv.h b/drivers/crypto/ipsec_mb/pmd_aesni_mb_priv.h\nindex 3cf44f8bc4..ce9a6e4886 100644\n--- a/drivers/crypto/ipsec_mb/pmd_aesni_mb_priv.h\n+++ b/drivers/crypto/ipsec_mb/pmd_aesni_mb_priv.h\n@@ -852,14 +852,12 @@ get_digest_byte_length(IMB_HASH_ALG algo)\n \n /** AES-NI multi-buffer private session structure */\n struct aesni_mb_session {\n-\tIMB_CHAIN_ORDER chain_order;\n-\t/*  common job fields */\n+\tIMB_JOB template_job;\n+\t/*< Template job structure */\n \tstruct {\n-\t\tuint16_t length;\n \t\tuint16_t offset;\n \t} iv;\n \tstruct {\n-\t\tuint16_t length;\n \t\tuint16_t offset;\n \t} auth_iv;\n \t/* *< IV parameters\n@@ -868,13 +866,6 @@ struct aesni_mb_session {\n \t/* * Cipher Parameters\n \t */\n \tstruct {\n-\t\t/* * Cipher direction - encrypt / decrypt */\n-\t\tIMB_CIPHER_DIRECTION direction;\n-\t\t/* * Cipher mode - CBC / Counter */\n-\t\tIMB_CIPHER_MODE mode;\n-\n-\t\tuint64_t key_length_in_bytes;\n-\n \t\tunion {\n \t\t\tstruct {\n \t\t\t\tuint32_t encode[60] __rte_aligned(16);\n@@ -907,7 +898,6 @@ struct aesni_mb_session {\n \n \t/* *< Authentication Parameters */\n \tstruct {\n-\t\tIMB_HASH_ALG algo; /* *< Authentication Algorithm */\n \t\tenum rte_crypto_auth_operation operation;\n \t\t/* *< auth operation generate or verify */\n \t\tunion {\n@@ -948,16 +938,10 @@ struct aesni_mb_session {\n \t\t\tkasumi_key_sched_t pKeySched_kasumi_auth;\n \t\t\t/* *< KASUMI scheduled authentication key */\n \t\t};\n-\t\t/* * Generated digest size by the Multi-buffer library */\n-\t\tuint16_t gen_digest_len;\n \t\t/* * Requested digest size from Cryptodev */\n \t\tuint16_t req_digest_len;\n \n \t} auth;\n-\tstruct {\n-\t\t/* * AAD data length */\n-\t\tuint16_t aad_len;\n-\t} aead;\n } __rte_cache_aligned;\n \n typedef void (*hash_one_block_t)(const void *data, void *digest);\n",
    "prefixes": [
        "5/8"
    ]
}