get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 94133,
    "url": "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 = &params->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(&params->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"
    ]
}