get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 82765,
    "url": "http://patches.dpdk.org/api/patches/82765/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1603975917-28576-4-git-send-email-oulijun@huawei.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": "<1603975917-28576-4-git-send-email-oulijun@huawei.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1603975917-28576-4-git-send-email-oulijun@huawei.com",
    "date": "2020-10-29T12:51:52",
    "name": "[v3,3/8] net/hns3: fix packect type report in Rx",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "d6ac647206271bac494aadaced6a670fa14a8bb2",
    "submitter": {
        "id": 1675,
        "url": "http://patches.dpdk.org/api/people/1675/?format=api",
        "name": "Lijun Ou",
        "email": "oulijun@huawei.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/1603975917-28576-4-git-send-email-oulijun@huawei.com/mbox/",
    "series": [
        {
            "id": 13462,
            "url": "http://patches.dpdk.org/api/series/13462/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=13462",
            "date": "2020-10-29T12:51:50",
            "name": "hns3 misc updates",
            "version": 3,
            "mbox": "http://patches.dpdk.org/series/13462/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/82765/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/82765/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 A1D55A04B5;\n\tThu, 29 Oct 2020 13:54:20 +0100 (CET)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id BA90DCD46;\n\tThu, 29 Oct 2020 13:51:46 +0100 (CET)",
            "from szxga05-in.huawei.com (szxga05-in.huawei.com [45.249.212.191])\n by dpdk.org (Postfix) with ESMTP id 59DFDCC19\n for <dev@dpdk.org>; Thu, 29 Oct 2020 13:51:35 +0100 (CET)",
            "from DGGEMS414-HUB.china.huawei.com (unknown [172.30.72.58])\n by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4CMQLF5VdJzLrC3\n for <dev@dpdk.org>; Thu, 29 Oct 2020 20:51:33 +0800 (CST)",
            "from localhost.localdomain (10.69.192.56) by\n DGGEMS414-HUB.china.huawei.com (10.3.19.214) with Microsoft SMTP Server id\n 14.3.487.0; Thu, 29 Oct 2020 20:51:22 +0800"
        ],
        "From": "Lijun Ou <oulijun@huawei.com>",
        "To": "<ferruh.yigit@intel.com>",
        "CC": "<dev@dpdk.org>, <linuxarm@huawei.com>",
        "Date": "Thu, 29 Oct 2020 20:51:52 +0800",
        "Message-ID": "<1603975917-28576-4-git-send-email-oulijun@huawei.com>",
        "X-Mailer": "git-send-email 2.7.4",
        "In-Reply-To": "<1603975917-28576-1-git-send-email-oulijun@huawei.com>",
        "References": "<1603975751-27955-1-git-send-email-oulijun@huawei.com>\n <1603975917-28576-1-git-send-email-oulijun@huawei.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[10.69.192.56]",
        "X-CFilter-Loop": "Reflected",
        "Subject": "[dpdk-dev] [PATCH v3 3/8] net/hns3: fix packect type report in Rx",
        "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: Chengchang Tang <tangchengchang@huawei.com>\n\nCurrently, hns3 support recognizing a lot of ptypes, but most\ntunnel packet types are not reported to the API\nrte_eth_dev_get_supported_ptypes.\n\nAnd there are some error in L2 and L3 packet recognization. The\nARP and LLDP are classified to L3 field in RX descriptor. So,\nthe ptype of LLDP and ARP packets will be set twice. And ptypes\nare assigned by bitwise OR, which will eventually cause the ptype\nresult to be incorrect.\n\nBesides, when a packet with only L2 header, its ptype will not\nreport by hns3 PMD. This is because the L2L3 ptype table is not\ninitialized properly. In this case, the table query result is 0\nby default.\n\nAs a result, it fixes missing supported ptypes and the mistake in\nL2L3 packet recognization and the unreported L2 packect ptype by\nreporting its L2 type when the L3 type unrecognized..\n\nFixes: bba636698316 (\"net/hns3: support Rx/Tx and related operations\")\nCc: stable@dpdk.org\n\nSigned-off-by: Chengchang Tang <tangchengchang@huawei.com>\nSigned-off-by: Lijun Ou <oulijun@huawei.com>\n---\n drivers/net/hns3/hns3_ethdev.h |  5 ++-\n drivers/net/hns3/hns3_rxtx.c   | 99 ++++++++++++++++++++++++++++++------------\n drivers/net/hns3/hns3_rxtx.h   | 13 +++---\n 3 files changed, 82 insertions(+), 35 deletions(-)",
    "diff": "diff --git a/drivers/net/hns3/hns3_ethdev.h b/drivers/net/hns3/hns3_ethdev.h\nindex da8aead..d195c19 100644\n--- a/drivers/net/hns3/hns3_ethdev.h\n+++ b/drivers/net/hns3/hns3_ethdev.h\n@@ -647,16 +647,17 @@ struct hns3_mp_param {\n #define HNS3_L2TBL_NUM\t4\n #define HNS3_L3TBL_NUM\t16\n #define HNS3_L4TBL_NUM\t16\n+#define HNS3_OL2TBL_NUM\t4\n #define HNS3_OL3TBL_NUM\t16\n #define HNS3_OL4TBL_NUM\t16\n \n struct hns3_ptype_table {\n-\tuint32_t l2table[HNS3_L2TBL_NUM];\n-\tuint32_t l3table[HNS3_L3TBL_NUM];\n+\tuint32_t l2l3table[HNS3_L2TBL_NUM][HNS3_L3TBL_NUM];\n \tuint32_t l4table[HNS3_L4TBL_NUM];\n \tuint32_t inner_l2table[HNS3_L2TBL_NUM];\n \tuint32_t inner_l3table[HNS3_L3TBL_NUM];\n \tuint32_t inner_l4table[HNS3_L4TBL_NUM];\n+\tuint32_t ol2table[HNS3_OL2TBL_NUM];\n \tuint32_t ol3table[HNS3_OL3TBL_NUM];\n \tuint32_t ol4table[HNS3_OL4TBL_NUM];\n };\ndiff --git a/drivers/net/hns3/hns3_rxtx.c b/drivers/net/hns3/hns3_rxtx.c\nindex 55bee17..3d5e465 100644\n--- a/drivers/net/hns3/hns3_rxtx.c\n+++ b/drivers/net/hns3/hns3_rxtx.c\n@@ -1839,6 +1839,19 @@ hns3_dev_supported_ptypes_get(struct rte_eth_dev *dev)\n \t\tRTE_PTYPE_L4_TCP,\n \t\tRTE_PTYPE_L4_UDP,\n \t\tRTE_PTYPE_TUNNEL_GRE,\n+\t\tRTE_PTYPE_INNER_L2_ETHER,\n+\t\tRTE_PTYPE_INNER_L2_ETHER_VLAN,\n+\t\tRTE_PTYPE_INNER_L2_ETHER_QINQ,\n+\t\tRTE_PTYPE_INNER_L3_IPV4,\n+\t\tRTE_PTYPE_INNER_L3_IPV6,\n+\t\tRTE_PTYPE_INNER_L3_IPV4_EXT,\n+\t\tRTE_PTYPE_INNER_L3_IPV6_EXT,\n+\t\tRTE_PTYPE_INNER_L4_UDP,\n+\t\tRTE_PTYPE_INNER_L4_TCP,\n+\t\tRTE_PTYPE_INNER_L4_SCTP,\n+\t\tRTE_PTYPE_INNER_L4_ICMP,\n+\t\tRTE_PTYPE_TUNNEL_VXLAN,\n+\t\tRTE_PTYPE_TUNNEL_NVGRE,\n \t\tRTE_PTYPE_UNKNOWN\n \t};\n \n@@ -1851,26 +1864,35 @@ hns3_dev_supported_ptypes_get(struct rte_eth_dev *dev)\n \treturn NULL;\n }\n \n-void\n-hns3_init_rx_ptype_tble(struct rte_eth_dev *dev)\n-{\n-\tstruct hns3_adapter *hns = dev->data->dev_private;\n-\tstruct hns3_ptype_table *tbl = &hns->ptype_tbl;\n-\n-\tmemset(tbl, 0, sizeof(*tbl));\n-\n-\ttbl->l2table[0] = RTE_PTYPE_L2_ETHER;\n-\ttbl->l2table[1] = RTE_PTYPE_L2_ETHER_QINQ;\n-\ttbl->l2table[2] = RTE_PTYPE_L2_ETHER_VLAN;\n-\ttbl->l2table[3] = RTE_PTYPE_L2_ETHER_VLAN;\n-\n-\ttbl->l3table[0] = RTE_PTYPE_L3_IPV4;\n-\ttbl->l3table[1] = RTE_PTYPE_L3_IPV6;\n-\ttbl->l3table[2] = RTE_PTYPE_L2_ETHER_ARP;\n-\ttbl->l3table[3] = RTE_PTYPE_L2_ETHER;\n-\ttbl->l3table[4] = RTE_PTYPE_L3_IPV4_EXT;\n-\ttbl->l3table[5] = RTE_PTYPE_L3_IPV6_EXT;\n-\ttbl->l3table[6] = RTE_PTYPE_L2_ETHER_LLDP;\n+static void\n+hns3_init_non_tunnel_ptype_tbl(struct hns3_ptype_table *tbl)\n+{\n+\ttbl->l2l3table[0][0] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4;\n+\ttbl->l2l3table[0][1] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6;\n+\ttbl->l2l3table[0][2] = RTE_PTYPE_L2_ETHER_ARP;\n+\ttbl->l2l3table[0][3] = RTE_PTYPE_L2_ETHER;\n+\ttbl->l2l3table[0][4] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV4_EXT;\n+\ttbl->l2l3table[0][5] = RTE_PTYPE_L2_ETHER | RTE_PTYPE_L3_IPV6_EXT;\n+\ttbl->l2l3table[0][6] = RTE_PTYPE_L2_ETHER_LLDP;\n+\ttbl->l2l3table[0][15] = RTE_PTYPE_L2_ETHER;\n+\n+\ttbl->l2l3table[1][0] = RTE_PTYPE_L2_ETHER_VLAN | RTE_PTYPE_L3_IPV4;\n+\ttbl->l2l3table[1][1] = RTE_PTYPE_L2_ETHER_VLAN | RTE_PTYPE_L3_IPV6;\n+\ttbl->l2l3table[1][2] = RTE_PTYPE_L2_ETHER_ARP;\n+\ttbl->l2l3table[1][3] = RTE_PTYPE_L2_ETHER_VLAN;\n+\ttbl->l2l3table[1][4] = RTE_PTYPE_L2_ETHER_VLAN | RTE_PTYPE_L3_IPV4_EXT;\n+\ttbl->l2l3table[1][5] = RTE_PTYPE_L2_ETHER_VLAN | RTE_PTYPE_L3_IPV6_EXT;\n+\ttbl->l2l3table[1][6] = RTE_PTYPE_L2_ETHER_LLDP;\n+\ttbl->l2l3table[1][15] = RTE_PTYPE_L2_ETHER_VLAN;\n+\n+\ttbl->l2l3table[2][0] = RTE_PTYPE_L2_ETHER_QINQ | RTE_PTYPE_L3_IPV4;\n+\ttbl->l2l3table[2][1] = RTE_PTYPE_L2_ETHER_QINQ | RTE_PTYPE_L3_IPV6;\n+\ttbl->l2l3table[2][2] = RTE_PTYPE_L2_ETHER_ARP;\n+\ttbl->l2l3table[2][3] = RTE_PTYPE_L2_ETHER_QINQ;\n+\ttbl->l2l3table[2][4] = RTE_PTYPE_L2_ETHER_QINQ | RTE_PTYPE_L3_IPV4_EXT;\n+\ttbl->l2l3table[2][5] = RTE_PTYPE_L2_ETHER_QINQ | RTE_PTYPE_L3_IPV6_EXT;\n+\ttbl->l2l3table[2][6] = RTE_PTYPE_L2_ETHER_LLDP;\n+\ttbl->l2l3table[2][15] = RTE_PTYPE_L2_ETHER_QINQ;\n \n \ttbl->l4table[0] = RTE_PTYPE_L4_UDP;\n \ttbl->l4table[1] = RTE_PTYPE_L4_TCP;\n@@ -1878,37 +1900,60 @@ hns3_init_rx_ptype_tble(struct rte_eth_dev *dev)\n \ttbl->l4table[3] = RTE_PTYPE_L4_SCTP;\n \ttbl->l4table[4] = RTE_PTYPE_L4_IGMP;\n \ttbl->l4table[5] = RTE_PTYPE_L4_ICMP;\n+}\n \n+static void\n+hns3_init_tunnel_ptype_tbl(struct hns3_ptype_table *tbl)\n+{\n \ttbl->inner_l2table[0] = RTE_PTYPE_INNER_L2_ETHER;\n \ttbl->inner_l2table[1] = RTE_PTYPE_INNER_L2_ETHER_VLAN;\n \ttbl->inner_l2table[2] = RTE_PTYPE_INNER_L2_ETHER_QINQ;\n \n \ttbl->inner_l3table[0] = RTE_PTYPE_INNER_L3_IPV4;\n \ttbl->inner_l3table[1] = RTE_PTYPE_INNER_L3_IPV6;\n-\ttbl->inner_l3table[2] = 0;\n-\ttbl->inner_l3table[3] = RTE_PTYPE_INNER_L2_ETHER;\n+\t/* There is not a ptype for inner ARP/RARP */\n+\ttbl->inner_l3table[2] = RTE_PTYPE_UNKNOWN;\n+\ttbl->inner_l3table[3] = RTE_PTYPE_UNKNOWN;\n \ttbl->inner_l3table[4] = RTE_PTYPE_INNER_L3_IPV4_EXT;\n \ttbl->inner_l3table[5] = RTE_PTYPE_INNER_L3_IPV6_EXT;\n \n \ttbl->inner_l4table[0] = RTE_PTYPE_INNER_L4_UDP;\n \ttbl->inner_l4table[1] = RTE_PTYPE_INNER_L4_TCP;\n-\ttbl->inner_l4table[2] = RTE_PTYPE_TUNNEL_GRE;\n+\t/* There is not a ptype for inner GRE */\n+\ttbl->inner_l4table[2] = RTE_PTYPE_UNKNOWN;\n \ttbl->inner_l4table[3] = RTE_PTYPE_INNER_L4_SCTP;\n-\ttbl->inner_l4table[4] = RTE_PTYPE_L4_IGMP;\n+\t/* There is not a ptype for inner IGMP */\n+\ttbl->inner_l4table[4] = RTE_PTYPE_UNKNOWN;\n \ttbl->inner_l4table[5] = RTE_PTYPE_INNER_L4_ICMP;\n \n+\ttbl->ol2table[0] = RTE_PTYPE_L2_ETHER;\n+\ttbl->ol2table[1] = RTE_PTYPE_L2_ETHER_VLAN;\n+\ttbl->ol2table[2] = RTE_PTYPE_L2_ETHER_QINQ;\n+\n \ttbl->ol3table[0] = RTE_PTYPE_L3_IPV4;\n \ttbl->ol3table[1] = RTE_PTYPE_L3_IPV6;\n-\ttbl->ol3table[2] = 0;\n-\ttbl->ol3table[3] = 0;\n+\ttbl->ol3table[2] = RTE_PTYPE_UNKNOWN;\n+\ttbl->ol3table[3] = RTE_PTYPE_UNKNOWN;\n \ttbl->ol3table[4] = RTE_PTYPE_L3_IPV4_EXT;\n \ttbl->ol3table[5] = RTE_PTYPE_L3_IPV6_EXT;\n \n-\ttbl->ol4table[0] = 0;\n+\ttbl->ol4table[0] = RTE_PTYPE_UNKNOWN;\n \ttbl->ol4table[1] = RTE_PTYPE_TUNNEL_VXLAN;\n \ttbl->ol4table[2] = RTE_PTYPE_TUNNEL_NVGRE;\n }\n \n+void\n+hns3_init_rx_ptype_tble(struct rte_eth_dev *dev)\n+{\n+\tstruct hns3_adapter *hns = dev->data->dev_private;\n+\tstruct hns3_ptype_table *tbl = &hns->ptype_tbl;\n+\n+\tmemset(tbl, 0, sizeof(*tbl));\n+\n+\thns3_init_non_tunnel_ptype_tbl(tbl);\n+\thns3_init_tunnel_ptype_tbl(tbl);\n+}\n+\n static inline void\n hns3_rxd_to_vlan_tci(struct hns3_rx_queue *rxq, struct rte_mbuf *mb,\n \t\t     uint32_t l234_info, const struct hns3_desc *rxd)\ndiff --git a/drivers/net/hns3/hns3_rxtx.h b/drivers/net/hns3/hns3_rxtx.h\nindex ae09e94..68497a0 100644\n--- a/drivers/net/hns3/hns3_rxtx.h\n+++ b/drivers/net/hns3/hns3_rxtx.h\n@@ -580,14 +580,14 @@ static inline uint32_t\n hns3_rx_calc_ptype(struct hns3_rx_queue *rxq, const uint32_t l234_info,\n \t\t   const uint32_t ol_info)\n {\n-\tconst struct hns3_ptype_table *const ptype_tbl = rxq->ptype_tbl;\n+\tconst struct hns3_ptype_table * const ptype_tbl = rxq->ptype_tbl;\n \tuint32_t l2id, l3id, l4id;\n-\tuint32_t ol3id, ol4id;\n+\tuint32_t ol3id, ol4id, ol2id;\n \n \tol4id = hns3_get_field(ol_info, HNS3_RXD_OL4ID_M, HNS3_RXD_OL4ID_S);\n \tol3id = hns3_get_field(ol_info, HNS3_RXD_OL3ID_M, HNS3_RXD_OL3ID_S);\n-\tl2id = hns3_get_field(l234_info, HNS3_RXD_STRP_TAGP_M,\n-\t\t\t      HNS3_RXD_STRP_TAGP_S);\n+\tol2id = hns3_get_field(ol_info, HNS3_RXD_OVLAN_M, HNS3_RXD_OVLAN_S);\n+\tl2id = hns3_get_field(l234_info, HNS3_RXD_VLAN_M, HNS3_RXD_VLAN_S);\n \tl3id = hns3_get_field(l234_info, HNS3_RXD_L3ID_M, HNS3_RXD_L3ID_S);\n \tl4id = hns3_get_field(l234_info, HNS3_RXD_L4ID_M, HNS3_RXD_L4ID_S);\n \n@@ -595,9 +595,10 @@ hns3_rx_calc_ptype(struct hns3_rx_queue *rxq, const uint32_t l234_info,\n \t\treturn ptype_tbl->inner_l2table[l2id] |\n \t\t\tptype_tbl->inner_l3table[l3id] |\n \t\t\tptype_tbl->inner_l4table[l4id] |\n-\t\t\tptype_tbl->ol3table[ol3id] | ptype_tbl->ol4table[ol4id];\n+\t\t\tptype_tbl->ol3table[ol3id] |\n+\t\t\tptype_tbl->ol4table[ol4id] | ptype_tbl->ol2table[ol2id];\n \telse\n-\t\treturn ptype_tbl->l2table[l2id] | ptype_tbl->l3table[l3id] |\n+\t\treturn ptype_tbl->l2l3table[l2id][l3id] |\n \t\t\tptype_tbl->l4table[l4id];\n }\n \n",
    "prefixes": [
        "v3",
        "3/8"
    ]
}