get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 95815,
    "url": "http://patches.dpdk.org/api/patches/95815/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20210713133542.3550525-11-radu.nicolau@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": "<20210713133542.3550525-11-radu.nicolau@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20210713133542.3550525-11-radu.nicolau@intel.com",
    "date": "2021-07-13T13:35:42",
    "name": "[10/10] ipsec: add ol_flags support",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "d94f3095ed309cd7d0ecd88707a18f417385d68e",
    "submitter": {
        "id": 743,
        "url": "http://patches.dpdk.org/api/people/743/?format=api",
        "name": "Radu Nicolau",
        "email": "radu.nicolau@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/20210713133542.3550525-11-radu.nicolau@intel.com/mbox/",
    "series": [
        {
            "id": 17806,
            "url": "http://patches.dpdk.org/api/series/17806/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=17806",
            "date": "2021-07-13T13:35:32",
            "name": "new features for ipsec and security libraries",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/17806/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/95815/comments/",
    "check": "fail",
    "checks": "http://patches.dpdk.org/api/patches/95815/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 0FFE3A0C4F;\n\tTue, 13 Jul 2021 15:47:57 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 69E4A412BD;\n\tTue, 13 Jul 2021 15:47:16 +0200 (CEST)",
            "from mga12.intel.com (mga12.intel.com [192.55.52.136])\n by mails.dpdk.org (Postfix) with ESMTP id BD8DD412EE\n for <dev@dpdk.org>; Tue, 13 Jul 2021 15:47:14 +0200 (CEST)",
            "from orsmga007.jf.intel.com ([10.7.209.58])\n by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 13 Jul 2021 06:47:14 -0700",
            "from silpixa00400884.ir.intel.com ([10.243.22.82])\n by orsmga007.jf.intel.com with ESMTP; 13 Jul 2021 06:47:12 -0700"
        ],
        "X-IronPort-AV": [
            "E=McAfee;i=\"6200,9189,10043\"; a=\"189847584\"",
            "E=Sophos;i=\"5.84,236,1620716400\"; d=\"scan'208\";a=\"189847584\"",
            "E=Sophos;i=\"5.84,236,1620716400\"; d=\"scan'208\";a=\"451761793\""
        ],
        "X-ExtLoop1": "1",
        "From": "Radu Nicolau <radu.nicolau@intel.com>",
        "To": "Konstantin Ananyev <konstantin.ananyev@intel.com>,\n Bernard Iremonger <bernard.iremonger@intel.com>,\n Vladimir Medvedkin <vladimir.medvedkin@intel.com>",
        "Cc": "dev@dpdk.org, Radu Nicolau <radu.nicolau@intel.com>,\n Declan Doherty <declan.doherty@intel.com>,\n Abhijit Sinha <abhijit.sinha@intel.com>,\n Daniel Martin Buckley <daniel.m.buckley@intel.com>",
        "Date": "Tue, 13 Jul 2021 14:35:42 +0100",
        "Message-Id": "<20210713133542.3550525-11-radu.nicolau@intel.com>",
        "X-Mailer": "git-send-email 2.25.1",
        "In-Reply-To": "<20210713133542.3550525-1-radu.nicolau@intel.com>",
        "References": "<20210713133542.3550525-1-radu.nicolau@intel.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[dpdk-dev] [PATCH 10/10] ipsec: add ol_flags support",
        "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",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "Set mbuff->ol_flags for IPsec packets.\n\nSigned-off-by: Declan Doherty <declan.doherty@intel.com>\nSigned-off-by: Radu Nicolau <radu.nicolau@intel.com>\nSigned-off-by: Abhijit Sinha <abhijit.sinha@intel.com>\nSigned-off-by: Daniel Martin Buckley <daniel.m.buckley@intel.com>\n---\n lib/ipsec/esp_inb.c      | 17 ++++++++++++--\n lib/ipsec/esp_outb.c     | 48 ++++++++++++++++++++++++++++++---------\n lib/ipsec/rte_ipsec_sa.h |  3 ++-\n lib/ipsec/sa.c           | 49 ++++++++++++++++++++++++++++++++++++++--\n lib/ipsec/sa.h           |  8 +++++++\n 5 files changed, 109 insertions(+), 16 deletions(-)",
    "diff": "diff --git a/lib/ipsec/esp_inb.c b/lib/ipsec/esp_inb.c\nindex 8cb4c16302..5fcb41297e 100644\n--- a/lib/ipsec/esp_inb.c\n+++ b/lib/ipsec/esp_inb.c\n@@ -559,7 +559,8 @@ trs_process_step3(struct rte_mbuf *mb)\n  * - tx_offload\n  */\n static inline void\n-tun_process_step3(struct rte_mbuf *mb, uint64_t txof_msk, uint64_t txof_val)\n+tun_process_step3(struct rte_mbuf *mb, uint8_t is_ipv4, uint64_t txof_msk,\n+\tuint64_t txof_val)\n {\n \t/* reset mbuf metatdata: L2/L3 len, packet type */\n \tmb->packet_type = RTE_PTYPE_UNKNOWN;\n@@ -567,6 +568,14 @@ tun_process_step3(struct rte_mbuf *mb, uint64_t txof_msk, uint64_t txof_val)\n \n \t/* clear the PKT_RX_SEC_OFFLOAD flag if set */\n \tmb->ol_flags &= ~PKT_RX_SEC_OFFLOAD;\n+\n+\tif (is_ipv4) {\n+\t\tmb->l3_len = sizeof(struct rte_ipv4_hdr);\n+\t\tmb->ol_flags |= (PKT_TX_IPV4 | PKT_TX_IP_CKSUM);\n+\t} else {\n+\t\tmb->l3_len = sizeof(struct rte_ipv6_hdr);\n+\t\tmb->ol_flags |= PKT_TX_IPV6;\n+\t}\n }\n \n /*\n@@ -618,8 +627,12 @@ tun_process(const struct rte_ipsec_sa *sa, struct rte_mbuf *mb[],\n \t\t\tupdate_tun_inb_l3hdr(sa, outh, inh);\n \n \t\t\t/* update mbuf's metadata */\n-\t\t\ttun_process_step3(mb[i], sa->tx_offload.msk,\n+\t\t\ttun_process_step3(mb[i],\n+\t\t\t\t(sa->type & RTE_IPSEC_SATP_IPV_MASK) ==\n+\t\t\t\t\tRTE_IPSEC_SATP_IPV4 ? 1 : 0,\n+\t\t\t\tsa->tx_offload.msk,\n \t\t\t\tsa->tx_offload.val);\n+\n \t\t\tk++;\n \t\t} else\n \t\t\tdr[i - k] = i;\ndiff --git a/lib/ipsec/esp_outb.c b/lib/ipsec/esp_outb.c\nindex 8a6d09558f..d8e261e6fb 100644\n--- a/lib/ipsec/esp_outb.c\n+++ b/lib/ipsec/esp_outb.c\n@@ -19,7 +19,7 @@\n \n typedef int32_t (*esp_outb_prepare_t)(struct rte_ipsec_sa *sa, rte_be64_t sqc,\n \tconst uint64_t ivp[IPSEC_MAX_IV_QWORD], struct rte_mbuf *mb,\n-\tunion sym_op_data *icv, uint8_t sqh_len);\n+\tunion sym_op_data *icv, uint8_t sqh_len, uint8_t icrypto);\n \n /*\n  * helper function to fill crypto_sym op for cipher+auth algorithms.\n@@ -140,9 +140,9 @@ outb_cop_prepare(struct rte_crypto_op *cop,\n static inline int32_t\n outb_tun_pkt_prepare(struct rte_ipsec_sa *sa, rte_be64_t sqc,\n \tconst uint64_t ivp[IPSEC_MAX_IV_QWORD], struct rte_mbuf *mb,\n-\tunion sym_op_data *icv, uint8_t sqh_len)\n+\tunion sym_op_data *icv, uint8_t sqh_len, uint8_t icrypto)\n {\n-\tuint32_t clen, hlen, l2len, pdlen, pdofs, plen, tlen;\n+\tuint32_t clen, hlen, l2len, l3len, pdlen, pdofs, plen, tlen;\n \tstruct rte_mbuf *ml;\n \tstruct rte_esp_hdr *esph;\n \tstruct rte_esp_tail *espt;\n@@ -154,6 +154,8 @@ outb_tun_pkt_prepare(struct rte_ipsec_sa *sa, rte_be64_t sqc,\n \n \t/* size of ipsec protected data */\n \tl2len = mb->l2_len;\n+\tl3len = mb->l3_len;\n+\n \tplen = mb->pkt_len - l2len;\n \n \t/* number of bytes to encrypt */\n@@ -190,8 +192,26 @@ outb_tun_pkt_prepare(struct rte_ipsec_sa *sa, rte_be64_t sqc,\n \tpt = rte_pktmbuf_mtod_offset(ml, typeof(pt), pdofs);\n \n \t/* update pkt l2/l3 len */\n-\tmb->tx_offload = (mb->tx_offload & sa->tx_offload.msk) |\n-\t\tsa->tx_offload.val;\n+\tif (icrypto) {\n+\t\tmb->tx_offload =\n+\t\t\t(mb->tx_offload & sa->inline_crypto.tx_offload.msk) |\n+\t\t\tsa->inline_crypto.tx_offload.val;\n+\t\tmb->l3_len = l3len;\n+\n+\t\tmb->ol_flags |= sa->inline_crypto.tx_ol_flags;\n+\n+\t\t/* set ip checksum offload for inner */\n+\t\tif ((sa->type & RTE_IPSEC_SATP_IPV_MASK) == RTE_IPSEC_SATP_IPV4)\n+\t\t\tmb->ol_flags |= (PKT_TX_IPV4 | PKT_TX_IP_CKSUM);\n+\t\telse if ((sa->type & RTE_IPSEC_SATP_IPV_MASK)\n+\t\t\t\t== RTE_IPSEC_SATP_IPV6)\n+\t\t\tmb->ol_flags |= PKT_TX_IPV6;\n+\t} else {\n+\t\tmb->tx_offload = (mb->tx_offload & sa->tx_offload.msk) |\n+\t\t\tsa->tx_offload.val;\n+\n+\t\tmb->ol_flags |= sa->tx_ol_flags;\n+\t}\n \n \t/* copy tunnel pkt header */\n \trte_memcpy(ph, sa->hdr, sa->hdr_len);\n@@ -311,7 +331,7 @@ esp_outb_tun_prepare(const struct rte_ipsec_session *ss, struct rte_mbuf *mb[],\n \n \t\t/* try to update the packet itself */\n \t\trc = outb_tun_pkt_prepare(sa, sqc, iv, mb[i], &icv,\n-\t\t\t\t\t  sa->sqh_len);\n+\t\t\t\t\t  sa->sqh_len, 0);\n \t\t/* success, setup crypto op */\n \t\tif (rc >= 0) {\n \t\t\toutb_pkt_xprepare(sa, sqc, &icv);\n@@ -338,7 +358,7 @@ esp_outb_tun_prepare(const struct rte_ipsec_session *ss, struct rte_mbuf *mb[],\n static inline int32_t\n outb_trs_pkt_prepare(struct rte_ipsec_sa *sa, rte_be64_t sqc,\n \tconst uint64_t ivp[IPSEC_MAX_IV_QWORD], struct rte_mbuf *mb,\n-\tunion sym_op_data *icv, uint8_t sqh_len)\n+\tunion sym_op_data *icv, uint8_t sqh_len, uint8_t icrypto __rte_unused)\n {\n \tuint8_t np;\n \tuint32_t clen, hlen, pdlen, pdofs, plen, tlen, uhlen;\n@@ -394,10 +414,16 @@ outb_trs_pkt_prepare(struct rte_ipsec_sa *sa, rte_be64_t sqc,\n \t/* shift L2/L3 headers */\n \tinsert_esph(ph, ph + hlen, uhlen);\n \n+\tif ((sa->type & RTE_IPSEC_SATP_IPV_MASK) == RTE_IPSEC_SATP_IPV4)\n+\t\tmb->ol_flags |= (PKT_TX_IPV4 | PKT_TX_IP_CKSUM);\n+\telse if ((sa->type & RTE_IPSEC_SATP_IPV_MASK) == RTE_IPSEC_SATP_IPV6)\n+\t\tmb->ol_flags |= PKT_TX_IPV6;\n+\n \t/* update ip  header fields */\n \tnp = update_trs_l34hdrs(sa, ph + l2len, mb->pkt_len - sqh_len, l2len,\n \t\t\tl3len, IPPROTO_ESP, tso);\n \n+\n \t/* update spi, seqn and iv */\n \tesph = (struct rte_esp_hdr *)(ph + uhlen);\n \tiv = (uint64_t *)(esph + 1);\n@@ -463,7 +489,7 @@ esp_outb_trs_prepare(const struct rte_ipsec_session *ss, struct rte_mbuf *mb[],\n \n \t\t/* try to update the packet itself */\n \t\trc = outb_trs_pkt_prepare(sa, sqc, iv, mb[i], &icv,\n-\t\t\t\t  sa->sqh_len);\n+\t\t\t\t  sa->sqh_len, 0);\n \t\t/* success, setup crypto op */\n \t\tif (rc >= 0) {\n \t\t\toutb_pkt_xprepare(sa, sqc, &icv);\n@@ -560,7 +586,7 @@ cpu_outb_pkt_prepare(const struct rte_ipsec_session *ss,\n \t\tgen_iv(ivbuf[k], sqc);\n \n \t\t/* try to update the packet itself */\n-\t\trc = prepare(sa, sqc, ivbuf[k], mb[i], &icv, sa->sqh_len);\n+\t\trc = prepare(sa, sqc, ivbuf[k], mb[i], &icv, sa->sqh_len, 0);\n \n \t\t/* success, proceed with preparations */\n \t\tif (rc >= 0) {\n@@ -741,7 +767,7 @@ inline_outb_tun_pkt_process(const struct rte_ipsec_session *ss,\n \t\tgen_iv(iv, sqc);\n \n \t\t/* try to update the packet itself */\n-\t\trc = outb_tun_pkt_prepare(sa, sqc, iv, mb[i], &icv, 0);\n+\t\trc = outb_tun_pkt_prepare(sa, sqc, iv, mb[i], &icv, 0, 1);\n \n \t\tk += (rc >= 0);\n \n@@ -808,7 +834,7 @@ inline_outb_trs_pkt_process(const struct rte_ipsec_session *ss,\n \t\tgen_iv(iv, sqc);\n \n \t\t/* try to update the packet itself */\n-\t\trc = outb_trs_pkt_prepare(sa, sqc, iv, mb[i], &icv, 0);\n+\t\trc = outb_trs_pkt_prepare(sa, sqc, iv, mb[i], &icv, 0, 0);\n \n \t\tk += (rc >= 0);\n \ndiff --git a/lib/ipsec/rte_ipsec_sa.h b/lib/ipsec/rte_ipsec_sa.h\nindex 40d1e70d45..3c36dcaa77 100644\n--- a/lib/ipsec/rte_ipsec_sa.h\n+++ b/lib/ipsec/rte_ipsec_sa.h\n@@ -38,7 +38,8 @@ struct rte_ipsec_sa_prm {\n \tunion {\n \t\tstruct {\n \t\t\tuint8_t hdr_len;     /**< tunnel header len */\n-\t\t\tuint8_t hdr_l3_off;  /**< offset for IPv4/IPv6 header */\n+\t\t\tuint8_t hdr_l3_off;   /**< tunnel l3 header len */\n+\t\t\tuint8_t hdr_l3_len;   /**< tunnel l3 header len */\n \t\t\tuint8_t next_proto;  /**< next header protocol */\n \t\t\tconst void *hdr;     /**< tunnel header template */\n \t\t} tun; /**< tunnel mode related parameters */\ndiff --git a/lib/ipsec/sa.c b/lib/ipsec/sa.c\nindex 242fdcd461..51f71b30c6 100644\n--- a/lib/ipsec/sa.c\n+++ b/lib/ipsec/sa.c\n@@ -17,6 +17,8 @@\n \n #define MBUF_MAX_L2_LEN\t\tRTE_LEN2MASK(RTE_MBUF_L2_LEN_BITS, uint64_t)\n #define MBUF_MAX_L3_LEN\t\tRTE_LEN2MASK(RTE_MBUF_L3_LEN_BITS, uint64_t)\n+#define MBUF_MAX_TSO_LEN\tRTE_LEN2MASK(RTE_MBUF_TSO_SEGSZ_BITS, uint64_t)\n+#define MBUF_MAX_OL3_LEN\tRTE_LEN2MASK(RTE_MBUF_OUTL3_LEN_BITS, uint64_t)\n \n /* some helper structures */\n struct crypto_xform {\n@@ -348,6 +350,11 @@ esp_outb_init(struct rte_ipsec_sa *sa, uint32_t hlen, uint64_t sqn)\n \tsa->cofs.ofs.cipher.head = sa->ctp.cipher.offset - sa->ctp.auth.offset;\n \tsa->cofs.ofs.cipher.tail = (sa->ctp.auth.offset + sa->ctp.auth.length) -\n \t\t\t(sa->ctp.cipher.offset + sa->ctp.cipher.length);\n+\n+\tif (sa->type & RTE_IPSEC_SATP_MODE_TUNLV4)\n+\t\tsa->tx_ol_flags |= (PKT_TX_IPV4 | PKT_TX_IP_CKSUM);\n+\telse if (sa->type & RTE_IPSEC_SATP_MODE_TUNLV6)\n+\t\tsa->tx_ol_flags |= PKT_TX_IPV6;\n }\n \n /*\n@@ -362,9 +369,43 @@ esp_outb_tun_init(struct rte_ipsec_sa *sa, const struct rte_ipsec_sa_prm *prm)\n \tsa->hdr_len = prm->tun.hdr_len;\n \tsa->hdr_l3_off = prm->tun.hdr_l3_off;\n \n+\n+\t/* update l2_len and l3_len fields for outbound mbuf */\n+\tsa->inline_crypto.tx_offload.val = rte_mbuf_tx_offload(\n+\t\t\t0,\t\t\t/* iL2_LEN */\n+\t\t\t0,\t\t\t/* iL3_LEN */\n+\t\t\t0,\t\t\t/* iL4_LEN */\n+\t\t\t0,\t\t\t/* TSO_SEG_SZ */\n+\t\t\tprm->tun.hdr_l3_len,\t/* oL3_LEN */\n+\t\t\tprm->tun.hdr_l3_off,\t/* oL2_LEN */\n+\t\t\t0);\n+\n+\tsa->inline_crypto.tx_ol_flags |= PKT_TX_TUNNEL_ESP;\n+\n+\tif (sa->type & RTE_IPSEC_SATP_MODE_TUNLV4)\n+\t\tsa->inline_crypto.tx_ol_flags |= PKT_TX_OUTER_IPV4;\n+\telse if (sa->type & RTE_IPSEC_SATP_MODE_TUNLV6)\n+\t\tsa->inline_crypto.tx_ol_flags |= PKT_TX_OUTER_IPV6;\n+\n+\tif (sa->inline_crypto.tx_ol_flags & PKT_TX_OUTER_IPV4)\n+\t\tsa->inline_crypto.tx_ol_flags |= PKT_TX_OUTER_IP_CKSUM;\n+\tif (sa->tx_ol_flags & PKT_TX_IPV4)\n+\t\tsa->inline_crypto.tx_ol_flags |= PKT_TX_IP_CKSUM;\n+\n \t/* update l2_len and l3_len fields for outbound mbuf */\n-\tsa->tx_offload.val = rte_mbuf_tx_offload(sa->hdr_l3_off,\n-\t\tsa->hdr_len - sa->hdr_l3_off, 0, 0, 0, 0, 0);\n+\tsa->tx_offload.val = rte_mbuf_tx_offload(\n+\t\t\tprm->tun.hdr_l3_off,\t/* iL2_LEN */\n+\t\t\tprm->tun.hdr_l3_len,\t/* iL3_LEN */\n+\t\t\t0,\t\t\t/* iL4_LEN */\n+\t\t\t0,\t\t\t/* TSO_SEG_SZ */\n+\t\t\t0,\t\t\t/* oL3_LEN */\n+\t\t\t0,\t\t\t/* oL2_LEN */\n+\t\t\t0);\n+\n+\tif (sa->type & RTE_IPSEC_SATP_MODE_TUNLV4)\n+\t\tsa->tx_ol_flags |= (PKT_TX_IPV4 | PKT_TX_IP_CKSUM);\n+\telse if (sa->type & RTE_IPSEC_SATP_MODE_TUNLV6)\n+\t\tsa->tx_ol_flags |= PKT_TX_IPV6;\n \n \tmemcpy(sa->hdr, prm->tun.hdr, sa->hdr_len);\n \n@@ -473,6 +514,10 @@ esp_sa_init(struct rte_ipsec_sa *sa, const struct rte_ipsec_sa_prm *prm,\n \tsa->salt = prm->ipsec_xform.salt;\n \n \t/* preserve all values except l2_len and l3_len */\n+\tsa->inline_crypto.tx_offload.msk =\n+\t\t~rte_mbuf_tx_offload(MBUF_MAX_L2_LEN, MBUF_MAX_L3_LEN,\n+\t\t\t\t0, 0, MBUF_MAX_OL3_LEN, 0, 0);\n+\n \tsa->tx_offload.msk =\n \t\t~rte_mbuf_tx_offload(MBUF_MAX_L2_LEN, MBUF_MAX_L3_LEN,\n \t\t\t\t0, 0, 0, 0, 0);\ndiff --git a/lib/ipsec/sa.h b/lib/ipsec/sa.h\nindex b9b7ebec5b..172d094c4b 100644\n--- a/lib/ipsec/sa.h\n+++ b/lib/ipsec/sa.h\n@@ -101,6 +101,14 @@ struct rte_ipsec_sa {\n \t\tuint64_t msk;\n \t\tuint64_t val;\n \t} tx_offload;\n+\tuint64_t tx_ol_flags;\n+\tstruct {\n+\t\tuint64_t tx_ol_flags;\n+\t\tstruct {\n+\t\t\tuint64_t msk;\n+\t\t\tuint64_t val;\n+\t\t} tx_offload;\n+\t} inline_crypto;\n \tstruct {\n \t\tuint16_t sport;\n \t\tuint16_t dport;\n",
    "prefixes": [
        "10/10"
    ]
}