get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 81261,
    "url": "http://patchwork.dpdk.org/api/patches/81261/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/patch/1603030152-13451-4-git-send-email-arybchenko@solarflare.com/",
    "project": {
        "id": 1,
        "url": "http://patchwork.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": "<1603030152-13451-4-git-send-email-arybchenko@solarflare.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1603030152-13451-4-git-send-email-arybchenko@solarflare.com",
    "date": "2020-10-18T14:09:00",
    "name": "[03/14] ethdev: remove legacy EtherType filter type support",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "64cb19caa66cc8a0f95cae58bf15aea424a073d8",
    "submitter": {
        "id": 607,
        "url": "http://patchwork.dpdk.org/api/people/607/?format=api",
        "name": "Andrew Rybchenko",
        "email": "arybchenko@solarflare.com"
    },
    "delegate": {
        "id": 319,
        "url": "http://patchwork.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "http://patchwork.dpdk.org/project/dpdk/patch/1603030152-13451-4-git-send-email-arybchenko@solarflare.com/mbox/",
    "series": [
        {
            "id": 13082,
            "url": "http://patchwork.dpdk.org/api/series/13082/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=13082",
            "date": "2020-10-18T14:08:57",
            "name": "ethdev: remove legacy filter API",
            "version": 1,
            "mbox": "http://patchwork.dpdk.org/series/13082/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/81261/comments/",
    "check": "success",
    "checks": "http://patchwork.dpdk.org/api/patches/81261/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 E2C65A04B0;\n\tSun, 18 Oct 2020 16:10:59 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 38B3AD03D;\n\tSun, 18 Oct 2020 16:09:34 +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 60A18C87E\n for <dev@dpdk.org>; Sun, 18 Oct 2020 16:09:26 +0200 (CEST)",
            "from mx1-us1.ppe-hosted.com (unknown [10.110.50.150])\n by dispatch1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id\n ED3DF20082; Sun, 18 Oct 2020 14:09:24 +0000 (UTC)",
            "from us4-mdac16-49.at1.mdlocal (unknown [10.110.50.132])\n by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id EAE7F800A3;\n Sun, 18 Oct 2020 14:09:24 +0000 (UTC)",
            "from mx1-us1.ppe-hosted.com (unknown [10.110.50.12])\n by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id\n 3CCE9100052;\n Sun, 18 Oct 2020 14:09:24 +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 F32674005B;\n Sun, 18 Oct 2020 14:09:23 +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; Sun, 18 Oct 2020 15:09:19 +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; Sun, 18 Oct 2020 15:09:18 +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 09IE9IEJ002021;\n Sun, 18 Oct 2020 15:09:18 +0100",
            "from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1])\n by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id B3FDE1613A9;\n Sun, 18 Oct 2020 15:09:18 +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>, Haiyue Wang <haiyue.wang@intel.com>, \"Ziyang\n Xuan\" <xuanziyang2@huawei.com>, Xiaoyun Wang <cloud.wangxiaoyun@huawei.com>,\n Guoyang Zhou <zhouguoyang@huawei.com>, Rasesh Mody <rmody@marvell.com>,\n Shahed Shaikh <shshaikh@marvell.com>, Andrew Rybchenko\n <andrew.rybchenko@oktetlabs.ru>, Thomas Monjalon <thomas@monjalon.net>,\n Ferruh Yigit <ferruh.yigit@intel.com>",
        "CC": "<dev@dpdk.org>",
        "Date": "Sun, 18 Oct 2020 15:09:00 +0100",
        "Message-ID": "<1603030152-13451-4-git-send-email-arybchenko@solarflare.com>",
        "X-Mailer": "git-send-email 1.8.3.1",
        "In-Reply-To": "<1603030152-13451-1-git-send-email-arybchenko@solarflare.com>",
        "References": "<1603030152-13451-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-25732.003",
        "X-TM-AS-Result": "No-16.881100-8.000000-10",
        "X-TMASE-MatchedRID": "CrpnShPcGhH0gpEqM7fvYXv15w39S8ARY/L2/AZJAWSYkF7ZtFfCU4wW\n IRmLVWq5NNN0dk/lb45w5T4Iaj538mJZXQNDzktSGjzBgnFZvQ41X1Ls767cpizk1ksq4f2vuFy\n qcZKS0BDbCWkB73sdyNe41BRX2H3a8VYQPfofUdrYNujk7h3xKSEF1RdqrHVdAv57j5eT9BbE2/\n /5aPgu0cwoZ4h95QFeYztnCSVlW1soxElBqT5s9pdn0VaVcqOkovA/6ONsv0ogRW6taEdAZrnyO\n 1e9qRiz2X8SJUbaZuNomViyNzIIqef7tGBB4aDuRow8EUpfIBQ/Dyy30snbbx1e3LLOsg63MFdd\n v+pLbrebGphGYyvIEjpiWTZKW5KgId18tSp0CEQdjoPUYuBywOqhuTPUDQDtaHvr9sOkYSuDuU3\n 0s68UO7LFzVWms74C5dtnO7xeDZuzcEvRT7uU5xYZoKAPfQ6CquFC73XPA2e6pZ/o2Hu2YVLiA4\n WBV3WfUfOcEH1bmoH1PPnHhQe8tsMlA9qlu+4CIAjxomarSPB0ZH0LS0ioj753x71IIIESOWjcB\n JBnam1GTKG9z8yA7ZIAsfvd5LdF3drJ6tQCW56hLSC6hXpJl8oioCrSMgeKqPGqHIPGZiO4nrgI\n M5K3vff+4kabl0OBqUf8NJRfg8KhdhOr/xScIXTnOygHVQpOMBFRtdEz6qHc/xG0ZnouuUFzseL\n D8cAM4vM1YF6AJbbCCfuIMF6xLbxAi7jPoeEQftwZ3X11IV0=",
        "X-TM-AS-User-Approved-Sender": "Yes",
        "X-TM-AS-User-Blocked-Sender": "No",
        "X-TMASE-Result": "10--16.881100-8.000000",
        "X-TMASE-Version": "SMEX-12.5.0.1300-8.6.1012-25732.003",
        "X-MDID": "1603030164-fZ_3IFOfPnxa",
        "X-PPE-DISP": "1603030164;fZ_3IFOfPnxa",
        "Subject": "[dpdk-dev] [PATCH 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": "RTE flow API should be used for filtering.\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>\n---\n app/test-pmd/cmdline.c                | 115 -------------------\n doc/guides/rel_notes/deprecation.rst  |   2 +-\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 11 files changed, 25 insertions(+), 511 deletions(-)",
    "diff": "diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c\nindex bb0be8cf42..f0fe97fb9c 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/rel_notes/deprecation.rst b/doc/guides/rel_notes/deprecation.rst\nindex 223ff7661f..f655fc06ac 100644\n--- a/doc/guides/rel_notes/deprecation.rst\n+++ b/doc/guides/rel_notes/deprecation.rst\n@@ -108,7 +108,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/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c\nindex 6c1236953a..12bc3288e5 100644\n--- a/drivers/net/bnxt/bnxt_ethdev.c\n+++ b/drivers/net/bnxt/bnxt_ethdev.c\n@@ -2987,160 +2987,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@@ -3815,9 +3661,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 14a254ab74..28a088a71b 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 1abf05a80c..75f3a2f3d3 100644\n--- a/drivers/net/sfc/sfc_ethdev.c\n+++ b/drivers/net/sfc/sfc_ethdev.c\n@@ -1748,9 +1748,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": [
        "03/14"
    ]
}