get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 23865,
    "url": "http://patches.dpdk.org/api/patches/23865/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/7945d99c0dafa334ed0e29be0f709160846748d3.1493108423.git.adrien.mazarguil@6wind.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": "<7945d99c0dafa334ed0e29be0f709160846748d3.1493108423.git.adrien.mazarguil@6wind.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/7945d99c0dafa334ed0e29be0f709160846748d3.1493108423.git.adrien.mazarguil@6wind.com",
    "date": "2017-04-25T08:30:07",
    "name": "[dpdk-dev,v2,13/13] ethdev: fix incomplete items in flow API",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "940343ebe4ed083d57467033f5a4be9f4d99b07d",
    "submitter": {
        "id": 165,
        "url": "http://patches.dpdk.org/api/people/165/?format=api",
        "name": "Adrien Mazarguil",
        "email": "adrien.mazarguil@6wind.com"
    },
    "delegate": null,
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/7945d99c0dafa334ed0e29be0f709160846748d3.1493108423.git.adrien.mazarguil@6wind.com/mbox/",
    "series": [],
    "comments": "http://patches.dpdk.org/api/patches/23865/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/23865/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [IPv6:::1])\n\tby dpdk.org (Postfix) with ESMTP id 50691CFBC;\n\tTue, 25 Apr 2017 10:31:05 +0200 (CEST)",
            "from mail-wr0-f174.google.com (mail-wr0-f174.google.com\n\t[209.85.128.174]) by dpdk.org (Postfix) with ESMTP id 6E7C1298F\n\tfor <dev@dpdk.org>; Tue, 25 Apr 2017 10:30:35 +0200 (CEST)",
            "by mail-wr0-f174.google.com with SMTP id w50so81154828wrc.0\n\tfor <dev@dpdk.org>; Tue, 25 Apr 2017 01:30:35 -0700 (PDT)",
            "from 6wind.com (host.78.145.23.62.rev.coltfrance.com.\n\t[62.23.145.78]) by smtp.gmail.com with ESMTPSA id\n\tn99sm20170631wrb.62.2017.04.25.01.30.33\n\t(version=TLS1_2 cipher=AES128-SHA bits=128/128);\n\tTue, 25 Apr 2017 01:30:34 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=6wind-com.20150623.gappssmtp.com; s=20150623;\n\th=from:to:cc:subject:date:message-id:in-reply-to:references;\n\tbh=T5Y6ramvQRtKTYIHL6IHWrAE2kTAAFOINuJAKkRigvk=;\n\tb=gOCUJeRmWZJC/mZidhbmbksBPO2PBRlQRIHfWM6Bqm98DZsFmikwo5B8bQJeKMXuu1\n\tjqSzKjhbAArus1jOhQMCUYj7HNmY7Gfgu/hhvNlEqHbZfRjCAW4dCnF3dt8CxBQ1OMlg\n\tsRHsycugnMhkLLu00tr2Fv6+62NN+gzhXGnZ0lSFHmte7JV4YRPKKEvQQfSrEqqDEjji\n\t/TjTnj+7d7n4eobKI5Gdhu4ch49MZTbYH8WybVZaFsl6D5P7g2avYOuWgMHDQ5QwZkE5\n\te2ERxOHd5tCc02pHeiD5UDVhu4q9tfrnjf1v/a9Wbe8vp6X34SHr4ksoHonre+QsqonZ\n\tHgcw==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n\t:references;\n\tbh=T5Y6ramvQRtKTYIHL6IHWrAE2kTAAFOINuJAKkRigvk=;\n\tb=NzM8BHmzMVcLHJfufbJn2Yk5stkuMwjEfw5/F1QQm3DpSM17tXfwS+Go8PZux2Z/j3\n\tav3q/gcLs3kLo6lcvqrtdprDlY5sfaASZ/L5JaQ1r/eu5wBwClO9Sr3aqQen+NO1gMFh\n\tRqdnVRhdPanskHG1fXijUZ7hcgF+B+1JLQ1jUACBmzaM550nBsZGyV4RbyedAjjOEDKX\n\t3pkS6xYEUxpZcqj6n74ckDgFcEloIADQmeELMl61BXGsQDQ2P90kLVLJAFCbgeRUYolk\n\tbxrU0riqdVUMiOSSXnnpudA2aSlp+QbO4vJqEbp2SrO43P+kX+fH/OkUDUnTMhZn71VA\n\tMLTQ==",
        "X-Gm-Message-State": "AN3rC/6IyGXKQPpZOKxJ0S/ZVhxhDvjwdjdBcJ6pPvOAB+0pUBqs2k4l\n\t6/K39ivTn3N664VO",
        "X-Received": "by 10.223.165.94 with SMTP id j30mr1566903wrb.111.1493109035229; \n\tTue, 25 Apr 2017 01:30:35 -0700 (PDT)",
        "From": "Adrien Mazarguil <adrien.mazarguil@6wind.com>",
        "To": "dev@dpdk.org",
        "Cc": "stable@dpdk.org, Wei Zhao <wei.zhao1@intel.com>,\n\tWenzhuo Lu <wenzhuo.lu@intel.com>",
        "Date": "Tue, 25 Apr 2017 10:30:07 +0200",
        "Message-Id": "<7945d99c0dafa334ed0e29be0f709160846748d3.1493108423.git.adrien.mazarguil@6wind.com>",
        "X-Mailer": "git-send-email 2.1.4",
        "In-Reply-To": "<cover.1493108423.git.adrien.mazarguil@6wind.com>",
        "References": "<cover.1493048352.git.adrien.mazarguil@6wind.com>\n\t<cover.1493108423.git.adrien.mazarguil@6wind.com>",
        "Subject": "[dpdk-dev] [PATCH v2 13/13] ethdev: fix incomplete items in flow API",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<http://dpdk.org/ml/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://dpdk.org/ml/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<http://dpdk.org/ml/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "E-Tag and NVGRE pattern items have been added hastily without updating\ndocumentation nor testpmd.\n\nThis commit also adds default masks for these items based on the ixgbe\nimplementation.\n\nFixes: 99e7003831c3 (\"net/ixgbe: parse L2 tunnel filter\")\n\nCc: stable@dpdk.org\nCc: Wei Zhao <wei.zhao1@intel.com>\nCc: Wenzhuo Lu <wenzhuo.lu@intel.com>\nSigned-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>\n---\n app/test-pmd/cmdline_flow.c                 | 46 ++++++++++++++++++++++++\n doc/guides/prog_guide/rte_flow.rst          | 26 ++++++++++++++\n doc/guides/testpmd_app_ug/testpmd_funcs.rst |  8 +++++\n lib/librte_ether/rte_flow.h                 | 21 +++++++++++\n 4 files changed, 101 insertions(+)",
    "diff": "diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c\nindex 4e99f0f..0a40005 100644\n--- a/app/test-pmd/cmdline_flow.c\n+++ b/app/test-pmd/cmdline_flow.c\n@@ -159,6 +159,10 @@ enum index {\n \tITEM_SCTP_CKSUM,\n \tITEM_VXLAN,\n \tITEM_VXLAN_VNI,\n+\tITEM_E_TAG,\n+\tITEM_E_TAG_GRP_ECID_B,\n+\tITEM_NVGRE,\n+\tITEM_NVGRE_TNI,\n \tITEM_MPLS,\n \tITEM_MPLS_LABEL,\n \tITEM_GRE,\n@@ -436,6 +440,8 @@ static const enum index next_item[] = {\n \tITEM_TCP,\n \tITEM_SCTP,\n \tITEM_VXLAN,\n+\tITEM_E_TAG,\n+\tITEM_NVGRE,\n \tITEM_MPLS,\n \tITEM_GRE,\n \tZERO,\n@@ -544,6 +550,18 @@ static const enum index item_vxlan[] = {\n \tZERO,\n };\n \n+static const enum index item_e_tag[] = {\n+\tITEM_E_TAG_GRP_ECID_B,\n+\tITEM_NEXT,\n+\tZERO,\n+};\n+\n+static const enum index item_nvgre[] = {\n+\tITEM_NVGRE_TNI,\n+\tITEM_NEXT,\n+\tZERO,\n+};\n+\n static const enum index item_mpls[] = {\n \tITEM_MPLS_LABEL,\n \tITEM_NEXT,\n@@ -1297,6 +1315,34 @@ static const struct token token_list[] = {\n \t\t.next = NEXT(item_vxlan, NEXT_ENTRY(UNSIGNED), item_param),\n \t\t.args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_vxlan, vni)),\n \t},\n+\t[ITEM_E_TAG] = {\n+\t\t.name = \"e_tag\",\n+\t\t.help = \"match E-Tag header\",\n+\t\t.priv = PRIV_ITEM(E_TAG, sizeof(struct rte_flow_item_e_tag)),\n+\t\t.next = NEXT(item_e_tag),\n+\t\t.call = parse_vc,\n+\t},\n+\t[ITEM_E_TAG_GRP_ECID_B] = {\n+\t\t.name = \"grp_ecid_b\",\n+\t\t.help = \"GRP and E-CID base\",\n+\t\t.next = NEXT(item_e_tag, NEXT_ENTRY(UNSIGNED), item_param),\n+\t\t.args = ARGS(ARGS_ENTRY_MASK_HTON(struct rte_flow_item_e_tag,\n+\t\t\t\t\t\t  rsvd_grp_ecid_b,\n+\t\t\t\t\t\t  \"\\x3f\\xff\")),\n+\t},\n+\t[ITEM_NVGRE] = {\n+\t\t.name = \"nvgre\",\n+\t\t.help = \"match NVGRE header\",\n+\t\t.priv = PRIV_ITEM(NVGRE, sizeof(struct rte_flow_item_nvgre)),\n+\t\t.next = NEXT(item_nvgre),\n+\t\t.call = parse_vc,\n+\t},\n+\t[ITEM_NVGRE_TNI] = {\n+\t\t.name = \"tni\",\n+\t\t.help = \"virtual subnet ID\",\n+\t\t.next = NEXT(item_nvgre, NEXT_ENTRY(UNSIGNED), item_param),\n+\t\t.args = ARGS(ARGS_ENTRY_HTON(struct rte_flow_item_nvgre, tni)),\n+\t},\n \t[ITEM_MPLS] = {\n \t\t.name = \"mpls\",\n \t\t.help = \"match MPLS header\",\ndiff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst\nindex 9bca9ec..b587ba9 100644\n--- a/doc/guides/prog_guide/rte_flow.rst\n+++ b/doc/guides/prog_guide/rte_flow.rst\n@@ -863,6 +863,32 @@ Matches a VXLAN header (RFC 7348).\n - ``rsvd1``: reserved, normally 0x00.\n - Default ``mask`` matches VNI only.\n \n+Item: ``E_TAG``\n+^^^^^^^^^^^^^^^\n+\n+Matches an IEEE 802.1BR E-Tag header.\n+\n+- ``tpid``: tag protocol identifier (0x893F)\n+- ``epcp_edei_in_ecid_b``: E-Tag control information (E-TCI), E-PCP (3b),\n+  E-DEI (1b), ingress E-CID base (12b).\n+- ``rsvd_grp_ecid_b``: reserved (2b), GRP (2b), E-CID base (12b).\n+- ``in_ecid_e``: ingress E-CID ext.\n+- ``ecid_e``: E-CID ext.\n+- Default ``mask`` simultaneously matches GRP and E-CID base.\n+\n+Item: ``NVGRE``\n+^^^^^^^^^^^^^^^\n+\n+Matches a NVGRE header (RFC 7637).\n+\n+- ``c_k_s_rsvd0_ver``: checksum (1b), undefined (1b), key bit (1b),\n+  sequence number (1b), reserved 0 (9b), version (3b). This field must have\n+  value 0x2000 according to RFC 7637.\n+- ``protocol``: protocol type (0x6558).\n+- ``tni``: virtual subnet ID.\n+- ``flow_id``: flow ID.\n+- Default ``mask`` matches TNI only.\n+\n Item: ``MPLS``\n ^^^^^^^^^^^^^^\n \ndiff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst\nindex ddd1d92..1aea101 100644\n--- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst\n+++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst\n@@ -2537,6 +2537,14 @@ This section lists supported pattern items and their attributes, if any.\n \n   - ``vni {unsigned}``: VXLAN identifier.\n \n+- ``e_tag``: match IEEE 802.1BR E-Tag header.\n+\n+  - ``grp_ecid_b {unsigned}``: GRP and E-CID base.\n+\n+- ``nvgre``: match NVGRE header.\n+\n+  - ``tni {unsigned}``: virtual subnet ID.\n+\n - ``mpls``: match MPLS header.\n \n   - ``label {unsigned}``: MPLS label.\ndiff --git a/lib/librte_ether/rte_flow.h b/lib/librte_ether/rte_flow.h\nindex abd4c6a..c47edbc 100644\n--- a/lib/librte_ether/rte_flow.h\n+++ b/lib/librte_ether/rte_flow.h\n@@ -49,6 +49,7 @@\n #include <rte_sctp.h>\n #include <rte_tcp.h>\n #include <rte_udp.h>\n+#include <rte_byteorder.h>\n \n #ifdef __cplusplus\n extern \"C\" {\n@@ -620,6 +621,19 @@ struct rte_flow_item_e_tag {\n \tuint8_t ecid_e; /**< E-CID ext. */\n };\n \n+/** Default mask for RTE_FLOW_ITEM_TYPE_E_TAG. */\n+#ifndef __cplusplus\n+static const struct rte_flow_item_e_tag rte_flow_item_e_tag_mask = {\n+#if RTE_BYTE_ORDER == RTE_BIG_ENDIAN\n+\t.rsvd_grp_ecid_b = 0x3fff,\n+#elif RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN\n+\t.rsvd_grp_ecid_b = 0xff3f,\n+#else\n+#error Unsupported endianness.\n+#endif\n+};\n+#endif\n+\n /**\n  * RTE_FLOW_ITEM_TYPE_NVGRE.\n  *\n@@ -638,6 +652,13 @@ struct rte_flow_item_nvgre {\n \tuint8_t flow_id; /**< Flow ID. */\n };\n \n+/** Default mask for RTE_FLOW_ITEM_TYPE_NVGRE. */\n+#ifndef __cplusplus\n+static const struct rte_flow_item_nvgre rte_flow_item_nvgre_mask = {\n+\t.tni = \"\\xff\\xff\\xff\",\n+};\n+#endif\n+\n /**\n  * RTE_FLOW_ITEM_TYPE_MPLS.\n  *\n",
    "prefixes": [
        "dpdk-dev",
        "v2",
        "13/13"
    ]
}