get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 81766,
    "url": "http://patches.dpdk.org/api/patches/81766/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1603359758-13297-9-git-send-email-arybchenko@solarflare.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": "<1603359758-13297-9-git-send-email-arybchenko@solarflare.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1603359758-13297-9-git-send-email-arybchenko@solarflare.com",
    "date": "2020-10-22T09:42:31",
    "name": "[v2,08/14] ethdev: remove legacy TUNNEL filter type support",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "cb66323595320b2ddc8872de440dd9f5f0be9048",
    "submitter": {
        "id": 607,
        "url": "http://patches.dpdk.org/api/people/607/?format=api",
        "name": "Andrew Rybchenko",
        "email": "arybchenko@solarflare.com"
    },
    "delegate": {
        "id": 319,
        "url": "http://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/1603359758-13297-9-git-send-email-arybchenko@solarflare.com/mbox/",
    "series": [
        {
            "id": 13207,
            "url": "http://patches.dpdk.org/api/series/13207/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=13207",
            "date": "2020-10-22T09:42:23",
            "name": "ethdev: remove legacy filter API",
            "version": 2,
            "mbox": "http://patches.dpdk.org/series/13207/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/81766/comments/",
    "check": "warning",
    "checks": "http://patches.dpdk.org/api/patches/81766/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 3BA71A04DD;\n\tThu, 22 Oct 2020 11:45:46 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 0732CA99A;\n\tThu, 22 Oct 2020 11:43:28 +0200 (CEST)",
            "from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com\n [67.231.154.164]) by dpdk.org (Postfix) with ESMTP id 657E8A965\n for <dev@dpdk.org>; Thu, 22 Oct 2020 11:43:09 +0200 (CEST)",
            "from mx1-us1.ppe-hosted.com (unknown [10.110.50.143])\n by dispatch1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id\n 0F5FE20055; Thu, 22 Oct 2020 09:43:08 +0000 (UTC)",
            "from us4-mdac16-50.at1.mdlocal (unknown [10.110.50.133])\n by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id 0E4B08009B;\n Thu, 22 Oct 2020 09:43:08 +0000 (UTC)",
            "from mx1-us1.ppe-hosted.com (unknown [10.110.48.59])\n by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id\n 5F93240061;\n Thu, 22 Oct 2020 09:43:07 +0000 (UTC)",
            "from webmail.solarflare.com (uk.solarflare.com [193.34.186.16])\n (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits))\n (No client certificate requested)\n by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id\n E49C638005B;\n Thu, 22 Oct 2020 09:43:06 +0000 (UTC)",
            "from ukex01.SolarFlarecom.com (10.17.10.4) by\n ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server (TLS) id\n 15.0.1497.2; Thu, 22 Oct 2020 10:43:02 +0100",
            "from opal.uk.solarflarecom.com (10.17.10.1) by\n ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server id\n 15.0.1497.2 via Frontend Transport; Thu, 22 Oct 2020 10:43:02 +0100",
            "from ukv-loginhost.uk.solarflarecom.com\n (ukv-loginhost.uk.solarflarecom.com [10.17.10.39])\n by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id 09M9h281023283;\n Thu, 22 Oct 2020 10:43:02 +0100",
            "from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1])\n by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id AE8A61613A9;\n Thu, 22 Oct 2020 10:43:02 +0100 (BST)"
        ],
        "X-Virus-Scanned": "Proofpoint Essentials engine",
        "From": "Andrew Rybchenko <arybchenko@solarflare.com>",
        "To": "Wenzhuo Lu <wenzhuo.lu@intel.com>, Beilei Xing <beilei.xing@intel.com>,\n Bernard Iremonger <bernard.iremonger@intel.com>, Ray Kinsella\n <mdr@ashroe.eu>, Neil Horman <nhorman@tuxdriver.com>, Ajit Khaparde\n <ajit.khaparde@broadcom.com>, Somnath Kotur <somnath.kotur@broadcom.com>,\n Jeff Guo <jia.guo@intel.com>, Rasesh Mody <rmody@marvell.com>, Shahed Shaikh\n <shshaikh@marvell.com>, Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>,\n Thomas Monjalon <thomas@monjalon.net>, Ferruh Yigit <ferruh.yigit@intel.com>",
        "CC": "<dev@dpdk.org>",
        "Date": "Thu, 22 Oct 2020 10:42:31 +0100",
        "Message-ID": "<1603359758-13297-9-git-send-email-arybchenko@solarflare.com>",
        "X-Mailer": "git-send-email 1.8.3.1",
        "In-Reply-To": "<1603359758-13297-1-git-send-email-arybchenko@solarflare.com>",
        "References": "<1603030152-13451-1-git-send-email-arybchenko@solarflare.com>\n <1603359758-13297-1-git-send-email-arybchenko@solarflare.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-TM-AS-Product-Ver": "SMEX-12.5.0.1300-8.6.1012-25740.003",
        "X-TM-AS-Result": "No-4.002800-8.000000-10",
        "X-TMASE-MatchedRID": "iBiBWAF8SD4BSVElkD14Jv3HILfxLV/9eouvej40T4iDa8VjHNvcC5Wi\n xnDxF7NQZtpwUgtNqKQsH4a1ASijvYt55Ou5Qz3gSVHYMTQ1F1rcbNJY9S/K74HM7nbMo6kFyVB\n W8fUk7pPFZVju2nXaa3DlPghqPnfyYlldA0POS1IaPMGCcVm9DjFcf92WG8u/1xLW0OKX8iOGgE\n 0qc4kdzUYcVwZP3UH3OwuDnIXsWyo2jeY+Udg/IpyebS/i2xjjojQrbrPpzzoC/nuPl5P0FpGPt\n ycowxHtBSXkmB4RC2s/gv1ZJ+8wg+84LVBXtoHOF9p7X9UAWGWi8D/o42y/SlezEE205dNvufI7\n V72pGLOFaLilJliwP028v2WjpEeeBOzLkK2T9qMUaS/iLVoC5sioJQie/DjpgkEp7tXGI0p+RqG\n nUO6woPDP94xxR6lcgCxTh4uRvxhUzR/yBHQjZvgo8BKl9ae58vvksslXuLcep400rdpOCzlA9y\n XOaN4lhElS9On82DvTkirbYb1YYkPbYPqd/GaJKEnm29t9vItKRaXN2yYjHiNGK7UC7ElMK8Lfi\n wWKYyO7AyS/j01M4olSJ+Mh8wmZVnjNgtiKHBTnZxuPj9aY+wCm784gsJu4qPGqHIPGZiMeLEJm\n r7wIBvVuDsQEK9ehLFEi64+oS35yQSrBguzobE+zv2ByYSDQD6NL4tGmXzUJeMOJX8c9nGcuY4i\n x4PoKGNopF9Up6vy1m45hKm+lZPP/vTMFLhaLlTsGW3DmpUvxuhkRWK22GNpSUoaJ2MP79fGw1n\n Q95T/cxvqpeiKFcOzQ7uazkhNgtPSNURdbMHCeAiCmPx4NwJuJ+Pb8n/VxSnQ4MjwaO9cqtq5d3\n cxkNa0nWc4fHJdOb1PGoD1MPGXz2k/OREl7PNhlYZg2O01JNy1wAfOQiHzAvpLE+mvX8g==",
        "X-TM-AS-User-Approved-Sender": "Yes",
        "X-TM-AS-User-Blocked-Sender": "No",
        "X-TMASE-Result": "10--4.002800-8.000000",
        "X-TMASE-Version": "SMEX-12.5.0.1300-8.6.1012-25740.003",
        "X-MDID": "1603359787-yCDMf10Tr684",
        "X-PPE-DISP": "1603359787;yCDMf10Tr684",
        "Subject": "[dpdk-dev] [PATCH v2 08/14] ethdev: remove legacy TUNNEL filter\n\ttype support",
        "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": "Intead of TUNNEL filter RTE flow API should be used.\n\nMove corresponding defines and helper structure to ethdev\ndriver interface since it is still used by drivers internally.\n\nPreserve RTE_ETH_FILTER_TUNNEL because of usage in drivers.\n\nSigned-off-by: Andrew Rybchenko <arybchenko@solarflare.com>\nAcked-by: Ajit Khaparde <ajit.khaparde@broadcom.com>\n---\nCc: Beilei Xing <beilei.xing@intel.com>\nCc: Jeff Guo <jia.guo@intel.com>\n\nnet/i40e maintainers are encouraged to cleanup\nrte_eth_tunnel_filter_conf and rte_tunnel_iptype since\nboth are duplicated inside the driver and actually used\nin net/i40e driver only.\n\nv2:\n - cleanup testpmd user guide\n - move defines and helper structure to ethdev driver interface\n\n app/test-pmd/cmdline.c                      | 162 ------------\n doc/guides/rel_notes/deprecation.rst        |   2 +-\n doc/guides/testpmd_app_ug/testpmd_funcs.rst |  49 ----\n drivers/net/bnxt/bnxt_ethdev.c              |   4 -\n drivers/net/i40e/i40e_ethdev.c              | 210 ----------------\n drivers/net/qede/qede_filter.c              | 257 --------------------\n drivers/net/sfc/sfc_ethdev.c                |   3 -\n lib/librte_ethdev/rte_eth_ctrl.h            |  51 ----\n lib/librte_ethdev/rte_ethdev_driver.h       |  53 ++++\n 9 files changed, 54 insertions(+), 737 deletions(-)",
    "diff": "diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c\nindex d3806cef79..a416890b8d 100644\n--- a/app/test-pmd/cmdline.c\n+++ b/app/test-pmd/cmdline.c\n@@ -408,16 +408,6 @@ static void cmd_help_long_parsed(void *parsed_result,\n \t\t\t\"    Remove a vlan_id, to the set of VLAN identifiers\"\n \t\t\t\"filtered for VF(s) from port_id.\\n\\n\"\n \n-\t\t\t\"tunnel_filter add (port_id) (outer_mac) (inner_mac) (ip_addr) \"\n-\t\t\t\"(inner_vlan) (vxlan|nvgre|ipingre|vxlan-gpe) (imac-ivlan|imac-ivlan-tenid|\"\n-\t\t\t\"imac-tenid|imac|omac-imac-tenid|oip|iip) (tenant_id) (queue_id)\\n\"\n-\t\t\t\"   add a tunnel filter of a port.\\n\\n\"\n-\n-\t\t\t\"tunnel_filter rm (port_id) (outer_mac) (inner_mac) (ip_addr) \"\n-\t\t\t\"(inner_vlan) (vxlan|nvgre|ipingre|vxlan-gpe) (imac-ivlan|imac-ivlan-tenid|\"\n-\t\t\t\"imac-tenid|imac|omac-imac-tenid|oip|iip) (tenant_id) (queue_id)\\n\"\n-\t\t\t\"   remove a tunnel filter of a port.\\n\\n\"\n-\n \t\t\t\"rx_vxlan_port add (udp_port) (port_id)\\n\"\n \t\t\t\"    Add an UDP port for VXLAN packet filter on a port\\n\\n\"\n \n@@ -9195,157 +9185,6 @@ cmdline_parse_inst_t cmd_vf_rate_limit = {\n \t},\n };\n \n-/* *** ADD TUNNEL FILTER OF A PORT *** */\n-struct cmd_tunnel_filter_result {\n-\tcmdline_fixed_string_t cmd;\n-\tcmdline_fixed_string_t what;\n-\tportid_t port_id;\n-\tstruct rte_ether_addr outer_mac;\n-\tstruct rte_ether_addr inner_mac;\n-\tcmdline_ipaddr_t ip_value;\n-\tuint16_t inner_vlan;\n-\tcmdline_fixed_string_t tunnel_type;\n-\tcmdline_fixed_string_t filter_type;\n-\tuint32_t tenant_id;\n-\tuint16_t queue_num;\n-};\n-\n-static void\n-cmd_tunnel_filter_parsed(void *parsed_result,\n-\t\t\t  __rte_unused struct cmdline *cl,\n-\t\t\t  __rte_unused void *data)\n-{\n-\tstruct cmd_tunnel_filter_result *res = parsed_result;\n-\tstruct rte_eth_tunnel_filter_conf tunnel_filter_conf;\n-\tint ret = 0;\n-\n-\tmemset(&tunnel_filter_conf, 0, sizeof(tunnel_filter_conf));\n-\n-\trte_ether_addr_copy(&res->outer_mac, &tunnel_filter_conf.outer_mac);\n-\trte_ether_addr_copy(&res->inner_mac, &tunnel_filter_conf.inner_mac);\n-\ttunnel_filter_conf.inner_vlan = res->inner_vlan;\n-\n-\tif (res->ip_value.family == AF_INET) {\n-\t\ttunnel_filter_conf.ip_addr.ipv4_addr =\n-\t\t\tres->ip_value.addr.ipv4.s_addr;\n-\t\ttunnel_filter_conf.ip_type = RTE_TUNNEL_IPTYPE_IPV4;\n-\t} else {\n-\t\tmemcpy(&(tunnel_filter_conf.ip_addr.ipv6_addr),\n-\t\t\t&(res->ip_value.addr.ipv6),\n-\t\t\tsizeof(struct in6_addr));\n-\t\ttunnel_filter_conf.ip_type = RTE_TUNNEL_IPTYPE_IPV6;\n-\t}\n-\n-\tif (!strcmp(res->filter_type, \"imac-ivlan\"))\n-\t\ttunnel_filter_conf.filter_type = RTE_TUNNEL_FILTER_IMAC_IVLAN;\n-\telse if (!strcmp(res->filter_type, \"imac-ivlan-tenid\"))\n-\t\ttunnel_filter_conf.filter_type =\n-\t\t\tRTE_TUNNEL_FILTER_IMAC_IVLAN_TENID;\n-\telse if (!strcmp(res->filter_type, \"imac-tenid\"))\n-\t\ttunnel_filter_conf.filter_type = RTE_TUNNEL_FILTER_IMAC_TENID;\n-\telse if (!strcmp(res->filter_type, \"imac\"))\n-\t\ttunnel_filter_conf.filter_type = ETH_TUNNEL_FILTER_IMAC;\n-\telse if (!strcmp(res->filter_type, \"omac-imac-tenid\"))\n-\t\ttunnel_filter_conf.filter_type =\n-\t\t\tRTE_TUNNEL_FILTER_OMAC_TENID_IMAC;\n-\telse if (!strcmp(res->filter_type, \"oip\"))\n-\t\ttunnel_filter_conf.filter_type = ETH_TUNNEL_FILTER_OIP;\n-\telse if (!strcmp(res->filter_type, \"iip\"))\n-\t\ttunnel_filter_conf.filter_type = ETH_TUNNEL_FILTER_IIP;\n-\telse {\n-\t\tprintf(\"The filter type is not supported\");\n-\t\treturn;\n-\t}\n-\n-\tif (!strcmp(res->tunnel_type, \"vxlan\"))\n-\t\ttunnel_filter_conf.tunnel_type = RTE_TUNNEL_TYPE_VXLAN;\n-\telse if (!strcmp(res->tunnel_type, \"vxlan-gpe\"))\n-\t\ttunnel_filter_conf.tunnel_type = RTE_TUNNEL_TYPE_VXLAN_GPE;\n-\telse if (!strcmp(res->tunnel_type, \"nvgre\"))\n-\t\ttunnel_filter_conf.tunnel_type = RTE_TUNNEL_TYPE_NVGRE;\n-\telse if (!strcmp(res->tunnel_type, \"ipingre\"))\n-\t\ttunnel_filter_conf.tunnel_type = RTE_TUNNEL_TYPE_IP_IN_GRE;\n-\telse {\n-\t\tprintf(\"The tunnel type %s not supported.\\n\", res->tunnel_type);\n-\t\treturn;\n-\t}\n-\n-\ttunnel_filter_conf.tenant_id = res->tenant_id;\n-\ttunnel_filter_conf.queue_id = res->queue_num;\n-\tif (!strcmp(res->what, \"add\"))\n-\t\tret = rte_eth_dev_filter_ctrl(res->port_id,\n-\t\t\t\t\tRTE_ETH_FILTER_TUNNEL,\n-\t\t\t\t\tRTE_ETH_FILTER_ADD,\n-\t\t\t\t\t&tunnel_filter_conf);\n-\telse\n-\t\tret = rte_eth_dev_filter_ctrl(res->port_id,\n-\t\t\t\t\tRTE_ETH_FILTER_TUNNEL,\n-\t\t\t\t\tRTE_ETH_FILTER_DELETE,\n-\t\t\t\t\t&tunnel_filter_conf);\n-\tif (ret < 0)\n-\t\tprintf(\"cmd_tunnel_filter_parsed error: (%s)\\n\",\n-\t\t\t\tstrerror(-ret));\n-\n-}\n-cmdline_parse_token_string_t cmd_tunnel_filter_cmd =\n-\tTOKEN_STRING_INITIALIZER(struct cmd_tunnel_filter_result,\n-\tcmd, \"tunnel_filter\");\n-cmdline_parse_token_string_t cmd_tunnel_filter_what =\n-\tTOKEN_STRING_INITIALIZER(struct cmd_tunnel_filter_result,\n-\twhat, \"add#rm\");\n-cmdline_parse_token_num_t cmd_tunnel_filter_port_id =\n-\tTOKEN_NUM_INITIALIZER(struct cmd_tunnel_filter_result,\n-\tport_id, UINT16);\n-cmdline_parse_token_etheraddr_t cmd_tunnel_filter_outer_mac =\n-\tTOKEN_ETHERADDR_INITIALIZER(struct cmd_tunnel_filter_result,\n-\touter_mac);\n-cmdline_parse_token_etheraddr_t cmd_tunnel_filter_inner_mac =\n-\tTOKEN_ETHERADDR_INITIALIZER(struct cmd_tunnel_filter_result,\n-\tinner_mac);\n-cmdline_parse_token_num_t cmd_tunnel_filter_innner_vlan =\n-\tTOKEN_NUM_INITIALIZER(struct cmd_tunnel_filter_result,\n-\tinner_vlan, UINT16);\n-cmdline_parse_token_ipaddr_t cmd_tunnel_filter_ip_value =\n-\tTOKEN_IPADDR_INITIALIZER(struct cmd_tunnel_filter_result,\n-\tip_value);\n-cmdline_parse_token_string_t cmd_tunnel_filter_tunnel_type =\n-\tTOKEN_STRING_INITIALIZER(struct cmd_tunnel_filter_result,\n-\ttunnel_type, \"vxlan#nvgre#ipingre#vxlan-gpe\");\n-\n-cmdline_parse_token_string_t cmd_tunnel_filter_filter_type =\n-\tTOKEN_STRING_INITIALIZER(struct cmd_tunnel_filter_result,\n-\tfilter_type, \"oip#iip#imac-ivlan#imac-ivlan-tenid#imac-tenid#\"\n-\t\t\"imac#omac-imac-tenid\");\n-cmdline_parse_token_num_t cmd_tunnel_filter_tenant_id =\n-\tTOKEN_NUM_INITIALIZER(struct cmd_tunnel_filter_result,\n-\ttenant_id, UINT32);\n-cmdline_parse_token_num_t cmd_tunnel_filter_queue_num =\n-\tTOKEN_NUM_INITIALIZER(struct cmd_tunnel_filter_result,\n-\tqueue_num, UINT16);\n-\n-cmdline_parse_inst_t cmd_tunnel_filter = {\n-\t.f = cmd_tunnel_filter_parsed,\n-\t.data = (void *)0,\n-\t.help_str = \"tunnel_filter add|rm <port_id> <outer_mac> <inner_mac> \"\n-\t\t\"<ip> <inner_vlan> vxlan|nvgre|ipingre oip|iip|imac-ivlan|\"\n-\t\t\"imac-ivlan-tenid|imac-tenid|imac|omac-imac-tenid <tenant_id> \"\n-\t\t\"<queue_id>: Add/Rm tunnel filter of a port\",\n-\t.tokens = {\n-\t\t(void *)&cmd_tunnel_filter_cmd,\n-\t\t(void *)&cmd_tunnel_filter_what,\n-\t\t(void *)&cmd_tunnel_filter_port_id,\n-\t\t(void *)&cmd_tunnel_filter_outer_mac,\n-\t\t(void *)&cmd_tunnel_filter_inner_mac,\n-\t\t(void *)&cmd_tunnel_filter_ip_value,\n-\t\t(void *)&cmd_tunnel_filter_innner_vlan,\n-\t\t(void *)&cmd_tunnel_filter_tunnel_type,\n-\t\t(void *)&cmd_tunnel_filter_filter_type,\n-\t\t(void *)&cmd_tunnel_filter_tenant_id,\n-\t\t(void *)&cmd_tunnel_filter_queue_num,\n-\t\tNULL,\n-\t},\n-};\n-\n /* *** CONFIGURE TUNNEL UDP PORT *** */\n struct cmd_tunnel_udp_config {\n \tcmdline_fixed_string_t cmd;\n@@ -19164,7 +19003,6 @@ cmdline_parse_ctx_t main_ctx[] = {\n \t(cmdline_parse_inst_t *)&cmd_set_uc_all_hash_filter,\n \t(cmdline_parse_inst_t *)&cmd_vf_mac_addr_filter,\n \t(cmdline_parse_inst_t *)&cmd_queue_rate_limit,\n-\t(cmdline_parse_inst_t *)&cmd_tunnel_filter,\n \t(cmdline_parse_inst_t *)&cmd_tunnel_udp_config,\n \t(cmdline_parse_inst_t *)&cmd_global_config,\n \t(cmdline_parse_inst_t *)&cmd_set_mirror_mask,\ndiff --git a/doc/guides/rel_notes/deprecation.rst b/doc/guides/rel_notes/deprecation.rst\nindex d95b0e00e6..71496786c1 100644\n--- a/doc/guides/rel_notes/deprecation.rst\n+++ b/doc/guides/rel_notes/deprecation.rst\n@@ -97,7 +97,7 @@ Deprecation Notices\n \n * ethdev: the legacy filter API, including\n   ``rte_eth_dev_filter_supported()``, ``rte_eth_dev_filter_ctrl()`` as well\n-  as filter types TUNNEL, FDIR,\n+  as filter types FDIR,\n   HASH and L2_TUNNEL, is superseded by the generic flow API (rte_flow) in\n   PMDs that implement the latter.\n   The legacy API will be removed in DPDK 20.11.\ndiff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst\nindex 50c09d557b..bc375592e7 100644\n--- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst\n+++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst\n@@ -1077,55 +1077,6 @@ Remove a VLAN ID, from the set of VLAN identifiers filtered for VF(s) for port I\n \n    testpmd> rx_vlan rm (vlan_id) port (port_id) vf (vf_mask)\n \n-tunnel_filter add\n-~~~~~~~~~~~~~~~~~\n-\n-Add a tunnel filter on a port::\n-\n-   testpmd> tunnel_filter add (port_id) (outer_mac) (inner_mac) (ip_addr) \\\n-            (inner_vlan) (vxlan|nvgre|ipingre|vxlan-gpe) (imac-ivlan|imac-ivlan-tenid|\\\n-            imac-tenid|imac|omac-imac-tenid|oip|iip) (tenant_id) (queue_id)\n-\n-The available information categories are:\n-\n-* ``vxlan``: Set tunnel type as VXLAN.\n-\n-* ``nvgre``: Set tunnel type as NVGRE.\n-\n-* ``ipingre``: Set tunnel type as IP-in-GRE.\n-\n-* ``vxlan-gpe``: Set tunnel type as VXLAN-GPE\n-\n-* ``imac-ivlan``: Set filter type as Inner MAC and VLAN.\n-\n-* ``imac-ivlan-tenid``: Set filter type as Inner MAC, VLAN and tenant ID.\n-\n-* ``imac-tenid``: Set filter type as Inner MAC and tenant ID.\n-\n-* ``imac``: Set filter type as Inner MAC.\n-\n-* ``omac-imac-tenid``: Set filter type as Outer MAC, Inner MAC and tenant ID.\n-\n-* ``oip``: Set filter type as Outer IP.\n-\n-* ``iip``: Set filter type as Inner IP.\n-\n-Example::\n-\n-   testpmd> tunnel_filter add 0 68:05:CA:28:09:82 00:00:00:00:00:00 \\\n-            192.168.2.2 0 ipingre oip 1 1\n-\n-   Set an IP-in-GRE tunnel on port 0, and the filter type is Outer IP.\n-\n-tunnel_filter remove\n-~~~~~~~~~~~~~~~~~~~~\n-\n-Remove a tunnel filter on a port::\n-\n-   testpmd> tunnel_filter rm (port_id) (outer_mac) (inner_mac) (ip_addr) \\\n-            (inner_vlan) (vxlan|nvgre|ipingre|vxlan-gpe) (imac-ivlan|imac-ivlan-tenid|\\\n-            imac-tenid|imac|omac-imac-tenid|oip|iip) (tenant_id) (queue_id)\n-\n rx_vxlan_port add\n ~~~~~~~~~~~~~~~~~\n \ndiff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c\nindex 60f8b935db..e0819c1071 100644\n--- a/drivers/net/bnxt/bnxt_ethdev.c\n+++ b/drivers/net/bnxt/bnxt_ethdev.c\n@@ -3412,10 +3412,6 @@ bnxt_filter_ctrl_op(struct rte_eth_dev *dev,\n \t\treturn ret;\n \n \tswitch (filter_type) {\n-\tcase RTE_ETH_FILTER_TUNNEL:\n-\t\tPMD_DRV_LOG(ERR,\n-\t\t\t\"filter type: %d: To be implemented\\n\", filter_type);\n-\t\tbreak;\n \tcase RTE_ETH_FILTER_FDIR:\n \t\tret = bnxt_fdir_filter(dev, filter_op, arg);\n \t\tbreak;\ndiff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c\nindex aa87ad8dd5..2badd024f1 100644\n--- a/drivers/net/i40e/i40e_ethdev.c\n+++ b/drivers/net/i40e/i40e_ethdev.c\n@@ -7863,145 +7863,6 @@ i40e_sw_tunnel_filter_del(struct i40e_pf *pf,\n \treturn 0;\n }\n \n-int\n-i40e_dev_tunnel_filter_set(struct i40e_pf *pf,\n-\t\t\tstruct rte_eth_tunnel_filter_conf *tunnel_filter,\n-\t\t\tuint8_t add)\n-{\n-\tuint16_t ip_type;\n-\tuint32_t ipv4_addr, ipv4_addr_le;\n-\tuint8_t i, tun_type = 0;\n-\t/* internal varialbe to convert ipv6 byte order */\n-\tuint32_t convert_ipv6[4];\n-\tint val, ret = 0;\n-\tstruct i40e_hw *hw = I40E_PF_TO_HW(pf);\n-\tstruct i40e_vsi *vsi = pf->main_vsi;\n-\tstruct i40e_aqc_cloud_filters_element_bb *cld_filter;\n-\tstruct i40e_aqc_cloud_filters_element_bb *pfilter;\n-\tstruct i40e_tunnel_rule *tunnel_rule = &pf->tunnel;\n-\tstruct i40e_tunnel_filter *tunnel, *node;\n-\tstruct i40e_tunnel_filter check_filter; /* Check if filter exists */\n-\n-\tcld_filter = rte_zmalloc(\"tunnel_filter\",\n-\t\t\t sizeof(struct i40e_aqc_add_rm_cloud_filt_elem_ext),\n-\t0);\n-\n-\tif (NULL == cld_filter) {\n-\t\tPMD_DRV_LOG(ERR, \"Failed to alloc memory.\");\n-\t\treturn -ENOMEM;\n-\t}\n-\tpfilter = cld_filter;\n-\n-\trte_ether_addr_copy(&tunnel_filter->outer_mac,\n-\t\t\t(struct rte_ether_addr *)&pfilter->element.outer_mac);\n-\trte_ether_addr_copy(&tunnel_filter->inner_mac,\n-\t\t\t(struct rte_ether_addr *)&pfilter->element.inner_mac);\n-\n-\tpfilter->element.inner_vlan =\n-\t\trte_cpu_to_le_16(tunnel_filter->inner_vlan);\n-\tif (tunnel_filter->ip_type == RTE_TUNNEL_IPTYPE_IPV4) {\n-\t\tip_type = I40E_AQC_ADD_CLOUD_FLAGS_IPV4;\n-\t\tipv4_addr = rte_be_to_cpu_32(tunnel_filter->ip_addr.ipv4_addr);\n-\t\tipv4_addr_le = rte_cpu_to_le_32(ipv4_addr);\n-\t\trte_memcpy(&pfilter->element.ipaddr.v4.data,\n-\t\t\t\t&ipv4_addr_le,\n-\t\t\t\tsizeof(pfilter->element.ipaddr.v4.data));\n-\t} else {\n-\t\tip_type = I40E_AQC_ADD_CLOUD_FLAGS_IPV6;\n-\t\tfor (i = 0; i < 4; i++) {\n-\t\t\tconvert_ipv6[i] =\n-\t\t\trte_cpu_to_le_32(rte_be_to_cpu_32(tunnel_filter->ip_addr.ipv6_addr[i]));\n-\t\t}\n-\t\trte_memcpy(&pfilter->element.ipaddr.v6.data,\n-\t\t\t   &convert_ipv6,\n-\t\t\t   sizeof(pfilter->element.ipaddr.v6.data));\n-\t}\n-\n-\t/* check tunneled type */\n-\tswitch (tunnel_filter->tunnel_type) {\n-\tcase RTE_TUNNEL_TYPE_VXLAN:\n-\t\ttun_type = I40E_AQC_ADD_CLOUD_TNL_TYPE_VXLAN;\n-\t\tbreak;\n-\tcase RTE_TUNNEL_TYPE_NVGRE:\n-\t\ttun_type = I40E_AQC_ADD_CLOUD_TNL_TYPE_NVGRE_OMAC;\n-\t\tbreak;\n-\tcase RTE_TUNNEL_TYPE_IP_IN_GRE:\n-\t\ttun_type = I40E_AQC_ADD_CLOUD_TNL_TYPE_IP;\n-\t\tbreak;\n-\tcase RTE_TUNNEL_TYPE_VXLAN_GPE:\n-\t\ttun_type = I40E_AQC_ADD_CLOUD_TNL_TYPE_VXLAN_GPE;\n-\t\tbreak;\n-\tdefault:\n-\t\t/* Other tunnel types is not supported. */\n-\t\tPMD_DRV_LOG(ERR, \"tunnel type is not supported.\");\n-\t\trte_free(cld_filter);\n-\t\treturn -EINVAL;\n-\t}\n-\n-\tval = i40e_dev_get_filter_type(tunnel_filter->filter_type,\n-\t\t\t\t       &pfilter->element.flags);\n-\tif (val < 0) {\n-\t\trte_free(cld_filter);\n-\t\treturn -EINVAL;\n-\t}\n-\n-\tpfilter->element.flags |= rte_cpu_to_le_16(\n-\t\tI40E_AQC_ADD_CLOUD_FLAGS_TO_QUEUE |\n-\t\tip_type | (tun_type << I40E_AQC_ADD_CLOUD_TNL_TYPE_SHIFT));\n-\tpfilter->element.tenant_id = rte_cpu_to_le_32(tunnel_filter->tenant_id);\n-\tpfilter->element.queue_number =\n-\t\trte_cpu_to_le_16(tunnel_filter->queue_id);\n-\n-\t/* Check if there is the filter in SW list */\n-\tmemset(&check_filter, 0, sizeof(check_filter));\n-\ti40e_tunnel_filter_convert(cld_filter, &check_filter);\n-\tnode = i40e_sw_tunnel_filter_lookup(tunnel_rule, &check_filter.input);\n-\tif (add && node) {\n-\t\tPMD_DRV_LOG(ERR, \"Conflict with existing tunnel rules!\");\n-\t\trte_free(cld_filter);\n-\t\treturn -EINVAL;\n-\t}\n-\n-\tif (!add && !node) {\n-\t\tPMD_DRV_LOG(ERR, \"There's no corresponding tunnel filter!\");\n-\t\trte_free(cld_filter);\n-\t\treturn -EINVAL;\n-\t}\n-\n-\tif (add) {\n-\t\tret = i40e_aq_add_cloud_filters(hw,\n-\t\t\t\t\tvsi->seid, &cld_filter->element, 1);\n-\t\tif (ret < 0) {\n-\t\t\tPMD_DRV_LOG(ERR, \"Failed to add a tunnel filter.\");\n-\t\t\trte_free(cld_filter);\n-\t\t\treturn -ENOTSUP;\n-\t\t}\n-\t\ttunnel = rte_zmalloc(\"tunnel_filter\", sizeof(*tunnel), 0);\n-\t\tif (tunnel == NULL) {\n-\t\t\tPMD_DRV_LOG(ERR, \"Failed to alloc memory.\");\n-\t\t\trte_free(cld_filter);\n-\t\t\treturn -ENOMEM;\n-\t\t}\n-\n-\t\trte_memcpy(tunnel, &check_filter, sizeof(check_filter));\n-\t\tret = i40e_sw_tunnel_filter_insert(pf, tunnel);\n-\t\tif (ret < 0)\n-\t\t\trte_free(tunnel);\n-\t} else {\n-\t\tret = i40e_aq_rem_cloud_filters(hw, vsi->seid,\n-\t\t\t\t\t\t   &cld_filter->element, 1);\n-\t\tif (ret < 0) {\n-\t\t\tPMD_DRV_LOG(ERR, \"Failed to delete a tunnel filter.\");\n-\t\t\trte_free(cld_filter);\n-\t\t\treturn -ENOTSUP;\n-\t\t}\n-\t\tret = i40e_sw_tunnel_filter_del(pf, &node->input);\n-\t}\n-\n-\trte_free(cld_filter);\n-\treturn ret;\n-}\n-\n #define I40E_AQC_REPLACE_CLOUD_CMD_INPUT_TR_WORD0 0x48\n #define I40E_TR_VXLAN_GRE_KEY_MASK\t\t0x4\n #define I40E_TR_GENEVE_KEY_MASK\t\t\t0x8\n@@ -9004,40 +8865,6 @@ i40e_pf_config_rss(struct i40e_pf *pf)\n \treturn i40e_hw_rss_hash_set(pf, &rss_conf);\n }\n \n-static int\n-i40e_tunnel_filter_param_check(struct i40e_pf *pf,\n-\t\t\t       struct rte_eth_tunnel_filter_conf *filter)\n-{\n-\tif (pf == NULL || filter == NULL) {\n-\t\tPMD_DRV_LOG(ERR, \"Invalid parameter\");\n-\t\treturn -EINVAL;\n-\t}\n-\n-\tif (filter->queue_id >= pf->dev_data->nb_rx_queues) {\n-\t\tPMD_DRV_LOG(ERR, \"Invalid queue ID\");\n-\t\treturn -EINVAL;\n-\t}\n-\n-\tif (filter->inner_vlan > RTE_ETHER_MAX_VLAN_ID) {\n-\t\tPMD_DRV_LOG(ERR, \"Invalid inner VLAN ID\");\n-\t\treturn -EINVAL;\n-\t}\n-\n-\tif ((filter->filter_type & ETH_TUNNEL_FILTER_OMAC) &&\n-\t\t(rte_is_zero_ether_addr(&filter->outer_mac))) {\n-\t\tPMD_DRV_LOG(ERR, \"Cannot add NULL outer MAC address\");\n-\t\treturn -EINVAL;\n-\t}\n-\n-\tif ((filter->filter_type & ETH_TUNNEL_FILTER_IMAC) &&\n-\t\t(rte_is_zero_ether_addr(&filter->inner_mac))) {\n-\t\tPMD_DRV_LOG(ERR, \"Cannot add NULL inner MAC address\");\n-\t\treturn -EINVAL;\n-\t}\n-\n-\treturn 0;\n-}\n-\n #define I40E_GL_PRS_FVBM_MSK_ENA 0x80000000\n #define I40E_GL_PRS_FVBM(_i)     (0x00269760 + ((_i) * 4))\n int\n@@ -9123,40 +8950,6 @@ i40e_filter_ctrl_global_config(struct rte_eth_dev *dev,\n \treturn ret;\n }\n \n-static int\n-i40e_tunnel_filter_handle(struct rte_eth_dev *dev,\n-\t\t\t  enum rte_filter_op filter_op,\n-\t\t\t  void *arg)\n-{\n-\tstruct rte_eth_tunnel_filter_conf *filter;\n-\tstruct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private);\n-\tint ret = I40E_SUCCESS;\n-\n-\tfilter = (struct rte_eth_tunnel_filter_conf *)(arg);\n-\n-\tif (i40e_tunnel_filter_param_check(pf, filter) < 0)\n-\t\treturn I40E_ERR_PARAM;\n-\n-\tswitch (filter_op) {\n-\tcase RTE_ETH_FILTER_NOP:\n-\t\tif (!(pf->flags & I40E_FLAG_VXLAN))\n-\t\t\tret = I40E_NOT_SUPPORTED;\n-\t\tbreak;\n-\tcase RTE_ETH_FILTER_ADD:\n-\t\tret = i40e_dev_tunnel_filter_set(pf, filter, 1);\n-\t\tbreak;\n-\tcase RTE_ETH_FILTER_DELETE:\n-\t\tret = i40e_dev_tunnel_filter_set(pf, filter, 0);\n-\t\tbreak;\n-\tdefault:\n-\t\tPMD_DRV_LOG(ERR, \"unknown operation %u\", filter_op);\n-\t\tret = I40E_ERR_PARAM;\n-\t\tbreak;\n-\t}\n-\n-\treturn ret;\n-}\n-\n /* Get the symmetric hash enable configurations per port */\n static void\n i40e_get_symmetric_hash_enable_per_port(struct i40e_hw *hw, uint8_t *enable)\n@@ -10465,9 +10258,6 @@ i40e_dev_filter_ctrl(struct rte_eth_dev *dev,\n \tcase RTE_ETH_FILTER_HASH:\n \t\tret = i40e_hash_filter_ctrl(dev, filter_op, arg);\n \t\tbreak;\n-\tcase RTE_ETH_FILTER_TUNNEL:\n-\t\tret = i40e_tunnel_filter_handle(dev, filter_op, arg);\n-\t\tbreak;\n \tcase RTE_ETH_FILTER_FDIR:\n \t\tret = i40e_fdir_ctrl_func(dev, filter_op, arg);\n \t\tbreak;\ndiff --git a/drivers/net/qede/qede_filter.c b/drivers/net/qede/qede_filter.c\nindex 0c47407edd..ba4e4d9e16 100644\n--- a/drivers/net/qede/qede_filter.c\n+++ b/drivers/net/qede/qede_filter.c\n@@ -696,36 +696,6 @@ qede_geneve_enable(struct rte_eth_dev *eth_dev, uint8_t clss,\n \treturn rc;\n }\n \n-static int\n-qede_ipgre_enable(struct rte_eth_dev *eth_dev, uint8_t clss,\n-\t\t  bool enable)\n-{\n-\tstruct qede_dev *qdev = QEDE_INIT_QDEV(eth_dev);\n-\tstruct ecore_dev *edev = QEDE_INIT_EDEV(qdev);\n-\tenum _ecore_status_t rc = ECORE_INVAL;\n-\tstruct ecore_tunnel_info tunn;\n-\n-\tmemset(&tunn, 0, sizeof(struct ecore_tunnel_info));\n-\ttunn.ip_gre.b_update_mode = true;\n-\ttunn.ip_gre.b_mode_enabled = enable;\n-\ttunn.ip_gre.tun_cls = clss;\n-\ttunn.ip_gre.tun_cls = clss;\n-\ttunn.b_update_rx_cls = true;\n-\ttunn.b_update_tx_cls = true;\n-\n-\trc = qede_tunnel_update(qdev, &tunn);\n-\tif (rc == ECORE_SUCCESS) {\n-\t\tqdev->ipgre.enable = enable;\n-\t\tDP_INFO(edev, \"IPGRE is %s\\n\",\n-\t\t\tenable ? \"enabled\" : \"disabled\");\n-\t} else {\n-\t\tDP_ERR(edev, \"Failed to update tunn_clss %u\\n\",\n-\t\t       clss);\n-\t}\n-\n-\treturn rc;\n-}\n-\n int\n qede_udp_dst_port_del(struct rte_eth_dev *eth_dev,\n \t\t      struct rte_eth_udp_tunnel *tunnel_udp)\n@@ -902,210 +872,6 @@ qede_udp_dst_port_add(struct rte_eth_dev *eth_dev,\n \treturn 0;\n }\n \n-static void qede_get_ecore_tunn_params(uint32_t filter, uint32_t *type,\n-\t\t\t\t       uint32_t *clss, char *str)\n-{\n-\tuint16_t j;\n-\t*clss = MAX_ECORE_TUNN_CLSS;\n-\n-\tfor (j = 0; j < RTE_DIM(qede_tunn_types); j++) {\n-\t\tif (filter == qede_tunn_types[j].rte_filter_type) {\n-\t\t\t*type = qede_tunn_types[j].qede_type;\n-\t\t\t*clss = qede_tunn_types[j].qede_tunn_clss;\n-\t\t\tstrcpy(str, qede_tunn_types[j].string);\n-\t\t\treturn;\n-\t\t}\n-\t}\n-}\n-\n-static int\n-qede_set_ucast_tunn_cmn_param(struct ecore_filter_ucast *ucast,\n-\t\t\t      const struct rte_eth_tunnel_filter_conf *conf,\n-\t\t\t      uint32_t type)\n-{\n-\t/* Init commmon ucast params first */\n-\tqede_set_ucast_cmn_params(ucast);\n-\n-\t/* Copy out the required fields based on classification type */\n-\tucast->type = type;\n-\n-\tswitch (type) {\n-\tcase ECORE_FILTER_VNI:\n-\t\tucast->vni = conf->tenant_id;\n-\tbreak;\n-\tcase ECORE_FILTER_INNER_VLAN:\n-\t\tucast->vlan = conf->inner_vlan;\n-\tbreak;\n-\tcase ECORE_FILTER_MAC:\n-\t\tmemcpy(ucast->mac, conf->outer_mac.addr_bytes,\n-\t\t       RTE_ETHER_ADDR_LEN);\n-\tbreak;\n-\tcase ECORE_FILTER_INNER_MAC:\n-\t\tmemcpy(ucast->mac, conf->inner_mac.addr_bytes,\n-\t\t       RTE_ETHER_ADDR_LEN);\n-\tbreak;\n-\tcase ECORE_FILTER_MAC_VNI_PAIR:\n-\t\tmemcpy(ucast->mac, conf->outer_mac.addr_bytes,\n-\t\t\tRTE_ETHER_ADDR_LEN);\n-\t\tucast->vni = conf->tenant_id;\n-\tbreak;\n-\tcase ECORE_FILTER_INNER_MAC_VNI_PAIR:\n-\t\tmemcpy(ucast->mac, conf->inner_mac.addr_bytes,\n-\t\t\tRTE_ETHER_ADDR_LEN);\n-\t\tucast->vni = conf->tenant_id;\n-\tbreak;\n-\tcase ECORE_FILTER_INNER_PAIR:\n-\t\tmemcpy(ucast->mac, conf->inner_mac.addr_bytes,\n-\t\t\tRTE_ETHER_ADDR_LEN);\n-\t\tucast->vlan = conf->inner_vlan;\n-\tbreak;\n-\tdefault:\n-\t\treturn -EINVAL;\n-\t}\n-\n-\treturn ECORE_SUCCESS;\n-}\n-\n-static int\n-_qede_tunn_filter_config(struct rte_eth_dev *eth_dev,\n-\t\t\t const struct rte_eth_tunnel_filter_conf *conf,\n-\t\t\t __rte_unused enum rte_filter_op filter_op,\n-\t\t\t enum ecore_tunn_clss *clss,\n-\t\t\t bool add)\n-{\n-\tstruct qede_dev *qdev = QEDE_INIT_QDEV(eth_dev);\n-\tstruct ecore_dev *edev = QEDE_INIT_EDEV(qdev);\n-\tstruct ecore_filter_ucast ucast = {0};\n-\tenum ecore_filter_ucast_type type;\n-\tuint16_t filter_type = 0;\n-\tchar str[80];\n-\tint rc;\n-\n-\tfilter_type = conf->filter_type;\n-\t/* Determine if the given filter classification is supported */\n-\tqede_get_ecore_tunn_params(filter_type, &type, clss, str);\n-\tif (*clss == MAX_ECORE_TUNN_CLSS) {\n-\t\tDP_ERR(edev, \"Unsupported filter type\\n\");\n-\t\treturn -EINVAL;\n-\t}\n-\t/* Init tunnel ucast params */\n-\trc = qede_set_ucast_tunn_cmn_param(&ucast, conf, type);\n-\tif (rc != ECORE_SUCCESS) {\n-\t\tDP_ERR(edev, \"Unsupported Tunnel filter type 0x%x\\n\",\n-\t\tconf->filter_type);\n-\t\treturn rc;\n-\t}\n-\tDP_INFO(edev, \"Rule: \\\"%s\\\", op %d, type 0x%x\\n\",\n-\t\tstr, filter_op, ucast.type);\n-\n-\tucast.opcode = add ? ECORE_FILTER_ADD : ECORE_FILTER_REMOVE;\n-\n-\t/* Skip MAC/VLAN if filter is based on VNI */\n-\tif (!(filter_type & ETH_TUNNEL_FILTER_TENID)) {\n-\t\trc = qede_mac_int_ops(eth_dev, &ucast, add);\n-\t\tif (rc == 0 && add) {\n-\t\t\t/* Enable accept anyvlan */\n-\t\t\tqede_config_accept_any_vlan(qdev, true);\n-\t\t}\n-\t} else {\n-\t\trc = qede_ucast_filter(eth_dev, &ucast, add);\n-\t\tif (rc == 0)\n-\t\t\trc = ecore_filter_ucast_cmd(edev, &ucast,\n-\t\t\t\t\t    ECORE_SPQ_MODE_CB, NULL);\n-\t}\n-\n-\treturn rc;\n-}\n-\n-static int\n-qede_tunn_enable(struct rte_eth_dev *eth_dev, uint8_t clss,\n-\t\t enum rte_eth_tunnel_type tunn_type, bool enable)\n-{\n-\tint rc = -EINVAL;\n-\n-\tswitch (tunn_type) {\n-\tcase RTE_TUNNEL_TYPE_VXLAN:\n-\t\trc = qede_vxlan_enable(eth_dev, clss, enable);\n-\t\tbreak;\n-\tcase RTE_TUNNEL_TYPE_GENEVE:\n-\t\trc = qede_geneve_enable(eth_dev, clss, enable);\n-\t\tbreak;\n-\tcase RTE_TUNNEL_TYPE_IP_IN_GRE:\n-\t\trc = qede_ipgre_enable(eth_dev, clss, enable);\n-\t\tbreak;\n-\tdefault:\n-\t\trc = -EINVAL;\n-\t\tbreak;\n-\t}\n-\n-\treturn rc;\n-}\n-\n-static int\n-qede_tunn_filter_config(struct rte_eth_dev *eth_dev,\n-\t\t\tenum rte_filter_op filter_op,\n-\t\t\tconst struct rte_eth_tunnel_filter_conf *conf)\n-{\n-\tstruct qede_dev *qdev = QEDE_INIT_QDEV(eth_dev);\n-\tstruct ecore_dev *edev = QEDE_INIT_EDEV(qdev);\n-\tenum ecore_tunn_clss clss = MAX_ECORE_TUNN_CLSS;\n-\tbool add;\n-\tint rc;\n-\n-\tPMD_INIT_FUNC_TRACE(edev);\n-\n-\tswitch (filter_op) {\n-\tcase RTE_ETH_FILTER_ADD:\n-\t\tadd = true;\n-\t\tbreak;\n-\tcase RTE_ETH_FILTER_DELETE:\n-\t\tadd = false;\n-\t\tbreak;\n-\tdefault:\n-\t\tDP_ERR(edev, \"Unsupported operation %d\\n\", filter_op);\n-\t\treturn -EINVAL;\n-\t}\n-\n-\tif (IS_VF(edev))\n-\t\treturn qede_tunn_enable(eth_dev,\n-\t\t\t\t\tECORE_TUNN_CLSS_MAC_VLAN,\n-\t\t\t\t\tconf->tunnel_type, add);\n-\n-\trc = _qede_tunn_filter_config(eth_dev, conf, filter_op, &clss, add);\n-\tif (rc != ECORE_SUCCESS)\n-\t\treturn rc;\n-\n-\tif (add) {\n-\t\tif (conf->tunnel_type == RTE_TUNNEL_TYPE_VXLAN) {\n-\t\t\tqdev->vxlan.num_filters++;\n-\t\t\tqdev->vxlan.filter_type = conf->filter_type;\n-\t\t} else { /* GENEVE */\n-\t\t\tqdev->geneve.num_filters++;\n-\t\t\tqdev->geneve.filter_type = conf->filter_type;\n-\t\t}\n-\n-\t\tif (!qdev->vxlan.enable || !qdev->geneve.enable ||\n-\t\t    !qdev->ipgre.enable)\n-\t\t\treturn qede_tunn_enable(eth_dev, clss,\n-\t\t\t\t\t\tconf->tunnel_type,\n-\t\t\t\t\t\ttrue);\n-\t} else {\n-\t\tif (conf->tunnel_type == RTE_TUNNEL_TYPE_VXLAN)\n-\t\t\tqdev->vxlan.num_filters--;\n-\t\telse /*GENEVE*/\n-\t\t\tqdev->geneve.num_filters--;\n-\n-\t\t/* Disable VXLAN if VXLAN filters become 0 */\n-\t\tif (qdev->vxlan.num_filters == 0 ||\n-\t\t    qdev->geneve.num_filters == 0)\n-\t\t\treturn qede_tunn_enable(eth_dev, clss,\n-\t\t\t\t\t\tconf->tunnel_type,\n-\t\t\t\t\t\tfalse);\n-\t}\n-\n-\treturn 0;\n-}\n-\n static int\n qede_flow_validate_attr(__rte_unused struct rte_eth_dev *dev,\n \t\t\tconst struct rte_flow_attr *attr,\n@@ -1460,31 +1226,8 @@ int qede_dev_filter_ctrl(struct rte_eth_dev *eth_dev,\n {\n \tstruct qede_dev *qdev = QEDE_INIT_QDEV(eth_dev);\n \tstruct ecore_dev *edev = QEDE_INIT_EDEV(qdev);\n-\tstruct rte_eth_tunnel_filter_conf *filter_conf =\n-\t\t\t(struct rte_eth_tunnel_filter_conf *)arg;\n \n \tswitch (filter_type) {\n-\tcase RTE_ETH_FILTER_TUNNEL:\n-\t\tswitch (filter_conf->tunnel_type) {\n-\t\tcase RTE_TUNNEL_TYPE_VXLAN:\n-\t\tcase RTE_TUNNEL_TYPE_GENEVE:\n-\t\tcase RTE_TUNNEL_TYPE_IP_IN_GRE:\n-\t\t\tDP_INFO(edev,\n-\t\t\t\t\"Packet steering to the specified Rx queue\"\n-\t\t\t\t\" is not supported with UDP tunneling\");\n-\t\t\treturn(qede_tunn_filter_config(eth_dev, filter_op,\n-\t\t\t\t\t\t      filter_conf));\n-\t\tcase RTE_TUNNEL_TYPE_TEREDO:\n-\t\tcase RTE_TUNNEL_TYPE_NVGRE:\n-\t\tcase RTE_L2_TUNNEL_TYPE_E_TAG:\n-\t\t\tDP_ERR(edev, \"Unsupported tunnel type %d\\n\",\n-\t\t\t\tfilter_conf->tunnel_type);\n-\t\t\treturn -EINVAL;\n-\t\tcase RTE_TUNNEL_TYPE_NONE:\n-\t\tdefault:\n-\t\t\treturn 0;\n-\t\t}\n-\t\tbreak;\n \tcase RTE_ETH_FILTER_FDIR:\n \t\treturn qede_fdir_filter_conf(eth_dev, filter_op, arg);\n \tcase RTE_ETH_FILTER_GENERIC:\ndiff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c\nindex d779453923..69e8c93ffa 100644\n--- a/drivers/net/sfc/sfc_ethdev.c\n+++ b/drivers/net/sfc/sfc_ethdev.c\n@@ -1755,9 +1755,6 @@ sfc_dev_filter_ctrl(struct rte_eth_dev *dev, enum rte_filter_type filter_type,\n \tcase RTE_ETH_FILTER_NONE:\n \t\tsfc_err(sa, \"Global filters configuration not supported\");\n \t\tbreak;\n-\tcase RTE_ETH_FILTER_TUNNEL:\n-\t\tsfc_err(sa, \"Tunnel filters not supported\");\n-\t\tbreak;\n \tcase RTE_ETH_FILTER_FDIR:\n \t\tsfc_err(sa, \"Flow Director filters not supported\");\n \t\tbreak;\ndiff --git a/lib/librte_ethdev/rte_eth_ctrl.h b/lib/librte_ethdev/rte_eth_ctrl.h\nindex b4cc163e3e..10b176f39e 100644\n--- a/lib/librte_ethdev/rte_eth_ctrl.h\n+++ b/lib/librte_ethdev/rte_eth_ctrl.h\n@@ -105,57 +105,6 @@ struct rte_eth_ntuple_filter {\n \tuint16_t queue;          /**< Queue assigned to when match*/\n };\n \n-/**\n- * filter type of tunneling packet\n- */\n-#define ETH_TUNNEL_FILTER_OMAC  0x01 /**< filter by outer MAC addr */\n-#define ETH_TUNNEL_FILTER_OIP   0x02 /**< filter by outer IP Addr */\n-#define ETH_TUNNEL_FILTER_TENID 0x04 /**< filter by tenant ID */\n-#define ETH_TUNNEL_FILTER_IMAC  0x08 /**< filter by inner MAC addr */\n-#define ETH_TUNNEL_FILTER_IVLAN 0x10 /**< filter by inner VLAN ID */\n-#define ETH_TUNNEL_FILTER_IIP   0x20 /**< filter by inner IP addr */\n-\n-#define RTE_TUNNEL_FILTER_IMAC_IVLAN (ETH_TUNNEL_FILTER_IMAC | \\\n-\t\t\t\t\tETH_TUNNEL_FILTER_IVLAN)\n-#define RTE_TUNNEL_FILTER_IMAC_IVLAN_TENID (ETH_TUNNEL_FILTER_IMAC | \\\n-\t\t\t\t\tETH_TUNNEL_FILTER_IVLAN | \\\n-\t\t\t\t\tETH_TUNNEL_FILTER_TENID)\n-#define RTE_TUNNEL_FILTER_IMAC_TENID (ETH_TUNNEL_FILTER_IMAC | \\\n-\t\t\t\t\tETH_TUNNEL_FILTER_TENID)\n-#define RTE_TUNNEL_FILTER_OMAC_TENID_IMAC (ETH_TUNNEL_FILTER_OMAC | \\\n-\t\t\t\t\tETH_TUNNEL_FILTER_TENID | \\\n-\t\t\t\t\tETH_TUNNEL_FILTER_IMAC)\n-\n-/**\n- *  Select IPv4 or IPv6 for tunnel filters.\n- */\n-enum rte_tunnel_iptype {\n-\tRTE_TUNNEL_IPTYPE_IPV4 = 0, /**< IPv4. */\n-\tRTE_TUNNEL_IPTYPE_IPV6,     /**< IPv6. */\n-};\n-\n-/**\n- * Tunneling Packet filter configuration.\n- */\n-struct rte_eth_tunnel_filter_conf {\n-\tstruct rte_ether_addr outer_mac;    /**< Outer MAC address to match. */\n-\tstruct rte_ether_addr inner_mac;    /**< Inner MAC address to match. */\n-\tuint16_t inner_vlan;            /**< Inner VLAN to match. */\n-\tenum rte_tunnel_iptype ip_type; /**< IP address type. */\n-\t/** Outer destination IP address to match if ETH_TUNNEL_FILTER_OIP\n-\t    is set in filter_type, or inner destination IP address to match\n-\t    if ETH_TUNNEL_FILTER_IIP is set in filter_type . */\n-\tunion {\n-\t\tuint32_t ipv4_addr;     /**< IPv4 address in big endian. */\n-\t\tuint32_t ipv6_addr[4];  /**< IPv6 address in big endian. */\n-\t} ip_addr;\n-\t/** Flags from ETH_TUNNEL_FILTER_XX - see above. */\n-\tuint16_t filter_type;\n-\tenum rte_eth_tunnel_type tunnel_type; /**< Tunnel Type. */\n-\tuint32_t tenant_id;     /**< Tenant ID to match. VNI, GRE key... */\n-\tuint16_t queue_id;      /**< Queue assigned to if match. */\n-};\n-\n /**\n  * Global eth device configuration type.\n  */\ndiff --git a/lib/librte_ethdev/rte_ethdev_driver.h b/lib/librte_ethdev/rte_ethdev_driver.h\nindex 436e7ead9c..7a54f0c81b 100644\n--- a/lib/librte_ethdev/rte_ethdev_driver.h\n+++ b/lib/librte_ethdev/rte_ethdev_driver.h\n@@ -1375,6 +1375,59 @@ struct rte_eth_syn_filter {\n \tuint16_t queue;      /**< Queue assigned to when match */\n };\n \n+/**\n+ * filter type of tunneling packet\n+ */\n+#define ETH_TUNNEL_FILTER_OMAC  0x01 /**< filter by outer MAC addr */\n+#define ETH_TUNNEL_FILTER_OIP   0x02 /**< filter by outer IP Addr */\n+#define ETH_TUNNEL_FILTER_TENID 0x04 /**< filter by tenant ID */\n+#define ETH_TUNNEL_FILTER_IMAC  0x08 /**< filter by inner MAC addr */\n+#define ETH_TUNNEL_FILTER_IVLAN 0x10 /**< filter by inner VLAN ID */\n+#define ETH_TUNNEL_FILTER_IIP   0x20 /**< filter by inner IP addr */\n+\n+#define RTE_TUNNEL_FILTER_IMAC_IVLAN (ETH_TUNNEL_FILTER_IMAC | \\\n+\t\t\t\t\tETH_TUNNEL_FILTER_IVLAN)\n+#define RTE_TUNNEL_FILTER_IMAC_IVLAN_TENID (ETH_TUNNEL_FILTER_IMAC | \\\n+\t\t\t\t\tETH_TUNNEL_FILTER_IVLAN | \\\n+\t\t\t\t\tETH_TUNNEL_FILTER_TENID)\n+#define RTE_TUNNEL_FILTER_IMAC_TENID (ETH_TUNNEL_FILTER_IMAC | \\\n+\t\t\t\t\tETH_TUNNEL_FILTER_TENID)\n+#define RTE_TUNNEL_FILTER_OMAC_TENID_IMAC (ETH_TUNNEL_FILTER_OMAC | \\\n+\t\t\t\t\tETH_TUNNEL_FILTER_TENID | \\\n+\t\t\t\t\tETH_TUNNEL_FILTER_IMAC)\n+\n+/**\n+ *  Select IPv4 or IPv6 for tunnel filters.\n+ */\n+enum rte_tunnel_iptype {\n+\tRTE_TUNNEL_IPTYPE_IPV4 = 0, /**< IPv4. */\n+\tRTE_TUNNEL_IPTYPE_IPV6,     /**< IPv6. */\n+};\n+\n+/**\n+ * Tunneling Packet filter configuration.\n+ */\n+struct rte_eth_tunnel_filter_conf {\n+\tstruct rte_ether_addr outer_mac;    /**< Outer MAC address to match. */\n+\tstruct rte_ether_addr inner_mac;    /**< Inner MAC address to match. */\n+\tuint16_t inner_vlan;            /**< Inner VLAN to match. */\n+\tenum rte_tunnel_iptype ip_type; /**< IP address type. */\n+\t/**\n+\t * Outer destination IP address to match if ETH_TUNNEL_FILTER_OIP\n+\t * is set in filter_type, or inner destination IP address to match\n+\t * if ETH_TUNNEL_FILTER_IIP is set in filter_type.\n+\t */\n+\tunion {\n+\t\tuint32_t ipv4_addr;     /**< IPv4 address in big endian. */\n+\t\tuint32_t ipv6_addr[4];  /**< IPv6 address in big endian. */\n+\t} ip_addr;\n+\t/** Flags from ETH_TUNNEL_FILTER_XX - see above. */\n+\tuint16_t filter_type;\n+\tenum rte_eth_tunnel_type tunnel_type; /**< Tunnel Type. */\n+\tuint32_t tenant_id;     /**< Tenant ID to match. VNI, GRE key... */\n+\tuint16_t queue_id;      /**< Queue assigned to if match. */\n+};\n+\n #ifdef __cplusplus\n }\n #endif\n",
    "prefixes": [
        "v2",
        "08/14"
    ]
}