Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/115052/?format=api
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" ] }{ "id": 115052, "url": "