get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 72550,
    "url": "https://patches.dpdk.org/api/patches/72550/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20200701065212.41391-27-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": "<20200701065212.41391-27-ajit.khaparde@broadcom.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20200701065212.41391-27-ajit.khaparde@broadcom.com",
    "date": "2020-07-01T06:51:47",
    "name": "[v2,26/51] net/bnxt: add external action alloc and free",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": true,
    "hash": "a433abafc77954fb3ea5f10f51f3d0cc6c8cbd53",
    "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/20200701065212.41391-27-ajit.khaparde@broadcom.com/mbox/",
    "series": [
        {
            "id": 10703,
            "url": "https://patches.dpdk.org/api/series/10703/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=10703",
            "date": "2020-07-01T06:51:22",
            "name": "add features for host-based flow management",
            "version": 2,
            "mbox": "https://patches.dpdk.org/series/10703/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/72550/comments/",
    "check": "fail",
    "checks": "https://patches.dpdk.org/api/patches/72550/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 4CFB7A0350;\n\tWed,  1 Jul 2020 08:59:02 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id D8C751D418;\n\tWed,  1 Jul 2020 08:52:58 +0200 (CEST)",
            "from rnd-relay.smtp.broadcom.com (rnd-relay.smtp.broadcom.com\n [192.19.229.170]) by dpdk.org (Postfix) with ESMTP id CA05E1C13A\n for <dev@dpdk.org>; Wed,  1 Jul 2020 08:52:26 +0200 (CEST)",
            "from mail-irv-17.broadcom.com (mail-irv-17.lvn.broadcom.net\n [10.75.242.48])\n by rnd-relay.smtp.broadcom.com (Postfix) with ESMTP id C9A9230C334;\n Tue, 30 Jun 2020 23:52:25 -0700 (PDT)",
            "from localhost.localdomain (unknown [10.230.185.215])\n by mail-irv-17.broadcom.com (Postfix) with ESMTP id 34DF814008C;\n Tue, 30 Jun 2020 23:52:25 -0700 (PDT)"
        ],
        "DKIM-Filter": "OpenDKIM Filter v2.10.3 rnd-relay.smtp.broadcom.com C9A9230C334",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=broadcom.com;\n s=dkimrelay; t=1593586345;\n bh=wFRv15LI5LjN5lth4KJEBeMGNtjyN/z17hgVEpsH1Gw=;\n h=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n b=vG/npTCwM04Tzr/yeoU6NGc4vwTvUtFvVwuto4e1JZ6dannF7+1VzXUUdqsyIfVlT\n ssxISZs2hWaS07Fwcj7/RjyQpnc+rfAiXJHEMlspXbiGhKca48kuQRsO8nMTK8sn7X\n x9zmZtcs0zKSDyahgljk0imhZgDfbRymIzaGd6TU=",
        "From": "Ajit Khaparde <ajit.khaparde@broadcom.com>",
        "To": "dev@dpdk.org",
        "Cc": "Jay Ding <jay.ding@broadcom.com>,\n Venkat Duvvuru <venkatkumar.duvvuru@broadcom.com>,\n Randy Schacher <stuart.schacher@broadcom.com>",
        "Date": "Tue, 30 Jun 2020 23:51:47 -0700",
        "Message-Id": "<20200701065212.41391-27-ajit.khaparde@broadcom.com>",
        "X-Mailer": "git-send-email 2.21.1 (Apple Git-122.3)",
        "In-Reply-To": "<20200701065212.41391-1-ajit.khaparde@broadcom.com>",
        "References": "<20200612132934.16488-1-somnath.kotur@broadcom.com>\n <20200701065212.41391-1-ajit.khaparde@broadcom.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[dpdk-dev] [PATCH v2 26/51] net/bnxt: add external action alloc and\n\tfree",
        "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: Jay Ding <jay.ding@broadcom.com>\n\n- Link external action alloc and free to new hcapi interface\n- Add parameter range checking\n- Fix issues with index allocation check\n\nSigned-off-by: Jay Ding <jay.ding@broadcom.com>\nSigned-off-by: Venkat Duvvuru <venkatkumar.duvvuru@broadcom.com>\nReviewed-by: Randy Schacher <stuart.schacher@broadcom.com>\nReviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>\n---\n drivers/net/bnxt/tf_core/tf_core.c       | 163 ++++++++++++++++-------\n drivers/net/bnxt/tf_core/tf_core.h       |   4 -\n drivers/net/bnxt/tf_core/tf_device.h     |  58 ++++++++\n drivers/net/bnxt/tf_core/tf_device_p4.c  |   6 +\n drivers/net/bnxt/tf_core/tf_device_p4.h  |   2 -\n drivers/net/bnxt/tf_core/tf_em.h         |  95 +++++++++++++\n drivers/net/bnxt/tf_core/tf_em_common.c  | 120 ++++++++++++++++-\n drivers/net/bnxt/tf_core/tf_em_host.c    |  80 ++++++++++-\n drivers/net/bnxt/tf_core/tf_em_system.c  |   6 +\n drivers/net/bnxt/tf_core/tf_identifier.c |   4 +-\n drivers/net/bnxt/tf_core/tf_rm.h         |   5 +\n drivers/net/bnxt/tf_core/tf_tbl.c        |  10 +-\n drivers/net/bnxt/tf_core/tf_tbl.h        |  12 ++\n drivers/net/bnxt/tf_core/tf_tcam.c       |   8 +-\n drivers/net/bnxt/tf_core/tf_util.c       |   4 -\n 15 files changed, 499 insertions(+), 78 deletions(-)",
    "diff": "diff --git a/drivers/net/bnxt/tf_core/tf_core.c b/drivers/net/bnxt/tf_core/tf_core.c\nindex 6410843f6..45accb0ab 100644\n--- a/drivers/net/bnxt/tf_core/tf_core.c\n+++ b/drivers/net/bnxt/tf_core/tf_core.c\n@@ -617,25 +617,48 @@ tf_alloc_tbl_entry(struct tf *tfp,\n \t\treturn rc;\n \t}\n \n-\tif (dev->ops->tf_dev_alloc_tbl == NULL) {\n-\t\trc = -EOPNOTSUPP;\n-\t\tTFP_DRV_LOG(ERR,\n-\t\t\t    \"%s: Operation not supported, rc:%s\\n\",\n-\t\t\t    tf_dir_2_str(parms->dir),\n-\t\t\t    strerror(-rc));\n-\t\treturn -EOPNOTSUPP;\n-\t}\n-\n \taparms.dir = parms->dir;\n \taparms.type = parms->type;\n \taparms.idx = &idx;\n-\trc = dev->ops->tf_dev_alloc_tbl(tfp, &aparms);\n-\tif (rc) {\n-\t\tTFP_DRV_LOG(ERR,\n-\t\t\t    \"%s: Table allocation failed, rc:%s\\n\",\n-\t\t\t    tf_dir_2_str(parms->dir),\n-\t\t\t    strerror(-rc));\n-\t\treturn rc;\n+\taparms.tbl_scope_id = parms->tbl_scope_id;\n+\n+\tif (parms->type == TF_TBL_TYPE_EXT) {\n+\t\tif (dev->ops->tf_dev_alloc_ext_tbl == NULL) {\n+\t\t\trc = -EOPNOTSUPP;\n+\t\t\tTFP_DRV_LOG(ERR,\n+\t\t\t\t    \"%s: Operation not supported, rc:%s\\n\",\n+\t\t\t\t    tf_dir_2_str(parms->dir),\n+\t\t\t\t    strerror(-rc));\n+\t\t\treturn -EOPNOTSUPP;\n+\t\t}\n+\n+\t\trc = dev->ops->tf_dev_alloc_ext_tbl(tfp, &aparms);\n+\t\tif (rc) {\n+\t\t\tTFP_DRV_LOG(ERR,\n+\t\t\t\t    \"%s: External table allocation failed, rc:%s\\n\",\n+\t\t\t\t    tf_dir_2_str(parms->dir),\n+\t\t\t\t    strerror(-rc));\n+\t\t\treturn rc;\n+\t\t}\n+\n+\t} else {\n+\t\tif (dev->ops->tf_dev_alloc_tbl == NULL) {\n+\t\t\trc = -EOPNOTSUPP;\n+\t\t\tTFP_DRV_LOG(ERR,\n+\t\t\t\t    \"%s: Operation not supported, rc:%s\\n\",\n+\t\t\t\t    tf_dir_2_str(parms->dir),\n+\t\t\t\t    strerror(-rc));\n+\t\t\treturn -EOPNOTSUPP;\n+\t\t}\n+\n+\t\trc = dev->ops->tf_dev_alloc_tbl(tfp, &aparms);\n+\t\tif (rc) {\n+\t\t\tTFP_DRV_LOG(ERR,\n+\t\t\t\t    \"%s: Table allocation failed, rc:%s\\n\",\n+\t\t\t\t    tf_dir_2_str(parms->dir),\n+\t\t\t\t    strerror(-rc));\n+\t\t\treturn rc;\n+\t\t}\n \t}\n \n \tparms->idx = idx;\n@@ -677,25 +700,47 @@ tf_free_tbl_entry(struct tf *tfp,\n \t\treturn rc;\n \t}\n \n-\tif (dev->ops->tf_dev_free_tbl == NULL) {\n-\t\trc = -EOPNOTSUPP;\n-\t\tTFP_DRV_LOG(ERR,\n-\t\t\t    \"%s: Operation not supported, rc:%s\\n\",\n-\t\t\t    tf_dir_2_str(parms->dir),\n-\t\t\t    strerror(-rc));\n-\t\treturn -EOPNOTSUPP;\n-\t}\n-\n \tfparms.dir = parms->dir;\n \tfparms.type = parms->type;\n \tfparms.idx = parms->idx;\n-\trc = dev->ops->tf_dev_free_tbl(tfp, &fparms);\n-\tif (rc) {\n-\t\tTFP_DRV_LOG(ERR,\n-\t\t\t    \"%s: Table free failed, rc:%s\\n\",\n-\t\t\t    tf_dir_2_str(parms->dir),\n-\t\t\t    strerror(-rc));\n-\t\treturn rc;\n+\tfparms.tbl_scope_id = parms->tbl_scope_id;\n+\n+\tif (parms->type == TF_TBL_TYPE_EXT) {\n+\t\tif (dev->ops->tf_dev_free_ext_tbl == NULL) {\n+\t\t\trc = -EOPNOTSUPP;\n+\t\t\tTFP_DRV_LOG(ERR,\n+\t\t\t\t    \"%s: Operation not supported, rc:%s\\n\",\n+\t\t\t\t    tf_dir_2_str(parms->dir),\n+\t\t\t\t    strerror(-rc));\n+\t\t\treturn -EOPNOTSUPP;\n+\t\t}\n+\n+\t\trc = dev->ops->tf_dev_free_ext_tbl(tfp, &fparms);\n+\t\tif (rc) {\n+\t\t\tTFP_DRV_LOG(ERR,\n+\t\t\t\t    \"%s: Table free failed, rc:%s\\n\",\n+\t\t\t\t    tf_dir_2_str(parms->dir),\n+\t\t\t\t    strerror(-rc));\n+\t\t\treturn rc;\n+\t\t}\n+\t} else {\n+\t\tif (dev->ops->tf_dev_free_tbl == NULL) {\n+\t\t\trc = -EOPNOTSUPP;\n+\t\t\tTFP_DRV_LOG(ERR,\n+\t\t\t\t    \"%s: Operation not supported, rc:%s\\n\",\n+\t\t\t\t    tf_dir_2_str(parms->dir),\n+\t\t\t\t    strerror(-rc));\n+\t\t\treturn -EOPNOTSUPP;\n+\t\t}\n+\n+\t\trc = dev->ops->tf_dev_free_tbl(tfp, &fparms);\n+\t\tif (rc) {\n+\t\t\tTFP_DRV_LOG(ERR,\n+\t\t\t\t    \"%s: Table free failed, rc:%s\\n\",\n+\t\t\t\t    tf_dir_2_str(parms->dir),\n+\t\t\t\t    strerror(-rc));\n+\t\t\treturn rc;\n+\t\t}\n \t}\n \n \treturn 0;\n@@ -735,27 +780,49 @@ tf_set_tbl_entry(struct tf *tfp,\n \t\treturn rc;\n \t}\n \n-\tif (dev->ops->tf_dev_set_tbl == NULL) {\n-\t\trc = -EOPNOTSUPP;\n-\t\tTFP_DRV_LOG(ERR,\n-\t\t\t    \"%s: Operation not supported, rc:%s\\n\",\n-\t\t\t    tf_dir_2_str(parms->dir),\n-\t\t\t    strerror(-rc));\n-\t\treturn -EOPNOTSUPP;\n-\t}\n-\n \tsparms.dir = parms->dir;\n \tsparms.type = parms->type;\n \tsparms.data = parms->data;\n \tsparms.data_sz_in_bytes = parms->data_sz_in_bytes;\n \tsparms.idx = parms->idx;\n-\trc = dev->ops->tf_dev_set_tbl(tfp, &sparms);\n-\tif (rc) {\n-\t\tTFP_DRV_LOG(ERR,\n-\t\t\t    \"%s: Table set failed, rc:%s\\n\",\n-\t\t\t    tf_dir_2_str(parms->dir),\n-\t\t\t    strerror(-rc));\n-\t\treturn rc;\n+\tsparms.tbl_scope_id = parms->tbl_scope_id;\n+\n+\tif (parms->type == TF_TBL_TYPE_EXT) {\n+\t\tif (dev->ops->tf_dev_set_ext_tbl == NULL) {\n+\t\t\trc = -EOPNOTSUPP;\n+\t\t\tTFP_DRV_LOG(ERR,\n+\t\t\t\t    \"%s: Operation not supported, rc:%s\\n\",\n+\t\t\t\t    tf_dir_2_str(parms->dir),\n+\t\t\t\t    strerror(-rc));\n+\t\t\treturn -EOPNOTSUPP;\n+\t\t}\n+\n+\t\trc = dev->ops->tf_dev_set_ext_tbl(tfp, &sparms);\n+\t\tif (rc) {\n+\t\t\tTFP_DRV_LOG(ERR,\n+\t\t\t\t    \"%s: Table set failed, rc:%s\\n\",\n+\t\t\t\t    tf_dir_2_str(parms->dir),\n+\t\t\t\t    strerror(-rc));\n+\t\t\treturn rc;\n+\t\t}\n+\t} else {\n+\t\tif (dev->ops->tf_dev_set_tbl == NULL) {\n+\t\t\trc = -EOPNOTSUPP;\n+\t\t\tTFP_DRV_LOG(ERR,\n+\t\t\t\t    \"%s: Operation not supported, rc:%s\\n\",\n+\t\t\t\t    tf_dir_2_str(parms->dir),\n+\t\t\t\t    strerror(-rc));\n+\t\t\treturn -EOPNOTSUPP;\n+\t\t}\n+\n+\t\trc = dev->ops->tf_dev_set_tbl(tfp, &sparms);\n+\t\tif (rc) {\n+\t\t\tTFP_DRV_LOG(ERR,\n+\t\t\t\t    \"%s: Table set failed, rc:%s\\n\",\n+\t\t\t\t    tf_dir_2_str(parms->dir),\n+\t\t\t\t    strerror(-rc));\n+\t\t\treturn rc;\n+\t\t}\n \t}\n \n \treturn rc;\ndiff --git a/drivers/net/bnxt/tf_core/tf_core.h b/drivers/net/bnxt/tf_core/tf_core.h\nindex a7a7bd38a..e898f19a0 100644\n--- a/drivers/net/bnxt/tf_core/tf_core.h\n+++ b/drivers/net/bnxt/tf_core/tf_core.h\n@@ -211,10 +211,6 @@ enum tf_tbl_type {\n \tTF_TBL_TYPE_ACT_MODIFY_IPV4_SRC,\n \t/** Wh+/SR Action _Modify L4 Dest Port */\n \tTF_TBL_TYPE_ACT_MODIFY_IPV4_DEST,\n-\t/** Action Modify IPv6 Source */\n-\tTF_TBL_TYPE_ACT_MODIFY_IPV6_SRC,\n-\t/** Action Modify IPv6 Destination */\n-\tTF_TBL_TYPE_ACT_MODIFY_IPV6_DEST,\n \t/** Meter Profiles */\n \tTF_TBL_TYPE_METER_PROF,\n \t/** Meter Instance */\ndiff --git a/drivers/net/bnxt/tf_core/tf_device.h b/drivers/net/bnxt/tf_core/tf_device.h\nindex 93f3627d4..58b7a4ab2 100644\n--- a/drivers/net/bnxt/tf_core/tf_device.h\n+++ b/drivers/net/bnxt/tf_core/tf_device.h\n@@ -216,6 +216,26 @@ struct tf_dev_ops {\n \tint (*tf_dev_alloc_tbl)(struct tf *tfp,\n \t\t\t\tstruct tf_tbl_alloc_parms *parms);\n \n+\t/**\n+\t * Allocation of a external table type element.\n+\t *\n+\t * This API allocates the specified table type element from a\n+\t * device specific table type DB. The allocated element is\n+\t * returned.\n+\t *\n+\t * [in] tfp\n+\t *   Pointer to TF handle\n+\t *\n+\t * [in] parms\n+\t *   Pointer to table allocation parameters\n+\t *\n+\t * Returns\n+\t *   - (0) if successful.\n+\t *   - (-EINVAL) on failure.\n+\t */\n+\tint (*tf_dev_alloc_ext_tbl)(struct tf *tfp,\n+\t\t\t\t    struct tf_tbl_alloc_parms *parms);\n+\n \t/**\n \t * Free of a table type element.\n \t *\n@@ -235,6 +255,25 @@ struct tf_dev_ops {\n \tint (*tf_dev_free_tbl)(struct tf *tfp,\n \t\t\t       struct tf_tbl_free_parms *parms);\n \n+\t/**\n+\t * Free of a external table type element.\n+\t *\n+\t * This API free's a previous allocated table type element from a\n+\t * device specific table type DB.\n+\t *\n+\t * [in] tfp\n+\t *   Pointer to TF handle\n+\t *\n+\t * [in] parms\n+\t *   Pointer to table free parameters\n+\t *\n+\t * Returns\n+\t *   - (0) if successful.\n+\t *   - (-EINVAL) on failure.\n+\t */\n+\tint (*tf_dev_free_ext_tbl)(struct tf *tfp,\n+\t\t\t\t   struct tf_tbl_free_parms *parms);\n+\n \t/**\n \t * Searches for the specified table type element in a shadow DB.\n \t *\n@@ -276,6 +315,25 @@ struct tf_dev_ops {\n \tint (*tf_dev_set_tbl)(struct tf *tfp,\n \t\t\t      struct tf_tbl_set_parms *parms);\n \n+\t/**\n+\t * Sets the specified external table type element.\n+\t *\n+\t * This API sets the specified element data by invoking the\n+\t * firmware.\n+\t *\n+\t * [in] tfp\n+\t *   Pointer to TF handle\n+\t *\n+\t * [in] parms\n+\t *   Pointer to table set parameters\n+\t *\n+\t * Returns\n+\t *   - (0) if successful.\n+\t *   - (-EINVAL) on failure.\n+\t */\n+\tint (*tf_dev_set_ext_tbl)(struct tf *tfp,\n+\t\t\t\t  struct tf_tbl_set_parms *parms);\n+\n \t/**\n \t * Retrieves the specified table type element.\n \t *\ndiff --git a/drivers/net/bnxt/tf_core/tf_device_p4.c b/drivers/net/bnxt/tf_core/tf_device_p4.c\nindex 1eaf18212..9a3230787 100644\n--- a/drivers/net/bnxt/tf_core/tf_device_p4.c\n+++ b/drivers/net/bnxt/tf_core/tf_device_p4.c\n@@ -85,10 +85,13 @@ const struct tf_dev_ops tf_dev_ops_p4_init = {\n \t.tf_dev_get_tcam_slice_info = tf_dev_p4_get_tcam_slice_info,\n \t.tf_dev_alloc_ident = NULL,\n \t.tf_dev_free_ident = NULL,\n+\t.tf_dev_alloc_ext_tbl = NULL,\n \t.tf_dev_alloc_tbl = NULL,\n+\t.tf_dev_free_ext_tbl = NULL,\n \t.tf_dev_free_tbl = NULL,\n \t.tf_dev_alloc_search_tbl = NULL,\n \t.tf_dev_set_tbl = NULL,\n+\t.tf_dev_set_ext_tbl = NULL,\n \t.tf_dev_get_tbl = NULL,\n \t.tf_dev_get_bulk_tbl = NULL,\n \t.tf_dev_alloc_tcam = NULL,\n@@ -113,9 +116,12 @@ const struct tf_dev_ops tf_dev_ops_p4 = {\n \t.tf_dev_alloc_ident = tf_ident_alloc,\n \t.tf_dev_free_ident = tf_ident_free,\n \t.tf_dev_alloc_tbl = tf_tbl_alloc,\n+\t.tf_dev_alloc_ext_tbl = tf_tbl_ext_alloc,\n \t.tf_dev_free_tbl = tf_tbl_free,\n+\t.tf_dev_free_ext_tbl = tf_tbl_ext_free,\n \t.tf_dev_alloc_search_tbl = NULL,\n \t.tf_dev_set_tbl = tf_tbl_set,\n+\t.tf_dev_set_ext_tbl = tf_tbl_ext_set,\n \t.tf_dev_get_tbl = tf_tbl_get,\n \t.tf_dev_get_bulk_tbl = tf_tbl_bulk_get,\n \t.tf_dev_alloc_tcam = tf_tcam_alloc,\ndiff --git a/drivers/net/bnxt/tf_core/tf_device_p4.h b/drivers/net/bnxt/tf_core/tf_device_p4.h\nindex 8fae18012..298e100f3 100644\n--- a/drivers/net/bnxt/tf_core/tf_device_p4.h\n+++ b/drivers/net/bnxt/tf_core/tf_device_p4.h\n@@ -47,8 +47,6 @@ struct tf_rm_element_cfg tf_tbl_p4[TF_TBL_TYPE_MAX] = {\n \t{ TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_NAT_DPORT },\n \t{ TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_NAT_S_IPV4 },\n \t{ TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_NAT_D_IPV4 },\n-\t{ TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_NAT_S_IPV6 },\n-\t{ TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_NAT_D_IPV6 },\n \t{ TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_METER_PROF },\n \t{ TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_METER },\n \t{ TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_MIRROR },\ndiff --git a/drivers/net/bnxt/tf_core/tf_em.h b/drivers/net/bnxt/tf_core/tf_em.h\nindex c3c712fb9..1c2369c7b 100644\n--- a/drivers/net/bnxt/tf_core/tf_em.h\n+++ b/drivers/net/bnxt/tf_core/tf_em.h\n@@ -456,4 +456,99 @@ int tf_em_ext_common_free(struct tf *tfp,\n  */\n int tf_em_ext_common_alloc(struct tf *tfp,\n \t\t\t   struct tf_alloc_tbl_scope_parms *parms);\n+\n+/**\n+ * Allocate External Tbl entry from the scope pool.\n+ *\n+ * [in] tfp\n+ *   Pointer to Truflow Handle\n+ * [in] parms\n+ *   Allocation parameters\n+ *\n+ * Return:\n+ *  0       - Success, entry allocated - no search support\n+ *  -ENOMEM -EINVAL -EOPNOTSUPP\n+ *          - Failure, entry not allocated, out of resources\n+ */\n+int\n+tf_tbl_ext_alloc(struct tf *tfp,\n+\t\t struct tf_tbl_alloc_parms *parms);\n+\n+/**\n+ * Free External Tbl entry to the scope pool.\n+ *\n+ * [in] tfp\n+ *   Pointer to Truflow Handle\n+ * [in] parms\n+ *   Allocation parameters\n+ *\n+ * Return:\n+ *  0       - Success, entry freed\n+ *\n+ * - Failure, entry not successfully freed for these reasons\n+ *  -ENOMEM\n+ *  -EOPNOTSUPP\n+ *  -EINVAL\n+ */\n+int\n+tf_tbl_ext_free(struct tf *tfp,\n+\t\tstruct tf_tbl_free_parms *parms);\n+\n+/**\n+ * Sets the specified external table type element.\n+ *\n+ * This API sets the specified element data by invoking the\n+ * firmware.\n+ *\n+ * [in] tfp\n+ *   Pointer to TF handle\n+ *\n+ * [in] parms\n+ *   Pointer to table set parameters\n+ *\n+ * Returns\n+ *   - (0) if successful.\n+ *   - (-EINVAL) on failure.\n+ */\n+int tf_tbl_ext_set(struct tf *tfp,\n+\t\t   struct tf_tbl_set_parms *parms);\n+\n+/**\n+ * Sets the specified external table type element.\n+ *\n+ * This API sets the specified element data by invoking the\n+ * firmware.\n+ *\n+ * [in] tfp\n+ *   Pointer to TF handle\n+ *\n+ * [in] parms\n+ *   Pointer to table set parameters\n+ *\n+ * Returns\n+ *   - (0) if successful.\n+ *   - (-EINVAL) on failure.\n+ */\n+int tf_tbl_ext_host_set(struct tf *tfp,\n+\t\t\tstruct tf_tbl_set_parms *parms);\n+\n+/**\n+ * Sets the specified external table type element.\n+ *\n+ * This API sets the specified element data by invoking the\n+ * firmware.\n+ *\n+ * [in] tfp\n+ *   Pointer to TF handle\n+ *\n+ * [in] parms\n+ *   Pointer to table set parameters\n+ *\n+ * Returns\n+ *   - (0) if successful.\n+ *   - (-EINVAL) on failure.\n+ */\n+int tf_tbl_ext_system_set(struct tf *tfp,\n+\t\t\t  struct tf_tbl_set_parms *parms);\n+\n #endif /* _TF_EM_H_ */\ndiff --git a/drivers/net/bnxt/tf_core/tf_em_common.c b/drivers/net/bnxt/tf_core/tf_em_common.c\nindex e31a63b46..39a8412b3 100644\n--- a/drivers/net/bnxt/tf_core/tf_em_common.c\n+++ b/drivers/net/bnxt/tf_core/tf_em_common.c\n@@ -29,8 +29,6 @@\n  */\n void *eem_db[TF_DIR_MAX];\n \n-#define TF_EEM_DB_TBL_SCOPE 1\n-\n /**\n  * Init flag, set on bind and cleared on unbind\n  */\n@@ -54,13 +52,13 @@ tbl_scope_cb_find(uint32_t tbl_scope_id)\n \n \t/* Check that id is valid */\n \tparms.rm_db = eem_db[TF_DIR_RX];\n-\tparms.db_index = TF_EEM_DB_TBL_SCOPE;\n+\tparms.db_index = TF_EM_TBL_TYPE_TBL_SCOPE;\n \tparms.index = tbl_scope_id;\n \tparms.allocated = &allocated;\n \n \ti = tf_rm_is_allocated(&parms);\n \n-\tif (i < 0 || !allocated)\n+\tif (i < 0 || allocated != TF_RM_ALLOCATED_ENTRY_IN_USE)\n \t\treturn NULL;\n \n \tfor (i = 0; i < TF_NUM_TBL_SCOPE; i++) {\n@@ -158,6 +156,111 @@ tf_destroy_tbl_pool_external(enum tf_dir dir,\n \ttfp_free(ext_act_pool_mem);\n }\n \n+/**\n+ * Allocate External Tbl entry from the scope pool.\n+ *\n+ * [in] tfp\n+ *   Pointer to Truflow Handle\n+ * [in] parms\n+ *   Allocation parameters\n+ *\n+ * Return:\n+ *  0       - Success, entry allocated - no search support\n+ *  -ENOMEM -EINVAL -EOPNOTSUPP\n+ *          - Failure, entry not allocated, out of resources\n+ */\n+int\n+tf_tbl_ext_alloc(struct tf *tfp,\n+\t\t struct tf_tbl_alloc_parms *parms)\n+{\n+\tint rc;\n+\tuint32_t index;\n+\tstruct tf_tbl_scope_cb *tbl_scope_cb;\n+\tstruct stack *pool;\n+\n+\tTF_CHECK_PARMS2(tfp, parms);\n+\n+\t/* Get the pool info from the table scope\n+\t */\n+\ttbl_scope_cb = tbl_scope_cb_find(parms->tbl_scope_id);\n+\n+\tif (tbl_scope_cb == NULL) {\n+\t\tTFP_DRV_LOG(ERR,\n+\t\t\t    \"%s, table scope not allocated\\n\",\n+\t\t\t    tf_dir_2_str(parms->dir));\n+\t\treturn -EINVAL;\n+\t}\n+\tpool = &tbl_scope_cb->ext_act_pool[parms->dir];\n+\n+\t/* Allocate an element\n+\t */\n+\trc = stack_pop(pool, &index);\n+\n+\tif (rc != 0) {\n+\t\tTFP_DRV_LOG(ERR,\n+\t\t   \"%s, Allocation failed, type:%d\\n\",\n+\t\t   tf_dir_2_str(parms->dir),\n+\t\t   parms->type);\n+\t\treturn rc;\n+\t}\n+\n+\t*parms->idx = index;\n+\treturn rc;\n+}\n+\n+/**\n+ * Free External Tbl entry to the scope pool.\n+ *\n+ * [in] tfp\n+ *   Pointer to Truflow Handle\n+ * [in] parms\n+ *   Allocation parameters\n+ *\n+ * Return:\n+ *  0       - Success, entry freed\n+ *\n+ * - Failure, entry not successfully freed for these reasons\n+ *  -ENOMEM\n+ *  -EOPNOTSUPP\n+ *  -EINVAL\n+ */\n+int\n+tf_tbl_ext_free(struct tf *tfp,\n+\t\tstruct tf_tbl_free_parms *parms)\n+{\n+\tint rc = 0;\n+\tuint32_t index;\n+\tstruct tf_tbl_scope_cb *tbl_scope_cb;\n+\tstruct stack *pool;\n+\n+\tTF_CHECK_PARMS2(tfp, parms);\n+\n+\t/* Get the pool info from the table scope\n+\t */\n+\ttbl_scope_cb = tbl_scope_cb_find(parms->tbl_scope_id);\n+\n+\tif (tbl_scope_cb == NULL) {\n+\t\tTFP_DRV_LOG(ERR,\n+\t\t\t    \"%s, table scope error\\n\",\n+\t\t\t    tf_dir_2_str(parms->dir));\n+\t\treturn -EINVAL;\n+\t}\n+\tpool = &tbl_scope_cb->ext_act_pool[parms->dir];\n+\n+\tindex = parms->idx;\n+\n+\trc = stack_push(pool, index);\n+\n+\tif (rc != 0) {\n+\t\tTFP_DRV_LOG(ERR,\n+\t\t   \"%s, consistency error, stack full, type:%d, idx:%d\\n\",\n+\t\t   tf_dir_2_str(parms->dir),\n+\t\t   parms->type,\n+\t\t   index);\n+\t}\n+\treturn rc;\n+}\n+\n uint32_t\n tf_em_get_key_mask(int num_entries)\n {\n@@ -273,6 +376,15 @@ tf_em_ext_common_unbind(struct tf *tfp)\n \treturn 0;\n }\n \n+int tf_tbl_ext_set(struct tf *tfp,\n+\t\t   struct tf_tbl_set_parms *parms)\n+{\n+\tif (mem_type == TF_EEM_MEM_TYPE_HOST)\n+\t\treturn tf_tbl_ext_host_set(tfp, parms);\n+\telse\n+\t\treturn tf_tbl_ext_system_set(tfp, parms);\n+}\n+\n int\n tf_em_ext_common_alloc(struct tf *tfp,\n \t\t       struct tf_alloc_tbl_scope_parms *parms)\ndiff --git a/drivers/net/bnxt/tf_core/tf_em_host.c b/drivers/net/bnxt/tf_core/tf_em_host.c\nindex 543edb54a..d7c147a15 100644\n--- a/drivers/net/bnxt/tf_core/tf_em_host.c\n+++ b/drivers/net/bnxt/tf_core/tf_em_host.c\n@@ -48,7 +48,6 @@\n  * EM DBs.\n  */\n extern void *eem_db[TF_DIR_MAX];\n-#define TF_EEM_DB_TBL_SCOPE 1\n \n extern struct tf_tbl_scope_cb tbl_scopes[TF_NUM_TBL_SCOPE];\n \n@@ -986,7 +985,7 @@ tf_em_ext_host_alloc(struct tf *tfp,\n \n \t/* Get Table Scope control block from the session pool */\n \taparms.rm_db = eem_db[TF_DIR_RX];\n-\taparms.db_index = TF_EEM_DB_TBL_SCOPE;\n+\taparms.db_index = TF_EM_TBL_TYPE_TBL_SCOPE;\n \taparms.index = (uint32_t *)&parms->tbl_scope_id;\n \trc = tf_rm_allocate(&aparms);\n \tif (rc) {\n@@ -1087,7 +1086,7 @@ tf_em_ext_host_alloc(struct tf *tfp,\n cleanup:\n \t/* Free Table control block */\n \tfparms.rm_db = eem_db[TF_DIR_RX];\n-\tfparms.db_index = TF_EEM_DB_TBL_SCOPE;\n+\tfparms.db_index = TF_EM_TBL_TYPE_TBL_SCOPE;\n \tfparms.index = parms->tbl_scope_id;\n \ttf_rm_free(&fparms);\n \treturn -EINVAL;\n@@ -1111,7 +1110,7 @@ tf_em_ext_host_free(struct tf *tfp,\n \n \t/* Free Table control block */\n \taparms.rm_db = eem_db[TF_DIR_RX];\n-\taparms.db_index = TF_EEM_DB_TBL_SCOPE;\n+\taparms.db_index = TF_EM_TBL_TYPE_TBL_SCOPE;\n \taparms.index = parms->tbl_scope_id;\n \trc = tf_rm_free(&aparms);\n \tif (rc) {\n@@ -1133,6 +1132,77 @@ tf_em_ext_host_free(struct tf *tfp,\n \t\ttf_em_ctx_unreg(tfp, tbl_scope_cb, dir);\n \t}\n \n-\ttbl_scopes[parms->tbl_scope_id].tbl_scope_id = -1;\n+\ttbl_scopes[parms->tbl_scope_id].tbl_scope_id = TF_TBL_SCOPE_INVALID;\n+\treturn rc;\n+}\n+\n+/**\n+ * Sets the specified external table type element.\n+ *\n+ * This API sets the specified element data\n+ *\n+ * [in] tfp\n+ *   Pointer to TF handle\n+ *\n+ * [in] parms\n+ *   Pointer to table set parameters\n+ *\n+ * Returns\n+ *   - (0) if successful.\n+ *   - (-EINVAL) on failure.\n+ */\n+int tf_tbl_ext_host_set(struct tf *tfp,\n+\t\t\tstruct tf_tbl_set_parms *parms)\n+{\n+\tint rc = 0;\n+\tstruct tf_tbl_scope_cb *tbl_scope_cb;\n+\tuint32_t tbl_scope_id;\n+\tstruct hcapi_cfa_hwop op;\n+\tstruct hcapi_cfa_key_tbl key_tbl;\n+\tstruct hcapi_cfa_key_data key_obj;\n+\tstruct hcapi_cfa_key_loc key_loc;\n+\n+\tTF_CHECK_PARMS2(tfp, parms);\n+\n+\tif (parms->data == NULL) {\n+\t\tTFP_DRV_LOG(ERR,\n+\t\t\t    \"%s, invalid parms->data\\n\",\n+\t\t\t    tf_dir_2_str(parms->dir));\n+\t\treturn -EINVAL;\n+\t}\n+\n+\ttbl_scope_id = parms->tbl_scope_id;\n+\n+\tif (tbl_scope_id == TF_TBL_SCOPE_INVALID)  {\n+\t\tTFP_DRV_LOG(ERR,\n+\t\t\t    \"%s, Table scope not allocated\\n\",\n+\t\t\t    tf_dir_2_str(parms->dir));\n+\t\treturn -EINVAL;\n+\t}\n+\n+\t/* Get the table scope control block associated with the\n+\t * external pool\n+\t */\n+\ttbl_scope_cb = tbl_scope_cb_find(tbl_scope_id);\n+\n+\tif (tbl_scope_cb == NULL) {\n+\t\tTFP_DRV_LOG(ERR,\n+\t\t\t    \"%s, table scope error\\n\",\n+\t\t\t    tf_dir_2_str(parms->dir));\n+\t\treturn -EINVAL;\n+\t}\n+\n+\top.opcode = HCAPI_CFA_HWOPS_PUT;\n+\tkey_tbl.base0 =\n+\t\t(uint8_t *)&tbl_scope_cb->em_ctx_info[parms->dir].em_tables[TF_RECORD_TABLE];\n+\tkey_obj.offset = parms->idx % TF_EM_PAGE_SIZE;\n+\tkey_obj.data = parms->data;\n+\tkey_obj.size = parms->data_sz_in_bytes;\n+\n+\trc = hcapi_cfa_key_hw_op(&op,\n+\t\t\t\t &key_tbl,\n+\t\t\t\t &key_obj,\n+\t\t\t\t &key_loc);\n+\n \treturn rc;\n }\ndiff --git a/drivers/net/bnxt/tf_core/tf_em_system.c b/drivers/net/bnxt/tf_core/tf_em_system.c\nindex 6dd115470..10768df03 100644\n--- a/drivers/net/bnxt/tf_core/tf_em_system.c\n+++ b/drivers/net/bnxt/tf_core/tf_em_system.c\n@@ -112,3 +112,9 @@ tf_em_ext_system_free(struct tf *tfp __rte_unused,\n {\n \treturn 0;\n }\n+\n+int tf_tbl_ext_system_set(struct tf *tfp __rte_unused,\n+\t\t\t  struct tf_tbl_set_parms *parms __rte_unused)\n+{\n+\treturn 0;\n+}\ndiff --git a/drivers/net/bnxt/tf_core/tf_identifier.c b/drivers/net/bnxt/tf_core/tf_identifier.c\nindex 211371081..219839272 100644\n--- a/drivers/net/bnxt/tf_core/tf_identifier.c\n+++ b/drivers/net/bnxt/tf_core/tf_identifier.c\n@@ -159,13 +159,13 @@ tf_ident_free(struct tf *tfp __rte_unused,\n \tif (rc)\n \t\treturn rc;\n \n-\tif (!allocated) {\n+\tif (allocated != TF_RM_ALLOCATED_ENTRY_IN_USE) {\n \t\tTFP_DRV_LOG(ERR,\n \t\t\t    \"%s: Entry already free, type:%d, index:%d\\n\",\n \t\t\t    tf_dir_2_str(parms->dir),\n \t\t\t    parms->type,\n \t\t\t    parms->id);\n-\t\treturn rc;\n+\t\treturn -EINVAL;\n \t}\n \n \t/* Free requested element */\ndiff --git a/drivers/net/bnxt/tf_core/tf_rm.h b/drivers/net/bnxt/tf_core/tf_rm.h\nindex f44fcca70..fd044801f 100644\n--- a/drivers/net/bnxt/tf_core/tf_rm.h\n+++ b/drivers/net/bnxt/tf_core/tf_rm.h\n@@ -12,6 +12,11 @@\n \n struct tf;\n \n+/** RM return codes */\n+#define TF_RM_ALLOCATED_ENTRY_FREE        0\n+#define TF_RM_ALLOCATED_ENTRY_IN_USE      1\n+#define TF_RM_ALLOCATED_NO_ENTRY_FOUND   -1\n+\n /**\n  * The Resource Manager (RM) module provides basic DB handling for\n  * internal resources. These resources exists within the actual device\ndiff --git a/drivers/net/bnxt/tf_core/tf_tbl.c b/drivers/net/bnxt/tf_core/tf_tbl.c\nindex 05e866dc6..3a3277329 100644\n--- a/drivers/net/bnxt/tf_core/tf_tbl.c\n+++ b/drivers/net/bnxt/tf_core/tf_tbl.c\n@@ -172,13 +172,13 @@ tf_tbl_free(struct tf *tfp __rte_unused,\n \tif (rc)\n \t\treturn rc;\n \n-\tif (!allocated) {\n+\tif (allocated != TF_RM_ALLOCATED_ENTRY_IN_USE) {\n \t\tTFP_DRV_LOG(ERR,\n \t\t\t    \"%s: Entry already free, type:%d, index:%d\\n\",\n \t\t\t    tf_dir_2_str(parms->dir),\n \t\t\t    parms->type,\n \t\t\t    parms->idx);\n-\t\treturn rc;\n+\t\treturn -EINVAL;\n \t}\n \n \t/* Free requested element */\n@@ -233,7 +233,7 @@ tf_tbl_set(struct tf *tfp,\n \tif (rc)\n \t\treturn rc;\n \n-\tif (!allocated) {\n+\tif (allocated != TF_RM_ALLOCATED_ENTRY_IN_USE) {\n \t\tTFP_DRV_LOG(ERR,\n \t\t   \"%s, Invalid or not allocated index, type:%d, idx:%d\\n\",\n \t\t   tf_dir_2_str(parms->dir),\n@@ -301,7 +301,7 @@ tf_tbl_get(struct tf *tfp,\n \tif (rc)\n \t\treturn rc;\n \n-\tif (!allocated) {\n+\tif (allocated != TF_RM_ALLOCATED_ENTRY_IN_USE) {\n \t\tTFP_DRV_LOG(ERR,\n \t\t   \"%s, Invalid or not allocated index, type:%d, idx:%d\\n\",\n \t\t   tf_dir_2_str(parms->dir),\n@@ -374,7 +374,7 @@ tf_tbl_bulk_get(struct tf *tfp,\n \t\tif (rc)\n \t\t\treturn rc;\n \n-\t\tif (!allocated) {\n+\t\tif (allocated != TF_RM_ALLOCATED_ENTRY_IN_USE) {\n \t\t\tTFP_DRV_LOG(ERR,\n \t\t\t\t    \"%s, Invalid or not allocated index, type:%d, idx:%d\\n\",\n \t\t\t\t    tf_dir_2_str(parms->dir),\ndiff --git a/drivers/net/bnxt/tf_core/tf_tbl.h b/drivers/net/bnxt/tf_core/tf_tbl.h\nindex eb560ffa7..2a10b47ce 100644\n--- a/drivers/net/bnxt/tf_core/tf_tbl.h\n+++ b/drivers/net/bnxt/tf_core/tf_tbl.h\n@@ -83,6 +83,10 @@ struct tf_tbl_alloc_parms {\n \t * [in] Type of the allocation\n \t */\n \tenum tf_tbl_type type;\n+\t/**\n+\t * [in] Table scope identifier (ignored unless TF_TBL_TYPE_EXT)\n+\t */\n+\tuint32_t tbl_scope_id;\n \t/**\n \t * [out] Idx of allocated entry or found entry (if search_enable)\n \t */\n@@ -101,6 +105,10 @@ struct tf_tbl_free_parms {\n \t * [in] Type of the allocation type\n \t */\n \tenum tf_tbl_type type;\n+\t/**\n+\t * [in] Table scope identifier (ignored unless TF_TBL_TYPE_EXT)\n+\t */\n+\tuint32_t tbl_scope_id;\n \t/**\n \t * [in] Index to free\n \t */\n@@ -168,6 +176,10 @@ struct tf_tbl_set_parms {\n \t * [in] Type of object to set\n \t */\n \tenum tf_tbl_type type;\n+\t/**\n+\t * [in] Table scope identifier (ignored unless TF_TBL_TYPE_EXT)\n+\t */\n+\tuint32_t tbl_scope_id;\n \t/**\n \t * [in] Entry data\n \t */\ndiff --git a/drivers/net/bnxt/tf_core/tf_tcam.c b/drivers/net/bnxt/tf_core/tf_tcam.c\nindex b67159a54..b1092cd9d 100644\n--- a/drivers/net/bnxt/tf_core/tf_tcam.c\n+++ b/drivers/net/bnxt/tf_core/tf_tcam.c\n@@ -252,13 +252,13 @@ tf_tcam_free(struct tf *tfp,\n \tif (rc)\n \t\treturn rc;\n \n-\tif (!allocated) {\n+\tif (allocated != TF_RM_ALLOCATED_ENTRY_IN_USE) {\n \t\tTFP_DRV_LOG(ERR,\n \t\t\t    \"%s: Entry already free, type:%d, index:%d\\n\",\n \t\t\t    tf_dir_2_str(parms->dir),\n \t\t\t    parms->type,\n \t\t\t    parms->idx);\n-\t\treturn rc;\n+\t\treturn -EINVAL;\n \t}\n \n \t/* Free requested element */\n@@ -362,13 +362,13 @@ tf_tcam_set(struct tf *tfp __rte_unused,\n \tif (rc)\n \t\treturn rc;\n \n-\tif (!allocated) {\n+\tif (allocated != TF_RM_ALLOCATED_ENTRY_IN_USE) {\n \t\tTFP_DRV_LOG(ERR,\n \t\t\t    \"%s: Entry is not allocated, type:%d, index:%d\\n\",\n \t\t\t    tf_dir_2_str(parms->dir),\n \t\t\t    parms->type,\n \t\t\t    parms->idx);\n-\t\treturn rc;\n+\t\treturn -EINVAL;\n \t}\n \n \t/* Convert TF type to HCAPI RM type */\ndiff --git a/drivers/net/bnxt/tf_core/tf_util.c b/drivers/net/bnxt/tf_core/tf_util.c\nindex 5472a9aac..85f6e25f4 100644\n--- a/drivers/net/bnxt/tf_core/tf_util.c\n+++ b/drivers/net/bnxt/tf_core/tf_util.c\n@@ -92,10 +92,6 @@ tf_tbl_type_2_str(enum tf_tbl_type tbl_type)\n \t\treturn \"NAT IPv4 Source\";\n \tcase TF_TBL_TYPE_ACT_MODIFY_IPV4_DEST:\n \t\treturn \"NAT IPv4 Destination\";\n-\tcase TF_TBL_TYPE_ACT_MODIFY_IPV6_SRC:\n-\t\treturn \"NAT IPv6 Source\";\n-\tcase TF_TBL_TYPE_ACT_MODIFY_IPV6_DEST:\n-\t\treturn \"NAT IPv6 Destination\";\n \tcase TF_TBL_TYPE_METER_PROF:\n \t\treturn \"Meter Profile\";\n \tcase TF_TBL_TYPE_METER_INST:\n",
    "prefixes": [
        "v2",
        "26/51"
    ]
}