get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 68512,
    "url": "http://patches.dpdk.org/api/patches/68512/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1586938751-32808-27-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": "<1586938751-32808-27-git-send-email-venkatkumar.duvvuru@broadcom.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1586938751-32808-27-git-send-email-venkatkumar.duvvuru@broadcom.com",
    "date": "2020-04-15T08:19:03",
    "name": "[v4,26/34] net/bnxt: add support for rte flow action parsing",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "23e33e6ce903bf27c3d4c68111615cc0d19f078e",
    "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/1586938751-32808-27-git-send-email-venkatkumar.duvvuru@broadcom.com/mbox/",
    "series": [
        {
            "id": 9386,
            "url": "http://patches.dpdk.org/api/series/9386/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=9386",
            "date": "2020-04-15T08:18:37",
            "name": "add support for host based flow table management",
            "version": 4,
            "mbox": "http://patches.dpdk.org/series/9386/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/68512/comments/",
    "check": "fail",
    "checks": "http://patches.dpdk.org/api/patches/68512/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 7C833A0563;\n\tWed, 15 Apr 2020 10:25:47 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 152901D600;\n\tWed, 15 Apr 2020 10:20:37 +0200 (CEST)",
            "from mail-pg1-f173.google.com (mail-pg1-f173.google.com\n [209.85.215.173]) by dpdk.org (Postfix) with ESMTP id 323A21D5EA\n for <dev@dpdk.org>; Wed, 15 Apr 2020 10:20:34 +0200 (CEST)",
            "by mail-pg1-f173.google.com with SMTP id i3so1176150pgk.1\n for <dev@dpdk.org>; Wed, 15 Apr 2020 01:20:34 -0700 (PDT)",
            "from S60.dhcp.broadcom.net ([192.19.234.250])\n by smtp.gmail.com with ESMTPSA id fy21sm3819019pjb.25.2020.04.15.01.20.29\n (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);\n Wed, 15 Apr 2020 01:20:31 -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=7YM7yZ71rh4I+l8lwRJqn9srHwtf/bN5cwja4/J5T/0=;\n b=LHLoals1jj6MjhBN329udaSh1eFBkUgaZWzvANjby/quRnqNjUelKiwcrDXdjNOoM9\n jGpVIvXi0ejJsNWOonBMoIDKHqwedSv9fZQgC/4U5WNbIvTURZi6iTqPmb3ptluHDk1V\n NVtjljbjsnewiuvDsQPsqOUnr5KtiHnlXJOSc=",
        "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=7YM7yZ71rh4I+l8lwRJqn9srHwtf/bN5cwja4/J5T/0=;\n b=m7LLjhjHL7EpjdcXrEY6P5XNZXEsSUaABGfmZNTgCAhKs64dOzWFgPOM0mfPbs8au5\n QVp5yfJ8cjp01kJJHrkLzYwKCb0icvjaMOl05EjmC32Ccuo5A2HtdZ+KR/FO/Oyf0WNc\n zEUWnIAIWMYM64EfR9bchyXet13e/Fta1F93M4Iurf5xPcNVvGejlqNZWdbvlQnHjAs/\n 17ql+UiywlQRVGXlRqLFAV4zabrknfHWPXaaz5R0QFt6xFDRynaxYKjvPVjvoDpFc9m9\n HwyGEnXnGk0oo/EPZ//WJFRTp3vSVn1lUI9JKYsf+FsDKMRvZFug57P9gQZ+J6frmlID\n dNCw==",
        "X-Gm-Message-State": "AGi0PubTgGy6Ix5FDmdW/JuJYxZ/do4Fi/3/+IId7QtoqARZdp3SJX3r\n jzJn6KUOL0m/2kKMHsLtx445AW8fHOO1lWYCCNh/DX4f4gRn0ENnt1sutERMbolZSzqAK/y2Rw6\n r3TnxTasVbMxXrBm6wrJn3bkRvhl7DQiUreLnHKSnZ3Aov/+ucE4Odw34YRzl4FTwskMV",
        "X-Google-Smtp-Source": "\n APiQypJo0DyovD0QB+axEYv6I48TM6s3ADa5jjBoeEqvjA006+wkPlWXYAgQAWa99Bo/aKXqzKJEYg==",
        "X-Received": "by 2002:a63:721e:: with SMTP id n30mr24096668pgc.94.1586938832492;\n Wed, 15 Apr 2020 01:20:32 -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": "Wed, 15 Apr 2020 13:49:03 +0530",
        "Message-Id": "\n <1586938751-32808-27-git-send-email-venkatkumar.duvvuru@broadcom.com>",
        "X-Mailer": "git-send-email 2.7.4",
        "In-Reply-To": "\n <1586938751-32808-1-git-send-email-venkatkumar.duvvuru@broadcom.com>",
        "References": "\n <1586852011-37536-1-git-send-email-venkatkumar.duvvuru@broadcom.com>\n <1586938751-32808-1-git-send-email-venkatkumar.duvvuru@broadcom.com>",
        "Subject": "[dpdk-dev] [PATCH v4 26/34] net/bnxt: add support for rte flow\n\taction parsing",
        "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. Registers a callback handler for each rte_flow_action type, if\n   it is supported\n2. Iterates through each rte_flow_action till RTE_FLOW_ACTION_TYPE_END\n3. Invokes the action call back handler\n4. Each action call back handler will populate the respective fields in\n   act_details & act_bitmap\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/tf_ulp/bnxt_tf_common.h      |   7 +\n drivers/net/bnxt/tf_ulp/ulp_rte_parser.c      | 441 ++++++++++++++++++++++++++\n drivers/net/bnxt/tf_ulp/ulp_rte_parser.h      |  85 ++++-\n drivers/net/bnxt/tf_ulp/ulp_template_db.c     | 199 ++++++++++++\n drivers/net/bnxt/tf_ulp/ulp_template_db.h     |   7 +\n drivers/net/bnxt/tf_ulp/ulp_template_struct.h |  13 +\n 6 files changed, 751 insertions(+), 1 deletion(-)",
    "diff": "diff --git a/drivers/net/bnxt/tf_ulp/bnxt_tf_common.h b/drivers/net/bnxt/tf_ulp/bnxt_tf_common.h\nindex e4ebfc5..f417579 100644\n--- a/drivers/net/bnxt/tf_ulp/bnxt_tf_common.h\n+++ b/drivers/net/bnxt/tf_ulp/bnxt_tf_common.h\n@@ -31,6 +31,13 @@ enum bnxt_tf_rc {\n \tBNXT_TF_RC_SUCCESS\t= 0\n };\n \n+/* eth IPv4 Type */\n+enum bnxt_ulp_eth_ip_type {\n+\tBNXT_ULP_ETH_IPV4 = 4,\n+\tBNXT_ULP_ETH_IPV6 = 5,\n+\tBNXT_ULP_MAX_ETH_IP_TYPE = 0\n+};\n+\n /* ulp direction Type */\n enum ulp_direction_type {\n \tULP_DIR_INGRESS,\ndiff --git a/drivers/net/bnxt/tf_ulp/ulp_rte_parser.c b/drivers/net/bnxt/tf_ulp/ulp_rte_parser.c\nindex 3ffdcbd..7a31b43 100644\n--- a/drivers/net/bnxt/tf_ulp/ulp_rte_parser.c\n+++ b/drivers/net/bnxt/tf_ulp/ulp_rte_parser.c\n@@ -30,6 +30,21 @@ static inline void ulp_util_field_int_write(uint8_t *buffer,\n \tmemcpy(buffer, &temp_val, sizeof(uint32_t));\n }\n \n+/* Utility function to skip the void items. */\n+static inline int32_t\n+ulp_rte_item_skip_void(const struct rte_flow_item **item, uint32_t increment)\n+{\n+\tif (!*item)\n+\t\treturn 0;\n+\tif (increment)\n+\t\t(*item)++;\n+\twhile ((*item) && (*item)->type == RTE_FLOW_ITEM_TYPE_VOID)\n+\t\t(*item)++;\n+\tif (*item)\n+\t\treturn 1;\n+\treturn 0;\n+}\n+\n /*\n  * Function to handle the parsing of RTE Flows and placing\n  * the RTE flow items into the ulp structures.\n@@ -73,6 +88,45 @@ bnxt_ulp_rte_parser_hdr_parse(const struct rte_flow_item pattern[],\n \treturn BNXT_TF_RC_SUCCESS;\n }\n \n+/*\n+ * Function to handle the parsing of RTE Flows and placing\n+ * the RTE flow actions into the ulp structures.\n+ */\n+int32_t\n+bnxt_ulp_rte_parser_act_parse(const struct rte_flow_action actions[],\n+\t\t\t      struct ulp_rte_act_bitmap *act_bitmap,\n+\t\t\t      struct ulp_rte_act_prop *act_prop)\n+{\n+\tconst struct rte_flow_action *action_item = actions;\n+\tstruct bnxt_ulp_rte_act_info *hdr_info;\n+\n+\t/* Parse all the items in the pattern */\n+\twhile (action_item && action_item->type != RTE_FLOW_ACTION_TYPE_END) {\n+\t\t/* get the header information from the flow_hdr_info table */\n+\t\thdr_info = &ulp_act_info[action_item->type];\n+\t\tif (hdr_info->act_type ==\n+\t\t    BNXT_ULP_ACT_TYPE_NOT_SUPPORTED) {\n+\t\t\tBNXT_TF_DBG(ERR,\n+\t\t\t\t    \"Truflow parser does not support act %u\\n\",\n+\t\t\t\t    action_item->type);\n+\t\t\treturn BNXT_TF_RC_ERROR;\n+\t\t} else if (hdr_info->act_type ==\n+\t\t    BNXT_ULP_ACT_TYPE_SUPPORTED) {\n+\t\t\t/* call the registered callback handler */\n+\t\t\tif (hdr_info->proto_act_func) {\n+\t\t\t\tif (hdr_info->proto_act_func(action_item,\n+\t\t\t\t\t\t\t     act_bitmap,\n+\t\t\t\t\t\t\t     act_prop) !=\n+\t\t\t\t    BNXT_TF_RC_SUCCESS) {\n+\t\t\t\t\treturn BNXT_TF_RC_ERROR;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t\taction_item++;\n+\t}\n+\treturn BNXT_TF_RC_SUCCESS;\n+}\n+\n /* Function to handle the parsing of RTE Flow item PF Header. */\n static int32_t\n ulp_rte_parser_svif_set(struct ulp_rte_hdr_bitmap *hdr_bitmap,\n@@ -765,3 +819,390 @@ ulp_rte_void_hdr_handler(const struct rte_flow_item *item __rte_unused,\n {\n \treturn BNXT_TF_RC_SUCCESS;\n }\n+\n+/* Function to handle the parsing of RTE Flow action void Header. */\n+int32_t\n+ulp_rte_void_act_handler(const struct rte_flow_action *action_item __rte_unused,\n+\t\t\t struct ulp_rte_act_bitmap *act __rte_unused,\n+\t\t\t struct ulp_rte_act_prop *act_prop __rte_unused)\n+{\n+\treturn BNXT_TF_RC_SUCCESS;\n+}\n+\n+/* Function to handle the parsing of RTE Flow action Mark Header. */\n+int32_t\n+ulp_rte_mark_act_handler(const struct rte_flow_action *action_item,\n+\t\t\t struct ulp_rte_act_bitmap *act,\n+\t\t\t struct ulp_rte_act_prop *act_prop)\n+{\n+\tconst struct rte_flow_action_mark *mark;\n+\tuint32_t mark_id = 0;\n+\n+\tmark = action_item->conf;\n+\tif (mark) {\n+\t\tmark_id = tfp_cpu_to_be_32(mark->id);\n+\t\tmemcpy(&act_prop->act_details[BNXT_ULP_ACT_PROP_IDX_MARK],\n+\t\t       &mark_id, BNXT_ULP_ACT_PROP_SZ_MARK);\n+\n+\t\t/* Update the hdr_bitmap with vxlan */\n+\t\tULP_BITMAP_SET(act->bits, BNXT_ULP_ACTION_BIT_MARK);\n+\t\treturn BNXT_TF_RC_SUCCESS;\n+\t}\n+\tBNXT_TF_DBG(ERR, \"Parse Error: Mark arg is invalid\\n\");\n+\treturn BNXT_TF_RC_ERROR;\n+}\n+\n+/* Function to handle the parsing of RTE Flow action RSS Header. */\n+int32_t\n+ulp_rte_rss_act_handler(const struct rte_flow_action *action_item,\n+\t\t\tstruct ulp_rte_act_bitmap *act,\n+\t\t\tstruct ulp_rte_act_prop *act_prop __rte_unused)\n+{\n+\tconst struct rte_flow_action_rss *rss;\n+\n+\trss = action_item->conf;\n+\tif (rss) {\n+\t\t/* Update the hdr_bitmap with vxlan */\n+\t\tULP_BITMAP_SET(act->bits, BNXT_ULP_ACTION_BIT_RSS);\n+\t\treturn BNXT_TF_RC_SUCCESS;\n+\t}\n+\tBNXT_TF_DBG(ERR, \"Parse Error: RSS arg is invalid\\n\");\n+\treturn BNXT_TF_RC_ERROR;\n+}\n+\n+/* Function to handle the parsing of RTE Flow action vxlan_encap Header. */\n+int32_t\n+ulp_rte_vxlan_encap_act_handler(const struct rte_flow_action *action_item,\n+\t\t\t\tstruct ulp_rte_act_bitmap *act,\n+\t\t\t\tstruct ulp_rte_act_prop *ap)\n+{\n+\tconst struct rte_flow_action_vxlan_encap *vxlan_encap;\n+\tconst struct rte_flow_item *item;\n+\tconst struct rte_flow_item_eth *eth_spec;\n+\tconst struct rte_flow_item_ipv4 *ipv4_spec;\n+\tconst struct rte_flow_item_ipv6 *ipv6_spec;\n+\tstruct rte_flow_item_vxlan vxlan_spec;\n+\tuint32_t vlan_num = 0, vlan_size = 0;\n+\tuint32_t ip_size = 0, ip_type = 0;\n+\tuint32_t vxlan_size = 0;\n+\tuint8_t *buff;\n+\t/* IP header per byte - ver/hlen, TOS, ID, ID, FRAG, FRAG, TTL, PROTO */\n+\tconst uint8_t\tdef_ipv4_hdr[] = {0x45, 0x00, 0x00, 0x01, 0x00,\n+\t\t\t\t    0x00, 0x40, 0x11};\n+\n+\tvxlan_encap = action_item->conf;\n+\tif (!vxlan_encap) {\n+\t\tBNXT_TF_DBG(ERR, \"Parse Error: Vxlan_encap arg is invalid\\n\");\n+\t\treturn BNXT_TF_RC_ERROR;\n+\t}\n+\n+\titem = vxlan_encap->definition;\n+\tif (!item) {\n+\t\tBNXT_TF_DBG(ERR, \"Parse Error: definition arg is invalid\\n\");\n+\t\treturn BNXT_TF_RC_ERROR;\n+\t}\n+\n+\tif (!ulp_rte_item_skip_void(&item, 0))\n+\t\treturn BNXT_TF_RC_ERROR;\n+\n+\t/* must have ethernet header */\n+\tif (item->type != RTE_FLOW_ITEM_TYPE_ETH) {\n+\t\tBNXT_TF_DBG(ERR, \"Parse Error:vxlan encap does not have eth\\n\");\n+\t\treturn BNXT_TF_RC_ERROR;\n+\t}\n+\teth_spec = item->spec;\n+\tbuff = &ap->act_details[BNXT_ULP_ACT_PROP_IDX_ENCAP_L2_DMAC];\n+\tulp_encap_buffer_copy(buff,\n+\t\t\t      eth_spec->dst.addr_bytes,\n+\t\t\t      BNXT_ULP_ACT_PROP_SZ_ENCAP_L2_DMAC);\n+\n+\t/* Goto the next item */\n+\tif (!ulp_rte_item_skip_void(&item, 1))\n+\t\treturn BNXT_TF_RC_ERROR;\n+\n+\t/* May have vlan header */\n+\tif (item->type == RTE_FLOW_ITEM_TYPE_VLAN) {\n+\t\tvlan_num++;\n+\t\tbuff = &ap->act_details[BNXT_ULP_ACT_PROP_IDX_ENCAP_VTAG];\n+\t\tulp_encap_buffer_copy(buff,\n+\t\t\t\t      item->spec,\n+\t\t\t\t      sizeof(struct rte_flow_item_vlan));\n+\n+\t\tif (!ulp_rte_item_skip_void(&item, 1))\n+\t\t\treturn BNXT_TF_RC_ERROR;\n+\t}\n+\n+\t/* may have two vlan headers */\n+\tif (item->type == RTE_FLOW_ITEM_TYPE_VLAN) {\n+\t\tvlan_num++;\n+\t\tmemcpy(&ap->act_details[BNXT_ULP_ACT_PROP_IDX_ENCAP_VTAG +\n+\t\t       sizeof(struct rte_flow_item_vlan)],\n+\t\t       item->spec,\n+\t\t       sizeof(struct rte_flow_item_vlan));\n+\t\tif (!ulp_rte_item_skip_void(&item, 1))\n+\t\t\treturn BNXT_TF_RC_ERROR;\n+\t}\n+\t/* Update the vlan count and size of more than one */\n+\tif (vlan_num) {\n+\t\tvlan_size = vlan_num * sizeof(struct rte_flow_item_vlan);\n+\t\tvlan_num = tfp_cpu_to_be_32(vlan_num);\n+\t\tmemcpy(&ap->act_details[BNXT_ULP_ACT_PROP_IDX_ENCAP_VTAG_NUM],\n+\t\t       &vlan_num,\n+\t\t       sizeof(uint32_t));\n+\t\tvlan_size = tfp_cpu_to_be_32(vlan_size);\n+\t\tmemcpy(&ap->act_details[BNXT_ULP_ACT_PROP_IDX_ENCAP_VTAG_SZ],\n+\t\t       &vlan_size,\n+\t\t       sizeof(uint32_t));\n+\t}\n+\n+\t/* L3 must be IPv4, IPv6 */\n+\tif (item->type == RTE_FLOW_ITEM_TYPE_IPV4) {\n+\t\tipv4_spec = item->spec;\n+\t\tip_size = BNXT_ULP_ENCAP_IPV4_SIZE;\n+\n+\t\t/* copy the ipv4 details */\n+\t\tif (ulp_buffer_is_empty(&ipv4_spec->hdr.version_ihl,\n+\t\t\t\t\tBNXT_ULP_ENCAP_IPV4_VER_HLEN_TOS)) {\n+\t\t\tbuff = &ap->act_details[BNXT_ULP_ACT_PROP_IDX_ENCAP_IP];\n+\t\t\tulp_encap_buffer_copy(buff,\n+\t\t\t\t\t      def_ipv4_hdr,\n+\t\t\t\t\t      BNXT_ULP_ENCAP_IPV4_VER_HLEN_TOS +\n+\t\t\t\t\t      BNXT_ULP_ENCAP_IPV4_ID_PROTO);\n+\t\t} else {\n+\t\t\tconst uint8_t *tmp_buff;\n+\n+\t\t\tbuff = &ap->act_details[BNXT_ULP_ACT_PROP_IDX_ENCAP_IP];\n+\t\t\tulp_encap_buffer_copy(buff,\n+\t\t\t\t\t      &ipv4_spec->hdr.version_ihl,\n+\t\t\t\t\t      BNXT_ULP_ENCAP_IPV4_VER_HLEN_TOS);\n+\t\t\tbuff = &ap->act_details[BNXT_ULP_ACT_PROP_IDX_ENCAP_IP +\n+\t\t\t     BNXT_ULP_ENCAP_IPV4_VER_HLEN_TOS];\n+\t\t\ttmp_buff = (const uint8_t *)&ipv4_spec->hdr.packet_id;\n+\t\t\tulp_encap_buffer_copy(buff,\n+\t\t\t\t\t      tmp_buff,\n+\t\t\t\t\t      BNXT_ULP_ENCAP_IPV4_ID_PROTO);\n+\t\t}\n+\t\tbuff = &ap->act_details[BNXT_ULP_ACT_PROP_IDX_ENCAP_IP +\n+\t\t    BNXT_ULP_ENCAP_IPV4_VER_HLEN_TOS +\n+\t\t    BNXT_ULP_ENCAP_IPV4_ID_PROTO];\n+\t\tulp_encap_buffer_copy(buff,\n+\t\t\t\t      (const uint8_t *)&ipv4_spec->hdr.dst_addr,\n+\t\t\t\t      BNXT_ULP_ENCAP_IPV4_DEST_IP);\n+\n+\t\t/* Update the ip size details */\n+\t\tip_size = tfp_cpu_to_be_32(ip_size);\n+\t\tmemcpy(&ap->act_details[BNXT_ULP_ACT_PROP_IDX_ENCAP_IP_SZ],\n+\t\t       &ip_size, sizeof(uint32_t));\n+\n+\t\t/* update the ip type */\n+\t\tip_type = rte_cpu_to_be_32(BNXT_ULP_ETH_IPV4);\n+\t\tmemcpy(&ap->act_details[BNXT_ULP_ACT_PROP_IDX_ENCAP_L3_TYPE],\n+\t\t       &ip_type, sizeof(uint32_t));\n+\n+\t\tif (!ulp_rte_item_skip_void(&item, 1))\n+\t\t\treturn BNXT_TF_RC_ERROR;\n+\t} else if (item->type == RTE_FLOW_ITEM_TYPE_IPV6) {\n+\t\tipv6_spec = item->spec;\n+\t\tip_size = BNXT_ULP_ENCAP_IPV6_SIZE;\n+\n+\t\t/* copy the ipv4 details */\n+\t\tmemcpy(&ap->act_details[BNXT_ULP_ACT_PROP_IDX_ENCAP_IP],\n+\t\t       ipv6_spec, BNXT_ULP_ENCAP_IPV6_SIZE);\n+\n+\t\t/* Update the ip size details */\n+\t\tip_size = tfp_cpu_to_be_32(ip_size);\n+\t\tmemcpy(&ap->act_details[BNXT_ULP_ACT_PROP_IDX_ENCAP_IP_SZ],\n+\t\t       &ip_size, sizeof(uint32_t));\n+\n+\t\t /* update the ip type */\n+\t\tip_type = rte_cpu_to_be_32(BNXT_ULP_ETH_IPV6);\n+\t\tmemcpy(&ap->act_details[BNXT_ULP_ACT_PROP_IDX_ENCAP_L3_TYPE],\n+\t\t       &ip_type, sizeof(uint32_t));\n+\n+\t\tif (!ulp_rte_item_skip_void(&item, 1))\n+\t\t\treturn BNXT_TF_RC_ERROR;\n+\t} else {\n+\t\tBNXT_TF_DBG(ERR, \"Parse Error: Vxlan Encap expects L3 hdr\\n\");\n+\t\treturn BNXT_TF_RC_ERROR;\n+\t}\n+\n+\t/* L4 is UDP */\n+\tif (item->type != RTE_FLOW_ITEM_TYPE_UDP) {\n+\t\tBNXT_TF_DBG(ERR, \"vxlan encap does not have udp\\n\");\n+\t\treturn BNXT_TF_RC_ERROR;\n+\t}\n+\t/* copy the udp details */\n+\tulp_encap_buffer_copy(&ap->act_details[BNXT_ULP_ACT_PROP_IDX_ENCAP_UDP],\n+\t\t\t      item->spec, BNXT_ULP_ENCAP_UDP_SIZE);\n+\n+\tif (!ulp_rte_item_skip_void(&item, 1))\n+\t\treturn BNXT_TF_RC_ERROR;\n+\n+\t/* Finally VXLAN */\n+\tif (item->type != RTE_FLOW_ITEM_TYPE_VXLAN) {\n+\t\tBNXT_TF_DBG(ERR, \"vxlan encap does not have vni\\n\");\n+\t\treturn BNXT_TF_RC_ERROR;\n+\t}\n+\tvxlan_size = sizeof(struct rte_flow_item_vxlan);\n+\t/* copy the vxlan details */\n+\tmemcpy(&vxlan_spec, item->spec, vxlan_size);\n+\tvxlan_spec.flags = 0x08;\n+\tulp_encap_buffer_copy(&ap->act_details[BNXT_ULP_ACT_PROP_IDX_ENCAP_TUN],\n+\t\t\t      (const uint8_t *)&vxlan_spec,\n+\t\t\t      vxlan_size);\n+\tvxlan_size = tfp_cpu_to_be_32(vxlan_size);\n+\tmemcpy(&ap->act_details[BNXT_ULP_ACT_PROP_IDX_ENCAP_TUN_SZ],\n+\t       &vxlan_size, sizeof(uint32_t));\n+\n+\t/*update the hdr_bitmap with vxlan */\n+\tULP_BITMAP_SET(act->bits, BNXT_ULP_ACTION_BIT_VXLAN_ENCAP);\n+\treturn BNXT_TF_RC_SUCCESS;\n+}\n+\n+/* Function to handle the parsing of RTE Flow action vxlan_encap Header */\n+int32_t\n+ulp_rte_vxlan_decap_act_handler(const struct rte_flow_action *action_item\n+\t\t\t\t__rte_unused,\n+\t\t\t\tstruct ulp_rte_act_bitmap *act,\n+\t\t\t\tstruct ulp_rte_act_prop *act_prop __rte_unused)\n+{\n+\t/* update the hdr_bitmap with vxlan */\n+\tULP_BITMAP_SET(act->bits, BNXT_ULP_ACTION_BIT_VXLAN_DECAP);\n+\treturn BNXT_TF_RC_SUCCESS;\n+}\n+\n+/* Function to handle the parsing of RTE Flow action drop Header. */\n+int32_t\n+ulp_rte_drop_act_handler(const struct rte_flow_action *action_item __rte_unused,\n+\t\t\t struct ulp_rte_act_bitmap *act,\n+\t\t\t struct ulp_rte_act_prop *act_prop __rte_unused)\n+{\n+\t/* Update the hdr_bitmap with drop */\n+\tULP_BITMAP_SET(act->bits, BNXT_ULP_ACTION_BIT_DROP);\n+\treturn BNXT_TF_RC_SUCCESS;\n+}\n+\n+/* Function to handle the parsing of RTE Flow action count. */\n+int32_t\n+ulp_rte_count_act_handler(const struct rte_flow_action *action_item,\n+\t\t\t  struct ulp_rte_act_bitmap *act,\n+\t\t\t  struct ulp_rte_act_prop *act_prop __rte_unused)\n+\n+{\n+\tconst struct rte_flow_action_count *act_count;\n+\n+\tact_count = action_item->conf;\n+\tif (act_count) {\n+\t\tif (act_count->shared) {\n+\t\t\tBNXT_TF_DBG(ERR,\n+\t\t\t\t    \"Parse Error:Shared count not supported\\n\");\n+\t\t\treturn BNXT_TF_RC_PARSE_ERR;\n+\t\t}\n+\t\tmemcpy(&act_prop->act_details[BNXT_ULP_ACT_PROP_IDX_COUNT],\n+\t\t       &act_count->id,\n+\t\t       BNXT_ULP_ACT_PROP_SZ_COUNT);\n+\t}\n+\n+\t/* Update the hdr_bitmap with count */\n+\tULP_BITMAP_SET(act->bits, BNXT_ULP_ACTION_BIT_COUNT);\n+\treturn BNXT_TF_RC_SUCCESS;\n+}\n+\n+/* Function to handle the parsing of RTE Flow action PF. */\n+int32_t\n+ulp_rte_pf_act_handler(const struct rte_flow_action *action_item __rte_unused,\n+\t\t       struct ulp_rte_act_bitmap *act,\n+\t\t       struct ulp_rte_act_prop *act_prop)\n+{\n+\tuint8_t *svif_buf;\n+\tuint8_t *vnic_buffer;\n+\tuint32_t svif;\n+\n+\t/* Update the hdr_bitmap with vnic bit */\n+\tULP_BITMAP_SET(act->bits, BNXT_ULP_ACTION_BIT_VNIC);\n+\n+\t/* copy the PF of the current device into VNIC Property */\n+\tsvif_buf = &act_prop->act_details[BNXT_ULP_ACT_PROP_IDX_VNIC];\n+\tulp_util_field_int_read(svif_buf, &svif);\n+\tvnic_buffer = &act_prop->act_details[BNXT_ULP_ACT_PROP_IDX_VNIC];\n+\tulp_util_field_int_write(vnic_buffer, svif);\n+\n+\treturn BNXT_TF_RC_SUCCESS;\n+}\n+\n+/* Function to handle the parsing of RTE Flow action VF. */\n+int32_t\n+ulp_rte_vf_act_handler(const struct rte_flow_action *action_item,\n+\t\t       struct ulp_rte_act_bitmap *act,\n+\t\t       struct ulp_rte_act_prop *act_prop)\n+{\n+\tconst struct rte_flow_action_vf *vf_action;\n+\n+\tvf_action = action_item->conf;\n+\tif (vf_action) {\n+\t\tif (vf_action->original) {\n+\t\t\tBNXT_TF_DBG(ERR,\n+\t\t\t\t    \"Parse Error:VF Original not supported\\n\");\n+\t\t\treturn BNXT_TF_RC_PARSE_ERR;\n+\t\t}\n+\t\t/* TBD: Update the computed VNIC using VF conversion */\n+\t\tmemcpy(&act_prop->act_details[BNXT_ULP_ACT_PROP_IDX_VNIC],\n+\t\t       &vf_action->id,\n+\t\t       BNXT_ULP_ACT_PROP_SZ_VNIC);\n+\t}\n+\n+\t/* Update the hdr_bitmap with count */\n+\tULP_BITMAP_SET(act->bits, BNXT_ULP_ACTION_BIT_VNIC);\n+\treturn BNXT_TF_RC_SUCCESS;\n+}\n+\n+/* Function to handle the parsing of RTE Flow action port_id. */\n+int32_t\n+ulp_rte_port_id_act_handler(const struct rte_flow_action *act_item,\n+\t\t\t    struct ulp_rte_act_bitmap *act,\n+\t\t\t    struct ulp_rte_act_prop *act_prop)\n+{\n+\tconst struct rte_flow_action_port_id *port_id;\n+\n+\tport_id = act_item->conf;\n+\tif (port_id) {\n+\t\tif (port_id->original) {\n+\t\t\tBNXT_TF_DBG(ERR,\n+\t\t\t\t    \"ParseErr:Portid Original not supported\\n\");\n+\t\t\treturn BNXT_TF_RC_PARSE_ERR;\n+\t\t}\n+\t\t/* TBD: Update the computed VNIC using port conversion */\n+\t\tmemcpy(&act_prop->act_details[BNXT_ULP_ACT_PROP_IDX_VNIC],\n+\t\t       &port_id->id,\n+\t\t       BNXT_ULP_ACT_PROP_SZ_VNIC);\n+\t}\n+\n+\t/* Update the hdr_bitmap with count */\n+\tULP_BITMAP_SET(act->bits, BNXT_ULP_ACTION_BIT_VNIC);\n+\treturn BNXT_TF_RC_SUCCESS;\n+}\n+\n+/* Function to handle the parsing of RTE Flow action phy_port. */\n+int32_t\n+ulp_rte_phy_port_act_handler(const struct rte_flow_action *action_item,\n+\t\t\t     struct ulp_rte_act_bitmap *act,\n+\t\t\t     struct ulp_rte_act_prop *act_prop)\n+{\n+\tconst struct rte_flow_action_phy_port *phy_port;\n+\n+\tphy_port = action_item->conf;\n+\tif (phy_port) {\n+\t\tif (phy_port->original) {\n+\t\t\tBNXT_TF_DBG(ERR,\n+\t\t\t\t    \"Parse Err:Port Original not supported\\n\");\n+\t\t\treturn BNXT_TF_RC_PARSE_ERR;\n+\t\t}\n+\t\tmemcpy(&act_prop->act_details[BNXT_ULP_ACT_PROP_IDX_VPORT],\n+\t\t       &phy_port->index,\n+\t\t       BNXT_ULP_ACT_PROP_SZ_VPORT);\n+\t}\n+\n+\t/* Update the hdr_bitmap with count */\n+\tULP_BITMAP_SET(act->bits, BNXT_ULP_ACTION_BIT_VPORT);\n+\treturn BNXT_TF_RC_SUCCESS;\n+}\ndiff --git a/drivers/net/bnxt/tf_ulp/ulp_rte_parser.h b/drivers/net/bnxt/tf_ulp/ulp_rte_parser.h\nindex 3a7845d..0ab43d2 100644\n--- a/drivers/net/bnxt/tf_ulp/ulp_rte_parser.h\n+++ b/drivers/net/bnxt/tf_ulp/ulp_rte_parser.h\n@@ -12,6 +12,14 @@\n #include \"ulp_template_db.h\"\n #include \"ulp_template_struct.h\"\n \n+/* defines to be used in the tunnel header parsing */\n+#define BNXT_ULP_ENCAP_IPV4_VER_HLEN_TOS\t2\n+#define BNXT_ULP_ENCAP_IPV4_ID_PROTO\t\t6\n+#define BNXT_ULP_ENCAP_IPV4_DEST_IP\t\t4\n+#define BNXT_ULP_ENCAP_IPV4_SIZE\t\t12\n+#define BNXT_ULP_ENCAP_IPV6_SIZE\t\t8\n+#define BNXT_ULP_ENCAP_UDP_SIZE\t\t\t4\n+\n /*\n  * Function to handle the parsing of RTE Flows and placing\n  * the RTE flow items into the ulp structures.\n@@ -21,6 +29,15 @@ bnxt_ulp_rte_parser_hdr_parse(const struct rte_flow_item pattern[],\n \t\t\t      struct ulp_rte_hdr_bitmap *hdr_bitmap,\n \t\t\t      struct ulp_rte_hdr_field  *hdr_field);\n \n+/*\n+ * Function to handle the parsing of RTE Flows and placing\n+ * the RTE flow actions into the ulp structures.\n+ */\n+int32_t\n+bnxt_ulp_rte_parser_act_parse(const struct rte_flow_action\tactions[],\n+\t\t\t      struct ulp_rte_act_bitmap\t\t*act_bitmap,\n+\t\t\t      struct ulp_rte_act_prop\t\t*act_prop);\n+\n /* Function to handle the parsing of RTE Flow item PF Header. */\n int32_t\n ulp_rte_pf_hdr_handler(const struct rte_flow_item\t*item,\n@@ -45,7 +62,7 @@ ulp_rte_port_id_hdr_handler(const struct rte_flow_item\t*item,\n \t\t\t    uint32_t\t\t\t*field_idx,\n \t\t\t    uint32_t\t\t\t*vlan_idx);\n \n-/* Function to handle the parsing of RTE Flow item port id Header. */\n+/* Function to handle the parsing of RTE Flow item port Header. */\n int32_t\n ulp_rte_phy_port_hdr_handler(const struct rte_flow_item\t*item,\n \t\t\t     struct ulp_rte_hdr_bitmap\t*hdr_bitmap,\n@@ -117,4 +134,70 @@ ulp_rte_void_hdr_handler(const struct rte_flow_item\t*item,\n \t\t\t uint32_t\t\t\t*field_idx,\n \t\t\t uint32_t\t\t\t*vlan_idx);\n \n+/* Function to handle the parsing of RTE Flow action void Header. */\n+int32_t\n+ulp_rte_void_act_handler(const struct rte_flow_action\t*action_item,\n+\t\t\t struct ulp_rte_act_bitmap\t*act,\n+\t\t\t struct ulp_rte_act_prop\t*act_prop);\n+\n+/* Function to handle the parsing of RTE Flow action RSS Header. */\n+int32_t\n+ulp_rte_rss_act_handler(const struct rte_flow_action\t*action_item,\n+\t\t\tstruct ulp_rte_act_bitmap\t*act,\n+\t\t\tstruct ulp_rte_act_prop\t*act_prop);\n+\n+/* Function to handle the parsing of RTE Flow action Mark Header. */\n+int32_t\n+ulp_rte_mark_act_handler(const struct rte_flow_action\t*action_item,\n+\t\t\t struct ulp_rte_act_bitmap\t*act,\n+\t\t\t struct ulp_rte_act_prop\t*act_prop);\n+\n+/* Function to handle the parsing of RTE Flow action vxlan_encap Header. */\n+int32_t\n+ulp_rte_vxlan_encap_act_handler(const struct rte_flow_action\t*action_item,\n+\t\t\t\tstruct ulp_rte_act_bitmap\t*act,\n+\t\t\t\tstruct ulp_rte_act_prop\t\t*act_prop);\n+\n+/* Function to handle the parsing of RTE Flow action vxlan_encap Header. */\n+int32_t\n+ulp_rte_vxlan_decap_act_handler(const struct rte_flow_action\t*action_item,\n+\t\t\t\tstruct ulp_rte_act_bitmap\t*act,\n+\t\t\t\tstruct ulp_rte_act_prop\t\t*act_prop);\n+\n+/* Function to handle the parsing of RTE Flow action drop Header. */\n+int32_t\n+ulp_rte_drop_act_handler(const struct rte_flow_action\t*action_item,\n+\t\t\t struct ulp_rte_act_bitmap\t*act,\n+\t\t\t struct ulp_rte_act_prop\t*act_prop);\n+\n+/* Function to handle the parsing of RTE Flow action count. */\n+int32_t\n+ulp_rte_count_act_handler(const struct rte_flow_action\t*action_item,\n+\t\t\t  struct ulp_rte_act_bitmap\t*act,\n+\t\t\t  struct ulp_rte_act_prop\t*act_prop);\n+\n+/* Function to handle the parsing of RTE Flow action PF. */\n+int32_t\n+ulp_rte_pf_act_handler(const struct rte_flow_action\t*action_item,\n+\t\t       struct ulp_rte_act_bitmap\t*act,\n+\t\t       struct ulp_rte_act_prop\t\t*act_prop);\n+\n+/* Function to handle the parsing of RTE Flow action VF. */\n+int32_t\n+ulp_rte_vf_act_handler(const struct rte_flow_action\t*action_item,\n+\t\t       struct ulp_rte_act_bitmap\t*act,\n+\t\t       struct ulp_rte_act_prop\t\t*act_prop);\n+\n+/* Function to handle the parsing of RTE Flow action port_id. */\n+int32_t\n+ulp_rte_port_id_act_handler(const struct rte_flow_action\t*act_item,\n+\t\t\t    struct ulp_rte_act_bitmap\t\t*act,\n+\t\t\t    struct ulp_rte_act_prop\t\t*act_p);\n+\n+/* Function to handle the parsing of RTE Flow action phy_port. */\n+int32_t\n+ulp_rte_phy_port_act_handler(const struct rte_flow_action\t*action_item,\n+\t\t\t     struct ulp_rte_act_bitmap\t\t*act,\n+\t\t\t     struct ulp_rte_act_prop\t\t*act_prop);\n+\n #endif /* _ULP_RTE_PARSER_H_ */\ndiff --git a/drivers/net/bnxt/tf_ulp/ulp_template_db.c b/drivers/net/bnxt/tf_ulp/ulp_template_db.c\nindex 6c214b2..411f1e3 100644\n--- a/drivers/net/bnxt/tf_ulp/ulp_template_db.c\n+++ b/drivers/net/bnxt/tf_ulp/ulp_template_db.c\n@@ -96,6 +96,205 @@ uint32_t ulp_act_prop_map_table[] = {\n \t\tBNXT_ULP_ACT_PROP_SZ_LAST\n };\n \n+struct bnxt_ulp_rte_act_info ulp_act_info[] = {\n+\t[RTE_FLOW_ACTION_TYPE_END] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_END,\n+\t\t.proto_act_func          = NULL\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_VOID] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_SUPPORTED,\n+\t\t.proto_act_func          = ulp_rte_void_act_handler\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_PASSTHRU] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,\n+\t\t.proto_act_func          = NULL\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_JUMP] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,\n+\t\t.proto_act_func          = NULL\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_MARK] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_SUPPORTED,\n+\t\t.proto_act_func          = ulp_rte_mark_act_handler\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_FLAG] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,\n+\t\t.proto_act_func          = NULL\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_QUEUE] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,\n+\t\t.proto_act_func          = NULL\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_DROP] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_SUPPORTED,\n+\t\t.proto_act_func          = ulp_rte_drop_act_handler\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_COUNT] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_SUPPORTED,\n+\t\t.proto_act_func          = ulp_rte_count_act_handler\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_RSS] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_SUPPORTED,\n+\t\t.proto_act_func          = ulp_rte_rss_act_handler\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_PF] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_SUPPORTED,\n+\t\t.proto_act_func          = ulp_rte_pf_act_handler\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_VF] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_SUPPORTED,\n+\t\t.proto_act_func          = ulp_rte_vf_act_handler\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_PHY_PORT] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_SUPPORTED,\n+\t\t.proto_act_func          = ulp_rte_phy_port_act_handler\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_PORT_ID] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_SUPPORTED,\n+\t\t.proto_act_func          = ulp_rte_port_id_act_handler\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_METER] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,\n+\t\t.proto_act_func          = NULL\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_SECURITY] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,\n+\t\t.proto_act_func          = NULL\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_OF_SET_MPLS_TTL] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,\n+\t\t.proto_act_func          = NULL\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_OF_DEC_MPLS_TTL] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,\n+\t\t.proto_act_func          = NULL\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_OF_SET_NW_TTL] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,\n+\t\t.proto_act_func          = NULL\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_OF_DEC_NW_TTL] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,\n+\t\t.proto_act_func          = NULL\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_OF_COPY_TTL_OUT] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,\n+\t\t.proto_act_func          = NULL\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_OF_COPY_TTL_IN] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,\n+\t\t.proto_act_func          = NULL\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_OF_POP_VLAN] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,\n+\t\t.proto_act_func          = NULL\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_OF_PUSH_VLAN] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,\n+\t\t.proto_act_func          = NULL\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_OF_SET_VLAN_VID] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,\n+\t\t.proto_act_func          = NULL\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_OF_SET_VLAN_PCP] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,\n+\t\t.proto_act_func          = NULL\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_OF_POP_MPLS] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,\n+\t\t.proto_act_func          = NULL\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_OF_PUSH_MPLS] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,\n+\t\t.proto_act_func          = NULL\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_VXLAN_ENCAP] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_SUPPORTED,\n+\t\t.proto_act_func          = ulp_rte_vxlan_encap_act_handler\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_VXLAN_DECAP] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_SUPPORTED,\n+\t\t.proto_act_func          = ulp_rte_vxlan_decap_act_handler\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_NVGRE_ENCAP] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,\n+\t\t.proto_act_func          = NULL\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_NVGRE_DECAP] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,\n+\t\t.proto_act_func          = NULL\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_RAW_ENCAP] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,\n+\t\t.proto_act_func          = NULL\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_RAW_DECAP] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,\n+\t\t.proto_act_func          = NULL\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_SET_IPV4_SRC] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,\n+\t\t.proto_act_func          = NULL\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_SET_IPV4_DST] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,\n+\t\t.proto_act_func          = NULL\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_SET_IPV6_SRC] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,\n+\t\t.proto_act_func          = NULL\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_SET_IPV6_DST] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,\n+\t\t.proto_act_func          = NULL\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_SET_TP_SRC] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,\n+\t\t.proto_act_func          = NULL\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_SET_TP_DST] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,\n+\t\t.proto_act_func          = NULL\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_MAC_SWAP] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,\n+\t\t.proto_act_func          = NULL\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_DEC_TTL] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,\n+\t\t.proto_act_func          = NULL\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_SET_TTL] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,\n+\t\t.proto_act_func          = NULL\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_SET_MAC_SRC] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,\n+\t\t.proto_act_func          = NULL\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_SET_MAC_DST] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,\n+\t\t.proto_act_func          = NULL\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_INC_TCP_SEQ] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,\n+\t\t.proto_act_func          = NULL\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_DEC_TCP_SEQ] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,\n+\t\t.proto_act_func          = NULL\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_INC_TCP_ACK] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,\n+\t\t.proto_act_func          = NULL\n+\t},\n+\t[RTE_FLOW_ACTION_TYPE_DEC_TCP_ACK] = {\n+\t\t.act_type                = BNXT_ULP_ACT_TYPE_NOT_SUPPORTED,\n+\t\t.proto_act_func          = NULL\n+\t}\n+};\n+\n struct bnxt_ulp_device_params ulp_device_params[] = {\n \t[BNXT_ULP_DEVICE_ID_WH_PLUS] = {\n \t\t.global_fid_enable       = BNXT_ULP_SYM_YES,\ndiff --git a/drivers/net/bnxt/tf_ulp/ulp_template_db.h b/drivers/net/bnxt/tf_ulp/ulp_template_db.h\nindex 906b542..dfab266 100644\n--- a/drivers/net/bnxt/tf_ulp/ulp_template_db.h\n+++ b/drivers/net/bnxt/tf_ulp/ulp_template_db.h\n@@ -74,6 +74,13 @@ enum bnxt_ulp_hdr_bit {\n \tBNXT_ULP_HDR_BIT_LAST                = 0x0000000000200000\n };\n \n+enum bnxt_ulp_act_type {\n+\tBNXT_ULP_ACT_TYPE_NOT_SUPPORTED = 0,\n+\tBNXT_ULP_ACT_TYPE_SUPPORTED = 1,\n+\tBNXT_ULP_ACT_TYPE_END = 2,\n+\tBNXT_ULP_ACT_TYPE_LAST = 3\n+};\n+\n enum bnxt_ulp_byte_order {\n \tBNXT_ULP_BYTE_ORDER_BE,\n \tBNXT_ULP_BYTE_ORDER_LE,\ndiff --git a/drivers/net/bnxt/tf_ulp/ulp_template_struct.h b/drivers/net/bnxt/tf_ulp/ulp_template_struct.h\nindex 0699634..47c0dd8 100644\n--- a/drivers/net/bnxt/tf_ulp/ulp_template_struct.h\n+++ b/drivers/net/bnxt/tf_ulp/ulp_template_struct.h\n@@ -72,6 +72,19 @@ struct ulp_rte_act_prop {\n \tuint8_t\tact_details[BNXT_ULP_ACT_PROP_IDX_LAST];\n };\n \n+/* Flow Parser Action Information Structure */\n+struct bnxt_ulp_rte_act_info {\n+\tenum bnxt_ulp_act_type\t\t\t\t\tact_type;\n+\t/* Flow Parser Protocol Action Function Prototype */\n+\tint32_t (*proto_act_func)\n+\t\t(const struct rte_flow_action\t\t\t*action_item,\n+\t\tstruct ulp_rte_act_bitmap\t\t\t*act_bitmap,\n+\t\tstruct ulp_rte_act_prop\t\t\t\t*act_prop);\n+};\n+\n+/* Flow Parser Action Information Structure Array defined in template source*/\n+extern struct bnxt_ulp_rte_act_info\tulp_act_info[];\n+\n /* Flow Matcher structures */\n struct bnxt_ulp_header_match_info {\n \tstruct ulp_rte_hdr_bitmap\t\thdr_bitmap;\n",
    "prefixes": [
        "v4",
        "26/34"
    ]
}