get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 81761,
    "url": "http://patches.dpdk.org/api/patches/81761/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1603359758-13297-4-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-4-git-send-email-arybchenko@solarflare.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1603359758-13297-4-git-send-email-arybchenko@solarflare.com",
    "date": "2020-10-22T09:42:26",
    "name": "[v2,03/14] ethdev: remove legacy EtherType filter type support",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "c956a0990fb7f7a31c3b5a95d86f7df7787c2ad9",
    "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-4-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/81761/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/81761/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 0A4D6A04DD;\n\tThu, 22 Oct 2020 11:44:02 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id E2F60A978;\n\tThu, 22 Oct 2020 11:43:13 +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 EA861A961\n for <dev@dpdk.org>; Thu, 22 Oct 2020 11:43:04 +0200 (CEST)",
            "from mx1-us1.ppe-hosted.com (unknown [10.110.50.144])\n by dispatch1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id\n 8BD3B20054; Thu, 22 Oct 2020 09:43:03 +0000 (UTC)",
            "from us4-mdac16-6.at1.mdlocal (unknown [10.110.49.173])\n by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id 8A59A800A4;\n Thu, 22 Oct 2020 09:43:03 +0000 (UTC)",
            "from mx1-us1.ppe-hosted.com (unknown [10.110.48.45])\n by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id\n E6E0540070;\n Thu, 22 Oct 2020 09:43:02 +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 A5A7294005E;\n Thu, 22 Oct 2020 09:43:02 +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:42:59 +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:42:59 +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 09M9gxsL023058;\n Thu, 22 Oct 2020 10:42:59 +0100",
            "from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1])\n by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id 9D9001613A9;\n Thu, 22 Oct 2020 10:42:59 +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>, Jeff Guo\n <jia.guo@intel.com>, Ray Kinsella <mdr@ashroe.eu>, Neil Horman\n <nhorman@tuxdriver.com>, Ajit Khaparde <ajit.khaparde@broadcom.com>, \"Somnath\n Kotur\" <somnath.kotur@broadcom.com>, Haiyue Wang <haiyue.wang@intel.com>,\n Ziyang Xuan <xuanziyang2@huawei.com>, Xiaoyun Wang\n <cloud.wangxiaoyun@huawei.com>, Guoyang Zhou <zhouguoyang@huawei.com>, Rasesh\n Mody <rmody@marvell.com>, Shahed Shaikh <shshaikh@marvell.com>, Andrew\n Rybchenko <andrew.rybchenko@oktetlabs.ru>, Thomas Monjalon\n <thomas@monjalon.net>, Ferruh Yigit <ferruh.yigit@intel.com>",
        "CC": "<dev@dpdk.org>",
        "Date": "Thu, 22 Oct 2020 10:42:26 +0100",
        "Message-ID": "<1603359758-13297-4-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-5.155300-8.000000-10",
        "X-TMASE-MatchedRID": "iCwxAcLLwNz0gpEqM7fvYXv15w39S8ARF03B4pKYOlpG7aLtT3oj+/6j\n 8HS3/czlthz3TgitSFEFVUurgY9KHJz3nEP4SjjATh4VSQfkIVxj8vb8BkkBZJiQXtm0V8JTjBY\n hGYtVark003R2T+VvjnDlPghqPnfyYlldA0POS1IaPMGCcVm9DjVfUuzvrtymLOTWSyrh/a+4XK\n pxkpLQENsJaQHvex3I17jUFFfYfdrxVhA9+h9R2tg26OTuHfEpIQXVF2qsdV0C/nuPl5P0FsTb/\n /lo+C7RzChniH3lAV5jO2cJJWVbWyjESUGpPmz2l2fRVpVyo6Si8D/o42y/SiBFbq1oR0BmufI7\n V72pGLPZfxIlRtpm46sxNZGJ2rucxB4q1/hY9HPlvSeYSYEULAM8HHgJ/SSz0SxMhOhuA0SJCCD\n qm0eRewpr4p4pYh/KiBiBWAF8SD5d76qOGHW5eBIRh9wkXSlFA7f8DkoYc/8gUEQTkIWiYqo6hc\n XA9s6k0ZDvzY8kihzrfYDk2JaSWT58xbJHDY3reJ2BzwQDOOhIq1BEJ6pINMAtnXPNjFICauPBr\n y+3W1F+azQmuxyxbpr4LLNNFb2NXEG1LCXlWK5bUzvsaHW6BgKflB9+9kWVfkiy7TTogYZgbnJX\n 7723/esjzEDT4X8ftw9p5vhqOLwzPLZX9anwtf9N7e3lwkwb4F58RPNYsrGOIsAELqL7WPWKGTh\n Q2qZNqS9hAGtRlePjGOEzKgJSgmDQVDIhW5mmeUiTWYHRXE9QYo4xNF42PnfG3eNeaU1ylwyWSy\n 8TJerO0pdSWEgFjCcZ8sQHnls3L47TD00zmvKeAiCmPx4NwBnUJ0Ek6yhjxEHRux+uk8jHUU+U0\n ACZwO2xmFz4PmY4VicGJlGSsY/Ac+1/Mwq1JrD4moT40tfvnqg/VrSZEiM=",
        "X-TM-AS-User-Approved-Sender": "Yes",
        "X-TM-AS-User-Blocked-Sender": "No",
        "X-TMASE-Result": "10--5.155300-8.000000",
        "X-TMASE-Version": "SMEX-12.5.0.1300-8.6.1012-25740.003",
        "X-MDID": "1603359783-KqjJRv6Fe0eq",
        "X-PPE-DISP": "1603359783;KqjJRv6Fe0eq",
        "Subject": "[dpdk-dev] [PATCH v2 03/14] ethdev: remove legacy EtherType 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": "Instead of EtherType filter RTE flow API should be used.\n\nMove corresponding definitions to ethdev internal driver API\nsince it is used by drivers internally.\nPreserve RTE_ETH_FILTER_ETHERTYPE because of it as well.\n\nSigned-off-by: Andrew Rybchenko <arybchenko@solarflare.com>\nAcked-by: Ajit Khaparde <ajit.khaparde@broadcom.com>\nAcked-by: Haiyue Wang <haiyue.wang@intel.com>\n---\nv2:\n - cleanup testpmd user guide\n - cleanup i40e documentation (please, review carefully)\n\n app/test-pmd/cmdline.c                      | 115 --------------\n doc/guides/nics/i40e.rst                    |   4 +-\n doc/guides/rel_notes/deprecation.rst        |   2 +-\n doc/guides/testpmd_app_ug/testpmd_funcs.rst |  32 ----\n drivers/net/bnxt/bnxt_ethdev.c              | 157 --------------------\n drivers/net/e1000/igb_ethdev.c              |  85 -----------\n drivers/net/hinic/hinic_pmd_ethdev.h        |   1 +\n drivers/net/i40e/i40e_ethdev.c              |  45 ------\n drivers/net/ixgbe/ixgbe_ethdev.c            |  85 -----------\n drivers/net/qede/qede_filter.c              |   1 -\n drivers/net/sfc/sfc_ethdev.c                |   3 -\n lib/librte_ethdev/rte_eth_ctrl.h            |  19 ---\n lib/librte_ethdev/rte_ethdev_driver.h       |  23 +++\n 13 files changed, 27 insertions(+), 545 deletions(-)",
    "diff": "diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c\nindex 2d7e8bf53c..cae2444fde 100644\n--- a/app/test-pmd/cmdline.c\n+++ b/app/test-pmd/cmdline.c\n@@ -976,11 +976,6 @@ static void cmd_help_long_parsed(void *parsed_result,\n \t\t\t\"filters:\\n\"\n \t\t\t\"--------\\n\\n\"\n \n-\t\t\t\"ethertype_filter (port_id) (add|del)\"\n-\t\t\t\" (mac_addr|mac_ignr) (mac_address) ethertype\"\n-\t\t\t\" (ether_type) (drop|fwd) queue (queue_id)\\n\"\n-\t\t\t\"    Add/Del an ethertype filter.\\n\\n\"\n-\n \t\t\t\"2tuple_filter (port_id) (add|del)\"\n \t\t\t\" dst_port (dst_port_value) protocol (protocol_value)\"\n \t\t\t\" mask (mask_value) tcp_flags (tcp_flags_value)\"\n@@ -11069,115 +11064,6 @@ cmdline_parse_inst_t cmd_flex_filter = {\n \n /* *** Filters Control *** */\n \n-/* *** deal with ethertype filter *** */\n-struct cmd_ethertype_filter_result {\n-\tcmdline_fixed_string_t filter;\n-\tportid_t port_id;\n-\tcmdline_fixed_string_t ops;\n-\tcmdline_fixed_string_t mac;\n-\tstruct rte_ether_addr mac_addr;\n-\tcmdline_fixed_string_t ethertype;\n-\tuint16_t ethertype_value;\n-\tcmdline_fixed_string_t drop;\n-\tcmdline_fixed_string_t queue;\n-\tuint16_t  queue_id;\n-};\n-\n-cmdline_parse_token_string_t cmd_ethertype_filter_filter =\n-\tTOKEN_STRING_INITIALIZER(struct cmd_ethertype_filter_result,\n-\t\t\t\t filter, \"ethertype_filter\");\n-cmdline_parse_token_num_t cmd_ethertype_filter_port_id =\n-\tTOKEN_NUM_INITIALIZER(struct cmd_ethertype_filter_result,\n-\t\t\t      port_id, UINT16);\n-cmdline_parse_token_string_t cmd_ethertype_filter_ops =\n-\tTOKEN_STRING_INITIALIZER(struct cmd_ethertype_filter_result,\n-\t\t\t\t ops, \"add#del\");\n-cmdline_parse_token_string_t cmd_ethertype_filter_mac =\n-\tTOKEN_STRING_INITIALIZER(struct cmd_ethertype_filter_result,\n-\t\t\t\t mac, \"mac_addr#mac_ignr\");\n-cmdline_parse_token_etheraddr_t cmd_ethertype_filter_mac_addr =\n-\tTOKEN_ETHERADDR_INITIALIZER(struct cmd_ethertype_filter_result,\n-\t\t\t\t     mac_addr);\n-cmdline_parse_token_string_t cmd_ethertype_filter_ethertype =\n-\tTOKEN_STRING_INITIALIZER(struct cmd_ethertype_filter_result,\n-\t\t\t\t ethertype, \"ethertype\");\n-cmdline_parse_token_num_t cmd_ethertype_filter_ethertype_value =\n-\tTOKEN_NUM_INITIALIZER(struct cmd_ethertype_filter_result,\n-\t\t\t      ethertype_value, UINT16);\n-cmdline_parse_token_string_t cmd_ethertype_filter_drop =\n-\tTOKEN_STRING_INITIALIZER(struct cmd_ethertype_filter_result,\n-\t\t\t\t drop, \"drop#fwd\");\n-cmdline_parse_token_string_t cmd_ethertype_filter_queue =\n-\tTOKEN_STRING_INITIALIZER(struct cmd_ethertype_filter_result,\n-\t\t\t\t queue, \"queue\");\n-cmdline_parse_token_num_t cmd_ethertype_filter_queue_id =\n-\tTOKEN_NUM_INITIALIZER(struct cmd_ethertype_filter_result,\n-\t\t\t      queue_id, UINT16);\n-\n-static void\n-cmd_ethertype_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_ethertype_filter_result *res = parsed_result;\n-\tstruct rte_eth_ethertype_filter filter;\n-\tint ret = 0;\n-\n-\tret = rte_eth_dev_filter_supported(res->port_id,\n-\t\t\tRTE_ETH_FILTER_ETHERTYPE);\n-\tif (ret < 0) {\n-\t\tprintf(\"ethertype filter is not supported on port %u.\\n\",\n-\t\t\tres->port_id);\n-\t\treturn;\n-\t}\n-\n-\tmemset(&filter, 0, sizeof(filter));\n-\tif (!strcmp(res->mac, \"mac_addr\")) {\n-\t\tfilter.flags |= RTE_ETHTYPE_FLAGS_MAC;\n-\t\trte_memcpy(&filter.mac_addr, &res->mac_addr,\n-\t\t\tsizeof(struct rte_ether_addr));\n-\t}\n-\tif (!strcmp(res->drop, \"drop\"))\n-\t\tfilter.flags |= RTE_ETHTYPE_FLAGS_DROP;\n-\tfilter.ether_type = res->ethertype_value;\n-\tfilter.queue = res->queue_id;\n-\n-\tif (!strcmp(res->ops, \"add\"))\n-\t\tret = rte_eth_dev_filter_ctrl(res->port_id,\n-\t\t\t\tRTE_ETH_FILTER_ETHERTYPE,\n-\t\t\t\tRTE_ETH_FILTER_ADD,\n-\t\t\t\t&filter);\n-\telse\n-\t\tret = rte_eth_dev_filter_ctrl(res->port_id,\n-\t\t\t\tRTE_ETH_FILTER_ETHERTYPE,\n-\t\t\t\tRTE_ETH_FILTER_DELETE,\n-\t\t\t\t&filter);\n-\tif (ret < 0)\n-\t\tprintf(\"ethertype filter programming error: (%s)\\n\",\n-\t\t\tstrerror(-ret));\n-}\n-\n-cmdline_parse_inst_t cmd_ethertype_filter = {\n-\t.f = cmd_ethertype_filter_parsed,\n-\t.data = NULL,\n-\t.help_str = \"ethertype_filter <port_id> add|del mac_addr|mac_ignr \"\n-\t\t\"<mac_addr> ethertype <value> drop|fw queue <queue_id>: \"\n-\t\t\"Add or delete an ethertype filter entry\",\n-\t.tokens = {\n-\t\t(void *)&cmd_ethertype_filter_filter,\n-\t\t(void *)&cmd_ethertype_filter_port_id,\n-\t\t(void *)&cmd_ethertype_filter_ops,\n-\t\t(void *)&cmd_ethertype_filter_mac,\n-\t\t(void *)&cmd_ethertype_filter_mac_addr,\n-\t\t(void *)&cmd_ethertype_filter_ethertype,\n-\t\t(void *)&cmd_ethertype_filter_ethertype_value,\n-\t\t(void *)&cmd_ethertype_filter_drop,\n-\t\t(void *)&cmd_ethertype_filter_queue,\n-\t\t(void *)&cmd_ethertype_filter_queue_id,\n-\t\tNULL,\n-\t},\n-};\n-\n /* *** deal with flow director filter *** */\n struct cmd_flow_director_result {\n \tcmdline_fixed_string_t flow_director_filter;\n@@ -19944,7 +19830,6 @@ cmdline_parse_ctx_t main_ctx[] = {\n \t(cmdline_parse_inst_t *)&cmd_config_rss_hash_key,\n \t(cmdline_parse_inst_t *)&cmd_dump,\n \t(cmdline_parse_inst_t *)&cmd_dump_one,\n-\t(cmdline_parse_inst_t *)&cmd_ethertype_filter,\n \t(cmdline_parse_inst_t *)&cmd_syn_filter,\n \t(cmdline_parse_inst_t *)&cmd_2tuple_filter,\n \t(cmdline_parse_inst_t *)&cmd_5tuple_filter,\ndiff --git a/doc/guides/nics/i40e.rst b/doc/guides/nics/i40e.rst\nindex a0b81e6695..9e96a0ea13 100644\n--- a/doc/guides/nics/i40e.rst\n+++ b/doc/guides/nics/i40e.rst\n@@ -635,8 +635,8 @@ L2 Payload flow type in flow director cannot be used to classify MPLS packet\n as with previous firmware versions. Meanwhile, the Ethertype filter can be\n used to classify MPLS packet by using a command in testpmd like:\n \n-   testpmd> ethertype_filter 0 add mac_ignr 00:00:00:00:00:00 ethertype \\\n-            0x8847 fwd queue <M>\n+   testpmd> flow create 0 ingress pattern eth type is 0x8847 / end \\\n+            actions queue index <M> / end\n \n 16 Byte RX Descriptor setting on DPDK VF\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ndiff --git a/doc/guides/rel_notes/deprecation.rst b/doc/guides/rel_notes/deprecation.rst\nindex cdb1945c91..209223a501 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 ETHERTYPE, FLEXIBLE, SYN, NTUPLE, TUNNEL, FDIR,\n+  as filter types FLEXIBLE, SYN, NTUPLE, TUNNEL, 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 28fc8cca89..cb19b50a8f 100644\n--- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst\n+++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst\n@@ -3276,38 +3276,6 @@ This section details the available filter functions that are available.\n Note these functions interface the deprecated legacy filtering framework,\n superseded by *rte_flow*. See `Flow rules management`_.\n \n-ethertype_filter\n-~~~~~~~~~~~~~~~~~~~~\n-\n-Add or delete a L2 Ethertype filter, which identify packets by their L2 Ethertype mainly assign them to a receive queue::\n-\n-   ethertype_filter (port_id) (add|del) (mac_addr|mac_ignr) (mac_address) \\\n-                    ethertype (ether_type) (drop|fwd) queue (queue_id)\n-\n-The available information parameters are:\n-\n-* ``port_id``: The port which the Ethertype filter assigned on.\n-\n-* ``mac_addr``: Compare destination mac address.\n-\n-* ``mac_ignr``: Ignore destination mac address match.\n-\n-* ``mac_address``: Destination mac address to match.\n-\n-* ``ether_type``: The EtherType value want to match,\n-  for example 0x0806 for ARP packet. 0x0800 (IPv4) and 0x86DD (IPv6) are invalid.\n-\n-* ``queue_id``: The receive queue associated with this EtherType filter.\n-  It is meaningless when deleting or dropping.\n-\n-Example, to add/remove an ethertype filter rule::\n-\n-   testpmd> ethertype_filter 0 add mac_ignr 00:11:22:33:44:55 \\\n-                             ethertype 0x0806 fwd queue 3\n-\n-   testpmd> ethertype_filter 0 del mac_ignr 00:11:22:33:44:55 \\\n-                             ethertype 0x0806 fwd queue 3\n-\n 2tuple_filter\n ~~~~~~~~~~~~~~~~~\n \ndiff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c\nindex 32318cfd00..ec43f1cfde 100644\n--- a/drivers/net/bnxt/bnxt_ethdev.c\n+++ b/drivers/net/bnxt/bnxt_ethdev.c\n@@ -2990,160 +2990,6 @@ bnxt_tx_descriptor_status_op(void *tx_queue, uint16_t offset)\n \treturn RTE_ETH_TX_DESC_FULL;\n }\n \n-static struct bnxt_filter_info *\n-bnxt_match_and_validate_ether_filter(struct bnxt *bp,\n-\t\t\t\tstruct rte_eth_ethertype_filter *efilter,\n-\t\t\t\tstruct bnxt_vnic_info *vnic0,\n-\t\t\t\tstruct bnxt_vnic_info *vnic,\n-\t\t\t\tint *ret)\n-{\n-\tstruct bnxt_filter_info *mfilter = NULL;\n-\tint match = 0;\n-\t*ret = 0;\n-\n-\tif (efilter->ether_type == RTE_ETHER_TYPE_IPV4 ||\n-\t\tefilter->ether_type == RTE_ETHER_TYPE_IPV6) {\n-\t\tPMD_DRV_LOG(ERR, \"invalid ether_type(0x%04x) in\"\n-\t\t\t\" ethertype filter.\", efilter->ether_type);\n-\t\t*ret = -EINVAL;\n-\t\tgoto exit;\n-\t}\n-\tif (efilter->queue >= bp->rx_nr_rings) {\n-\t\tPMD_DRV_LOG(ERR, \"Invalid queue %d\\n\", efilter->queue);\n-\t\t*ret = -EINVAL;\n-\t\tgoto exit;\n-\t}\n-\n-\tvnic0 = BNXT_GET_DEFAULT_VNIC(bp);\n-\tvnic = &bp->vnic_info[efilter->queue];\n-\tif (vnic == NULL) {\n-\t\tPMD_DRV_LOG(ERR, \"Invalid queue %d\\n\", efilter->queue);\n-\t\t*ret = -EINVAL;\n-\t\tgoto exit;\n-\t}\n-\n-\tif (efilter->flags & RTE_ETHTYPE_FLAGS_DROP) {\n-\t\tSTAILQ_FOREACH(mfilter, &vnic0->filter, next) {\n-\t\t\tif ((!memcmp(efilter->mac_addr.addr_bytes,\n-\t\t\t\t     mfilter->l2_addr, RTE_ETHER_ADDR_LEN) &&\n-\t\t\t     mfilter->flags ==\n-\t\t\t     HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_FLAGS_DROP &&\n-\t\t\t     mfilter->ethertype == efilter->ether_type)) {\n-\t\t\t\tmatch = 1;\n-\t\t\t\tbreak;\n-\t\t\t}\n-\t\t}\n-\t} else {\n-\t\tSTAILQ_FOREACH(mfilter, &vnic->filter, next)\n-\t\t\tif ((!memcmp(efilter->mac_addr.addr_bytes,\n-\t\t\t\t     mfilter->l2_addr, RTE_ETHER_ADDR_LEN) &&\n-\t\t\t     mfilter->ethertype == efilter->ether_type &&\n-\t\t\t     mfilter->flags ==\n-\t\t\t     HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_PATH_RX)) {\n-\t\t\t\tmatch = 1;\n-\t\t\t\tbreak;\n-\t\t\t}\n-\t}\n-\n-\tif (match)\n-\t\t*ret = -EEXIST;\n-\n-exit:\n-\treturn mfilter;\n-}\n-\n-static int\n-bnxt_ethertype_filter(struct rte_eth_dev *dev,\n-\t\t\tenum rte_filter_op filter_op,\n-\t\t\tvoid *arg)\n-{\n-\tstruct bnxt *bp = dev->data->dev_private;\n-\tstruct rte_eth_ethertype_filter *efilter =\n-\t\t\t(struct rte_eth_ethertype_filter *)arg;\n-\tstruct bnxt_filter_info *bfilter, *filter1;\n-\tstruct bnxt_vnic_info *vnic, *vnic0;\n-\tint ret;\n-\n-\tif (filter_op == RTE_ETH_FILTER_NOP)\n-\t\treturn 0;\n-\n-\tif (arg == NULL) {\n-\t\tPMD_DRV_LOG(ERR, \"arg shouldn't be NULL for operation %u.\",\n-\t\t\t    filter_op);\n-\t\treturn -EINVAL;\n-\t}\n-\n-\tvnic0 = BNXT_GET_DEFAULT_VNIC(bp);\n-\tvnic = &bp->vnic_info[efilter->queue];\n-\n-\tswitch (filter_op) {\n-\tcase RTE_ETH_FILTER_ADD:\n-\t\tbnxt_match_and_validate_ether_filter(bp, efilter,\n-\t\t\t\t\t\t\tvnic0, vnic, &ret);\n-\t\tif (ret < 0)\n-\t\t\treturn ret;\n-\n-\t\tbfilter = bnxt_get_unused_filter(bp);\n-\t\tif (bfilter == NULL) {\n-\t\t\tPMD_DRV_LOG(ERR,\n-\t\t\t\t\"Not enough resources for a new filter.\\n\");\n-\t\t\treturn -ENOMEM;\n-\t\t}\n-\t\tbfilter->filter_type = HWRM_CFA_NTUPLE_FILTER;\n-\t\tmemcpy(bfilter->l2_addr, efilter->mac_addr.addr_bytes,\n-\t\t       RTE_ETHER_ADDR_LEN);\n-\t\tmemcpy(bfilter->dst_macaddr, efilter->mac_addr.addr_bytes,\n-\t\t       RTE_ETHER_ADDR_LEN);\n-\t\tbfilter->enables |= NTUPLE_FLTR_ALLOC_INPUT_EN_DST_MACADDR;\n-\t\tbfilter->ethertype = efilter->ether_type;\n-\t\tbfilter->enables |= NTUPLE_FLTR_ALLOC_INPUT_EN_ETHERTYPE;\n-\n-\t\tfilter1 = bnxt_get_l2_filter(bp, bfilter, vnic0);\n-\t\tif (filter1 == NULL) {\n-\t\t\tret = -EINVAL;\n-\t\t\tgoto cleanup;\n-\t\t}\n-\t\tbfilter->enables |=\n-\t\t\tHWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_L2_FILTER_ID;\n-\t\tbfilter->fw_l2_filter_id = filter1->fw_l2_filter_id;\n-\n-\t\tbfilter->dst_id = vnic->fw_vnic_id;\n-\n-\t\tif (efilter->flags & RTE_ETHTYPE_FLAGS_DROP) {\n-\t\t\tbfilter->flags =\n-\t\t\t\tHWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_FLAGS_DROP;\n-\t\t}\n-\n-\t\tret = bnxt_hwrm_set_ntuple_filter(bp, bfilter->dst_id, bfilter);\n-\t\tif (ret)\n-\t\t\tgoto cleanup;\n-\t\tSTAILQ_INSERT_TAIL(&vnic->filter, bfilter, next);\n-\t\tbreak;\n-\tcase RTE_ETH_FILTER_DELETE:\n-\t\tfilter1 = bnxt_match_and_validate_ether_filter(bp, efilter,\n-\t\t\t\t\t\t\tvnic0, vnic, &ret);\n-\t\tif (ret == -EEXIST) {\n-\t\t\tret = bnxt_hwrm_clear_ntuple_filter(bp, filter1);\n-\n-\t\t\tSTAILQ_REMOVE(&vnic->filter, filter1, bnxt_filter_info,\n-\t\t\t\t      next);\n-\t\t\tbnxt_free_filter(bp, filter1);\n-\t\t} else if (ret == 0) {\n-\t\t\tPMD_DRV_LOG(ERR, \"No matching filter found\\n\");\n-\t\t}\n-\t\tbreak;\n-\tdefault:\n-\t\tPMD_DRV_LOG(ERR, \"unsupported operation %u.\", filter_op);\n-\t\tret = -EINVAL;\n-\t\tgoto error;\n-\t}\n-\treturn ret;\n-cleanup:\n-\tbnxt_free_filter(bp, bfilter);\n-error:\n-\treturn ret;\n-}\n-\n static inline int\n parse_ntuple_filter(struct bnxt *bp,\n \t\t    struct rte_eth_ntuple_filter *nfilter,\n@@ -3818,9 +3664,6 @@ bnxt_filter_ctrl_op(struct rte_eth_dev *dev,\n \tcase RTE_ETH_FILTER_NTUPLE:\n \t\tret = bnxt_ntuple_filter(dev, filter_op, arg);\n \t\tbreak;\n-\tcase RTE_ETH_FILTER_ETHERTYPE:\n-\t\tret = bnxt_ethertype_filter(dev, filter_op, arg);\n-\t\tbreak;\n \tcase RTE_ETH_FILTER_GENERIC:\n \t\tif (filter_op != RTE_ETH_FILTER_GET)\n \t\t\treturn -EINVAL;\ndiff --git a/drivers/net/e1000/igb_ethdev.c b/drivers/net/e1000/igb_ethdev.c\nindex ac4b8f1123..8b18f1cb28 100644\n--- a/drivers/net/e1000/igb_ethdev.c\n+++ b/drivers/net/e1000/igb_ethdev.c\n@@ -209,11 +209,6 @@ static int igb_get_ntuple_filter(struct rte_eth_dev *dev,\n static int igb_ntuple_filter_handle(struct rte_eth_dev *dev,\n \t\t\t\tenum rte_filter_op filter_op,\n \t\t\t\tvoid *arg);\n-static int igb_ethertype_filter_handle(struct rte_eth_dev *dev,\n-\t\t\t\tenum rte_filter_op filter_op,\n-\t\t\t\tvoid *arg);\n-static int igb_get_ethertype_filter(struct rte_eth_dev *dev,\n-\t\t\tstruct rte_eth_ethertype_filter *filter);\n static int eth_igb_filter_ctrl(struct rte_eth_dev *dev,\n \t\t     enum rte_filter_type filter_type,\n \t\t     enum rte_filter_op filter_op,\n@@ -4842,83 +4837,6 @@ igb_add_del_ethertype_filter(struct rte_eth_dev *dev,\n \treturn 0;\n }\n \n-static int\n-igb_get_ethertype_filter(struct rte_eth_dev *dev,\n-\t\t\tstruct rte_eth_ethertype_filter *filter)\n-{\n-\tstruct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private);\n-\tstruct e1000_filter_info *filter_info =\n-\t\tE1000_DEV_PRIVATE_TO_FILTER_INFO(dev->data->dev_private);\n-\tuint32_t etqf;\n-\tint ret;\n-\n-\tret = igb_ethertype_filter_lookup(filter_info, filter->ether_type);\n-\tif (ret < 0) {\n-\t\tPMD_DRV_LOG(ERR, \"ethertype (0x%04x) filter doesn't exist.\",\n-\t\t\t    filter->ether_type);\n-\t\treturn -ENOENT;\n-\t}\n-\n-\tetqf = E1000_READ_REG(hw, E1000_ETQF(ret));\n-\tif (etqf & E1000_ETQF_FILTER_ENABLE) {\n-\t\tfilter->ether_type = etqf & E1000_ETQF_ETHERTYPE;\n-\t\tfilter->flags = 0;\n-\t\tfilter->queue = (etqf & E1000_ETQF_QUEUE) >>\n-\t\t\t\tE1000_ETQF_QUEUE_SHIFT;\n-\t\treturn 0;\n-\t}\n-\n-\treturn -ENOENT;\n-}\n-\n-/*\n- * igb_ethertype_filter_handle - Handle operations for ethertype filter.\n- * @dev: pointer to rte_eth_dev structure\n- * @filter_op:operation will be taken.\n- * @arg: a pointer to specific structure corresponding to the filter_op\n- */\n-static int\n-igb_ethertype_filter_handle(struct rte_eth_dev *dev,\n-\t\t\t\tenum rte_filter_op filter_op,\n-\t\t\t\tvoid *arg)\n-{\n-\tstruct e1000_hw *hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private);\n-\tint ret;\n-\n-\tMAC_TYPE_FILTER_SUP(hw->mac.type);\n-\n-\tif (filter_op == RTE_ETH_FILTER_NOP)\n-\t\treturn 0;\n-\n-\tif (arg == NULL) {\n-\t\tPMD_DRV_LOG(ERR, \"arg shouldn't be NULL for operation %u.\",\n-\t\t\t    filter_op);\n-\t\treturn -EINVAL;\n-\t}\n-\n-\tswitch (filter_op) {\n-\tcase RTE_ETH_FILTER_ADD:\n-\t\tret = igb_add_del_ethertype_filter(dev,\n-\t\t\t(struct rte_eth_ethertype_filter *)arg,\n-\t\t\tTRUE);\n-\t\tbreak;\n-\tcase RTE_ETH_FILTER_DELETE:\n-\t\tret = igb_add_del_ethertype_filter(dev,\n-\t\t\t(struct rte_eth_ethertype_filter *)arg,\n-\t\t\tFALSE);\n-\t\tbreak;\n-\tcase RTE_ETH_FILTER_GET:\n-\t\tret = igb_get_ethertype_filter(dev,\n-\t\t\t(struct rte_eth_ethertype_filter *)arg);\n-\t\tbreak;\n-\tdefault:\n-\t\tPMD_DRV_LOG(ERR, \"unsupported operation %u.\", filter_op);\n-\t\tret = -EINVAL;\n-\t\tbreak;\n-\t}\n-\treturn ret;\n-}\n-\n static int\n eth_igb_filter_ctrl(struct rte_eth_dev *dev,\n \t\t     enum rte_filter_type filter_type,\n@@ -4931,9 +4849,6 @@ eth_igb_filter_ctrl(struct rte_eth_dev *dev,\n \tcase RTE_ETH_FILTER_NTUPLE:\n \t\tret = igb_ntuple_filter_handle(dev, filter_op, arg);\n \t\tbreak;\n-\tcase RTE_ETH_FILTER_ETHERTYPE:\n-\t\tret = igb_ethertype_filter_handle(dev, filter_op, arg);\n-\t\tbreak;\n \tcase RTE_ETH_FILTER_SYN:\n \t\tret = eth_igb_syn_filter_handle(dev, filter_op, arg);\n \t\tbreak;\ndiff --git a/drivers/net/hinic/hinic_pmd_ethdev.h b/drivers/net/hinic/hinic_pmd_ethdev.h\nindex 3f2d51d752..c7338d83be 100644\n--- a/drivers/net/hinic/hinic_pmd_ethdev.h\n+++ b/drivers/net/hinic/hinic_pmd_ethdev.h\n@@ -7,6 +7,7 @@\n \n #include <rte_ethdev.h>\n #include <rte_ethdev_core.h>\n+#include <rte_ethdev_driver.h>\n \n #include \"base/hinic_compat.h\"\n #include \"base/hinic_pmd_cfg.h\"\ndiff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c\nindex e298d7aee6..aa87ad8dd5 100644\n--- a/drivers/net/i40e/i40e_ethdev.c\n+++ b/drivers/net/i40e/i40e_ethdev.c\n@@ -319,9 +319,6 @@ static int i40e_dev_udp_tunnel_port_add(struct rte_eth_dev *dev,\n static int i40e_dev_udp_tunnel_port_del(struct rte_eth_dev *dev,\n \t\t\t\t\tstruct rte_eth_udp_tunnel *udp_tunnel);\n static void i40e_filter_input_set_init(struct i40e_pf *pf);\n-static int i40e_ethertype_filter_handle(struct rte_eth_dev *dev,\n-\t\t\t\tenum rte_filter_op filter_op,\n-\t\t\t\tvoid *arg);\n static int i40e_dev_filter_ctrl(struct rte_eth_dev *dev,\n \t\t\t\tenum rte_filter_type filter_type,\n \t\t\t\tenum rte_filter_op filter_op,\n@@ -10449,45 +10446,6 @@ i40e_ethertype_filter_set(struct i40e_pf *pf,\n \treturn ret;\n }\n \n-/*\n- * Handle operations for ethertype filter.\n- */\n-static int\n-i40e_ethertype_filter_handle(struct rte_eth_dev *dev,\n-\t\t\t\tenum rte_filter_op filter_op,\n-\t\t\t\tvoid *arg)\n-{\n-\tstruct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private);\n-\tint ret = 0;\n-\n-\tif (filter_op == RTE_ETH_FILTER_NOP)\n-\t\treturn ret;\n-\n-\tif (arg == NULL) {\n-\t\tPMD_DRV_LOG(ERR, \"arg shouldn't be NULL for operation %u\",\n-\t\t\t    filter_op);\n-\t\treturn -EINVAL;\n-\t}\n-\n-\tswitch (filter_op) {\n-\tcase RTE_ETH_FILTER_ADD:\n-\t\tret = i40e_ethertype_filter_set(pf,\n-\t\t\t(struct rte_eth_ethertype_filter *)arg,\n-\t\t\tTRUE);\n-\t\tbreak;\n-\tcase RTE_ETH_FILTER_DELETE:\n-\t\tret = i40e_ethertype_filter_set(pf,\n-\t\t\t(struct rte_eth_ethertype_filter *)arg,\n-\t\t\tFALSE);\n-\t\tbreak;\n-\tdefault:\n-\t\tPMD_DRV_LOG(ERR, \"unsupported operation %u\", filter_op);\n-\t\tret = -ENOSYS;\n-\t\tbreak;\n-\t}\n-\treturn ret;\n-}\n-\n static int\n i40e_dev_filter_ctrl(struct rte_eth_dev *dev,\n \t\t     enum rte_filter_type filter_type,\n@@ -10507,9 +10465,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_ETHERTYPE:\n-\t\tret = i40e_ethertype_filter_handle(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;\ndiff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c\nindex 00101c2eec..69222ccd2d 100644\n--- a/drivers/net/ixgbe/ixgbe_ethdev.c\n+++ b/drivers/net/ixgbe/ixgbe_ethdev.c\n@@ -314,11 +314,6 @@ static int ixgbe_ntuple_filter_handle(struct rte_eth_dev *dev,\n \t\t\t\tvoid *arg);\n static int ixgbe_get_ntuple_filter(struct rte_eth_dev *dev,\n \t\t\tstruct rte_eth_ntuple_filter *filter);\n-static int ixgbe_ethertype_filter_handle(struct rte_eth_dev *dev,\n-\t\t\t\tenum rte_filter_op filter_op,\n-\t\t\t\tvoid *arg);\n-static int ixgbe_get_ethertype_filter(struct rte_eth_dev *dev,\n-\t\t\tstruct rte_eth_ethertype_filter *filter);\n static int ixgbe_dev_filter_ctrl(struct rte_eth_dev *dev,\n \t\t     enum rte_filter_type filter_type,\n \t\t     enum rte_filter_op filter_op,\n@@ -6967,83 +6962,6 @@ ixgbe_add_del_ethertype_filter(struct rte_eth_dev *dev,\n \treturn 0;\n }\n \n-static int\n-ixgbe_get_ethertype_filter(struct rte_eth_dev *dev,\n-\t\t\tstruct rte_eth_ethertype_filter *filter)\n-{\n-\tstruct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private);\n-\tstruct ixgbe_filter_info *filter_info =\n-\t\tIXGBE_DEV_PRIVATE_TO_FILTER_INFO(dev->data->dev_private);\n-\tuint32_t etqf, etqs;\n-\tint ret;\n-\n-\tret = ixgbe_ethertype_filter_lookup(filter_info, filter->ether_type);\n-\tif (ret < 0) {\n-\t\tPMD_DRV_LOG(ERR, \"ethertype (0x%04x) filter doesn't exist.\",\n-\t\t\t    filter->ether_type);\n-\t\treturn -ENOENT;\n-\t}\n-\n-\tetqf = IXGBE_READ_REG(hw, IXGBE_ETQF(ret));\n-\tif (etqf & IXGBE_ETQF_FILTER_EN) {\n-\t\tetqs = IXGBE_READ_REG(hw, IXGBE_ETQS(ret));\n-\t\tfilter->ether_type = etqf & IXGBE_ETQF_ETHERTYPE;\n-\t\tfilter->flags = 0;\n-\t\tfilter->queue = (etqs & IXGBE_ETQS_RX_QUEUE) >>\n-\t\t\t       IXGBE_ETQS_RX_QUEUE_SHIFT;\n-\t\treturn 0;\n-\t}\n-\treturn -ENOENT;\n-}\n-\n-/*\n- * ixgbe_ethertype_filter_handle - Handle operations for ethertype filter.\n- * @dev: pointer to rte_eth_dev structure\n- * @filter_op:operation will be taken.\n- * @arg: a pointer to specific structure corresponding to the filter_op\n- */\n-static int\n-ixgbe_ethertype_filter_handle(struct rte_eth_dev *dev,\n-\t\t\t\tenum rte_filter_op filter_op,\n-\t\t\t\tvoid *arg)\n-{\n-\tstruct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private);\n-\tint ret;\n-\n-\tMAC_TYPE_FILTER_SUP(hw->mac.type);\n-\n-\tif (filter_op == RTE_ETH_FILTER_NOP)\n-\t\treturn 0;\n-\n-\tif (arg == NULL) {\n-\t\tPMD_DRV_LOG(ERR, \"arg shouldn't be NULL for operation %u.\",\n-\t\t\t    filter_op);\n-\t\treturn -EINVAL;\n-\t}\n-\n-\tswitch (filter_op) {\n-\tcase RTE_ETH_FILTER_ADD:\n-\t\tret = ixgbe_add_del_ethertype_filter(dev,\n-\t\t\t(struct rte_eth_ethertype_filter *)arg,\n-\t\t\tTRUE);\n-\t\tbreak;\n-\tcase RTE_ETH_FILTER_DELETE:\n-\t\tret = ixgbe_add_del_ethertype_filter(dev,\n-\t\t\t(struct rte_eth_ethertype_filter *)arg,\n-\t\t\tFALSE);\n-\t\tbreak;\n-\tcase RTE_ETH_FILTER_GET:\n-\t\tret = ixgbe_get_ethertype_filter(dev,\n-\t\t\t(struct rte_eth_ethertype_filter *)arg);\n-\t\tbreak;\n-\tdefault:\n-\t\tPMD_DRV_LOG(ERR, \"unsupported operation %u.\", filter_op);\n-\t\tret = -EINVAL;\n-\t\tbreak;\n-\t}\n-\treturn ret;\n-}\n-\n static int\n ixgbe_dev_filter_ctrl(struct rte_eth_dev *dev,\n \t\t     enum rte_filter_type filter_type,\n@@ -7056,9 +6974,6 @@ ixgbe_dev_filter_ctrl(struct rte_eth_dev *dev,\n \tcase RTE_ETH_FILTER_NTUPLE:\n \t\tret = ixgbe_ntuple_filter_handle(dev, filter_op, arg);\n \t\tbreak;\n-\tcase RTE_ETH_FILTER_ETHERTYPE:\n-\t\tret = ixgbe_ethertype_filter_handle(dev, filter_op, arg);\n-\t\tbreak;\n \tcase RTE_ETH_FILTER_SYN:\n \t\tret = ixgbe_syn_filter_handle(dev, filter_op, arg);\n \t\tbreak;\ndiff --git a/drivers/net/qede/qede_filter.c b/drivers/net/qede/qede_filter.c\nindex 2e1646fe89..4d31db09fd 100644\n--- a/drivers/net/qede/qede_filter.c\n+++ b/drivers/net/qede/qede_filter.c\n@@ -1561,7 +1561,6 @@ int qede_dev_filter_ctrl(struct rte_eth_dev *eth_dev,\n \n \t\t*(const void **)arg = &qede_flow_ops;\n \t\treturn 0;\n-\tcase RTE_ETH_FILTER_ETHERTYPE:\n \tcase RTE_ETH_FILTER_FLEXIBLE:\n \tcase RTE_ETH_FILTER_SYN:\n \tcase RTE_ETH_FILTER_HASH:\ndiff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c\nindex a0059a8975..b9ed075c64 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_ETHERTYPE:\n-\t\tsfc_err(sa, \"EtherType filters not supported\");\n-\t\tbreak;\n \tcase RTE_ETH_FILTER_FLEXIBLE:\n \t\tsfc_err(sa, \"Flexible 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 a3d49e0913..5690f8111a 100644\n--- a/lib/librte_ethdev/rte_eth_ctrl.h\n+++ b/lib/librte_ethdev/rte_eth_ctrl.h\n@@ -56,25 +56,6 @@ enum rte_filter_op {\n \tRTE_ETH_FILTER_OP_MAX\n };\n \n-/**\n- * Define all structures for Ethertype Filter type.\n- */\n-\n-#define RTE_ETHTYPE_FLAGS_MAC    0x0001 /**< If set, compare mac */\n-#define RTE_ETHTYPE_FLAGS_DROP   0x0002 /**< If set, drop packet when match */\n-\n-/**\n- * A structure used to define the ethertype filter entry\n- * to support RTE_ETH_FILTER_ETHERTYPE with RTE_ETH_FILTER_ADD,\n- * RTE_ETH_FILTER_DELETE and RTE_ETH_FILTER_GET operations.\n- */\n-struct rte_eth_ethertype_filter {\n-\tstruct rte_ether_addr mac_addr;   /**< Mac address to match. */\n-\tuint16_t ether_type;          /**< Ether type to match */\n-\tuint16_t flags;               /**< Flags from RTE_ETHTYPE_FLAGS_* */\n-\tuint16_t queue;               /**< Queue assigned to when match*/\n-};\n-\n #define RTE_FLEX_FILTER_MAXLEN\t128\t/**< bytes to use in flex filter. */\n #define RTE_FLEX_FILTER_MASK_SIZE\t\\\n \t(RTE_ALIGN(RTE_FLEX_FILTER_MAXLEN, CHAR_BIT) / CHAR_BIT)\ndiff --git a/lib/librte_ethdev/rte_ethdev_driver.h b/lib/librte_ethdev/rte_ethdev_driver.h\nindex c63b9f7eb7..67a83dacc7 100644\n--- a/lib/librte_ethdev/rte_ethdev_driver.h\n+++ b/lib/librte_ethdev/rte_ethdev_driver.h\n@@ -1342,6 +1342,29 @@ int\n rte_eth_hairpin_queue_peer_unbind(uint16_t cur_port, uint16_t cur_queue,\n \t\t\t\t  uint32_t direction);\n \n+\n+/*\n+ * Legacy ethdev API used internally by drivers.\n+ */\n+\n+/**\n+ * Define all structures for Ethertype Filter type.\n+ */\n+\n+#define RTE_ETHTYPE_FLAGS_MAC    0x0001 /**< If set, compare mac */\n+#define RTE_ETHTYPE_FLAGS_DROP   0x0002 /**< If set, drop packet when match */\n+\n+/**\n+ * A structure used to define the ethertype filter entry\n+ * to support RTE_ETH_FILTER_ETHERTYPE data representation.\n+ */\n+struct rte_eth_ethertype_filter {\n+\tstruct rte_ether_addr mac_addr;   /**< Mac address to match. */\n+\tuint16_t ether_type;          /**< Ether type to match */\n+\tuint16_t flags;               /**< Flags from RTE_ETHTYPE_FLAGS_* */\n+\tuint16_t queue;               /**< Queue assigned to when match*/\n+};\n+\n #ifdef __cplusplus\n }\n #endif\n",
    "prefixes": [
        "v2",
        "03/14"
    ]
}