get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 80781,
    "url": "http://patches.dpdk.org/api/patches/80781/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/3f24d39f9add69fe884087bf26e08d44afa9ebc8.1602692917.git.dekelp@nvidia.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": "<3f24d39f9add69fe884087bf26e08d44afa9ebc8.1602692917.git.dekelp@nvidia.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/3f24d39f9add69fe884087bf26e08d44afa9ebc8.1602692917.git.dekelp@nvidia.com",
    "date": "2020-10-14T16:35:48",
    "name": "[v7,2/5] ethdev: add IPv6 fragment extension header item",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "13e895550951059b88031587a372ddebe31df729",
    "submitter": {
        "id": 1897,
        "url": "http://patches.dpdk.org/api/people/1897/?format=api",
        "name": "Dekel Peled",
        "email": "dekelp@nvidia.com"
    },
    "delegate": {
        "id": 319,
        "url": "http://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/3f24d39f9add69fe884087bf26e08d44afa9ebc8.1602692917.git.dekelp@nvidia.com/mbox/",
    "series": [
        {
            "id": 12964,
            "url": "http://patches.dpdk.org/api/series/12964/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=12964",
            "date": "2020-10-14T16:35:47",
            "name": "support match on L3 fragmented packets",
            "version": 7,
            "mbox": "http://patches.dpdk.org/series/12964/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/80781/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/80781/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 dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id D9114A04DB;\n\tWed, 14 Oct 2020 18:38:27 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 1F16F1B9CE;\n\tWed, 14 Oct 2020 18:36:54 +0200 (CEST)",
            "from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129])\n by dpdk.org (Postfix) with ESMTP id 381C91D98B\n for <dev@dpdk.org>; Wed, 14 Oct 2020 18:36:48 +0200 (CEST)",
            "from Internal Mail-Server by MTLPINE1 (envelope-from\n dekelp@nvidia.com) with SMTP; 14 Oct 2020 19:36:42 +0300",
            "from mtl-vdi-280.wap.labs.mlnx. (mtl-vdi-280.wap.labs.mlnx\n [10.228.134.250])\n by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id 09EGaett027719;\n Wed, 14 Oct 2020 19:36:41 +0300"
        ],
        "From": "Dekel Peled <dekelp@nvidia.com>",
        "To": "orika@nvidia.com, thomas@monjalon.net, ferruh.yigit@intel.com,\n arybchenko@solarflare.com, konstantin.ananyev@intel.com,\n olivier.matz@6wind.com, wenzhuo.lu@intel.com, beilei.xing@intel.com,\n bernard.iremonger@intel.com, matan@nvidia.com, shahafs@nvidia.com,\n viacheslavo@nvidia.com",
        "Cc": "dev@dpdk.org",
        "Date": "Wed, 14 Oct 2020 19:35:48 +0300",
        "Message-Id": "\n <3f24d39f9add69fe884087bf26e08d44afa9ebc8.1602692917.git.dekelp@nvidia.com>",
        "X-Mailer": "git-send-email 1.7.1",
        "In-Reply-To": "<cover.1602692917.git.dekelp@nvidia.com>",
        "References": "<cover.1601474841.git.dekelp@nvidia.com>\n <cover.1602692917.git.dekelp@nvidia.com>",
        "Subject": "[dpdk-dev] [PATCH v7 2/5] ethdev: add IPv6 fragment extension\n\theader item",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "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": "Applications handling fragmented IPv6 packets need to match on IPv6\nfragment extension header, in order to identify the fragments order\nand location in the packet.\nThis patch introduces the IPv6 fragment extension header item,\nproposed in [1].\n\nRelevant definitions are moved from lib/librte_ip_frag/rte_ip_frag.h\nto lib/librte_net/rte_ip.h, as they are needed for IPv6 header handling.\nstruct ipv6_extension_fragment renamed to rte_ipv6_fragment_ext to\nadapt it to the common naming convention.\n\nDefault mask is not defined, since all fields are optional.\n\n[1] http://mails.dpdk.org/archives/dev/2020-March/160255.html\n\nSigned-off-by: Dekel Peled <dekelp@nvidia.com>\nAcked-by: Ori Kam <orika@nvidia.com>\nAcked-by: Thomas Monjalon <thomas@monjalon.net>\n---\n doc/guides/prog_guide/rte_flow.rst | 12 ++++++++++++\n lib/librte_ethdev/rte_flow.c       |  1 +\n lib/librte_ethdev/rte_flow.h       | 20 ++++++++++++++++++++\n lib/librte_ip_frag/rte_ip_frag.h   | 26 ++------------------------\n lib/librte_net/rte_ip.h            | 26 ++++++++++++++++++++++++--\n 5 files changed, 59 insertions(+), 26 deletions(-)",
    "diff": "diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst\nindex 97fdf2a..6c8fc0c 100644\n--- a/doc/guides/prog_guide/rte_flow.rst\n+++ b/doc/guides/prog_guide/rte_flow.rst\n@@ -1191,6 +1191,18 @@ Normally preceded by any of:\n - `Item: IPV6`_\n - `Item: IPV6_EXT`_\n \n+Item: ``IPV6_FRAG_EXT``\n+^^^^^^^^^^^^^^^^^^^^^^^\n+\n+Matches the presence of IPv6 fragment extension header.\n+\n+- ``hdr``: IPv6 fragment extension header definition (``rte_ip.h``).\n+\n+Normally preceded by any of:\n+\n+- `Item: IPV6`_\n+- `Item: IPV6_EXT`_\n+\n Item: ``ICMP6``\n ^^^^^^^^^^^^^^^\n \ndiff --git a/lib/librte_ethdev/rte_flow.c b/lib/librte_ethdev/rte_flow.c\nindex 0a8a7a2..e5ce82e 100644\n--- a/lib/librte_ethdev/rte_flow.c\n+++ b/lib/librte_ethdev/rte_flow.c\n@@ -72,6 +72,7 @@ struct rte_flow_desc_data {\n \tMK_FLOW_ITEM(VXLAN_GPE, sizeof(struct rte_flow_item_vxlan_gpe)),\n \tMK_FLOW_ITEM(ARP_ETH_IPV4, sizeof(struct rte_flow_item_arp_eth_ipv4)),\n \tMK_FLOW_ITEM(IPV6_EXT, sizeof(struct rte_flow_item_ipv6_ext)),\n+\tMK_FLOW_ITEM(IPV6_FRAG_EXT, sizeof(struct rte_flow_item_ipv6_frag_ext)),\n \tMK_FLOW_ITEM(ICMP6, sizeof(struct rte_flow_item_icmp6)),\n \tMK_FLOW_ITEM(ICMP6_ND_NS, sizeof(struct rte_flow_item_icmp6_nd_ns)),\n \tMK_FLOW_ITEM(ICMP6_ND_NA, sizeof(struct rte_flow_item_icmp6_nd_na)),\ndiff --git a/lib/librte_ethdev/rte_flow.h b/lib/librte_ethdev/rte_flow.h\nindex aa18925..71d42f6 100644\n--- a/lib/librte_ethdev/rte_flow.h\n+++ b/lib/librte_ethdev/rte_flow.h\n@@ -537,6 +537,12 @@ enum rte_flow_item_type {\n \t */\n \tRTE_FLOW_ITEM_TYPE_ECPRI,\n \n+\t/**\n+\t * Matches the presence of IPv6 fragment extension header.\n+\t *\n+\t * See struct rte_flow_item_ipv6_frag_ext.\n+\t */\n+\tRTE_FLOW_ITEM_TYPE_IPV6_FRAG_EXT,\n };\n \n /**\n@@ -1186,6 +1192,20 @@ struct rte_flow_item_ipv6_ext rte_flow_item_ipv6_ext_mask = {\n #endif\n \n /**\n+ * RTE_FLOW_ITEM_TYPE_IPV6_FRAG_EXT\n+ *\n+ * Matches the presence of IPv6 fragment extension header.\n+ *\n+ * Preceded by any of:\n+ *\n+ * - RTE_FLOW_ITEM_TYPE_IPV6\n+ * - RTE_FLOW_ITEM_TYPE_IPV6_EXT\n+ */\n+struct rte_flow_item_ipv6_frag_ext {\n+\tstruct rte_ipv6_fragment_ext hdr;\n+};\n+\n+/**\n  * RTE_FLOW_ITEM_TYPE_ICMP6\n  *\n  * Matches any ICMPv6 header.\ndiff --git a/lib/librte_ip_frag/rte_ip_frag.h b/lib/librte_ip_frag/rte_ip_frag.h\nindex 66edd7e..0bfe64b 100644\n--- a/lib/librte_ip_frag/rte_ip_frag.h\n+++ b/lib/librte_ip_frag/rte_ip_frag.h\n@@ -110,30 +110,8 @@ struct rte_ip_frag_tbl {\n \t__extension__ struct ip_frag_pkt pkt[0]; /**< hash table. */\n };\n \n-/** IPv6 fragment extension header */\n-#define\tRTE_IPV6_EHDR_MF_SHIFT\t\t\t0\n-#define\tRTE_IPV6_EHDR_MF_MASK\t\t\t1\n-#define\tRTE_IPV6_EHDR_FO_SHIFT\t\t\t3\n-#define\tRTE_IPV6_EHDR_FO_MASK\t\t\t(~((1 << RTE_IPV6_EHDR_FO_SHIFT) - 1))\n-#define\tRTE_IPV6_EHDR_FO_ALIGN\t\t\t(1 << RTE_IPV6_EHDR_FO_SHIFT)\n-\n-#define RTE_IPV6_FRAG_USED_MASK\t\t\t\\\n-\t(RTE_IPV6_EHDR_MF_MASK | RTE_IPV6_EHDR_FO_MASK)\n-\n-#define RTE_IPV6_GET_MF(x)\t\t\t\t((x) & RTE_IPV6_EHDR_MF_MASK)\n-#define RTE_IPV6_GET_FO(x)\t\t\t\t((x) >> RTE_IPV6_EHDR_FO_SHIFT)\n-\n-#define RTE_IPV6_SET_FRAG_DATA(fo, mf)\t\\\n-\t(((fo) & RTE_IPV6_EHDR_FO_MASK) | ((mf) & RTE_IPV6_EHDR_MF_MASK))\n-\n-struct ipv6_extension_fragment {\n-\tuint8_t next_header;            /**< Next header type */\n-\tuint8_t reserved;               /**< Reserved */\n-\tuint16_t frag_data;             /**< All fragmentation data */\n-\tuint32_t id;                    /**< Packet ID */\n-} __rte_packed;\n-\n-\n+/* struct ipv6_extension_fragment moved to librte_net/rte_ip.h and renamed. */\n+#define ipv6_extension_fragment\trte_ipv6_fragment_ext\n \n /**\n  * Create a new IP fragmentation table.\ndiff --git a/lib/librte_net/rte_ip.h b/lib/librte_net/rte_ip.h\nindex 8382d0f..21dd6fc 100644\n--- a/lib/librte_net/rte_ip.h\n+++ b/lib/librte_net/rte_ip.h\n@@ -464,8 +464,30 @@ struct rte_ipv6_hdr {\n \treturn (uint16_t)cksum;\n }\n \n-/* IPv6 fragmentation header size */\n-#define RTE_IPV6_FRAG_HDR_SIZE 8\n+/** IPv6 fragment extension header. */\n+#define\tRTE_IPV6_EHDR_MF_SHIFT\t0\n+#define\tRTE_IPV6_EHDR_MF_MASK\t1\n+#define\tRTE_IPV6_EHDR_FO_SHIFT\t3\n+#define\tRTE_IPV6_EHDR_FO_MASK\t(~((1 << RTE_IPV6_EHDR_FO_SHIFT) - 1))\n+#define\tRTE_IPV6_EHDR_FO_ALIGN\t(1 << RTE_IPV6_EHDR_FO_SHIFT)\n+\n+#define RTE_IPV6_FRAG_USED_MASK\t(RTE_IPV6_EHDR_MF_MASK | RTE_IPV6_EHDR_FO_MASK)\n+\n+#define RTE_IPV6_GET_MF(x)\t((x) & RTE_IPV6_EHDR_MF_MASK)\n+#define RTE_IPV6_GET_FO(x)\t((x) >> RTE_IPV6_EHDR_FO_SHIFT)\n+\n+#define RTE_IPV6_SET_FRAG_DATA(fo, mf)\t\\\n+\t(((fo) & RTE_IPV6_EHDR_FO_MASK) | ((mf) & RTE_IPV6_EHDR_MF_MASK))\n+\n+struct rte_ipv6_fragment_ext {\n+\tuint8_t next_header;\t/**< Next header type */\n+\tuint8_t reserved;\t/**< Reserved */\n+\trte_be16_t frag_data;\t/**< All fragmentation data */\n+\trte_be32_t id;\t\t/**< Packet ID */\n+} __rte_packed;\n+\n+/* IPv6 fragment extension header size */\n+#define RTE_IPV6_FRAG_HDR_SIZE\tsizeof(struct rte_ipv6_fragment_ext)\n \n /**\n  * Parse next IPv6 header extension\n",
    "prefixes": [
        "v7",
        "2/5"
    ]
}