get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 64259,
    "url": "http://patches.dpdk.org/api/patches/64259/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1578381843-110954-2-git-send-email-suanmingm@mellanox.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": "<1578381843-110954-2-git-send-email-suanmingm@mellanox.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1578381843-110954-2-git-send-email-suanmingm@mellanox.com",
    "date": "2020-01-07T07:24:01",
    "name": "[v2,1/2] ethdev: add IPv4/IPv6 DSCP rewrite action",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "71b2a29a15ad7addf82f3594ae82eead3506aa57",
    "submitter": {
        "id": 1358,
        "url": "http://patches.dpdk.org/api/people/1358/?format=api",
        "name": "Suanming Mou",
        "email": "suanmingm@mellanox.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/1578381843-110954-2-git-send-email-suanmingm@mellanox.com/mbox/",
    "series": [
        {
            "id": 7999,
            "url": "http://patches.dpdk.org/api/series/7999/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=7999",
            "date": "2020-01-07T07:24:00",
            "name": "add IPv4/IPv6 DSCP rewrite action",
            "version": 2,
            "mbox": "http://patches.dpdk.org/series/7999/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/64259/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/64259/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 7F055A04F6;\n\tTue,  7 Jan 2020 08:24:18 +0100 (CET)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 319611C1ED;\n\tTue,  7 Jan 2020 08:24:12 +0100 (CET)",
            "from git-send-mailer.rdmz.labs.mlnx (unknown [37.142.13.130])\n by dpdk.org (Postfix) with ESMTP id 9D0141D94B\n for <dev@dpdk.org>; Tue,  7 Jan 2020 08:24:08 +0100 (CET)"
        ],
        "From": "Suanming Mou <suanmingm@mellanox.com>",
        "To": "Adrien Mazarguil <adrien.mazarguil@6wind.com>,\n Wenzhuo Lu <wenzhuo.lu@intel.com>, Jingjing Wu <jingjing.wu@intel.com>,\n Bernard Iremonger <bernard.iremonger@intel.com>,\n John McNamara <john.mcnamara@intel.com>,\n Marko Kovacevic <marko.kovacevic@intel.com>,\n Thomas Monjalon <thomas@monjalon.net>,\n Ferruh Yigit <ferruh.yigit@intel.com>,\n Andrew Rybchenko <arybchenko@solarflare.com>",
        "Cc": "dev@dpdk.org,\n\trasland@mellanox.com",
        "Date": "Tue,  7 Jan 2020 09:24:01 +0200",
        "Message-Id": "<1578381843-110954-2-git-send-email-suanmingm@mellanox.com>",
        "X-Mailer": "git-send-email 1.8.3.1",
        "In-Reply-To": "<1578381843-110954-1-git-send-email-suanmingm@mellanox.com>",
        "References": "<1577945052-39548-1-git-send-email-suanmingm@mellanox.com>\n <1578381843-110954-1-git-send-email-suanmingm@mellanox.com>",
        "Subject": "[dpdk-dev] [PATCH v2 1/2] ethdev: add IPv4/IPv6 DSCP rewrite action",
        "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": "For some overlay network, such as VXLAN, the DSCP field in the new outer\nIP header after VXLAN decapsulation may need to be updated accordingly.\n\nThis commit introduce the DSCP modify action for IPv4 and IPv6.\n\nSigned-off-by: Suanming Mou <suanmingm@mellanox.com>\nAcked-by: Andrew Rybchenko <arybchenko@solarflare.com>\nAcked-by: Ori Kam <orika@mellanox.com>\n---\n app/test-pmd/cmdline_flow.c                 | 50 +++++++++++++++++++++++++++++\n doc/guides/prog_guide/rte_flow.rst          | 40 +++++++++++++++++++++++\n doc/guides/testpmd_app_ug/testpmd_funcs.rst |  8 +++++\n lib/librte_ethdev/rte_flow.c                |  2 ++\n lib/librte_ethdev/rte_flow.h                | 31 ++++++++++++++++++\n 5 files changed, 131 insertions(+)",
    "diff": "diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c\nindex 99dade7..77a6141 100644\n--- a/app/test-pmd/cmdline_flow.c\n+++ b/app/test-pmd/cmdline_flow.c\n@@ -326,6 +326,10 @@ enum index {\n \tACTION_SET_META,\n \tACTION_SET_META_DATA,\n \tACTION_SET_META_MASK,\n+\tACTION_SET_IPV4_DSCP,\n+\tACTION_SET_IPV4_DSCP_VALUE,\n+\tACTION_SET_IPV6_DSCP,\n+\tACTION_SET_IPV6_DSCP_VALUE,\n };\n \n /** Maximum size for pattern in struct rte_flow_item_raw. */\n@@ -1087,6 +1091,8 @@ struct parse_action_priv {\n \tACTION_RAW_DECAP,\n \tACTION_SET_TAG,\n \tACTION_SET_META,\n+\tACTION_SET_IPV4_DSCP,\n+\tACTION_SET_IPV6_DSCP,\n \tZERO,\n };\n \n@@ -1300,6 +1306,18 @@ struct parse_action_priv {\n \tZERO,\n };\n \n+static const enum index action_set_ipv4_dscp[] = {\n+\tACTION_SET_IPV4_DSCP_VALUE,\n+\tACTION_NEXT,\n+\tZERO,\n+};\n+\n+static const enum index action_set_ipv6_dscp[] = {\n+\tACTION_SET_IPV6_DSCP_VALUE,\n+\tACTION_NEXT,\n+\tZERO,\n+};\n+\n static int parse_set_raw_encap_decap(struct context *, const struct token *,\n \t\t\t\t     const char *, unsigned int,\n \t\t\t\t     void *, unsigned int);\n@@ -3493,6 +3511,38 @@ static int comp_set_raw_index(struct context *, const struct token *,\n \t\t\t     (struct rte_flow_action_set_meta, mask)),\n \t\t.call = parse_vc_conf,\n \t},\n+\t[ACTION_SET_IPV4_DSCP] = {\n+\t\t.name = \"set_ipv4_dscp\",\n+\t\t.help = \"set DSCP value\",\n+\t\t.priv = PRIV_ACTION(SET_IPV4_DSCP,\n+\t\t\tsizeof(struct rte_flow_action_set_dscp)),\n+\t\t.next = NEXT(action_set_ipv4_dscp),\n+\t\t.call = parse_vc,\n+\t},\n+\t[ACTION_SET_IPV4_DSCP_VALUE] = {\n+\t\t.name = \"dscp_value\",\n+\t\t.help = \"new IPv4 DSCP value to set\",\n+\t\t.next = NEXT(action_set_ipv4_dscp, NEXT_ENTRY(UNSIGNED)),\n+\t\t.args = ARGS(ARGS_ENTRY\n+\t\t\t     (struct rte_flow_action_set_dscp, dscp)),\n+\t\t.call = parse_vc_conf,\n+\t},\n+\t[ACTION_SET_IPV6_DSCP] = {\n+\t\t.name = \"set_ipv6_dscp\",\n+\t\t.help = \"set DSCP value\",\n+\t\t.priv = PRIV_ACTION(SET_IPV6_DSCP,\n+\t\t\tsizeof(struct rte_flow_action_set_dscp)),\n+\t\t.next = NEXT(action_set_ipv6_dscp),\n+\t\t.call = parse_vc,\n+\t},\n+\t[ACTION_SET_IPV6_DSCP_VALUE] = {\n+\t\t.name = \"dscp_value\",\n+\t\t.help = \"new IPv6 DSCP value to set\",\n+\t\t.next = NEXT(action_set_ipv6_dscp, NEXT_ENTRY(UNSIGNED)),\n+\t\t.args = ARGS(ARGS_ENTRY\n+\t\t\t     (struct rte_flow_action_set_dscp, dscp)),\n+\t\t.call = parse_vc_conf,\n+\t},\n };\n \n /** Remove and return last entry from argument stack. */\ndiff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst\nindex a254c81..2f21309 100644\n--- a/doc/guides/prog_guide/rte_flow.rst\n+++ b/doc/guides/prog_guide/rte_flow.rst\n@@ -2558,6 +2558,46 @@ the other path depending on HW capability.\n    | ``mask`` | bit-mask applies to \"data\" |\n    +----------+----------------------------+\n \n+Action: ``SET_IPV4_DSCP``\n+^^^^^^^^^^^^^^^^^^^^^^^^^\n+\n+Set IPv4 DSCP.\n+\n+Modify DSCP in IPv4 header.\n+\n+It must be used with RTE_FLOW_ITEM_TYPE_IPV4 in pattern.\n+Otherwise, RTE_FLOW_ERROR_TYPE_ACTION error will be returned.\n+\n+.. _table_rte_flow_action_set_ipv4_dscp:\n+\n+.. table:: SET_IPV4_DSCP\n+\n+   +-----------+---------------------------------+\n+   | Field     | Value                           |\n+   +===========+=================================+\n+   | ``dscp``  | DSCP in low 6 bits, rest ignore |\n+   +-----------+---------------------------------+\n+\n+Action: ``SET_IPV6_DSCP``\n+^^^^^^^^^^^^^^^^^^^^^^^^^\n+\n+Set IPv6 DSCP.\n+\n+Modify DSCP in IPv6 header.\n+\n+It must be used with RTE_FLOW_ITEM_TYPE_IPV6 in pattern.\n+Otherwise, RTE_FLOW_ERROR_TYPE_ACTION error will be returned.\n+\n+.. _table_rte_flow_action_set_ipv6_dscp:\n+\n+.. table:: SET_IPV6_DSCP\n+\n+   +-----------+---------------------------------+\n+   | Field     | Value                           |\n+   +===========+=================================+\n+   | ``dscp``  | DSCP in low 6 bits, rest ignore |\n+   +-----------+---------------------------------+\n+\n Negative types\n ~~~~~~~~~~~~~~\n \ndiff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst\nindex 10aabf5..3baaacb 100644\n--- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst\n+++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst\n@@ -4228,6 +4228,14 @@ This section lists supported actions and their attributes, if any.\n \n   - ``value {unsigned}``: Value to decrease TCP acknowledgment number by.\n \n+- ``set_ipv4_dscp``: Set IPv4 DSCP value with specified value\n+\n+  - ``dscp_value {unsigned}``: The new DSCP value to be set\n+\n+- ``set_ipv6_dscp``: Set IPv6 DSCP value with specified value\n+\n+  - ``dscp_value {unsigned}``: The new DSCP value to be set\n+\n Destroying flow rules\n ~~~~~~~~~~~~~~~~~~~~~\n \ndiff --git a/lib/librte_ethdev/rte_flow.c b/lib/librte_ethdev/rte_flow.c\nindex 87a3e8c..b86aee3 100644\n--- a/lib/librte_ethdev/rte_flow.c\n+++ b/lib/librte_ethdev/rte_flow.c\n@@ -168,6 +168,8 @@ struct rte_flow_desc_data {\n \tMK_FLOW_ACTION(DEC_TCP_ACK, sizeof(rte_be32_t)),\n \tMK_FLOW_ACTION(SET_TAG, sizeof(struct rte_flow_action_set_tag)),\n \tMK_FLOW_ACTION(SET_META, sizeof(struct rte_flow_action_set_meta)),\n+\tMK_FLOW_ACTION(SET_IPV4_DSCP, sizeof(struct rte_flow_action_set_dscp)),\n+\tMK_FLOW_ACTION(SET_IPV6_DSCP, sizeof(struct rte_flow_action_set_dscp)),\n };\n \n int\ndiff --git a/lib/librte_ethdev/rte_flow.h b/lib/librte_ethdev/rte_flow.h\nindex 58b5026..16d849e 100644\n--- a/lib/librte_ethdev/rte_flow.h\n+++ b/lib/librte_ethdev/rte_flow.h\n@@ -2004,6 +2004,26 @@ enum rte_flow_action_type {\n \t * See struct rte_flow_action_set_meta.\n \t */\n \tRTE_FLOW_ACTION_TYPE_SET_META,\n+\n+\t/**\n+\t * Modify IPv4 DSCP in the outermost IP header.\n+\t *\n+\t * If flow pattern does not define a valid RTE_FLOW_ITEM_TYPE_IPV4,\n+\t * then the PMD should return a RTE_FLOW_ERROR_TYPE_ACTION error.\n+\t *\n+\t * See struct rte_flow_action_set_dscp.\n+\t */\n+\tRTE_FLOW_ACTION_TYPE_SET_IPV4_DSCP,\n+\n+\t/**\n+\t * Modify IPv6 DSCP in the outermost IP header.\n+\t *\n+\t * If flow pattern does not define a valid RTE_FLOW_ITEM_TYPE_IPV6,\n+\t * then the PMD should return a RTE_FLOW_ERROR_TYPE_ACTION error.\n+\t *\n+\t * See struct rte_flow_action_set_dscp.\n+\t */\n+\tRTE_FLOW_ACTION_TYPE_SET_IPV6_DSCP,\n };\n \n /**\n@@ -2530,6 +2550,17 @@ struct rte_flow_action_set_meta {\n \tuint32_t mask;\n };\n \n+/**\n+ * RTE_FLOW_ACTION_TYPE_SET_IPV4_DSCP\n+ * RTE_FLOW_ACTION_TYPE_SET_IPV6_DSCP\n+ *\n+ * Set the DSCP value for IPv4/IPv6 header.\n+ * DSCP in low 6 bits, rest ignored.\n+ */\n+struct rte_flow_action_set_dscp {\n+\tuint8_t dscp;\n+};\n+\n /* Mbuf dynamic field offset for metadata. */\n extern int rte_flow_dynf_metadata_offs;\n \n",
    "prefixes": [
        "v2",
        "1/2"
    ]
}