get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 115052,
    "url": "http://patches.dpdk.org/api/patches/115052/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20220815073206.2917968-25-qi.z.zhang@intel.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": "<20220815073206.2917968-25-qi.z.zhang@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20220815073206.2917968-25-qi.z.zhang@intel.com",
    "date": "2022-08-15T07:31:20",
    "name": "[v2,24/70] net/ice/base: create duplicate detection for ACL rules",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "e57bf586df35a12f89e96d6fb00577da95dafd82",
    "submitter": {
        "id": 504,
        "url": "http://patches.dpdk.org/api/people/504/?format=api",
        "name": "Qi Zhang",
        "email": "qi.z.zhang@intel.com"
    },
    "delegate": {
        "id": 1540,
        "url": "http://patches.dpdk.org/api/users/1540/?format=api",
        "username": "qzhan15",
        "first_name": "Qi",
        "last_name": "Zhang",
        "email": "qi.z.zhang@intel.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20220815073206.2917968-25-qi.z.zhang@intel.com/mbox/",
    "series": [
        {
            "id": 24308,
            "url": "http://patches.dpdk.org/api/series/24308/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=24308",
            "date": "2022-08-15T07:30:56",
            "name": "ice base code update",
            "version": 2,
            "mbox": "http://patches.dpdk.org/series/24308/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/115052/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/115052/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 mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id A96FFA00C4;\n\tMon, 15 Aug 2022 01:24:38 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id B539A42C15;\n\tMon, 15 Aug 2022 01:22:57 +0200 (CEST)",
            "from mga14.intel.com (mga14.intel.com [192.55.52.115])\n by mails.dpdk.org (Postfix) with ESMTP id C00EE42C46\n for <dev@dpdk.org>; Mon, 15 Aug 2022 01:22:55 +0200 (CEST)",
            "from orsmga008.jf.intel.com ([10.7.209.65])\n by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 14 Aug 2022 16:22:55 -0700",
            "from dpdk-qzhan15-test02.sh.intel.com ([10.67.115.4])\n by orsmga008.jf.intel.com with ESMTP; 14 Aug 2022 16:22:53 -0700"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple;\n d=intel.com; i=@intel.com; q=dns/txt; s=Intel;\n t=1660519375; x=1692055375;\n h=from:to:cc:subject:date:message-id:in-reply-to:\n references:mime-version:content-transfer-encoding;\n bh=SVXcspsKFZFOLGnAbIU8xx3xglLr9zXsrkBvK8jOvP8=;\n b=NJXk2BDA8vXcwhmtCC1pEjmZ617jU99RsCtXhBi/bc+k6b6rGN0XTMiN\n dj/0E30spw1/6up7ud4BAeaQp5QTHRFXyoPjh7ymKMxeepT3UlfcKyisn\n N5Hrba9ONd5q1/SLG0+6QVttf57JsbKsdfZARPmqTjKVhrySXNkR1hvrz\n 4Grb3jnbiTgkgucO+L0JLOVyZ2Lk4YFutMBstJp8E8XB6AjLprUo6v7eo\n uSfCXp9K59B0Dd3K74g71bSzsbKAjNXTQj0M7CFBceguE20bfPq54nnw4\n Q7EhsotbWmcZwR5yIL8vq9C6rbbzHYIRBPWyAeV6uDRzwIT0+BuxI5LBa Q==;",
        "X-IronPort-AV": [
            "E=McAfee;i=\"6400,9594,10439\"; a=\"291857954\"",
            "E=Sophos;i=\"5.93,237,1654585200\"; d=\"scan'208\";a=\"291857954\"",
            "E=Sophos;i=\"5.93,237,1654585200\"; d=\"scan'208\";a=\"635283129\""
        ],
        "X-ExtLoop1": "1",
        "From": "Qi Zhang <qi.z.zhang@intel.com>",
        "To": "qiming.yang@intel.com",
        "Cc": "dev@dpdk.org, Qi Zhang <qi.z.zhang@intel.com>,\n Michal Wilczynski <michal.wilczynski@intel.com>",
        "Subject": "[PATCH v2 24/70] net/ice/base: create duplicate detection for ACL\n rules",
        "Date": "Mon, 15 Aug 2022 03:31:20 -0400",
        "Message-Id": "<20220815073206.2917968-25-qi.z.zhang@intel.com>",
        "X-Mailer": "git-send-email 2.31.1",
        "In-Reply-To": "<20220815073206.2917968-1-qi.z.zhang@intel.com>",
        "References": "<20220815071306.2910599-1-qi.z.zhang@intel.com>\n <20220815073206.2917968-1-qi.z.zhang@intel.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "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"
    },
    "content": "Currently there is no check for adding duplicate ACL rules,\nthis creates subtle bugs, for example unability to remove\nfilters. Adding check + refactoring a redundant function.\n\nSigned-off-by: Michal Wilczynski <michal.wilczynski@intel.com>\nSigned-off-by: Qi Zhang <qi.z.zhang@intel.com>\n---\n drivers/net/ice/base/ice_fdir.c | 99 ++++++++++++---------------------\n drivers/net/ice/base/ice_fdir.h |  5 ++\n 2 files changed, 42 insertions(+), 62 deletions(-)",
    "diff": "diff --git a/drivers/net/ice/base/ice_fdir.c b/drivers/net/ice/base/ice_fdir.c\nindex ae76361102..6bbab0c843 100644\n--- a/drivers/net/ice/base/ice_fdir.c\n+++ b/drivers/net/ice/base/ice_fdir.c\n@@ -4204,70 +4204,56 @@ ice_fdir_update_cntrs(struct ice_hw *hw, enum ice_fltr_ptype flow,\n }\n \n /**\n- * ice_cmp_ipv6_addr - compare 2 IP v6 addresses\n- * @a: IP v6 address\n- * @b: IP v6 address\n+ * ice_fdir_comp_rules_basic - compare 2 filters\n+ * @a: a Flow Director filter data structure\n+ * @b: a Flow Director filter data structure\n  *\n- * Returns 0 on equal, returns non-0 if different\n+ * Returns true if the filters match\n  */\n-static int ice_cmp_ipv6_addr(__be32 *a, __be32 *b)\n+bool\n+ice_fdir_comp_rules_basic(struct ice_fdir_fltr *a,  struct ice_fdir_fltr *b)\n {\n-\treturn memcmp(a, b, 4 * sizeof(__be32));\n+\tif (a->flow_type != b->flow_type)\n+\t\treturn false;\n+\tif (memcmp(&a->ip, &b->ip, sizeof(a->ip)))\n+\t\treturn false;\n+\tif (memcmp(&a->mask, &b->mask, sizeof(a->mask)))\n+\t\treturn false;\n+\n+\treturn true;\n }\n \n /**\n- * ice_fdir_comp_rules - compare 2 filters\n+ * ice_fdir_comp_rules_extended - compare 2 filters\n  * @a: a Flow Director filter data structure\n  * @b: a Flow Director filter data structure\n- * @v6: bool true if v6 filter\n  *\n  * Returns true if the filters match\n  */\n-static bool\n-ice_fdir_comp_rules(struct ice_fdir_fltr *a,  struct ice_fdir_fltr *b, bool v6)\n+bool\n+ice_fdir_comp_rules_extended(struct ice_fdir_fltr *a,  struct ice_fdir_fltr *b)\n {\n-\tenum ice_fltr_ptype flow_type = a->flow_type;\n+\tif (!ice_fdir_comp_rules_basic(a, b))\n+\t\treturn false;\n \n-\t/* The calling function already checks that the two filters have the\n-\t * same flow_type.\n-\t */\n-\tif (!v6) {\n-\t\tif (flow_type == ICE_FLTR_PTYPE_NONF_IPV4_TCP ||\n-\t\t    flow_type == ICE_FLTR_PTYPE_NONF_IPV4_UDP ||\n-\t\t    flow_type == ICE_FLTR_PTYPE_NONF_IPV4_SCTP) {\n-\t\t\tif (a->ip.v4.dst_ip == b->ip.v4.dst_ip &&\n-\t\t\t    a->ip.v4.src_ip == b->ip.v4.src_ip &&\n-\t\t\t    a->ip.v4.dst_port == b->ip.v4.dst_port &&\n-\t\t\t    a->ip.v4.src_port == b->ip.v4.src_port)\n-\t\t\t\treturn true;\n-\t\t} else if (flow_type == ICE_FLTR_PTYPE_NONF_IPV4_OTHER) {\n-\t\t\tif (a->ip.v4.dst_ip == b->ip.v4.dst_ip &&\n-\t\t\t    a->ip.v4.src_ip == b->ip.v4.src_ip &&\n-\t\t\t    a->ip.v4.l4_header == b->ip.v4.l4_header &&\n-\t\t\t    a->ip.v4.proto == b->ip.v4.proto &&\n-\t\t\t    a->ip.v4.ip_ver == b->ip.v4.ip_ver &&\n-\t\t\t    a->ip.v4.tos == b->ip.v4.tos)\n-\t\t\t\treturn true;\n-\t\t}\n-\t} else {\n-\t\tif (flow_type == ICE_FLTR_PTYPE_NONF_IPV6_UDP ||\n-\t\t    flow_type == ICE_FLTR_PTYPE_NONF_IPV6_TCP ||\n-\t\t    flow_type == ICE_FLTR_PTYPE_NONF_IPV6_SCTP) {\n-\t\t\tif (a->ip.v6.dst_port == b->ip.v6.dst_port &&\n-\t\t\t    a->ip.v6.src_port == b->ip.v6.src_port &&\n-\t\t\t    !ice_cmp_ipv6_addr(a->ip.v6.dst_ip,\n-\t\t\t\t\t       b->ip.v6.dst_ip) &&\n-\t\t\t    !ice_cmp_ipv6_addr(a->ip.v6.src_ip,\n-\t\t\t\t\t       b->ip.v6.src_ip))\n-\t\t\t\treturn true;\n-\t\t} else if (flow_type == ICE_FLTR_PTYPE_NONF_IPV6_OTHER) {\n-\t\t\tif (a->ip.v6.dst_port == b->ip.v6.dst_port &&\n-\t\t\t    a->ip.v6.src_port == b->ip.v6.src_port)\n-\t\t\t\treturn true;\n-\t\t}\n-\t}\n+\tif (memcmp(&a->gtpu_data, &b->gtpu_data, sizeof(a->gtpu_data)))\n+\t\treturn false;\n+\tif (memcmp(&a->gtpu_mask, &b->gtpu_mask, sizeof(a->gtpu_mask)))\n+\t\treturn false;\n+\tif (memcmp(&a->l2tpv3_data, &b->l2tpv3_data, sizeof(a->l2tpv3_data)))\n+\t\treturn false;\n+\tif (memcmp(&a->l2tpv3_mask, &b->l2tpv3_mask, sizeof(a->l2tpv3_mask)))\n+\t\treturn false;\n+\tif (memcmp(&a->ext_data, &b->ext_data, sizeof(a->ext_data)))\n+\t\treturn false;\n+\tif (memcmp(&a->ext_mask, &b->ext_mask, sizeof(a->ext_mask)))\n+\t\treturn false;\n+\tif (memcmp(&a->ecpri_data, &b->ecpri_data, sizeof(a->ecpri_data)))\n+\t\treturn false;\n+\tif (memcmp(&a->ecpri_mask, &b->ecpri_mask, sizeof(a->ecpri_mask)))\n+\t\treturn false;\n \n-\treturn false;\n+\treturn true;\n }\n \n /**\n@@ -4284,19 +4270,8 @@ bool ice_fdir_is_dup_fltr(struct ice_hw *hw, struct ice_fdir_fltr *input)\n \n \tLIST_FOR_EACH_ENTRY(rule, &hw->fdir_list_head, ice_fdir_fltr,\n \t\t\t    fltr_node) {\n-\t\tenum ice_fltr_ptype flow_type;\n+\t\tret = ice_fdir_comp_rules_basic(rule, input);\n \n-\t\tif (rule->flow_type != input->flow_type)\n-\t\t\tcontinue;\n-\n-\t\tflow_type = input->flow_type;\n-\t\tif (flow_type == ICE_FLTR_PTYPE_NONF_IPV4_TCP ||\n-\t\t    flow_type == ICE_FLTR_PTYPE_NONF_IPV4_UDP ||\n-\t\t    flow_type == ICE_FLTR_PTYPE_NONF_IPV4_SCTP ||\n-\t\t    flow_type == ICE_FLTR_PTYPE_NONF_IPV4_OTHER)\n-\t\t\tret = ice_fdir_comp_rules(rule, input, false);\n-\t\telse\n-\t\t\tret = ice_fdir_comp_rules(rule, input, true);\n \t\tif (ret) {\n \t\t\tif (rule->fltr_id == input->fltr_id &&\n \t\t\t    rule->q_index != input->q_index)\ndiff --git a/drivers/net/ice/base/ice_fdir.h b/drivers/net/ice/base/ice_fdir.h\nindex b6325a3b1b..008636072a 100644\n--- a/drivers/net/ice/base/ice_fdir.h\n+++ b/drivers/net/ice/base/ice_fdir.h\n@@ -294,6 +294,11 @@ struct ice_fdir_base_pkt {\n \tconst u8 *tun_pkt;\n };\n \n+bool\n+ice_fdir_comp_rules_basic(struct ice_fdir_fltr *a,  struct ice_fdir_fltr *b);\n+bool\n+ice_fdir_comp_rules_extended(struct ice_fdir_fltr *a,  struct ice_fdir_fltr *b);\n+\n enum ice_status ice_alloc_fd_res_cntr(struct ice_hw *hw, u16 *cntr_id);\n enum ice_status ice_free_fd_res_cntr(struct ice_hw *hw, u16 cntr_id);\n enum ice_status\n",
    "prefixes": [
        "v2",
        "24/70"
    ]
}