get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 105578,
    "url": "http://patchwork.dpdk.org/api/patches/105578/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/patch/20220103150813.1694888-4-gakhil@marvell.com/",
    "project": {
        "id": 1,
        "url": "http://patchwork.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": "<20220103150813.1694888-4-gakhil@marvell.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20220103150813.1694888-4-gakhil@marvell.com",
    "date": "2022-01-03T15:08:08",
    "name": "[3/8] ethdev: add mbuf dynfield for incomplete IP reassembly",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "2c3cbfcb3cfa3557b65ad08774e8459fac687441",
    "submitter": {
        "id": 2094,
        "url": "http://patchwork.dpdk.org/api/people/2094/?format=api",
        "name": "Akhil Goyal",
        "email": "gakhil@marvell.com"
    },
    "delegate": {
        "id": 1,
        "url": "http://patchwork.dpdk.org/api/users/1/?format=api",
        "username": "tmonjalo",
        "first_name": "Thomas",
        "last_name": "Monjalon",
        "email": "thomas@monjalon.net"
    },
    "mbox": "http://patchwork.dpdk.org/project/dpdk/patch/20220103150813.1694888-4-gakhil@marvell.com/mbox/",
    "series": [
        {
            "id": 21052,
            "url": "http://patchwork.dpdk.org/api/series/21052/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=21052",
            "date": "2022-01-03T15:08:05",
            "name": "ethdev: introduce IP reassembly offload",
            "version": 1,
            "mbox": "http://patchwork.dpdk.org/series/21052/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/105578/comments/",
    "check": "warning",
    "checks": "http://patchwork.dpdk.org/api/patches/105578/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 D86DEA04A3;\n\tMon,  3 Jan 2022 16:08:53 +0100 (CET)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 8DEFB4114A;\n\tMon,  3 Jan 2022 16:08:48 +0100 (CET)",
            "from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com\n [67.231.148.174])\n by mails.dpdk.org (Postfix) with ESMTP id 4EB4741140\n for <dev@dpdk.org>; Mon,  3 Jan 2022 16:08:46 +0100 (CET)",
            "from pps.filterd (m0045849.ppops.net [127.0.0.1])\n by mx0a-0016f401.pphosted.com (8.16.1.2/8.16.1.2) with ESMTP id\n 203CYssE024887;\n Mon, 3 Jan 2022 07:08:44 -0800",
            "from dc5-exch02.marvell.com ([199.233.59.182])\n by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 3dbmvswf9c-1\n (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT);\n Mon, 03 Jan 2022 07:08:44 -0800",
            "from DC5-EXCH02.marvell.com (10.69.176.39) by DC5-EXCH02.marvell.com\n (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.18;\n Mon, 3 Jan 2022 07:08:43 -0800",
            "from maili.marvell.com (10.69.176.80) by DC5-EXCH02.marvell.com\n (10.69.176.39) with Microsoft SMTP Server id 15.0.1497.18 via Frontend\n Transport; Mon, 3 Jan 2022 07:08:43 -0800",
            "from localhost.localdomain (unknown [10.28.48.55])\n by maili.marvell.com (Postfix) with ESMTP id A6CD13F70A9;\n Mon,  3 Jan 2022 07:08:39 -0800 (PST)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com;\n h=from : to : cc :\n subject : date : message-id : in-reply-to : references : mime-version :\n content-transfer-encoding : content-type; s=pfpt0220;\n bh=mKGWMUszaF/3HqAKOR01CZWPOBfRBsNVTwEfZRNEXW0=;\n b=E+SEbs6us45ufBb4SUesjKOKPPdq7+Nq+QphIcW0F6UPswZDjq6VHVVhBXzf+CVYODrC\n 1lV6e/Ot4uLId4peBxL49Pn0HLpihTVn6iYtzNkz4rSlKSU7XdpnsUCxiE0ooeXL3pZk\n sscZvYv4qAK0ZQVIR6E5RQqqukt6C/IJJzfbfF/V5iAn56Rem4ikkXeqVFgFsdHUudIE\n AjYUbIouxxCs3pVvq/Nkj4spIdfNeQhKMNESMnTDnPseV4C+2UtBadjbCIp3fZF9qdU6\n djt1UKU7iZ44DKOeAH5110rrlI1n4+oTX5wI/ayYbbM4laBYekiDqNfF5ymT5ylS8kJb WA==",
        "From": "Akhil Goyal <gakhil@marvell.com>",
        "To": "<dev@dpdk.org>",
        "CC": "<anoobj@marvell.com>, <radu.nicolau@intel.com>,\n <declan.doherty@intel.com>,\n <hemant.agrawal@nxp.com>, <matan@nvidia.com>,\n <konstantin.ananyev@intel.com>, <thomas@monjalon.net>,\n <ferruh.yigit@intel.com>, <andrew.rybchenko@oktetlabs.ru>,\n <olivier.matz@6wind.com>, <rosen.xu@intel.com>, Akhil Goyal\n <gakhil@marvell.com>",
        "Subject": "[PATCH 3/8] ethdev: add mbuf dynfield for incomplete IP reassembly",
        "Date": "Mon, 3 Jan 2022 20:38:08 +0530",
        "Message-ID": "<20220103150813.1694888-4-gakhil@marvell.com>",
        "X-Mailer": "git-send-email 2.25.1",
        "In-Reply-To": "<20220103150813.1694888-1-gakhil@marvell.com>",
        "References": "<20210823100259.1619886-1-gakhil@marvell.com>\n <20220103150813.1694888-1-gakhil@marvell.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-Proofpoint-ORIG-GUID": "zrpnrIphG8LezQAY7D3EiedDNxx590ES",
        "X-Proofpoint-GUID": "zrpnrIphG8LezQAY7D3EiedDNxx590ES",
        "X-Proofpoint-Virus-Version": "vendor=baseguard\n engine=ICAP:2.0.205,Aquarius:18.0.790,Hydra:6.0.425,FMLib:17.11.62.513\n definitions=2022-01-03_06,2022-01-01_01,2021-12-02_01",
        "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": "Hardware IP reassembly may be incomplete for multiple reasons like\nreassembly timeout reached, duplicate fragments, etc.\nTo save application cycles to process these packets again, a new\nmbuf ol_flag (RTE_MBUF_F_RX_IPREASSEMBLY_INCOMPLETE) is added to\nshow that the mbuf received is not reassembled properly.\n\nNow if this flag is set, application can retreive corresponding chain of\nmbufs using mbuf dynfield set by the PMD. Now, it will be upto\napplication to either drop those fragments or wait for more time.\n\nSigned-off-by: Akhil Goyal <gakhil@marvell.com>\n---\n lib/ethdev/ethdev_driver.h |  8 ++++++\n lib/ethdev/rte_ethdev.c    | 16 +++++++++++\n lib/ethdev/rte_ethdev.h    | 57 ++++++++++++++++++++++++++++++++++++++\n lib/ethdev/version.map     |  2 ++\n lib/mbuf/rte_mbuf_core.h   |  3 +-\n 5 files changed, 85 insertions(+), 1 deletion(-)",
    "diff": "diff --git a/lib/ethdev/ethdev_driver.h b/lib/ethdev/ethdev_driver.h\nindex 0ed53c14f3..9a0bab9a61 100644\n--- a/lib/ethdev/ethdev_driver.h\n+++ b/lib/ethdev/ethdev_driver.h\n@@ -1671,6 +1671,14 @@ int\n rte_eth_hairpin_queue_peer_unbind(uint16_t cur_port, uint16_t cur_queue,\n \t\t\t\t  uint32_t direction);\n \n+/**\n+ * @internal\n+ * Register mbuf dynamic field for IP reassembly incomplete case.\n+ */\n+__rte_internal\n+int\n+rte_eth_ip_reass_dynfield_register(void);\n+\n \n /*\n  * Legacy ethdev API used internally by drivers.\ndiff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c\nindex ecc6c1fe37..d53ce4eaca 100644\n--- a/lib/ethdev/rte_ethdev.c\n+++ b/lib/ethdev/rte_ethdev.c\n@@ -6503,6 +6503,22 @@ rte_eth_ip_reassembly_conf_set(uint16_t port_id,\n \t\t       (*dev->dev_ops->ip_reassembly_conf_set)(dev, conf));\n }\n \n+#define RTE_ETH_IP_REASS_DYNFIELD_NAME \"rte_eth_ip_reass_dynfield\"\n+int rte_eth_ip_reass_dynfield_offset = -1;\n+\n+int\n+rte_eth_ip_reass_dynfield_register(void)\n+{\n+\tstatic const struct rte_mbuf_dynfield dynfield_desc = {\n+\t\t.name = RTE_ETH_IP_REASS_DYNFIELD_NAME,\n+\t\t.size = sizeof(rte_eth_ip_reass_dynfield_t),\n+\t\t.align = __alignof__(rte_eth_ip_reass_dynfield_t),\n+\t};\n+\trte_eth_ip_reass_dynfield_offset =\n+\t\trte_mbuf_dynfield_register(&dynfield_desc);\n+\treturn rte_eth_ip_reass_dynfield_offset;\n+}\n+\n RTE_LOG_REGISTER_DEFAULT(rte_eth_dev_logtype, INFO);\n \n RTE_INIT(ethdev_init_telemetry)\ndiff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h\nindex 891f9a6e06..c4024d2265 100644\n--- a/lib/ethdev/rte_ethdev.h\n+++ b/lib/ethdev/rte_ethdev.h\n@@ -5245,6 +5245,63 @@ __rte_experimental\n int rte_eth_ip_reassembly_conf_set(uint16_t port_id,\n \t\t\t\t   struct rte_eth_ip_reass_params *conf);\n \n+/**\n+ * In case of IP reassembly offload failure, ol_flags in mbuf will be set\n+ * with RTE_MBUF_F_RX_IPREASSEMBLY_INCOMPLETE and packets will be returned\n+ * without alteration. The application can retrieve the attached fragments\n+ * using mbuf dynamic field.\n+ */\n+typedef struct {\n+\t/**\n+\t * Next fragment packet. Application should fetch dynamic field of\n+\t * each fragment until a NULL is received and nb_frags is 0.\n+\t */\n+\tstruct rte_mbuf *next_frag;\n+\t/** Time spent(in ms) by HW in waiting for further fragments. */\n+\tuint16_t time_spent;\n+\t/** Number of more fragments attached in mbuf dynamic fields. */\n+\tuint16_t nb_frags;\n+} rte_eth_ip_reass_dynfield_t;\n+\n+extern int rte_eth_ip_reass_dynfield_offset;\n+\n+/**\n+ * @warning\n+ * @b EXPERIMENTAL: this API may change without prior notice\n+ *\n+ * Get pointer to mbuf dynamic field for getting incomplete\n+ * reassembled fragments.\n+ *\n+ * For performance reason, no check is done,\n+ * the dynamic field may not be registered.\n+ * @see rte_eth_ip_reass_dynfield_is_registered\n+ *\n+ * @param\tmbuf\tpacket to access\n+ * @return pointer to mbuf dynamic field\n+ */\n+__rte_experimental\n+static inline rte_eth_ip_reass_dynfield_t *\n+rte_eth_ip_reass_dynfield(struct rte_mbuf *mbuf)\n+{\n+\treturn RTE_MBUF_DYNFIELD(mbuf,\n+\t\trte_eth_ip_reass_dynfield_offset,\n+\t\trte_eth_ip_reass_dynfield_t *);\n+}\n+\n+/**\n+ * @warning\n+ * @b EXPERIMENTAL: this API may change without prior notice\n+ *\n+ * Check whether the dynamic field is registered.\n+ *\n+ * @return true if rte_eth_ip_reass_dynfield_register() has been called.\n+ */\n+__rte_experimental\n+static inline bool rte_eth_ip_reass_dynfield_is_registered(void)\n+{\n+\treturn rte_eth_ip_reass_dynfield_offset >= 0;\n+}\n+\n \n #include <rte_ethdev_core.h>\n \ndiff --git a/lib/ethdev/version.map b/lib/ethdev/version.map\nindex f08fe72044..e824b776b1 100644\n--- a/lib/ethdev/version.map\n+++ b/lib/ethdev/version.map\n@@ -259,6 +259,7 @@ EXPERIMENTAL {\n \n \t#added in 22.03\n \trte_eth_ip_reassembly_conf_set;\n+\trte_eth_ip_reass_dynfield_offset;\n };\n \n INTERNAL {\n@@ -282,6 +283,7 @@ INTERNAL {\n \trte_eth_hairpin_queue_peer_bind;\n \trte_eth_hairpin_queue_peer_unbind;\n \trte_eth_hairpin_queue_peer_update;\n+\trte_eth_ip_reass_dynfield_register;\n \trte_eth_representor_id_get;\n \trte_eth_switch_domain_alloc;\n \trte_eth_switch_domain_free;\ndiff --git a/lib/mbuf/rte_mbuf_core.h b/lib/mbuf/rte_mbuf_core.h\nindex 321a419c71..2cd1f95ae4 100644\n--- a/lib/mbuf/rte_mbuf_core.h\n+++ b/lib/mbuf/rte_mbuf_core.h\n@@ -233,10 +233,11 @@ extern \"C\" {\n #define PKT_RX_OUTER_L4_CKSUM_INVALID \\\n \tRTE_DEPRECATED(PKT_RX_OUTER_L4_CKSUM_INVALID) \\\n \tRTE_MBUF_F_RX_OUTER_L4_CKSUM_INVALID\n+#define RTE_MBUF_F_RX_IPREASSEMBLY_INCOMPLETE   (1ULL << 23)\n \n /* add new RX flags here, don't forget to update RTE_MBUF_F_FIRST_FREE */\n \n-#define RTE_MBUF_F_FIRST_FREE (1ULL << 23)\n+#define RTE_MBUF_F_FIRST_FREE (1ULL << 24)\n #define PKT_FIRST_FREE RTE_DEPRECATED(PKT_FIRST_FREE) RTE_MBUF_F_FIRST_FREE\n #define RTE_MBUF_F_LAST_FREE (1ULL << 40)\n #define PKT_LAST_FREE RTE_DEPRECATED(PKT_LAST_FREE) RTE_MBUF_F_LAST_FREE\n",
    "prefixes": [
        "3/8"
    ]
}