Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/94133/?format=api
https://patches.dpdk.org/api/patches/94133/?format=api", "web_url": "https://patches.dpdk.org/project/dpdk/patch/20210613000652.28191-43-ajit.khaparde@broadcom.com/", "project": { "id": 1, "url": "https://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": "<20210613000652.28191-43-ajit.khaparde@broadcom.com>", "list_archive_url": "https://inbox.dpdk.org/dev/20210613000652.28191-43-ajit.khaparde@broadcom.com", "date": "2021-06-13T00:06:36", "name": "[v2,42/58] net/bnxt: add support for GRE flows", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": true, "hash": "e90d1590a5d680d9eaba81d6590cf92a5aa0a1a3", "submitter": { "id": 501, "url": "https://patches.dpdk.org/api/people/501/?format=api", "name": "Ajit Khaparde", "email": "ajit.khaparde@broadcom.com" }, "delegate": { "id": 1766, "url": "https://patches.dpdk.org/api/users/1766/?format=api", "username": "ajitkhaparde", "first_name": "Ajit", "last_name": "Khaparde", "email": "ajit.khaparde@broadcom.com" }, "mbox": "https://patches.dpdk.org/project/dpdk/patch/20210613000652.28191-43-ajit.khaparde@broadcom.com/mbox/", "series": [ { "id": 17305, "url": "https://patches.dpdk.org/api/series/17305/?format=api", "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=17305", "date": "2021-06-13T00:05:54", "name": "enhancements to host based flow table management", "version": 2, "mbox": "https://patches.dpdk.org/series/17305/mbox/" } ], "comments": "https://patches.dpdk.org/api/patches/94133/comments/", "check": "success", "checks": "https://patches.dpdk.org/api/patches/94133/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 8D0B5A0C41;\n\tSun, 13 Jun 2021 02:13:00 +0200 (CEST)", "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id DBCF841213;\n\tSun, 13 Jun 2021 02:08:30 +0200 (CEST)", "from mail-pg1-f172.google.com (mail-pg1-f172.google.com\n [209.85.215.172])\n by mails.dpdk.org (Postfix) with ESMTP id CBB7141212\n for <dev@dpdk.org>; Sun, 13 Jun 2021 02:08:29 +0200 (CEST)", "by mail-pg1-f172.google.com with SMTP id o9so5638045pgd.2\n for <dev@dpdk.org>; Sat, 12 Jun 2021 17:08:29 -0700 (PDT)", "from localhost.localdomain ([192.19.223.252])\n by smtp.gmail.com with ESMTPSA id gg22sm12774609pjb.17.2021.06.12.17.08.27\n (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);\n Sat, 12 Jun 2021 17:08:27 -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 :mime-version; bh=YSIgF3WVGgd/ZyORNmw+cGB9aJmF/+035wm741vkeGA=;\n b=PUcR4Kga3kAaDC2ivhWtAX4wCBDG+3WvdNdEqQxyKlV0f8OGE9PKOCKWJFgU8eh2a0\n YsXSTdtVRaoureDAjdTwFFtFdHMfFLDgcrVxwzJovhImWMqnAPpyhx+mxXClvjOdaxDE\n Qd956N3qxLvhd2TmncUcmId2HhM8M9lp9l6uI=", "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:mime-version;\n bh=YSIgF3WVGgd/ZyORNmw+cGB9aJmF/+035wm741vkeGA=;\n b=P2LIVX/kqvdY/z1MpA/Kg2QHOG7xbx9dw0u18421ImaNLSsGgYZQIw3iDXo0Mexu0G\n N5J3p24xbX36mszC0vlMoZMvYiDYhKBRu2oVgC/dvWneUUoaiFu5Tx5+xe1Nx2rI932R\n AmKuhhumKLjuzmRnucj9ZMcx0OQVwyu1NRhmAS3x08l0XOU4hjVRkgjfpp+ykZlYshPV\n YCIOOU+As8RVvAxoBlg8iv6J2Gqqd2HA5kM2yu1w+JjD+kWFY2oST4jxMHe2jmKFjk4x\n tE0KzKz4xVYaC4eTREcSjDQJ60lmSZxZN37fD4xSdnYFWOQ1HDamPaVS6/cL5NbDOAED\n h8Iw==", "X-Gm-Message-State": "AOAM532wUTQnKpOG031bnba/0MqsVqEDaYljJxnfeWx6lfJYNOyw8MIc\n wgB8Cp4s8HveWGjT8z8z77vRFxP6rLUPARDLVycy9IzMRqfm8FSBfY8/Dm9ir+IEqSif18dCaWM\n Hwa7GleIcPVLqne8sAbmsaCLOag8oU8DBU8WclPeBvBIqtuti7D2XDCDO2+TIJr0=", "X-Google-Smtp-Source": "\n ABdhPJwGFsV++tstpNcAeS+U7ilLx9DYRnzX98ZwamoETe2Sjr8TtKmegxJ8DsMCD0fX6+D4df6Geg==", "X-Received": "by 2002:a63:6bc1:: with SMTP id\n g184mr10466600pgc.116.1623542908414;\n Sat, 12 Jun 2021 17:08:28 -0700 (PDT)", "From": "Ajit Khaparde <ajit.khaparde@broadcom.com>", "To": "dev@dpdk.org", "Cc": "Venkat Duvvuru <venkatkumar.duvvuru@broadcom.com>,\n Somnath Kotur <somnath.kotur@broadcom.com>", "Date": "Sat, 12 Jun 2021 17:06:36 -0700", "Message-Id": "<20210613000652.28191-43-ajit.khaparde@broadcom.com>", "X-Mailer": "git-send-email 2.21.1 (Apple Git-122.3)", "In-Reply-To": "<20210613000652.28191-1-ajit.khaparde@broadcom.com>", "References": "<20210530085929.29695-1-venkatkumar.duvvuru@broadcom.com>\n <20210613000652.28191-1-ajit.khaparde@broadcom.com>", "MIME-Version": "1.0", "Content-Type": "multipart/signed; protocol=\"application/pkcs7-signature\";\n micalg=sha-256; boundary=\"0000000000005e52cd05c49a8a34\"", "X-Content-Filtered-By": "Mailman/MimeDel 2.1.29", "Subject": "[dpdk-dev] [PATCH v2 42/58] net/bnxt: add support for GRE flows", "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", "Sender": "\"dev\" <dev-bounces@dpdk.org>" }, "content": "From: Venkat Duvvuru <venkatkumar.duvvuru@broadcom.com>\n\nThis patch does the following to support GRE flows:\n1. RTE_FLOW_ITEM_TYPE_ANY & RTE_FLOW_ITEM_TYPE_GRE processing\n2. Calculate the absolute function ID from the logical VF ID\n passed as part of RTE_FLOW_ACTION_TYPE_VF action.\n3. Move bnxt_get_bp API to bnxt_ethdev.c\n\nSigned-off-by: Venkat Duvvuru <venkatkumar.duvvuru@broadcom.com>\nReviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>\nReviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>\n---\n drivers/net/bnxt/bnxt.h | 1 +\n drivers/net/bnxt/bnxt_ethdev.c | 26 +++++++\n drivers/net/bnxt/tf_ulp/ulp_rte_parser.c | 75 ++++++++++++++++++-\n drivers/net/bnxt/tf_ulp/ulp_rte_parser.h | 9 +++\n drivers/net/bnxt/tf_ulp/ulp_template_struct.h | 2 +\n 5 files changed, 110 insertions(+), 3 deletions(-)", "diff": "diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h\nindex 532755467f..4286c99079 100644\n--- a/drivers/net/bnxt/bnxt.h\n+++ b/drivers/net/bnxt/bnxt.h\n@@ -1027,6 +1027,7 @@ bnxt_ulp_create_vfr_default_rules(struct rte_eth_dev *vfr_ethdev);\n int32_t\n bnxt_ulp_delete_vfr_default_rules(struct bnxt_representor *vfr);\n uint16_t bnxt_get_vnic_id(uint16_t port, enum bnxt_ulp_intf_type type);\n+struct bnxt *bnxt_get_bp(uint16_t port);\n uint16_t bnxt_get_svif(uint16_t port_id, bool func_svif,\n \t\t enum bnxt_ulp_intf_type type);\n uint16_t bnxt_get_fw_func_id(uint16_t port, enum bnxt_ulp_intf_type type);\ndiff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c\nindex b77f12bbb4..eff4798167 100644\n--- a/drivers/net/bnxt/bnxt_ethdev.c\n+++ b/drivers/net/bnxt/bnxt_ethdev.c\n@@ -4866,6 +4866,32 @@ static void bnxt_config_vf_req_fwd(struct bnxt *bp)\n \tBNXT_HWRM_CMD_TO_FORWARD(HWRM_OEM_CMD);\n }\n \n+struct bnxt *\n+bnxt_get_bp(uint16_t port)\n+{\n+\tstruct bnxt *bp;\n+\tstruct rte_eth_dev *dev;\n+\n+\tif (!rte_eth_dev_is_valid_port(port)) {\n+\t\tPMD_DRV_LOG(ERR, \"Invalid port %d\\n\", port);\n+\t\treturn NULL;\n+\t}\n+\n+\tdev = &rte_eth_devices[port];\n+\tif (!is_bnxt_supported(dev)) {\n+\t\tPMD_DRV_LOG(ERR, \"Device %d not supported\\n\", port);\n+\t\treturn NULL;\n+\t}\n+\n+\tbp = (struct bnxt *)dev->data->dev_private;\n+\tif (!BNXT_TRUFLOW_EN(bp)) {\n+\t\tPMD_DRV_LOG(ERR, \"TRUFLOW not enabled\\n\");\n+\t\treturn NULL;\n+\t}\n+\n+\treturn bp;\n+}\n+\n uint16_t\n bnxt_get_svif(uint16_t port_id, bool func_svif,\n \t enum bnxt_ulp_intf_type type)\ndiff --git a/drivers/net/bnxt/tf_ulp/ulp_rte_parser.c b/drivers/net/bnxt/tf_ulp/ulp_rte_parser.c\nindex 3c45acd18f..1f5455a3f3 100644\n--- a/drivers/net/bnxt/tf_ulp/ulp_rte_parser.c\n+++ b/drivers/net/bnxt/tf_ulp/ulp_rte_parser.c\n@@ -1008,6 +1008,9 @@ ulp_rte_ipv4_hdr_handler(const struct rte_flow_item *item,\n \t\tULP_COMP_FLD_IDX_WR(params, BNXT_ULP_CF_IDX_O_L3, 1);\n \t}\n \n+\tif (proto == IPPROTO_GRE)\n+\t\tULP_BITMAP_SET(hdr_bitmap->bits, BNXT_ULP_HDR_BIT_T_GRE);\n+\n \t/* Update the field protocol hdr bitmap */\n \tulp_rte_l3_proto_type_update(params, proto, inner_flag);\n \tULP_COMP_FLD_IDX_WR(params, BNXT_ULP_CF_IDX_L3_HDR_CNT, ++cnt);\n@@ -1146,6 +1149,9 @@ ulp_rte_ipv6_hdr_handler(const struct rte_flow_item *item,\n \t\tULP_COMP_FLD_IDX_WR(params, BNXT_ULP_CF_IDX_O_L3, 1);\n \t}\n \n+\tif (proto == IPPROTO_GRE)\n+\t\tULP_BITMAP_SET(hdr_bitmap->bits, BNXT_ULP_HDR_BIT_T_GRE);\n+\n \t/* Update the field protocol hdr bitmap */\n \tulp_rte_l3_proto_type_update(params, proto, inner_flag);\n \tULP_COMP_FLD_IDX_WR(params, BNXT_ULP_CF_IDX_L3_HDR_CNT, ++cnt);\n@@ -1420,6 +1426,57 @@ ulp_rte_vxlan_hdr_handler(const struct rte_flow_item *item,\n \treturn BNXT_TF_RC_SUCCESS;\n }\n \n+/* Function to handle the parsing of RTE Flow item GRE Header. */\n+int32_t\n+ulp_rte_gre_hdr_handler(const struct rte_flow_item *item,\n+\t\t\t struct ulp_rte_parser_params *params)\n+{\n+\tconst struct rte_flow_item_gre *gre_spec = item->spec;\n+\tconst struct rte_flow_item_gre *gre_mask = item->mask;\n+\tstruct ulp_rte_hdr_bitmap *hdr_bitmap = ¶ms->hdr_bitmap;\n+\tuint32_t idx = params->field_idx;\n+\tuint32_t size;\n+\tstruct ulp_rte_hdr_field *field;\n+\n+\tif (!gre_spec && !gre_mask) {\n+\t\tBNXT_TF_DBG(ERR, \"Parse Error: GRE item is invalid\\n\");\n+\t\treturn BNXT_TF_RC_ERROR;\n+\t}\n+\n+\tif (gre_spec) {\n+\t\tsize = sizeof(gre_spec->c_rsvd0_ver);\n+\t\tfield = ulp_rte_parser_fld_copy(¶ms->hdr_field[idx],\n+\t\t\t\t\t\t&gre_spec->c_rsvd0_ver,\n+\t\t\t\t\t\tsize);\n+\t\tsize = sizeof(gre_spec->protocol);\n+\t\tfield = ulp_rte_parser_fld_copy(field,\n+\t\t\t\t\t\t&gre_spec->protocol,\n+\t\t\t\t\t\tsize);\n+\t}\n+\tif (gre_mask) {\n+\t\tulp_rte_prsr_mask_copy(params, &idx,\n+\t\t\t\t &gre_mask->c_rsvd0_ver,\n+\t\t\t\t sizeof(gre_mask->c_rsvd0_ver));\n+\t\tulp_rte_prsr_mask_copy(params, &idx,\n+\t\t\t\t &gre_mask->protocol,\n+\t\t\t\t sizeof(gre_mask->protocol));\n+\t}\n+\t/* Add number of GRE header elements */\n+\tparams->field_idx += BNXT_ULP_PROTO_HDR_GRE_NUM;\n+\n+\t/* Update the hdr_bitmap with GRE */\n+\tULP_BITMAP_SET(hdr_bitmap->bits, BNXT_ULP_HDR_BIT_T_GRE);\n+\treturn BNXT_TF_RC_SUCCESS;\n+}\n+\n+/* Function to handle the parsing of RTE Flow item ANY. */\n+int32_t\n+ulp_rte_item_any_handler(const struct rte_flow_item *item __rte_unused,\n+\t\t\t struct ulp_rte_parser_params *params __rte_unused)\n+{\n+\treturn BNXT_TF_RC_SUCCESS;\n+}\n+\n /* Function to handle the parsing of RTE Flow item void Header */\n int32_t\n ulp_rte_void_hdr_handler(const struct rte_flow_item *item __rte_unused,\n@@ -1879,8 +1936,9 @@ ulp_rte_vf_act_handler(const struct rte_flow_action *action_item,\n \t\t struct ulp_rte_parser_params *params)\n {\n \tconst struct rte_flow_action_vf *vf_action;\n-\tuint32_t ifindex;\n \tenum bnxt_ulp_intf_type intf_type;\n+\tuint32_t ifindex;\n+\tstruct bnxt *bp;\n \n \tvf_action = action_item->conf;\n \tif (!vf_action) {\n@@ -1893,12 +1951,23 @@ ulp_rte_vf_act_handler(const struct rte_flow_action *action_item,\n \t\treturn BNXT_TF_RC_PARSE_ERR;\n \t}\n \n-\t/* Check the port is VF port */\n-\tif (ulp_port_db_dev_func_id_to_ulp_index(params->ulp_ctx, vf_action->id,\n+\tbp = bnxt_get_bp(params->port_id);\n+\tif (bp == NULL) {\n+\t\tBNXT_TF_DBG(ERR, \"Invalid bp\\n\");\n+\t\treturn BNXT_TF_RC_ERROR;\n+\t}\n+\n+\t/* vf_action->id is a logical number which in this case is an\n+\t * offset from the first VF. So, to get the absolute VF id, the\n+\t * offset must be added to the absolute first vf id of that port.\n+\t */\n+\tif (ulp_port_db_dev_func_id_to_ulp_index(params->ulp_ctx,\n+\t\t\t\t\t\t bp->first_vf_id + vf_action->id,\n \t\t\t\t\t\t &ifindex)) {\n \t\tBNXT_TF_DBG(ERR, \"VF is not valid interface\\n\");\n \t\treturn BNXT_TF_RC_ERROR;\n \t}\n+\t/* Check the port is VF port */\n \tintf_type = ulp_port_db_port_type_get(params->ulp_ctx, ifindex);\n \tif (intf_type != BNXT_ULP_INTF_TYPE_VF &&\n \t intf_type != BNXT_ULP_INTF_TYPE_TRUSTED_VF) {\ndiff --git a/drivers/net/bnxt/tf_ulp/ulp_rte_parser.h b/drivers/net/bnxt/tf_ulp/ulp_rte_parser.h\nindex 27a5131bb3..d78a333f3b 100644\n--- a/drivers/net/bnxt/tf_ulp/ulp_rte_parser.h\n+++ b/drivers/net/bnxt/tf_ulp/ulp_rte_parser.h\n@@ -126,6 +126,15 @@ int32_t\n ulp_rte_vxlan_hdr_handler(const struct rte_flow_item *item,\n \t\t\t struct ulp_rte_parser_params *params);\n \n+/* Function to handle the parsing of RTE Flow item GRE Header. */\n+int32_t\n+ulp_rte_gre_hdr_handler(const struct rte_flow_item *item,\n+\t\t\tstruct ulp_rte_parser_params *params);\n+\n+int32_t\n+ulp_rte_item_any_handler(const struct rte_flow_item *item __rte_unused,\n+\t\t\t struct ulp_rte_parser_params *params __rte_unused);\n+\n /* Function to handle the parsing of RTE Flow item void Header. */\n int32_t\n ulp_rte_void_hdr_handler(const struct rte_flow_item *item,\ndiff --git a/drivers/net/bnxt/tf_ulp/ulp_template_struct.h b/drivers/net/bnxt/tf_ulp/ulp_template_struct.h\nindex 20a988a03a..0a5bb1762c 100644\n--- a/drivers/net/bnxt/tf_ulp/ulp_template_struct.h\n+++ b/drivers/net/bnxt/tf_ulp/ulp_template_struct.h\n@@ -27,6 +27,7 @@\n #define BNXT_ULP_PROTO_HDR_UDP_NUM\t4\n #define BNXT_ULP_PROTO_HDR_TCP_NUM\t9\n #define BNXT_ULP_PROTO_HDR_VXLAN_NUM\t4\n+#define BNXT_ULP_PROTO_HDR_GRE_NUM\t6\n #define BNXT_ULP_PROTO_HDR_MAX\t\t128\n #define BNXT_ULP_PROTO_HDR_FIELD_SVIF_IDX\t1\n \n@@ -76,6 +77,7 @@ struct ulp_rte_parser_params {\n \tuint32_t\t\t\tparent_flow;\n \tuint32_t\t\t\tparent_fid;\n \tuint16_t\t\t\tfunc_id;\n+\tuint16_t\t\t\tport_id;\n \tuint32_t\t\t\tclass_id;\n \tuint32_t\t\t\tact_tmpl;\n \tstruct bnxt_ulp_context\t\t*ulp_ctx;\n", "prefixes": [ "v2", "42/58" ] }{ "id": 94133, "url": "