get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 851125,
    "url": "http://patchwork.ozlabs.org/api/patches/851125/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/1513728002-7643-9-git-send-email-shannon.nelson@oracle.com/",
    "project": {
        "id": 46,
        "url": "http://patchwork.ozlabs.org/api/projects/46/?format=api",
        "name": "Intel Wired Ethernet development",
        "link_name": "intel-wired-lan",
        "list_id": "intel-wired-lan.osuosl.org",
        "list_email": "intel-wired-lan@osuosl.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": "",
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<1513728002-7643-9-git-send-email-shannon.nelson@oracle.com>",
    "list_archive_url": null,
    "date": "2017-12-20T00:00:00",
    "name": "[v3,next-queue,08/10] ixgbe: process the Tx ipsec offload",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "92f216b6a642ef226f2f00f4234da16c57013f33",
    "submitter": {
        "id": 70766,
        "url": "http://patchwork.ozlabs.org/api/people/70766/?format=api",
        "name": "Shannon Nelson",
        "email": "shannon.nelson@oracle.com"
    },
    "delegate": {
        "id": 68,
        "url": "http://patchwork.ozlabs.org/api/users/68/?format=api",
        "username": "jtkirshe",
        "first_name": "Jeff",
        "last_name": "Kirsher",
        "email": "jeffrey.t.kirsher@intel.com"
    },
    "mbox": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/1513728002-7643-9-git-send-email-shannon.nelson@oracle.com/mbox/",
    "series": [
        {
            "id": 19548,
            "url": "http://patchwork.ozlabs.org/api/series/19548/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/list/?series=19548",
            "date": "2017-12-19T23:59:56",
            "name": "ixgbe: Add ipsec offload",
            "version": 3,
            "mbox": "http://patchwork.ozlabs.org/series/19548/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/851125/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/851125/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<intel-wired-lan-bounces@osuosl.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "intel-wired-lan@lists.osuosl.org"
        ],
        "Delivered-To": [
            "patchwork-incoming@bilbo.ozlabs.org",
            "intel-wired-lan@lists.osuosl.org"
        ],
        "Authentication-Results": [
            "ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=osuosl.org\n\t(client-ip=140.211.166.136; helo=silver.osuosl.org;\n\tenvelope-from=intel-wired-lan-bounces@osuosl.org;\n\treceiver=<UNKNOWN>)",
            "ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=oracle.com header.i=@oracle.com\n\theader.b=\"vlqQORfX\"; dkim-atps=neutral"
        ],
        "Received": [
            "from silver.osuosl.org (smtp3.osuosl.org [140.211.166.136])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3z1ZfM6CTJz9sNr\n\tfor <incoming@patchwork.ozlabs.org>;\n\tWed, 20 Dec 2017 11:00:27 +1100 (AEDT)",
            "from localhost (localhost [127.0.0.1])\n\tby silver.osuosl.org (Postfix) with ESMTP id 6EF8530188;\n\tWed, 20 Dec 2017 00:00:26 +0000 (UTC)",
            "from silver.osuosl.org ([127.0.0.1])\n\tby localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)\n\twith ESMTP id l478NVwImGvZ; Wed, 20 Dec 2017 00:00:24 +0000 (UTC)",
            "from ash.osuosl.org (ash.osuosl.org [140.211.166.34])\n\tby silver.osuosl.org (Postfix) with ESMTP id 796873016F;\n\tWed, 20 Dec 2017 00:00:24 +0000 (UTC)",
            "from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138])\n\tby ash.osuosl.org (Postfix) with ESMTP id 67C491CEF6E\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tWed, 20 Dec 2017 00:00:22 +0000 (UTC)",
            "from localhost (localhost [127.0.0.1])\n\tby whitealder.osuosl.org (Postfix) with ESMTP id 61C068862F\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tWed, 20 Dec 2017 00:00:22 +0000 (UTC)",
            "from whitealder.osuosl.org ([127.0.0.1])\n\tby localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)\n\twith ESMTP id BHSRPM-rpLnV for <intel-wired-lan@lists.osuosl.org>;\n\tWed, 20 Dec 2017 00:00:21 +0000 (UTC)",
            "from aserp2120.oracle.com (aserp2120.oracle.com [141.146.126.78])\n\tby whitealder.osuosl.org (Postfix) with ESMTPS id 6AD3287FA6\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tWed, 20 Dec 2017 00:00:21 +0000 (UTC)",
            "from pps.filterd (aserp2120.oracle.com [127.0.0.1])\n\tby aserp2120.oracle.com (8.16.0.21/8.16.0.21) with SMTP id\n\tvBJNqEQe016206; Wed, 20 Dec 2017 00:00:18 GMT",
            "from userv0022.oracle.com (userv0022.oracle.com [156.151.31.74])\n\tby aserp2120.oracle.com with ESMTP id 2eycsu0adc-1\n\t(version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256\n\tverify=OK); Wed, 20 Dec 2017 00:00:17 +0000",
            "from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236])\n\tby userv0022.oracle.com (8.14.4/8.14.4) with ESMTP id\n\tvBK00Gke022361\n\t(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256\n\tverify=FAIL); Wed, 20 Dec 2017 00:00:16 GMT",
            "from abhmp0018.oracle.com (abhmp0018.oracle.com [141.146.116.24])\n\tby aserv0122.oracle.com (8.14.4/8.14.4) with ESMTP id\n\tvBK00GiB028359; Wed, 20 Dec 2017 00:00:16 GMT",
            "from slnelson-mint18.us.oracle.com (/10.159.142.109)\n\tby default (Oracle Beehive Gateway v4.0)\n\twith ESMTP ; Tue, 19 Dec 2017 16:00:15 -0800"
        ],
        "X-Virus-Scanned": [
            "amavisd-new at osuosl.org",
            "amavisd-new at osuosl.org"
        ],
        "X-Greylist": "domain auto-whitelisted by SQLgrey-1.7.6",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com;\n\th=from : to : cc :\n\tsubject : date : message-id : in-reply-to : references;\n\ts=corp-2017-10-26; \n\tbh=s0Xf6pi13LJpN55a6U3jFgrgBMsrNkkASueVFmUPeww=;\n\tb=vlqQORfXielJ8Y1FSey6Bjj6PMw2+jJGmvoeatKNocxt21wp1ldtxED4qCiPJyeY3qlQ\n\tPIA7RXzWneSdSl07gXx7CLfbDZOn3kB3oH4t4WL8DWGnDGwaZFHlgGO+6xjKEFJluZ1k\n\tk35MMlNk3X/CUlAgcpkiKfnuOO4+YqoK5sTv1KC3lP4Ntcyl/LvbftHOhPIGxugaA3oa\n\tbnBTXGoshyUX5quDFUQqUzXdtebjFZQ7/KTsK+at97NZ9AnaUzBO2/x7zSfGCgdkfJ8f\n\t+gxi543OY54i5ymkS32UIS16tiR8bxXSwHoPPp1orjHufrU0McN7TiYkYF1YBv/dPeXd\n\tdA== ",
        "From": "Shannon Nelson <shannon.nelson@oracle.com>",
        "To": "intel-wired-lan@lists.osuosl.org, jeffrey.t.kirsher@intel.com",
        "Date": "Tue, 19 Dec 2017 16:00:00 -0800",
        "Message-Id": "<1513728002-7643-9-git-send-email-shannon.nelson@oracle.com>",
        "X-Mailer": "git-send-email 2.7.4",
        "In-Reply-To": "<1513728002-7643-1-git-send-email-shannon.nelson@oracle.com>",
        "References": "<1513728002-7643-1-git-send-email-shannon.nelson@oracle.com>",
        "X-Proofpoint-Virus-Version": "vendor=nai engine=5900 definitions=8750\n\tsignatures=668650",
        "X-Proofpoint-Spam-Details": "rule=notspam policy=default score=0 suspectscore=0\n\tmalwarescore=0\n\tphishscore=0 bulkscore=0 spamscore=0 mlxscore=0 mlxlogscore=999\n\tadultscore=0 classifier=spam adjust=0 reason=mlx scancount=1\n\tengine=8.0.1-1711220000 definitions=main-1712190335",
        "Subject": "[Intel-wired-lan] [PATCH v3 next-queue 08/10] ixgbe: process the Tx\n\tipsec offload",
        "X-BeenThere": "intel-wired-lan@osuosl.org",
        "X-Mailman-Version": "2.1.24",
        "Precedence": "list",
        "List-Id": "Intel Wired Ethernet Linux Kernel Driver Development\n\t<intel-wired-lan.osuosl.org>",
        "List-Unsubscribe": "<https://lists.osuosl.org/mailman/options/intel-wired-lan>, \n\t<mailto:intel-wired-lan-request@osuosl.org?subject=unsubscribe>",
        "List-Archive": "<http://lists.osuosl.org/pipermail/intel-wired-lan/>",
        "List-Post": "<mailto:intel-wired-lan@osuosl.org>",
        "List-Help": "<mailto:intel-wired-lan-request@osuosl.org?subject=help>",
        "List-Subscribe": "<https://lists.osuosl.org/mailman/listinfo/intel-wired-lan>, \n\t<mailto:intel-wired-lan-request@osuosl.org?subject=subscribe>",
        "Cc": "steffen.klassert@secunet.com, sowmini.varadhan@oracle.com,\n\tnetdev@vger.kernel.org",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=\"us-ascii\"",
        "Content-Transfer-Encoding": "7bit",
        "Errors-To": "intel-wired-lan-bounces@osuosl.org",
        "Sender": "\"Intel-wired-lan\" <intel-wired-lan-bounces@osuosl.org>"
    },
    "content": "If the skb has a security association referenced in the skb, then\nset up the Tx descriptor with the ipsec offload bits.  While we're\nhere, we fix an oddly named field in the context descriptor struct.\n\nv3: added ifdef CONFIG_XFRM_OFFLOAD check around call to ixgbe_ipsec_tx()\n\nv2: use ihl != 5\n    move the ixgbe_ipsec_tx() call to near the call to ixgbe_tso()\n    drop the ipsec packet if the tx offload setup fails\n    simplify the ixgbe_ipsec_tx() parameters by using 'first'\n    leave out the ixgbe_tso() changes since we don't support TSO\n       with ipsec yet.\n\nSigned-off-by: Shannon Nelson <shannon.nelson@oracle.com>\n---\n drivers/net/ethernet/intel/ixgbe/ixgbe.h       | 10 +++-\n drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.c | 79 ++++++++++++++++++++++++++\n drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c   |  4 +-\n drivers/net/ethernet/intel/ixgbe/ixgbe_main.c  | 26 +++++++--\n drivers/net/ethernet/intel/ixgbe/ixgbe_type.h  |  2 +-\n 5 files changed, 112 insertions(+), 9 deletions(-)",
    "diff": "diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe.h b/drivers/net/ethernet/intel/ixgbe/ixgbe.h\nindex a094b23..3d2b7bf 100644\n--- a/drivers/net/ethernet/intel/ixgbe/ixgbe.h\n+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe.h\n@@ -171,10 +171,11 @@ enum ixgbe_tx_flags {\n \tIXGBE_TX_FLAGS_CC\t= 0x08,\n \tIXGBE_TX_FLAGS_IPV4\t= 0x10,\n \tIXGBE_TX_FLAGS_CSUM\t= 0x20,\n+\tIXGBE_TX_FLAGS_IPSEC\t= 0x40,\n \n \t/* software defined flags */\n-\tIXGBE_TX_FLAGS_SW_VLAN\t= 0x40,\n-\tIXGBE_TX_FLAGS_FCOE\t= 0x80,\n+\tIXGBE_TX_FLAGS_SW_VLAN\t= 0x80,\n+\tIXGBE_TX_FLAGS_FCOE\t= 0x100,\n };\n \n /* VLAN info */\n@@ -1014,6 +1015,8 @@ void ixgbe_ipsec_restore(struct ixgbe_adapter *adapter);\n void ixgbe_ipsec_rx(struct ixgbe_ring *rx_ring,\n \t\t    union ixgbe_adv_rx_desc *rx_desc,\n \t\t    struct sk_buff *skb);\n+int ixgbe_ipsec_tx(struct ixgbe_ring *tx_ring, struct ixgbe_tx_buffer *first,\n+\t\t   struct ixgbe_ipsec_tx_data *itd);\n #else\n static inline void ixgbe_init_ipsec_offload(struct ixgbe_adapter *adapter) { };\n static inline void ixgbe_stop_ipsec_offload(struct ixgbe_adapter *adapter) { };\n@@ -1021,5 +1024,8 @@ static inline void ixgbe_ipsec_restore(struct ixgbe_adapter *adapter) { };\n static inline void ixgbe_ipsec_rx(struct ixgbe_ring *rx_ring,\n \t\t\t\t  union ixgbe_adv_rx_desc *rx_desc,\n \t\t\t\t  struct sk_buff *skb) { };\n+static inline int ixgbe_ipsec_tx(struct ixgbe_ring *tx_ring,\n+\t\t\t\t struct ixgbe_tx_buffer *first,\n+\t\t\t\t struct ixgbe_ipsec_tx_data *itd) { return 0; };\n #endif /* CONFIG_XFRM_OFFLOAD */\n #endif /* _IXGBE_H_ */\ndiff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.c\nindex a9b8f5c..c2fd2ac 100644\n--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.c\n+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.c\n@@ -695,12 +695,91 @@ static void ixgbe_ipsec_del_sa(struct xfrm_state *xs)\n \t}\n }\n \n+/**\n+ * ixgbe_ipsec_offload_ok - can this packet use the xfrm hw offload\n+ * @skb: current data packet\n+ * @xs: pointer to transformer state struct\n+ **/\n+static bool ixgbe_ipsec_offload_ok(struct sk_buff *skb, struct xfrm_state *xs)\n+{\n+\tif (xs->props.family == AF_INET) {\n+\t\t/* Offload with IPv4 options is not supported yet */\n+\t\tif (ip_hdr(skb)->ihl != 5)\n+\t\t\treturn false;\n+\t} else {\n+\t\t/* Offload with IPv6 extension headers is not support yet */\n+\t\tif (ipv6_ext_hdr(ipv6_hdr(skb)->nexthdr))\n+\t\t\treturn false;\n+\t}\n+\n+\treturn true;\n+}\n+\n static const struct xfrmdev_ops ixgbe_xfrmdev_ops = {\n \t.xdo_dev_state_add = ixgbe_ipsec_add_sa,\n \t.xdo_dev_state_delete = ixgbe_ipsec_del_sa,\n+\t.xdo_dev_offload_ok = ixgbe_ipsec_offload_ok,\n };\n \n /**\n+ * ixgbe_ipsec_tx - setup Tx flags for ipsec offload\n+ * @tx_ring: outgoing context\n+ * @first: current data packet\n+ * @itd: ipsec Tx data for later use in building context descriptor\n+ **/\n+int ixgbe_ipsec_tx(struct ixgbe_ring *tx_ring,\n+\t\t   struct ixgbe_tx_buffer *first,\n+\t\t   struct ixgbe_ipsec_tx_data *itd)\n+{\n+\tstruct ixgbe_adapter *adapter = netdev_priv(tx_ring->netdev);\n+\tstruct ixgbe_ipsec *ipsec = adapter->ipsec;\n+\tstruct xfrm_state *xs;\n+\tstruct tx_sa *tsa;\n+\n+\tif (!first->skb->sp->len) {\n+\t\tnetdev_err(tx_ring->netdev, \"%s: no xfrm state len = %d\\n\",\n+\t\t\t   __func__, first->skb->sp->len);\n+\t\treturn 0;\n+\t}\n+\n+\txs = xfrm_input_state(first->skb);\n+\tif (!xs) {\n+\t\tnetdev_err(tx_ring->netdev, \"%s: no xfrm_input_state() xs = %p\\n\",\n+\t\t\t   __func__, xs);\n+\t\treturn 0;\n+\t}\n+\n+\titd->sa_idx = xs->xso.offload_handle - IXGBE_IPSEC_BASE_TX_INDEX;\n+\tif (itd->sa_idx > IXGBE_IPSEC_MAX_SA_COUNT) {\n+\t\tnetdev_err(tx_ring->netdev, \"%s: bad sa_idx=%d handle=%lu\\n\",\n+\t\t\t   __func__, itd->sa_idx, xs->xso.offload_handle);\n+\t\treturn 0;\n+\t}\n+\n+\ttsa = &ipsec->tx_tbl[itd->sa_idx];\n+\tif (!tsa->used) {\n+\t\tnetdev_err(tx_ring->netdev, \"%s: unused sa_idx=%d\\n\",\n+\t\t\t   __func__, itd->sa_idx);\n+\t\treturn 0;\n+\t}\n+\n+\tfirst->tx_flags |= IXGBE_TX_FLAGS_IPSEC | IXGBE_TX_FLAGS_CC;\n+\n+\titd->flags = 0;\n+\tif (xs->id.proto == IPPROTO_ESP) {\n+\t\titd->flags |= IXGBE_ADVTXD_TUCMD_IPSEC_TYPE_ESP |\n+\t\t\t      IXGBE_ADVTXD_TUCMD_L4T_TCP;\n+\t\tif (first->protocol == htons(ETH_P_IP))\n+\t\t\titd->flags |= IXGBE_ADVTXD_TUCMD_IPV4;\n+\t\titd->trailer_len = xs->props.trailer_len;\n+\t}\n+\tif (tsa->encrypt)\n+\t\titd->flags |= IXGBE_ADVTXD_TUCMD_IPSEC_ENCRYPT_EN;\n+\n+\treturn 1;\n+}\n+\n+/**\n  * ixgbe_ipsec_rx - decode ipsec bits from Rx descriptor\n  * @rx_ring: receiving ring\n  * @rx_desc: receive data descriptor\ndiff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c\nindex f1bfae0..d7875b3 100644\n--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c\n+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c\n@@ -1261,7 +1261,7 @@ void ixgbe_clear_interrupt_scheme(struct ixgbe_adapter *adapter)\n }\n \n void ixgbe_tx_ctxtdesc(struct ixgbe_ring *tx_ring, u32 vlan_macip_lens,\n-\t\t       u32 fcoe_sof_eof, u32 type_tucmd, u32 mss_l4len_idx)\n+\t\t       u32 fceof_saidx, u32 type_tucmd, u32 mss_l4len_idx)\n {\n \tstruct ixgbe_adv_tx_context_desc *context_desc;\n \tu16 i = tx_ring->next_to_use;\n@@ -1275,7 +1275,7 @@ void ixgbe_tx_ctxtdesc(struct ixgbe_ring *tx_ring, u32 vlan_macip_lens,\n \ttype_tucmd |= IXGBE_TXD_CMD_DEXT | IXGBE_ADVTXD_DTYP_CTXT;\n \n \tcontext_desc->vlan_macip_lens\t= cpu_to_le32(vlan_macip_lens);\n-\tcontext_desc->seqnum_seed\t= cpu_to_le32(fcoe_sof_eof);\n+\tcontext_desc->fceof_saidx\t= cpu_to_le32(fceof_saidx);\n \tcontext_desc->type_tucmd_mlhl\t= cpu_to_le32(type_tucmd);\n \tcontext_desc->mss_l4len_idx\t= cpu_to_le32(mss_l4len_idx);\n }\ndiff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c\nindex 0ee1e5e..6b9a9b2 100644\n--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c\n+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c\n@@ -7756,10 +7756,12 @@ static inline bool ixgbe_ipv6_csum_is_sctp(struct sk_buff *skb)\n }\n \n static void ixgbe_tx_csum(struct ixgbe_ring *tx_ring,\n-\t\t\t  struct ixgbe_tx_buffer *first)\n+\t\t\t  struct ixgbe_tx_buffer *first,\n+\t\t\t  struct ixgbe_ipsec_tx_data *itd)\n {\n \tstruct sk_buff *skb = first->skb;\n \tu32 vlan_macip_lens = 0;\n+\tu32 fceof_saidx = 0;\n \tu32 type_tucmd = 0;\n \n \tif (skb->ip_summed != CHECKSUM_PARTIAL) {\n@@ -7800,7 +7802,12 @@ static void ixgbe_tx_csum(struct ixgbe_ring *tx_ring,\n \tvlan_macip_lens |= skb_network_offset(skb) << IXGBE_ADVTXD_MACLEN_SHIFT;\n \tvlan_macip_lens |= first->tx_flags & IXGBE_TX_FLAGS_VLAN_MASK;\n \n-\tixgbe_tx_ctxtdesc(tx_ring, vlan_macip_lens, 0, type_tucmd, 0);\n+\tif (first->tx_flags & IXGBE_TX_FLAGS_IPSEC) {\n+\t\tfceof_saidx |= itd->sa_idx;\n+\t\ttype_tucmd |= itd->flags | itd->trailer_len;\n+\t}\n+\n+\tixgbe_tx_ctxtdesc(tx_ring, vlan_macip_lens, fceof_saidx, type_tucmd, 0);\n }\n \n #define IXGBE_SET_FLAG(_input, _flag, _result) \\\n@@ -7843,11 +7850,16 @@ static void ixgbe_tx_olinfo_status(union ixgbe_adv_tx_desc *tx_desc,\n \t\t\t\t\tIXGBE_TX_FLAGS_CSUM,\n \t\t\t\t\tIXGBE_ADVTXD_POPTS_TXSM);\n \n-\t/* enble IPv4 checksum for TSO */\n+\t/* enable IPv4 checksum for TSO */\n \tolinfo_status |= IXGBE_SET_FLAG(tx_flags,\n \t\t\t\t\tIXGBE_TX_FLAGS_IPV4,\n \t\t\t\t\tIXGBE_ADVTXD_POPTS_IXSM);\n \n+\t/* enable IPsec */\n+\tolinfo_status |= IXGBE_SET_FLAG(tx_flags,\n+\t\t\t\t\tIXGBE_TX_FLAGS_IPSEC,\n+\t\t\t\t\tIXGBE_ADVTXD_POPTS_IPSEC);\n+\n \t/*\n \t * Check Context must be set if Tx switch is enabled, which it\n \t * always is for case where virtual functions are running\n@@ -8306,6 +8318,7 @@ netdev_tx_t ixgbe_xmit_frame_ring(struct sk_buff *skb,\n \tu32 tx_flags = 0;\n \tunsigned short f;\n \tu16 count = TXD_USE_COUNT(skb_headlen(skb));\n+\tstruct ixgbe_ipsec_tx_data ipsec_tx = { 0 };\n \t__be16 protocol = skb->protocol;\n \tu8 hdr_len = 0;\n \n@@ -8410,11 +8423,16 @@ netdev_tx_t ixgbe_xmit_frame_ring(struct sk_buff *skb,\n \t}\n \n #endif /* IXGBE_FCOE */\n+\n+#ifdef CONFIG_XFRM_OFFLOAD\n+\tif (skb->sp && !ixgbe_ipsec_tx(tx_ring, first, &ipsec_tx))\n+\t\tgoto out_drop;\n+#endif\n \ttso = ixgbe_tso(tx_ring, first, &hdr_len);\n \tif (tso < 0)\n \t\tgoto out_drop;\n \telse if (!tso)\n-\t\tixgbe_tx_csum(tx_ring, first);\n+\t\tixgbe_tx_csum(tx_ring, first, &ipsec_tx);\n \n \t/* add the ATR filter if ATR is on */\n \tif (test_bit(__IXGBE_TX_FDIR_INIT_DONE, &tx_ring->state))\ndiff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h b/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h\nindex 3df0763..0ac725fa 100644\n--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h\n+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h\n@@ -2856,7 +2856,7 @@ union ixgbe_adv_rx_desc {\n /* Context descriptors */\n struct ixgbe_adv_tx_context_desc {\n \t__le32 vlan_macip_lens;\n-\t__le32 seqnum_seed;\n+\t__le32 fceof_saidx;\n \t__le32 type_tucmd_mlhl;\n \t__le32 mss_l4len_idx;\n };\n",
    "prefixes": [
        "v3",
        "next-queue",
        "08/10"
    ]
}