get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 66531,
    "url": "http://patches.dpdk.org/api/patches/66531/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/87c0dcb4774b9b6dd2004c968dedcd3fbac62942.1583906144.git.kaara.satwik@chelsio.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": "<87c0dcb4774b9b6dd2004c968dedcd3fbac62942.1583906144.git.kaara.satwik@chelsio.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/87c0dcb4774b9b6dd2004c968dedcd3fbac62942.1583906144.git.kaara.satwik@chelsio.com",
    "date": "2020-03-11T09:05:44",
    "name": "[2/9] net/cxgbe: add rte_flow support for matching IP TOS",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "035a261ae62b6fe03658234a5798986e08202034",
    "submitter": {
        "id": 241,
        "url": "http://patches.dpdk.org/api/people/241/?format=api",
        "name": "Rahul Lakkireddy",
        "email": "rahul.lakkireddy@chelsio.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/87c0dcb4774b9b6dd2004c968dedcd3fbac62942.1583906144.git.kaara.satwik@chelsio.com/mbox/",
    "series": [
        {
            "id": 8880,
            "url": "http://patches.dpdk.org/api/series/8880/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=8880",
            "date": "2020-03-11T09:05:42",
            "name": "net/cxgbe: updates for rte_flow support",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/8880/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/66531/comments/",
    "check": "fail",
    "checks": "http://patches.dpdk.org/api/patches/66531/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 9303EA0567;\n\tWed, 11 Mar 2020 10:16:56 +0100 (CET)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 4DCCF1C012;\n\tWed, 11 Mar 2020 10:16:45 +0100 (CET)",
            "from stargate.chelsio.com (stargate.chelsio.com [12.32.117.8])\n by dpdk.org (Postfix) with ESMTP id C05411C011\n for <dev@dpdk.org>; Wed, 11 Mar 2020 10:16:43 +0100 (CET)",
            "from localhost (scalar.blr.asicdesigners.com [10.193.185.94])\n by stargate.chelsio.com (8.13.8/8.13.8) with ESMTP id 02B9GfRW014327;\n Wed, 11 Mar 2020 02:16:42 -0700"
        ],
        "From": "Rahul Lakkireddy <rahul.lakkireddy@chelsio.com>",
        "To": "dev@dpdk.org",
        "Cc": "nirranjan@chelsio.com, kaara.satwik@chelsio.com",
        "Date": "Wed, 11 Mar 2020 14:35:44 +0530",
        "Message-Id": "\n <87c0dcb4774b9b6dd2004c968dedcd3fbac62942.1583906144.git.kaara.satwik@chelsio.com>",
        "X-Mailer": "git-send-email 2.5.3",
        "In-Reply-To": [
            "<cover.1583906144.git.kaara.satwik@chelsio.com>",
            "<cover.1583906144.git.kaara.satwik@chelsio.com>"
        ],
        "References": [
            "<cover.1583906144.git.kaara.satwik@chelsio.com>",
            "<cover.1583906144.git.kaara.satwik@chelsio.com>"
        ],
        "Subject": "[dpdk-dev] [PATCH 2/9] net/cxgbe: add rte_flow support for matching\n\tIP TOS",
        "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": "From: Karra Satwik <kaara.satwik@chelsio.com>\n\nAdd support to match Type of Service (TOS) field in\nIPv4/IPv6 header\n\nSigned-off-by: Karra Satwik <kaara.satwik@chelsio.com>\nSigned-off-by: Rahul Lakkireddy <rahul.lakkireddy@chelsio.com>\n---\n drivers/net/cxgbe/base/common.h  |  1 +\n drivers/net/cxgbe/base/t4_hw.c   |  1 +\n drivers/net/cxgbe/cxgbe_filter.c |  7 +++++-\n drivers/net/cxgbe/cxgbe_flow.c   | 42 +++++++++++++++++++++++++++-----\n 4 files changed, 44 insertions(+), 7 deletions(-)",
    "diff": "diff --git a/drivers/net/cxgbe/base/common.h b/drivers/net/cxgbe/base/common.h\nindex 6047642c5..793cad11d 100644\n--- a/drivers/net/cxgbe/base/common.h\n+++ b/drivers/net/cxgbe/base/common.h\n@@ -158,6 +158,7 @@ struct tp_params {\n \tint protocol_shift;\n \tint ethertype_shift;\n \tint macmatch_shift;\n+\tint tos_shift;\n \n \tu64 hash_filter_mask;\n };\ndiff --git a/drivers/net/cxgbe/base/t4_hw.c b/drivers/net/cxgbe/base/t4_hw.c\nindex f6bf57c75..cd4da0b9f 100644\n--- a/drivers/net/cxgbe/base/t4_hw.c\n+++ b/drivers/net/cxgbe/base/t4_hw.c\n@@ -5253,6 +5253,7 @@ int t4_init_tp_params(struct adapter *adap)\n \t\t\t\t\t\t\t\tF_ETHERTYPE);\n \tadap->params.tp.macmatch_shift = t4_filter_field_shift(adap,\n \t\t\t\t\t\t\t       F_MACMATCH);\n+\tadap->params.tp.tos_shift = t4_filter_field_shift(adap, F_TOS);\n \n \tv = t4_read_reg(adap, LE_3_DB_HASH_MASK_GEN_IPV4_T6_A);\n \tadap->params.tp.hash_filter_mask = v;\ndiff --git a/drivers/net/cxgbe/cxgbe_filter.c b/drivers/net/cxgbe/cxgbe_filter.c\nindex d26be3cd7..193738f93 100644\n--- a/drivers/net/cxgbe/cxgbe_filter.c\n+++ b/drivers/net/cxgbe/cxgbe_filter.c\n@@ -72,7 +72,8 @@ int cxgbe_validate_filter(struct adapter *adapter,\n \n \tif (U(F_PORT, iport) || U(F_ETHERTYPE, ethtype) ||\n \t    U(F_PROTOCOL, proto) || U(F_MACMATCH, macidx) ||\n-\t    U(F_VLAN, ivlan_vld) || U(F_VNIC_ID, ovlan_vld))\n+\t    U(F_VLAN, ivlan_vld) || U(F_VNIC_ID, ovlan_vld) ||\n+\t    U(F_TOS, tos))\n \t\treturn -EOPNOTSUPP;\n \n \t/* Ensure OVLAN match is enabled in hardware */\n@@ -312,6 +313,8 @@ static u64 hash_filter_ntuple(const struct filter_entry *f)\n \t\t\tntuple |= (u64)(f->fs.val.ovlan_vld << 16 |\n \t\t\t\t\tf->fs.val.ovlan) << tp->vnic_shift;\n \t}\n+\tif (tp->tos_shift >= 0 && f->fs.mask.tos)\n+\t\tntuple |= (u64)f->fs.val.tos << tp->tos_shift;\n \n \treturn ntuple;\n }\n@@ -806,6 +809,8 @@ static int set_filter_wr(struct rte_eth_dev *dev, unsigned int fidx)\n \t\t\t    V_FW_FILTER_WR_PORTM(f->fs.mask.iport));\n \tfwr->ptcl = f->fs.val.proto;\n \tfwr->ptclm = f->fs.mask.proto;\n+\tfwr->ttyp = f->fs.val.tos;\n+\tfwr->ttypm = f->fs.mask.tos;\n \tfwr->ivlan = cpu_to_be16(f->fs.val.ivlan);\n \tfwr->ivlanm = cpu_to_be16(f->fs.mask.ivlan);\n \tfwr->ovlan = cpu_to_be16(f->fs.val.ovlan);\ndiff --git a/drivers/net/cxgbe/cxgbe_flow.c b/drivers/net/cxgbe/cxgbe_flow.c\nindex cd833d095..c860b7886 100644\n--- a/drivers/net/cxgbe/cxgbe_flow.c\n+++ b/drivers/net/cxgbe/cxgbe_flow.c\n@@ -157,6 +157,8 @@ cxgbe_fill_filter_region(struct adapter *adap,\n \tif (tp->vnic_shift >= 0 && fs->mask.ovlan_vld)\n \t\tntuple_mask |= (u64)(F_FT_VLAN_VLD | fs->mask.ovlan) <<\n \t\t\t       tp->vnic_shift;\n+\tif (tp->tos_shift >= 0)\n+\t\tntuple_mask |= (u64)fs->mask.tos << tp->tos_shift;\n \n \tif (ntuple_mask != hash_filter_mask)\n \t\treturn;\n@@ -354,9 +356,9 @@ ch_rte_parsetype_ipv4(const void *dmask, const struct rte_flow_item *item,\n \n \tmask = umask ? umask : (const struct rte_flow_item_ipv4 *)dmask;\n \n-\tif (mask->hdr.time_to_live || mask->hdr.type_of_service)\n+\tif (mask->hdr.time_to_live)\n \t\treturn rte_flow_error_set(e, ENOTSUP, RTE_FLOW_ERROR_TYPE_ITEM,\n-\t\t\t\t\t  item, \"ttl/tos are not supported\");\n+\t\t\t\t\t  item, \"ttl is not supported\");\n \n \tif (fs->mask.ethtype &&\n \t    (fs->val.ethtype != RTE_ETHER_TYPE_IPV4))\n@@ -370,6 +372,7 @@ ch_rte_parsetype_ipv4(const void *dmask, const struct rte_flow_item *item,\n \tCXGBE_FILL_FS(val->hdr.next_proto_id, mask->hdr.next_proto_id, proto);\n \tCXGBE_FILL_FS_MEMCPY(val->hdr.dst_addr, mask->hdr.dst_addr, lip);\n \tCXGBE_FILL_FS_MEMCPY(val->hdr.src_addr, mask->hdr.src_addr, fip);\n+\tCXGBE_FILL_FS(val->hdr.type_of_service, mask->hdr.type_of_service, tos);\n \n \treturn 0;\n }\n@@ -382,14 +385,17 @@ ch_rte_parsetype_ipv6(const void *dmask, const struct rte_flow_item *item,\n \tconst struct rte_flow_item_ipv6 *val = item->spec;\n \tconst struct rte_flow_item_ipv6 *umask = item->mask;\n \tconst struct rte_flow_item_ipv6 *mask;\n+\tu32 vtc_flow, vtc_flow_mask;\n \n \tmask = umask ? umask : (const struct rte_flow_item_ipv6 *)dmask;\n \n-\tif (mask->hdr.vtc_flow ||\n+\tvtc_flow_mask = be32_to_cpu(mask->hdr.vtc_flow);\n+\n+\tif (vtc_flow_mask & RTE_IPV6_HDR_FL_MASK ||\n \t    mask->hdr.payload_len || mask->hdr.hop_limits)\n \t\treturn rte_flow_error_set(e, ENOTSUP, RTE_FLOW_ERROR_TYPE_ITEM,\n \t\t\t\t\t  item,\n-\t\t\t\t\t  \"tc/flow/hop are not supported\");\n+\t\t\t\t\t  \"flow/hop are not supported\");\n \n \tif (fs->mask.ethtype &&\n \t    (fs->val.ethtype != RTE_ETHER_TYPE_IPV6))\n@@ -401,6 +407,14 @@ ch_rte_parsetype_ipv6(const void *dmask, const struct rte_flow_item *item,\n \t\treturn 0; /* ipv6 wild card */\n \n \tCXGBE_FILL_FS(val->hdr.proto, mask->hdr.proto, proto);\n+\n+\tvtc_flow = be32_to_cpu(val->hdr.vtc_flow);\n+\tCXGBE_FILL_FS((vtc_flow & RTE_IPV6_HDR_TC_MASK) >>\n+\t\t      RTE_IPV6_HDR_TC_SHIFT,\n+\t\t      (vtc_flow_mask & RTE_IPV6_HDR_TC_MASK) >>\n+\t\t      RTE_IPV6_HDR_TC_SHIFT,\n+\t\t      tos);\n+\n \tCXGBE_FILL_FS_MEMCPY(val->hdr.dst_addr, mask->hdr.dst_addr, lip);\n \tCXGBE_FILL_FS_MEMCPY(val->hdr.src_addr, mask->hdr.src_addr, fip);\n \n@@ -871,12 +885,28 @@ static struct chrte_fparse parseitem[] = {\n \n \t[RTE_FLOW_ITEM_TYPE_IPV4] = {\n \t\t.fptr  = ch_rte_parsetype_ipv4,\n-\t\t.dmask = &rte_flow_item_ipv4_mask,\n+\t\t.dmask = &(const struct rte_flow_item_ipv4) {\n+\t\t\t.hdr = {\n+\t\t\t\t.src_addr = RTE_BE32(0xffffffff),\n+\t\t\t\t.dst_addr = RTE_BE32(0xffffffff),\n+\t\t\t\t.type_of_service = 0xff,\n+\t\t\t},\n+\t\t},\n \t},\n \n \t[RTE_FLOW_ITEM_TYPE_IPV6] = {\n \t\t.fptr  = ch_rte_parsetype_ipv6,\n-\t\t.dmask = &rte_flow_item_ipv6_mask,\n+\t\t.dmask = &(const struct rte_flow_item_ipv6) {\n+\t\t\t.hdr = {\n+\t\t\t\t.src_addr =\n+\t\t\t\t\t\"\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\"\n+\t\t\t\t\t\"\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\",\n+\t\t\t\t.dst_addr =\n+\t\t\t\t\t\"\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\"\n+\t\t\t\t\t\"\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\",\n+\t\t\t\t.vtc_flow = RTE_BE32(0xff000000),\n+\t\t\t},\n+\t\t},\n \t},\n \n \t[RTE_FLOW_ITEM_TYPE_UDP] = {\n",
    "prefixes": [
        "2/9"
    ]
}