Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/66806/?format=api
http://patches.dpdk.org/api/patches/66806/?format=api", "web_url": "http://patches.dpdk.org/project/dpdk/patch/1584459511-5353-23-git-send-email-venkatkumar.duvvuru@broadcom.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": "<1584459511-5353-23-git-send-email-venkatkumar.duvvuru@broadcom.com>", "list_archive_url": "https://inbox.dpdk.org/dev/1584459511-5353-23-git-send-email-venkatkumar.duvvuru@broadcom.com", "date": "2020-03-17T15:38:20", "name": "[22/33] net/bnxt: match rte flow items with flow template patterns", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": true, "hash": "8f251830246e8eb56d3111ae30dfdc305d6bca39", "submitter": { "id": 1635, "url": "http://patches.dpdk.org/api/people/1635/?format=api", "name": "Venkat Duvvuru", "email": "venkatkumar.duvvuru@broadcom.com" }, "delegate": { "id": 1766, "url": "http://patches.dpdk.org/api/users/1766/?format=api", "username": "ajitkhaparde", "first_name": "Ajit", "last_name": "Khaparde", "email": "ajit.khaparde@broadcom.com" }, "mbox": "http://patches.dpdk.org/project/dpdk/patch/1584459511-5353-23-git-send-email-venkatkumar.duvvuru@broadcom.com/mbox/", "series": [ { "id": 8955, "url": "http://patches.dpdk.org/api/series/8955/?format=api", "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=8955", "date": "2020-03-17T15:37:58", "name": "add support for host based flow table management", "version": 1, "mbox": "http://patches.dpdk.org/series/8955/mbox/" } ], "comments": "http://patches.dpdk.org/api/patches/66806/comments/", "check": "fail", "checks": "http://patches.dpdk.org/api/patches/66806/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 E4081A0565;\n\tTue, 17 Mar 2020 16:44:37 +0100 (CET)", "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 9CCF41C1B2;\n\tTue, 17 Mar 2020 16:39:50 +0100 (CET)", "from mail-wm1-f67.google.com (mail-wm1-f67.google.com\n [209.85.128.67]) by dpdk.org (Postfix) with ESMTP id 5066A1C0B6\n for <dev@dpdk.org>; Tue, 17 Mar 2020 16:39:49 +0100 (CET)", "by mail-wm1-f67.google.com with SMTP id 25so21993644wmk.3\n for <dev@dpdk.org>; Tue, 17 Mar 2020 08:39:49 -0700 (PDT)", "from S60.dhcp.broadcom.net ([192.19.234.250])\n by smtp.gmail.com with ESMTPSA id q4sm5052142wro.56.2020.03.17.08.39.46\n (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128);\n Tue, 17 Mar 2020 08:39:48 -0700 (PDT)" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com;\n s=google;\n h=from:to:cc:subject:date:message-id:in-reply-to:references;\n bh=2SHZOOYmdPzOj/MtbJV9MkaeDZYJjjC3wBnk9RyCtgU=;\n b=cCe8SkcANI2btbbRZqKqMsFHxyB5gEpC0VAjX0kKKrPzqinFDt0Q4X0F4g+VQcsz5n\n AMIywZs8v79RdUeBBCmdJXgFn0rZoOfoDQNwwlBEY7ylBDCiXiU5zjs3TLcik/Z249h5\n oPoU1lDDaSqB7hHPkpt1r37KJgZtE5rqeafSw=", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20161025;\n h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n :references;\n bh=2SHZOOYmdPzOj/MtbJV9MkaeDZYJjjC3wBnk9RyCtgU=;\n b=pbGwUxXFk/B/EfnxX7SD9KR7k/r74mAGFm3ttX5clZVFmyRQ85N8o/egf9XfyZ0ETT\n HgsAGo0YqDp2H5tq03zwU73iqXXs2IgB84toIuso6XB08bm/H2n0eLwQHiRUPmRneHFg\n Oroz+rf+nLs6JbHojrUUYZ4RPcmgAGQLMB9pfIzwgh3wjR5Q1GXHYS8TepzzJlp2qC8Z\n oMLEWw0CiL2nJCdAxvSYsSyjjcZ1HgrKJEksrGPSsHH5C0TWvaydCFR3DaqXHFb6qNxe\n gtAkW/v1jAXeHXCCQFOyqcOCeR/unmWynCg2crbjKPjQro9tT+gl0kPdg8Rl/WFp4Oy6\n qpQQ==", "X-Gm-Message-State": "ANhLgQ1GKD+yWiKJMlXL9Kw7Gmwl+WqPxQ6nIwP5yZlJRHomnSQzbHpq\n RVDvmHaoMPMRvAK1d2pMmRDjL4TRGFUFVP/EDHjSg4/LL++b7KuAIHvYJacsUBHK3Q2t+JWvrkv\n kdCIBr7ceF1E00XsxbxbY7Z/d6K+cBWvT9I0nZIkhiMy3pLUtXghGVDLPAz7Xrp6TqYd5", "X-Google-Smtp-Source": "\n ADFU+vsacnt0HzEEbK5dFFLebvGiLSWqraxGrrIqIj6fnICMgxGE3rOeG/kTWGRodaVGSijEuGm/aw==", "X-Received": "by 2002:a1c:f001:: with SMTP id a1mr5677327wmb.76.1584459588532;\n Tue, 17 Mar 2020 08:39:48 -0700 (PDT)", "From": "Venkat Duvvuru <venkatkumar.duvvuru@broadcom.com>", "To": "dev@dpdk.org", "Cc": "Kishore Padmanabha <kishore.padmanabha@broadcom.com>,\n Venkat Duvvuru <venkatkumar.duvvuru@broadcom.com>", "Date": "Tue, 17 Mar 2020 21:08:20 +0530", "Message-Id": "\n <1584459511-5353-23-git-send-email-venkatkumar.duvvuru@broadcom.com>", "X-Mailer": "git-send-email 2.7.4", "In-Reply-To": "\n <1584459511-5353-1-git-send-email-venkatkumar.duvvuru@broadcom.com>", "References": "\n <1584459511-5353-1-git-send-email-venkatkumar.duvvuru@broadcom.com>", "Subject": "[dpdk-dev] [PATCH 22/33] net/bnxt: match rte flow items with flow\n\ttemplate patterns", "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: Kishore Padmanabha <kishore.padmanabha@broadcom.com>\n\nThis patch does the following\n1. Takes hdr_bitmap generated from the rte_flow_items\n2. Iterates through the static hdr_bitmap list\n3. Returns success if a match is found, otherwise an error\n\nSigned-off-by: Kishore Padmanabha <kishore.padmanabha@broadcom.com>\nSigned-off-by: Venkat Duvvuru <venkatkumar.duvvuru@broadcom.com>\nReviewed-by: Lance Richardson <lance.richardson@broadcom.com>\nReviewed-by: Ajit Kumar Khaparde <ajit.khaparde@broadcom.com>\n---\n drivers/net/bnxt/Makefile | 1 +\n drivers/net/bnxt/tf_ulp/bnxt_tf_common.h | 12 ++\n drivers/net/bnxt/tf_ulp/ulp_matcher.c | 152 ++++++++++++++++++++++++++\n drivers/net/bnxt/tf_ulp/ulp_matcher.h | 26 +++++\n drivers/net/bnxt/tf_ulp/ulp_template_db.c | 115 +++++++++++++++++++\n drivers/net/bnxt/tf_ulp/ulp_template_db.h | 40 +++++++\n drivers/net/bnxt/tf_ulp/ulp_template_struct.h | 21 ++++\n 7 files changed, 367 insertions(+)\n create mode 100644 drivers/net/bnxt/tf_ulp/ulp_matcher.c\n create mode 100644 drivers/net/bnxt/tf_ulp/ulp_matcher.h", "diff": "diff --git a/drivers/net/bnxt/Makefile b/drivers/net/bnxt/Makefile\nindex 3a3dad4..9776987 100644\n--- a/drivers/net/bnxt/Makefile\n+++ b/drivers/net/bnxt/Makefile\n@@ -63,6 +63,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_BNXT_TRUFLOW) += tf_ulp/ulp_flow_db.c\n SRCS-$(CONFIG_RTE_LIBRTE_BNXT_TRUFLOW) += tf_ulp/ulp_template_db.c\n SRCS-$(CONFIG_RTE_LIBRTE_BNXT_TRUFLOW) += tf_ulp/ulp_utils.c\n SRCS-$(CONFIG_RTE_LIBRTE_BNXT_TRUFLOW) += tf_ulp/ulp_mapper.c\n+SRCS-$(CONFIG_RTE_LIBRTE_BNXT_TRUFLOW) += tf_ulp/ulp_matcher.c\n #\n # Export include files\n #\ndiff --git a/drivers/net/bnxt/tf_ulp/bnxt_tf_common.h b/drivers/net/bnxt/tf_ulp/bnxt_tf_common.h\nindex 3516df4..e4ebfc5 100644\n--- a/drivers/net/bnxt/tf_ulp/bnxt_tf_common.h\n+++ b/drivers/net/bnxt/tf_ulp/bnxt_tf_common.h\n@@ -25,6 +25,18 @@\n #define\tBNXT_ULP_TX_NUM_FLOWS\t\t\t32\n #define\tBNXT_ULP_TX_TBL_IF_ID\t\t\t0\n \n+enum bnxt_tf_rc {\n+\tBNXT_TF_RC_PARSE_ERR\t= -2,\n+\tBNXT_TF_RC_ERROR\t= -1,\n+\tBNXT_TF_RC_SUCCESS\t= 0\n+};\n+\n+/* ulp direction Type */\n+enum ulp_direction_type {\n+\tULP_DIR_INGRESS,\n+\tULP_DIR_EGRESS,\n+};\n+\n struct bnxt_ulp_mark_tbl *\n bnxt_ulp_cntxt_ptr2_mark_db_get(struct bnxt_ulp_context *ulp_ctx);\n \ndiff --git a/drivers/net/bnxt/tf_ulp/ulp_matcher.c b/drivers/net/bnxt/tf_ulp/ulp_matcher.c\nnew file mode 100644\nindex 0000000..f367e4c\n--- /dev/null\n+++ b/drivers/net/bnxt/tf_ulp/ulp_matcher.c\n@@ -0,0 +1,152 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright(c) 2014-2020 Broadcom\n+ * All rights reserved.\n+ */\n+\n+#include \"ulp_matcher.h\"\n+#include \"ulp_utils.h\"\n+\n+/* Utility function to check if bitmap is zero */\n+static inline\n+int ulp_field_mask_is_zero(uint8_t *bitmap, uint32_t size)\n+{\n+\twhile (size-- > 0) {\n+\t\tif (*bitmap != 0)\n+\t\t\treturn 0;\n+\t\tbitmap++;\n+\t}\n+\treturn 1;\n+}\n+\n+/* Utility function to check if bitmap is all ones */\n+static inline int\n+ulp_field_mask_is_ones(uint8_t *bitmap, uint32_t size)\n+{\n+\twhile (size-- > 0) {\n+\t\tif (*bitmap != 0xFF)\n+\t\t\treturn 0;\n+\t\tbitmap++;\n+\t}\n+\treturn 1;\n+}\n+\n+/* Utility function to check if bitmap is non zero */\n+static inline int\n+ulp_field_mask_notzero(uint8_t *bitmap, uint32_t size)\n+{\n+\twhile (size-- > 0) {\n+\t\tif (*bitmap != 0)\n+\t\t\treturn 1;\n+\t\tbitmap++;\n+\t}\n+\treturn 0;\n+}\n+\n+/* Utility function to mask the computed and internal proto headers. */\n+static void\n+ulp_matcher_hdr_fields_normalize(struct ulp_rte_hdr_bitmap *hdr1,\n+\t\t\t\t struct ulp_rte_hdr_bitmap *hdr2)\n+{\n+\t/* copy the contents first */\n+\trte_memcpy(hdr2, hdr1, sizeof(struct ulp_rte_hdr_bitmap));\n+\n+\t/* reset the computed fields */\n+\tULP_BITMAP_RESET(hdr2->bits, BNXT_ULP_HDR_BIT_SVIF);\n+\tULP_BITMAP_RESET(hdr2->bits, BNXT_ULP_HDR_BIT_OO_VLAN);\n+\tULP_BITMAP_RESET(hdr2->bits, BNXT_ULP_HDR_BIT_OI_VLAN);\n+\tULP_BITMAP_RESET(hdr2->bits, BNXT_ULP_HDR_BIT_IO_VLAN);\n+\tULP_BITMAP_RESET(hdr2->bits, BNXT_ULP_HDR_BIT_II_VLAN);\n+\tULP_BITMAP_RESET(hdr2->bits, BNXT_ULP_HDR_BIT_O_L3);\n+\tULP_BITMAP_RESET(hdr2->bits, BNXT_ULP_HDR_BIT_O_L4);\n+\tULP_BITMAP_RESET(hdr2->bits, BNXT_ULP_HDR_BIT_I_L3);\n+\tULP_BITMAP_RESET(hdr2->bits, BNXT_ULP_HDR_BIT_I_L4);\n+}\n+\n+/*\n+ * Function to handle the matching of RTE Flows and validating\n+ * the pattern masks against the flow templates.\n+ */\n+int32_t\n+ulp_matcher_pattern_match(enum ulp_direction_type dir,\n+\t\t\t struct ulp_rte_hdr_bitmap *hdr_bitmap,\n+\t\t\t struct ulp_rte_hdr_field *hdr_field,\n+\t\t\t struct ulp_rte_act_bitmap *act_bitmap,\n+\t\t\t uint32_t\t\t *class_id)\n+{\n+\tstruct bnxt_ulp_header_match_info\t*sel_hdr_match;\n+\tuint32_t\t\t\t\thdr_num, idx, jdx;\n+\tuint32_t\t\t\t\tmatch = 0;\n+\tstruct ulp_rte_hdr_bitmap\t\thdr_bitmap_masked;\n+\tuint32_t\t\t\t\tstart_idx;\n+\tstruct ulp_rte_hdr_field\t\t*m_field;\n+\tstruct bnxt_ulp_matcher_field_info\t*sf;\n+\n+\t/* Select the ingress or egress template to match against */\n+\tif (dir == ULP_DIR_INGRESS) {\n+\t\tsel_hdr_match = ulp_ingress_hdr_match_list;\n+\t\thdr_num = BNXT_ULP_INGRESS_HDR_MATCH_SZ;\n+\t} else {\n+\t\tsel_hdr_match = ulp_egress_hdr_match_list;\n+\t\thdr_num = BNXT_ULP_EGRESS_HDR_MATCH_SZ;\n+\t}\n+\n+\t/* Remove the hdr bit maps that are internal or computed */\n+\tulp_matcher_hdr_fields_normalize(hdr_bitmap, &hdr_bitmap_masked);\n+\n+\t/* Loop through the list of class templates to find the match */\n+\tfor (idx = 0; idx < hdr_num; idx++, sel_hdr_match++) {\n+\t\tif (ULP_BITSET_CMP(&sel_hdr_match->hdr_bitmap,\n+\t\t\t\t &hdr_bitmap_masked)) {\n+\t\t\t/* no match found */\n+\t\t\tBNXT_TF_DBG(DEBUG, \"Pattern Match failed template=%d\\n\",\n+\t\t\t\t idx);\n+\t\t\tcontinue;\n+\t\t}\n+\t\tmatch = ULP_BITMAP_ISSET(act_bitmap->bits,\n+\t\t\t\t\t BNXT_ULP_ACTION_BIT_VNIC);\n+\t\tif (match != sel_hdr_match->act_vnic) {\n+\t\t\t/* no match found */\n+\t\t\tBNXT_TF_DBG(DEBUG, \"Vnic Match failed template=%d\\n\",\n+\t\t\t\t idx);\n+\t\t\tcontinue;\n+\t\t} else {\n+\t\t\tmatch = 1;\n+\t\t}\n+\n+\t\t/* Found a matching hdr bitmap, match the fields next */\n+\t\tstart_idx = sel_hdr_match->start_idx;\n+\t\tfor (jdx = 0; jdx < sel_hdr_match->num_entries; jdx++) {\n+\t\t\tm_field = &hdr_field[jdx + BNXT_ULP_HDR_FIELD_LAST - 1];\n+\t\t\tsf = &ulp_field_match[start_idx + jdx];\n+\t\t\tswitch (sf->mask_opcode) {\n+\t\t\tcase BNXT_ULP_FMF_MASK_ANY:\n+\t\t\t\tmatch &= ulp_field_mask_is_zero(m_field->mask,\n+\t\t\t\t\t\t\t\tm_field->size);\n+\t\t\t\tbreak;\n+\t\t\tcase BNXT_ULP_FMF_MASK_EXACT:\n+\t\t\t\tmatch &= ulp_field_mask_is_ones(m_field->mask,\n+\t\t\t\t\t\t\t\tm_field->size);\n+\t\t\t\tbreak;\n+\t\t\tcase BNXT_ULP_FMF_MASK_WILDCARD:\n+\t\t\t\tmatch &= ulp_field_mask_notzero(m_field->mask,\n+\t\t\t\t\t\t\t\tm_field->size);\n+\t\t\t\tbreak;\n+\t\t\tcase BNXT_ULP_FMF_MASK_IGNORE:\n+\t\t\tdefault:\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t\tif (!match)\n+\t\t\t\tbreak;\n+\t\t}\n+\t\tif (match) {\n+\t\t\tBNXT_TF_DBG(DEBUG,\n+\t\t\t\t \"Found matching pattern template %d\\n\",\n+\t\t\t\t sel_hdr_match->class_tmpl_id);\n+\t\t\t*class_id = sel_hdr_match->class_tmpl_id;\n+\t\t\treturn BNXT_TF_RC_SUCCESS;\n+\t\t}\n+\t}\n+\tBNXT_TF_DBG(DEBUG, \"Did not find any matching template\\n\");\n+\t*class_id = 0;\n+\treturn BNXT_TF_RC_ERROR;\n+}\ndiff --git a/drivers/net/bnxt/tf_ulp/ulp_matcher.h b/drivers/net/bnxt/tf_ulp/ulp_matcher.h\nnew file mode 100644\nindex 0000000..57a161d\n--- /dev/null\n+++ b/drivers/net/bnxt/tf_ulp/ulp_matcher.h\n@@ -0,0 +1,26 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright(c) 2014-2020 Broadcom\n+ * All rights reserved.\n+ */\n+\n+#ifndef ULP_MATCHER_H_\n+#define ULP_MATCHER_H_\n+\n+#include <rte_log.h>\n+#include \"bnxt.h\"\n+#include \"ulp_template_db.h\"\n+#include \"ulp_template_struct.h\"\n+#include \"bnxt_tf_common.h\"\n+\n+/*\n+ * Function to handle the matching of RTE Flows and validating\n+ * the pattern masks against the flow templates.\n+ */\n+int32_t\n+ulp_matcher_pattern_match(enum ulp_direction_type\t dir,\n+\t\t\t struct ulp_rte_hdr_bitmap\t *hdr_bitmap,\n+\t\t\t struct ulp_rte_hdr_field\t *hdr_field,\n+\t\t\t struct ulp_rte_act_bitmap\t *act_bitmap,\n+\t\t\t uint32_t\t\t\t *class_id);\n+\n+#endif /* ULP_MATCHER_H_ */\ndiff --git a/drivers/net/bnxt/tf_ulp/ulp_template_db.c b/drivers/net/bnxt/tf_ulp/ulp_template_db.c\nindex 5ec7adc..68a2dc0 100644\n--- a/drivers/net/bnxt/tf_ulp/ulp_template_db.c\n+++ b/drivers/net/bnxt/tf_ulp/ulp_template_db.c\n@@ -796,6 +796,121 @@ struct bnxt_ulp_mapper_class_key_field_info ulp_class_key_field_list[] = {\n \t}\n };\n \n+struct bnxt_ulp_header_match_info ulp_ingress_hdr_match_list[] = {\n+\t{\n+\t.hdr_bitmap = { .bits =\n+\t\tBNXT_ULP_HDR_BIT_O_ETH |\n+\t\tBNXT_ULP_HDR_BIT_O_IPV4 |\n+\t\tBNXT_ULP_HDR_BIT_O_UDP },\n+\t.start_idx = 0,\n+\t.num_entries = 24,\n+\t.class_tmpl_id = 0,\n+\t.act_vnic = 0\n+\t}\n+};\n+\n+struct bnxt_ulp_header_match_info ulp_egress_hdr_match_list[] = {\n+};\n+\n+struct bnxt_ulp_matcher_field_info ulp_field_match[] = {\n+\t{\n+\t.mask_opcode = BNXT_ULP_FMF_MASK_IGNORE,\n+\t.spec_opcode = BNXT_ULP_FMF_SPEC_IGNORE\n+\t},\n+\t{\n+\t.mask_opcode = BNXT_ULP_FMF_MASK_EXACT,\n+\t.spec_opcode = BNXT_ULP_FMF_SPEC_IGNORE\n+\t},\n+\t{\n+\t.mask_opcode = BNXT_ULP_FMF_MASK_EXACT,\n+\t.spec_opcode = BNXT_ULP_FMF_SPEC_IGNORE\n+\t},\n+\t{\n+\t.mask_opcode = BNXT_ULP_FMF_MASK_IGNORE,\n+\t.spec_opcode = BNXT_ULP_FMF_SPEC_IGNORE\n+\t},\n+\t{\n+\t.mask_opcode = BNXT_ULP_FMF_MASK_IGNORE,\n+\t.spec_opcode = BNXT_ULP_FMF_SPEC_IGNORE\n+\t},\n+\t{\n+\t.mask_opcode = BNXT_ULP_FMF_MASK_IGNORE,\n+\t.spec_opcode = BNXT_ULP_FMF_SPEC_IGNORE\n+\t},\n+\t{\n+\t.mask_opcode = BNXT_ULP_FMF_MASK_IGNORE,\n+\t.spec_opcode = BNXT_ULP_FMF_SPEC_IGNORE\n+\t},\n+\t{\n+\t.mask_opcode = BNXT_ULP_FMF_MASK_IGNORE,\n+\t.spec_opcode = BNXT_ULP_FMF_SPEC_IGNORE\n+\t},\n+\t{\n+\t.mask_opcode = BNXT_ULP_FMF_MASK_IGNORE,\n+\t.spec_opcode = BNXT_ULP_FMF_SPEC_IGNORE\n+\t},\n+\t{\n+\t.mask_opcode = BNXT_ULP_FMF_MASK_IGNORE,\n+\t.spec_opcode = BNXT_ULP_FMF_SPEC_IGNORE\n+\t},\n+\t{\n+\t.mask_opcode = BNXT_ULP_FMF_MASK_IGNORE,\n+\t.spec_opcode = BNXT_ULP_FMF_SPEC_IGNORE\n+\t},\n+\t{\n+\t.mask_opcode = BNXT_ULP_FMF_MASK_ANY,\n+\t.spec_opcode = BNXT_ULP_FMF_SPEC_IGNORE\n+\t},\n+\t{\n+\t.mask_opcode = BNXT_ULP_FMF_MASK_IGNORE,\n+\t.spec_opcode = BNXT_ULP_FMF_SPEC_IGNORE\n+\t},\n+\t{\n+\t.mask_opcode = BNXT_ULP_FMF_MASK_IGNORE,\n+\t.spec_opcode = BNXT_ULP_FMF_SPEC_IGNORE\n+\t},\n+\t{\n+\t.mask_opcode = BNXT_ULP_FMF_MASK_IGNORE,\n+\t.spec_opcode = BNXT_ULP_FMF_SPEC_IGNORE\n+\t},\n+\t{\n+\t.mask_opcode = BNXT_ULP_FMF_MASK_ANY,\n+\t.spec_opcode = BNXT_ULP_FMF_SPEC_IGNORE\n+\t},\n+\t{\n+\t.mask_opcode = BNXT_ULP_FMF_MASK_IGNORE,\n+\t.spec_opcode = BNXT_ULP_FMF_SPEC_IGNORE\n+\t},\n+\t{\n+\t.mask_opcode = BNXT_ULP_FMF_MASK_IGNORE,\n+\t.spec_opcode = BNXT_ULP_FMF_SPEC_IGNORE\n+\t},\n+\t{\n+\t.mask_opcode = BNXT_ULP_FMF_MASK_EXACT,\n+\t.spec_opcode = BNXT_ULP_FMF_SPEC_IGNORE\n+\t},\n+\t{\n+\t.mask_opcode = BNXT_ULP_FMF_MASK_EXACT,\n+\t.spec_opcode = BNXT_ULP_FMF_SPEC_IGNORE\n+\t},\n+\t{\n+\t.mask_opcode = BNXT_ULP_FMF_MASK_EXACT,\n+\t.spec_opcode = BNXT_ULP_FMF_SPEC_IGNORE\n+\t},\n+\t{\n+\t.mask_opcode = BNXT_ULP_FMF_MASK_EXACT,\n+\t.spec_opcode = BNXT_ULP_FMF_SPEC_IGNORE\n+\t},\n+\t{\n+\t.mask_opcode = BNXT_ULP_FMF_MASK_IGNORE,\n+\t.spec_opcode = BNXT_ULP_FMF_SPEC_IGNORE\n+\t},\n+\t{\n+\t.mask_opcode = BNXT_ULP_FMF_MASK_IGNORE,\n+\t.spec_opcode = BNXT_ULP_FMF_SPEC_IGNORE\n+\t}\n+};\n+\n struct bnxt_ulp_mapper_result_field_info ulp_class_result_field_list[] = {\n \t{\n \t.field_bit_size = 10,\ndiff --git a/drivers/net/bnxt/tf_ulp/ulp_template_db.h b/drivers/net/bnxt/tf_ulp/ulp_template_db.h\nindex 957b21a..319500a 100644\n--- a/drivers/net/bnxt/tf_ulp/ulp_template_db.h\n+++ b/drivers/net/bnxt/tf_ulp/ulp_template_db.h\n@@ -13,6 +13,8 @@\n \n #define BNXT_ULP_MAX_NUM_DEVICES 4\n #define BNXT_ULP_LOG2_MAX_NUM_DEV 2\n+#define BNXT_ULP_INGRESS_HDR_MATCH_SZ 2\n+#define BNXT_ULP_EGRESS_HDR_MATCH_SZ 1\n \n enum bnxt_ulp_action_bit {\n \tBNXT_ULP_ACTION_BIT_MARK = 0x0000000000000001,\n@@ -45,6 +47,31 @@ enum bnxt_ulp_action_bit {\n \tBNXT_ULP_ACTION_BIT_LAST = 0x0000000008000000\n };\n \n+enum bnxt_ulp_hdr_bit {\n+\tBNXT_ULP_HDR_BIT_SVIF = 0x0000000000000001,\n+\tBNXT_ULP_HDR_BIT_O_ETH = 0x0000000000000002,\n+\tBNXT_ULP_HDR_BIT_OO_VLAN = 0x0000000000000004,\n+\tBNXT_ULP_HDR_BIT_OI_VLAN = 0x0000000000000008,\n+\tBNXT_ULP_HDR_BIT_O_L3 = 0x0000000000000010,\n+\tBNXT_ULP_HDR_BIT_O_IPV4 = 0x0000000000000020,\n+\tBNXT_ULP_HDR_BIT_O_IPV6 = 0x0000000000000040,\n+\tBNXT_ULP_HDR_BIT_O_L4 = 0x0000000000000080,\n+\tBNXT_ULP_HDR_BIT_O_TCP = 0x0000000000000100,\n+\tBNXT_ULP_HDR_BIT_O_UDP = 0x0000000000000200,\n+\tBNXT_ULP_HDR_BIT_T_VXLAN = 0x0000000000000400,\n+\tBNXT_ULP_HDR_BIT_T_GRE = 0x0000000000000800,\n+\tBNXT_ULP_HDR_BIT_I_ETH = 0x0000000000001000,\n+\tBNXT_ULP_HDR_BIT_IO_VLAN = 0x0000000000002000,\n+\tBNXT_ULP_HDR_BIT_II_VLAN = 0x0000000000004000,\n+\tBNXT_ULP_HDR_BIT_I_L3 = 0x0000000000008000,\n+\tBNXT_ULP_HDR_BIT_I_IPV4 = 0x0000000000010000,\n+\tBNXT_ULP_HDR_BIT_I_IPV6 = 0x0000000000020000,\n+\tBNXT_ULP_HDR_BIT_I_L4 = 0x0000000000040000,\n+\tBNXT_ULP_HDR_BIT_I_TCP = 0x0000000000080000,\n+\tBNXT_ULP_HDR_BIT_I_UDP = 0x0000000000100000,\n+\tBNXT_ULP_HDR_BIT_LAST = 0x0000000000200000\n+};\n+\n enum bnxt_ulp_byte_order {\n \tBNXT_ULP_BYTE_ORDER_BE,\n \tBNXT_ULP_BYTE_ORDER_LE,\n@@ -67,12 +94,25 @@ enum bnxt_ulp_fmf_mask {\n \tBNXT_ULP_FMF_MASK_LAST\n };\n \n+enum bnxt_ulp_fmf_spec {\n+\tBNXT_ULP_FMF_SPEC_IGNORE = 0,\n+\tBNXT_ULP_FMF_SPEC_LAST = 1\n+};\n+\n enum bnxt_ulp_mark_enable {\n \tBNXT_ULP_MARK_ENABLE_NO = 0,\n \tBNXT_ULP_MARK_ENABLE_YES = 1,\n \tBNXT_ULP_MARK_ENABLE_LAST = 2\n };\n \n+enum bnxt_ulp_hdr_field {\n+\tBNXT_ULP_HDR_FIELD_MPLS_TAG_NUM = 0,\n+\tBNXT_ULP_HDR_FIELD_O_VTAG_NUM = 1,\n+\tBNXT_ULP_HDR_FIELD_I_VTAG_NUM = 2,\n+\tBNXT_ULP_HDR_FIELD_SVIF_INDEX = 3,\n+\tBNXT_ULP_HDR_FIELD_LAST = 4\n+};\n+\n enum bnxt_ulp_mask_opc {\n \tBNXT_ULP_MASK_OPC_SET_TO_CONSTANT = 0,\n \tBNXT_ULP_MASK_OPC_SET_TO_HDR_FIELD = 1,\ndiff --git a/drivers/net/bnxt/tf_ulp/ulp_template_struct.h b/drivers/net/bnxt/tf_ulp/ulp_template_struct.h\nindex b7094c5..dd06fb1 100644\n--- a/drivers/net/bnxt/tf_ulp/ulp_template_struct.h\n+++ b/drivers/net/bnxt/tf_ulp/ulp_template_struct.h\n@@ -29,6 +29,11 @@ struct ulp_rte_hdr_field {\n \tuint32_t\tsize;\n };\n \n+struct bnxt_ulp_matcher_field_info {\n+\tenum bnxt_ulp_fmf_mask\tmask_opcode;\n+\tenum bnxt_ulp_fmf_spec\tspec_opcode;\n+};\n+\n struct ulp_rte_act_bitmap {\n \tuint64_t\tbits;\n };\n@@ -41,6 +46,22 @@ struct ulp_rte_act_prop {\n \tuint8_t\tact_details[BNXT_ULP_ACT_PROP_IDX_LAST];\n };\n \n+/* Flow Matcher structures */\n+struct bnxt_ulp_header_match_info {\n+\tstruct ulp_rte_hdr_bitmap\t\thdr_bitmap;\n+\tuint32_t\t\t\t\tstart_idx;\n+\tuint32_t\t\t\t\tnum_entries;\n+\tuint32_t\t\t\t\tclass_tmpl_id;\n+\tuint32_t\t\t\t\tact_vnic;\n+};\n+\n+/* Flow Matcher templates Structure Array defined in template source*/\n+extern struct bnxt_ulp_header_match_info ulp_ingress_hdr_match_list[];\n+extern struct bnxt_ulp_header_match_info ulp_egress_hdr_match_list[];\n+\n+/* Flow field match Information Structure Array defined in template source*/\n+extern struct bnxt_ulp_matcher_field_info\tulp_field_match[];\n+\n /* Device specific parameters */\n struct bnxt_ulp_device_params {\n \tuint8_t\t\t\t\tdescription[16];\n", "prefixes": [ "22/33" ] }{ "id": 66806, "url": "