ethdev: deprecate legacy filter API

Message ID 20190417003627.24607-1-thomas@monjalon.net (mailing list archive)
State Accepted, archived
Delegated to: Ferruh Yigit
Headers
Series ethdev: deprecate legacy filter API |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK
ci/intel-Performance-Testing success Performance Testing PASS
ci/mellanox-Performance-Testing success Performance Testing PASS

Commit Message

Thomas Monjalon April 17, 2019, 12:36 a.m. UTC
  As stated in the deprecation notice from December 2016,
"the legacy filter API, including rte_eth_dev_filter_supported(),
rte_eth_dev_filter_ctrl() as well as filter types MACVLAN, ETHERTYPE,
FLEXIBLE, SYN, NTUPLE, TUNNEL, FDIR, HASH and L2_TUNNEL, is superseded
by the generic flow API (rte_flow)".

After a long wait of more than two years, the legacy filter API
is marked as deprecated, while still tested with testpmd and
the tep_termination example.

The next step will be to announce a deadline for complete removal.
As preparation of the removal of rte_eth_ctrl.h,
RTE_ETH_FLOW_*, RTE_TUNNEL_TYPE_* and RTE_ETH_HASH_FUNCTION_* definitions
are moved to rte_ethdev.h and rte_flow.h.

Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
---
 app/test-pmd/cmdline.c               |  1 -
 app/test-pmd/cmdline_flow.c          |  1 -
 drivers/net/dpaa2/dpaa2_flow.c       |  1 -
 drivers/net/dpaa2/dpaa2_mux.c        |  1 -
 drivers/net/enic/enic_clsf.c         |  1 -
 drivers/net/failsafe/failsafe_ops.c  | 20 +--------
 drivers/net/i40e/i40e_ethdev.c       |  1 -
 drivers/net/i40e/i40e_ethdev.h       |  1 -
 drivers/net/i40e/i40e_flow.c         |  1 -
 drivers/net/mlx4/mlx4_flow.c         |  1 -
 drivers/net/mlx4/mlx4_flow.h         |  1 -
 drivers/net/mlx5/mlx5_flow.c         |  1 -
 drivers/net/mlx5/mlx5_flow_dv.c      |  1 -
 drivers/net/mlx5/mlx5_flow_verbs.c   |  1 -
 drivers/net/sfc/sfc_flow.c           |  1 -
 examples/tep_termination/Makefile    |  2 +
 examples/tep_termination/meson.build |  1 +
 lib/librte_ethdev/rte_eth_ctrl.h     | 64 +---------------------------
 lib/librte_ethdev/rte_ethdev.h       | 62 +++++++++++++++++++++++++--
 lib/librte_ethdev/rte_flow.h         | 11 ++++-
 20 files changed, 75 insertions(+), 99 deletions(-)
  

Comments

Shahaf Shuler April 17, 2019, 5:41 a.m. UTC | #1
Wednesday, April 17, 2019 3:36 AM, Thomas Monjalon:
> Subject: [PATCH] ethdev: deprecate legacy filter API
> 
> As stated in the deprecation notice from December 2016, "the legacy filter
> API, including rte_eth_dev_filter_supported(),
> rte_eth_dev_filter_ctrl() as well as filter types MACVLAN, ETHERTYPE,
> FLEXIBLE, SYN, NTUPLE, TUNNEL, FDIR, HASH and L2_TUNNEL, is superseded
> by the generic flow API (rte_flow)".
> 
> After a long wait of more than two years, the legacy filter API is marked as
> deprecated, while still tested with testpmd and the tep_termination
> example.
> 
> The next step will be to announce a deadline for complete removal.
> As preparation of the removal of rte_eth_ctrl.h, RTE_ETH_FLOW_*,
> RTE_TUNNEL_TYPE_* and RTE_ETH_HASH_FUNCTION_* definitions are
> moved to rte_ethdev.h and rte_flow.h.
> 
> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>

Acked-by: Shahaf Shuler <shahafs@mellanox.com>

It's about time 😊. 

> ---
>  app/test-pmd/cmdline.c               |  1 -
>  app/test-pmd/cmdline_flow.c          |  1 -
>  drivers/net/dpaa2/dpaa2_flow.c       |  1 -
>  drivers/net/dpaa2/dpaa2_mux.c        |  1 -
>  drivers/net/enic/enic_clsf.c         |  1 -
>  drivers/net/failsafe/failsafe_ops.c  | 20 +--------
>  drivers/net/i40e/i40e_ethdev.c       |  1 -
>  drivers/net/i40e/i40e_ethdev.h       |  1 -
>  drivers/net/i40e/i40e_flow.c         |  1 -
>  drivers/net/mlx4/mlx4_flow.c         |  1 -
>  drivers/net/mlx4/mlx4_flow.h         |  1 -
>  drivers/net/mlx5/mlx5_flow.c         |  1 -
>  drivers/net/mlx5/mlx5_flow_dv.c      |  1 -
>  drivers/net/mlx5/mlx5_flow_verbs.c   |  1 -
>  drivers/net/sfc/sfc_flow.c           |  1 -
>  examples/tep_termination/Makefile    |  2 +
>  examples/tep_termination/meson.build |  1 +
>  lib/librte_ethdev/rte_eth_ctrl.h     | 64 +---------------------------
>  lib/librte_ethdev/rte_ethdev.h       | 62 +++++++++++++++++++++++++--
>  lib/librte_ethdev/rte_flow.h         | 11 ++++-
>  20 files changed, 75 insertions(+), 99 deletions(-)
> 
> diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index
> 2ab03c111..3e405d262 100644
> --- a/app/test-pmd/cmdline.c
> +++ b/app/test-pmd/cmdline.c
> @@ -44,7 +44,6 @@
>  #include <rte_ethdev.h>
>  #include <rte_string_fns.h>
>  #include <rte_devargs.h>
> -#include <rte_eth_ctrl.h>
>  #include <rte_flow.h>
>  #include <rte_gro.h>
> 
> diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c
> index 54ff1753c..3070e0e0d 100644
> --- a/app/test-pmd/cmdline_flow.c
> +++ b/app/test-pmd/cmdline_flow.c
> @@ -15,7 +15,6 @@
> 
>  #include <rte_string_fns.h>
>  #include <rte_common.h>
> -#include <rte_eth_ctrl.h>
>  #include <rte_ethdev.h>
>  #include <rte_byteorder.h>
>  #include <cmdline_parse.h>
> diff --git a/drivers/net/dpaa2/dpaa2_flow.c
> b/drivers/net/dpaa2/dpaa2_flow.c index c94c7ef6b..98f68139b 100644
> --- a/drivers/net/dpaa2/dpaa2_flow.c
> +++ b/drivers/net/dpaa2/dpaa2_flow.c
> @@ -12,7 +12,6 @@
> 
>  #include <rte_ethdev.h>
>  #include <rte_log.h>
> -#include <rte_eth_ctrl.h>
>  #include <rte_malloc.h>
>  #include <rte_flow_driver.h>
>  #include <rte_tailq.h>
> diff --git a/drivers/net/dpaa2/dpaa2_mux.c
> b/drivers/net/dpaa2/dpaa2_mux.c index 1d043dcdc..e487c6b54 100644
> --- a/drivers/net/dpaa2/dpaa2_mux.c
> +++ b/drivers/net/dpaa2/dpaa2_mux.c
> @@ -12,7 +12,6 @@
> 
>  #include <rte_ethdev.h>
>  #include <rte_log.h>
> -#include <rte_eth_ctrl.h>
>  #include <rte_malloc.h>
>  #include <rte_flow_driver.h>
>  #include <rte_tailq.h>
> diff --git a/drivers/net/enic/enic_clsf.c b/drivers/net/enic/enic_clsf.c index
> 48c8e6264..53f57b01a 100644
> --- a/drivers/net/enic/enic_clsf.c
> +++ b/drivers/net/enic/enic_clsf.c
> @@ -11,7 +11,6 @@
>  #include <rte_tcp.h>
>  #include <rte_udp.h>
>  #include <rte_sctp.h>
> -#include <rte_eth_ctrl.h>
> 
>  #include "enic_compat.h"
>  #include "enic.h"
> diff --git a/drivers/net/failsafe/failsafe_ops.c
> b/drivers/net/failsafe/failsafe_ops.c
> index 65957a2e5..43d6a828f 100644
> --- a/drivers/net/failsafe/failsafe_ops.c
> +++ b/drivers/net/failsafe/failsafe_ops.c
> @@ -1208,33 +1208,17 @@ fs_rss_hash_update(struct rte_eth_dev *dev,  }
> 
>  static int
> -fs_filter_ctrl(struct rte_eth_dev *dev,
> +fs_filter_ctrl(struct rte_eth_dev *dev __rte_unused,
>  		enum rte_filter_type type,
>  		enum rte_filter_op op,
>  		void *arg)
>  {
> -	struct sub_device *sdev;
> -	uint8_t i;
> -	int ret;
> -
>  	if (type == RTE_ETH_FILTER_GENERIC &&
>  	    op == RTE_ETH_FILTER_GET) {
>  		*(const void **)arg = &fs_flow_ops;
>  		return 0;
>  	}
> -	fs_lock(dev, 0);
> -	FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {
> -		DEBUG("Calling rte_eth_dev_filter_ctrl on sub_device %d",
> i);
> -		ret = rte_eth_dev_filter_ctrl(PORT_ID(sdev), type, op, arg);
> -		if ((ret = fs_err(sdev, ret))) {
> -			ERROR("Operation rte_eth_dev_filter_ctrl failed for
> sub_device %d"
> -			      " with error %d", i, ret);
> -			fs_unlock(dev, 0);
> -			return ret;
> -		}
> -	}
> -	fs_unlock(dev, 0);
> -	return 0;
> +	return -ENOTSUP;
>  }
> 
>  const struct eth_dev_ops failsafe_ops = { diff --git
> a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c index
> 5b01dc1f0..f6fc0056c 100644
> --- a/drivers/net/i40e/i40e_ethdev.c
> +++ b/drivers/net/i40e/i40e_ethdev.c
> @@ -24,7 +24,6 @@
>  #include <rte_memcpy.h>
>  #include <rte_alarm.h>
>  #include <rte_dev.h>
> -#include <rte_eth_ctrl.h>
>  #include <rte_tailq.h>
>  #include <rte_hash_crc.h>
> 
> diff --git a/drivers/net/i40e/i40e_ethdev.h
> b/drivers/net/i40e/i40e_ethdev.h index 930eb9aba..98550380e 100644
> --- a/drivers/net/i40e/i40e_ethdev.h
> +++ b/drivers/net/i40e/i40e_ethdev.h
> @@ -7,7 +7,6 @@
> 
>  #include <stdint.h>
> 
> -#include <rte_eth_ctrl.h>
>  #include <rte_time.h>
>  #include <rte_kvargs.h>
>  #include <rte_hash.h>
> diff --git a/drivers/net/i40e/i40e_flow.c b/drivers/net/i40e/i40e_flow.c
> index 3694df255..5447e4ea5 100644
> --- a/drivers/net/i40e/i40e_flow.c
> +++ b/drivers/net/i40e/i40e_flow.c
> @@ -15,7 +15,6 @@
>  #include <rte_ethdev_driver.h>
>  #include <rte_log.h>
>  #include <rte_malloc.h>
> -#include <rte_eth_ctrl.h>
>  #include <rte_tailq.h>
>  #include <rte_flow_driver.h>
> 
> diff --git a/drivers/net/mlx4/mlx4_flow.c b/drivers/net/mlx4/mlx4_flow.c
> index 038dc71d3..1dcdb31a0 100644
> --- a/drivers/net/mlx4/mlx4_flow.c
> +++ b/drivers/net/mlx4/mlx4_flow.c
> @@ -28,7 +28,6 @@
> 
>  #include <rte_byteorder.h>
>  #include <rte_errno.h>
> -#include <rte_eth_ctrl.h>
>  #include <rte_ethdev_driver.h>
>  #include <rte_ether.h>
>  #include <rte_flow.h>
> diff --git a/drivers/net/mlx4/mlx4_flow.h b/drivers/net/mlx4/mlx4_flow.h
> index 03a4bd05e..26465c66a 100644
> --- a/drivers/net/mlx4/mlx4_flow.h
> +++ b/drivers/net/mlx4/mlx4_flow.h
> @@ -18,7 +18,6 @@
>  #pragma GCC diagnostic error "-Wpedantic"
>  #endif
> 
> -#include <rte_eth_ctrl.h>
>  #include <rte_ethdev_driver.h>
>  #include <rte_flow.h>
>  #include <rte_flow_driver.h>
> diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c
> index 1c78a5f8e..63420fc3e 100644
> --- a/drivers/net/mlx5/mlx5_flow.c
> +++ b/drivers/net/mlx5/mlx5_flow.c
> @@ -21,7 +21,6 @@
> 
>  #include <rte_common.h>
>  #include <rte_ether.h>
> -#include <rte_eth_ctrl.h>
>  #include <rte_ethdev_driver.h>
>  #include <rte_flow.h>
>  #include <rte_flow_driver.h>
> diff --git a/drivers/net/mlx5/mlx5_flow_dv.c
> b/drivers/net/mlx5/mlx5_flow_dv.c index ccb2f7593..04c969b73 100644
> --- a/drivers/net/mlx5/mlx5_flow_dv.c
> +++ b/drivers/net/mlx5/mlx5_flow_dv.c
> @@ -19,7 +19,6 @@
> 
>  #include <rte_common.h>
>  #include <rte_ether.h>
> -#include <rte_eth_ctrl.h>
>  #include <rte_ethdev_driver.h>
>  #include <rte_flow.h>
>  #include <rte_flow_driver.h>
> diff --git a/drivers/net/mlx5/mlx5_flow_verbs.c
> b/drivers/net/mlx5/mlx5_flow_verbs.c
> index 3956df1a7..dc074bfb3 100644
> --- a/drivers/net/mlx5/mlx5_flow_verbs.c
> +++ b/drivers/net/mlx5/mlx5_flow_verbs.c
> @@ -20,7 +20,6 @@
> 
>  #include <rte_common.h>
>  #include <rte_ether.h>
> -#include <rte_eth_ctrl.h>
>  #include <rte_ethdev_driver.h>
>  #include <rte_flow.h>
>  #include <rte_flow_driver.h>
> diff --git a/drivers/net/sfc/sfc_flow.c b/drivers/net/sfc/sfc_flow.c index
> cffcd9a4c..944296d7d 100644
> --- a/drivers/net/sfc/sfc_flow.c
> +++ b/drivers/net/sfc/sfc_flow.c
> @@ -11,7 +11,6 @@
>  #include <rte_tailq.h>
>  #include <rte_common.h>
>  #include <rte_ethdev_driver.h>
> -#include <rte_eth_ctrl.h>
>  #include <rte_ether.h>
>  #include <rte_flow.h>
>  #include <rte_flow_driver.h>
> diff --git a/examples/tep_termination/Makefile
> b/examples/tep_termination/Makefile
> index 2da41922f..222679bc9 100644
> --- a/examples/tep_termination/Makefile
> +++ b/examples/tep_termination/Makefile
> @@ -26,6 +26,7 @@ LDFLAGS_SHARED = $(shell pkg-config --libs libdpdk)
> LDFLAGS_STATIC = -Wl,-Bstatic $(shell pkg-config --static --libs libdpdk)
> 
>  CFLAGS += -DALLOW_EXPERIMENTAL_API
> +CFLAGS += -Wno-deprecated-declarations
> 
>  build/$(APP)-shared: $(SRCS-y) Makefile $(PC_FILE) | build
>  	$(CC) $(CFLAGS) $(SRCS-y) -o $@ $(LDFLAGS) $(LDFLAGS_SHARED)
> @@ -60,6 +61,7 @@ endif  CFLAGS += -DALLOW_EXPERIMENTAL_API
> CFLAGS += -O3  CFLAGS += $(WERROR_FLAGS)
> +CFLAGS += -Wno-deprecated-declarations
> 
>  include $(RTE_SDK)/mk/rte.extapp.mk
>  endif
> diff --git a/examples/tep_termination/meson.build
> b/examples/tep_termination/meson.build
> index 6d3636243..0e0cb44f0 100644
> --- a/examples/tep_termination/meson.build
> +++ b/examples/tep_termination/meson.build
> @@ -11,6 +11,7 @@ if host_machine.system() != 'linux'
>  endif
>  deps += ['hash', 'vhost']
>  allow_experimental_apis = true
> +cflags += '-Wno-deprecated-declarations'
>  sources = files(
>  	'main.c', 'vxlan.c', 'vxlan_setup.c'
>  )
> diff --git a/lib/librte_ethdev/rte_eth_ctrl.h
> b/lib/librte_ethdev/rte_eth_ctrl.h
> index b3416341b..9fb0657e5 100644
> --- a/lib/librte_ethdev/rte_eth_ctrl.h
> +++ b/lib/librte_ethdev/rte_eth_ctrl.h
> @@ -8,55 +8,20 @@
>  #include <stdint.h>
>  #include <rte_common.h>
>  #include "rte_ether.h"
> +#include "rte_flow.h"
> 
>  /**
> + * @deprecated Please use rte_flow API instead of this legacy one.
>   * @file
>   *
>   * Ethernet device features and related data structures used
>   * by control APIs should be defined in this file.
> - *
>   */
> 
>  #ifdef __cplusplus
>  extern "C" {
>  #endif
> 
> -/*
> - * A packet can be identified by hardware as different flow types. Different
> - * NIC hardwares may support different flow types.
> - * Basically, the NIC hardware identifies the flow type as deep protocol as
> - * possible, and exclusively. For example, if a packet is identified as
> - * 'RTE_ETH_FLOW_NONFRAG_IPV4_TCP', it will not be any of other flow
> types,
> - * though it is an actual IPV4 packet.
> - * Note that the flow types are used to define RSS offload types in
> - * rte_ethdev.h.
> - */
> -#define RTE_ETH_FLOW_UNKNOWN             0
> -#define RTE_ETH_FLOW_RAW                 1
> -#define RTE_ETH_FLOW_IPV4                2
> -#define RTE_ETH_FLOW_FRAG_IPV4           3
> -#define RTE_ETH_FLOW_NONFRAG_IPV4_TCP    4
> -#define RTE_ETH_FLOW_NONFRAG_IPV4_UDP    5
> -#define RTE_ETH_FLOW_NONFRAG_IPV4_SCTP   6
> -#define RTE_ETH_FLOW_NONFRAG_IPV4_OTHER  7
> -#define RTE_ETH_FLOW_IPV6                8
> -#define RTE_ETH_FLOW_FRAG_IPV6           9
> -#define RTE_ETH_FLOW_NONFRAG_IPV6_TCP   10
> -#define RTE_ETH_FLOW_NONFRAG_IPV6_UDP   11
> -#define RTE_ETH_FLOW_NONFRAG_IPV6_SCTP  12 -#define
> RTE_ETH_FLOW_NONFRAG_IPV6_OTHER 13
> -#define RTE_ETH_FLOW_L2_PAYLOAD         14
> -#define RTE_ETH_FLOW_IPV6_EX            15
> -#define RTE_ETH_FLOW_IPV6_TCP_EX        16
> -#define RTE_ETH_FLOW_IPV6_UDP_EX        17
> -#define RTE_ETH_FLOW_PORT               18
> -	/**< Consider device port number as a flow differentiator */
> -#define RTE_ETH_FLOW_VXLAN              19 /**< VXLAN protocol based flow
> */
> -#define RTE_ETH_FLOW_GENEVE             20 /**< GENEVE protocol based
> flow */
> -#define RTE_ETH_FLOW_NVGRE              21 /**< NVGRE protocol based flow
> */
> -#define RTE_ETH_FLOW_VXLAN_GPE          22 /**< VXLAN-GPE protocol
> based flow */
> -#define RTE_ETH_FLOW_MAX                23
> -
>  /**
>   * Feature filter types
>   */
> @@ -218,21 +183,6 @@ struct rte_eth_ntuple_filter {
>  	uint16_t queue;          /**< Queue assigned to when match*/
>  };
> 
> -/**
> - * Tunneled type.
> - */
> -enum rte_eth_tunnel_type {
> -	RTE_TUNNEL_TYPE_NONE = 0,
> -	RTE_TUNNEL_TYPE_VXLAN,
> -	RTE_TUNNEL_TYPE_GENEVE,
> -	RTE_TUNNEL_TYPE_TEREDO,
> -	RTE_TUNNEL_TYPE_NVGRE,
> -	RTE_TUNNEL_TYPE_IP_IN_GRE,
> -	RTE_L2_TUNNEL_TYPE_E_TAG,
> -	RTE_TUNNEL_TYPE_VXLAN_GPE,
> -	RTE_TUNNEL_TYPE_MAX,
> -};
> -
>  /**
>   * filter type of tunneling packet
>   */
> @@ -765,16 +715,6 @@ enum rte_eth_hash_filter_info_type {
>  	RTE_ETH_HASH_FILTER_INFO_TYPE_MAX,
>  };
> 
> -/**
> - * Hash function types.
> - */
> -enum rte_eth_hash_function {
> -	RTE_ETH_HASH_FUNCTION_DEFAULT = 0,
> -	RTE_ETH_HASH_FUNCTION_TOEPLITZ, /**< Toeplitz */
> -	RTE_ETH_HASH_FUNCTION_SIMPLE_XOR, /**< Simple XOR */
> -	RTE_ETH_HASH_FUNCTION_MAX,
> -};
> -
>  #define RTE_SYM_HASH_MASK_ARRAY_SIZE \
>  	(RTE_ALIGN(RTE_ETH_FLOW_MAX, UINT64_BIT)/UINT64_BIT)
>  /**
> diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h
> index 40a068fe8..ca3a990ae 100644
> --- a/lib/librte_ethdev/rte_ethdev.h
> +++ b/lib/librte_ethdev/rte_ethdev.h
> @@ -158,7 +158,6 @@ extern "C" {
>  #include <rte_config.h>
> 
>  #include "rte_ether.h"
> -#include "rte_eth_ctrl.h"
>  #include "rte_dev_info.h"
> 
>  extern int rte_eth_dev_logtype;
> @@ -448,8 +447,43 @@ struct rte_eth_rss_conf {  };
> 
>  /*
> - * The RSS offload types are defined based on flow types which are defined
> - * in rte_eth_ctrl.h. Different NIC hardwares may support different RSS
> offload
> + * A packet can be identified by hardware as different flow types.
> +Different
> + * NIC hardwares may support different flow types.
> + * Basically, the NIC hardware identifies the flow type as deep
> +protocol as
> + * possible, and exclusively. For example, if a packet is identified as
> + * 'RTE_ETH_FLOW_NONFRAG_IPV4_TCP', it will not be any of other flow
> +types,
> + * though it is an actual IPV4 packet.
> + * Note that the flow types are used to define RSS offload types.
> + */
> +#define RTE_ETH_FLOW_UNKNOWN             0
> +#define RTE_ETH_FLOW_RAW                 1
> +#define RTE_ETH_FLOW_IPV4                2
> +#define RTE_ETH_FLOW_FRAG_IPV4           3
> +#define RTE_ETH_FLOW_NONFRAG_IPV4_TCP    4
> +#define RTE_ETH_FLOW_NONFRAG_IPV4_UDP    5
> +#define RTE_ETH_FLOW_NONFRAG_IPV4_SCTP   6
> +#define RTE_ETH_FLOW_NONFRAG_IPV4_OTHER  7
> +#define RTE_ETH_FLOW_IPV6                8
> +#define RTE_ETH_FLOW_FRAG_IPV6           9
> +#define RTE_ETH_FLOW_NONFRAG_IPV6_TCP   10
> +#define RTE_ETH_FLOW_NONFRAG_IPV6_UDP   11
> +#define RTE_ETH_FLOW_NONFRAG_IPV6_SCTP  12 #define
> +RTE_ETH_FLOW_NONFRAG_IPV6_OTHER 13
> +#define RTE_ETH_FLOW_L2_PAYLOAD         14
> +#define RTE_ETH_FLOW_IPV6_EX            15
> +#define RTE_ETH_FLOW_IPV6_TCP_EX        16
> +#define RTE_ETH_FLOW_IPV6_UDP_EX        17
> +#define RTE_ETH_FLOW_PORT               18
> +	/**< Consider device port number as a flow differentiator */
> +#define RTE_ETH_FLOW_VXLAN              19 /**< VXLAN protocol based flow
> */
> +#define RTE_ETH_FLOW_GENEVE             20 /**< GENEVE protocol based
> flow */
> +#define RTE_ETH_FLOW_NVGRE              21 /**< NVGRE protocol based flow
> */
> +#define RTE_ETH_FLOW_VXLAN_GPE          22 /**< VXLAN-GPE protocol
> based flow */
> +#define RTE_ETH_FLOW_MAX                23
> +
> +/*
> + * The RSS offload types are defined based on flow types.
> + * Different NIC hardwares may support different RSS offload
>   * types. The supported flow types or RSS offload types can be queried by
>   * rte_eth_dev_info_get().
>   */
> @@ -834,6 +868,24 @@ struct rte_eth_pfc_conf {
>  	uint8_t priority;          /**< VLAN User Priority. */
>  };
> 
> +/**
> + * Tunneled type.
> + */
> +enum rte_eth_tunnel_type {
> +	RTE_TUNNEL_TYPE_NONE = 0,
> +	RTE_TUNNEL_TYPE_VXLAN,
> +	RTE_TUNNEL_TYPE_GENEVE,
> +	RTE_TUNNEL_TYPE_TEREDO,
> +	RTE_TUNNEL_TYPE_NVGRE,
> +	RTE_TUNNEL_TYPE_IP_IN_GRE,
> +	RTE_L2_TUNNEL_TYPE_E_TAG,
> +	RTE_TUNNEL_TYPE_VXLAN_GPE,
> +	RTE_TUNNEL_TYPE_MAX,
> +};
> +
> +/* Deprecated API file for rte_eth_dev_filter_* functions */ #include
> +"rte_eth_ctrl.h"
> +
>  /**
>   *  Memory space that can be configured to store Flow Director filters
>   *  in the board memory.
> @@ -934,7 +986,7 @@ struct rte_eth_conf {
>  	/** Currently,Priority Flow Control(PFC) are supported,if DCB with
> PFC
>  	    is needed,and the variable must be set ETH_DCB_PFC_SUPPORT.
> */
>  	uint32_t dcb_capability_en;
> -	struct rte_fdir_conf fdir_conf; /**< FDIR configuration. */
> +	struct rte_fdir_conf fdir_conf; /**< FDIR configuration. DEPRECATED
> */
>  	struct rte_intr_conf intr_conf; /**< Interrupt mode configuration. */
> };
> 
> @@ -3251,6 +3303,7 @@ rte_eth_dev_udp_tunnel_port_delete(uint16_t
> port_id,
>   *   - (-ENODEV) if *port_id* invalid.
>   *   - (-EIO) if device is removed.
>   */
> +__rte_deprecated
>  int rte_eth_dev_filter_supported(uint16_t port_id,
>  		enum rte_filter_type filter_type);
> 
> @@ -3273,6 +3326,7 @@ int rte_eth_dev_filter_supported(uint16_t port_id,
>   *   - (-EIO) if device is removed.
>   *   - others depends on the specific operations implementation.
>   */
> +__rte_deprecated
>  int rte_eth_dev_filter_ctrl(uint16_t port_id, enum rte_filter_type
> filter_type,
>  			enum rte_filter_op filter_op, void *arg);
> 
> diff --git a/lib/librte_ethdev/rte_flow.h b/lib/librte_ethdev/rte_flow.h index
> c0fe87924..63f84fca6 100644
> --- a/lib/librte_ethdev/rte_flow.h
> +++ b/lib/librte_ethdev/rte_flow.h
> @@ -20,7 +20,6 @@
>  #include <rte_arp.h>
>  #include <rte_common.h>
>  #include <rte_ether.h>
> -#include <rte_eth_ctrl.h>
>  #include <rte_icmp.h>
>  #include <rte_ip.h>
>  #include <rte_sctp.h>
> @@ -1738,6 +1737,16 @@ struct rte_flow_query_count {
>  	uint64_t bytes; /**< Number of bytes through this rule [out]. */  };
> 
> +/**
> + * Hash function types.
> + */
> +enum rte_eth_hash_function {
> +	RTE_ETH_HASH_FUNCTION_DEFAULT = 0,
> +	RTE_ETH_HASH_FUNCTION_TOEPLITZ, /**< Toeplitz */
> +	RTE_ETH_HASH_FUNCTION_SIMPLE_XOR, /**< Simple XOR */
> +	RTE_ETH_HASH_FUNCTION_MAX,
> +};
> +
>  /**
>   * RTE_FLOW_ACTION_TYPE_RSS
>   *
> --
> 2.21.0
  
Andrew Rybchenko April 17, 2019, 5:59 a.m. UTC | #2
On 4/17/19 8:41 AM, Shahaf Shuler wrote:
> Wednesday, April 17, 2019 3:36 AM, Thomas Monjalon:
>> Subject: [PATCH] ethdev: deprecate legacy filter API
>>
>> As stated in the deprecation notice from December 2016, "the legacy filter
>> API, including rte_eth_dev_filter_supported(),
>> rte_eth_dev_filter_ctrl() as well as filter types MACVLAN, ETHERTYPE,
>> FLEXIBLE, SYN, NTUPLE, TUNNEL, FDIR, HASH and L2_TUNNEL, is superseded
>> by the generic flow API (rte_flow)".
>>
>> After a long wait of more than two years, the legacy filter API is marked as
>> deprecated, while still tested with testpmd and the tep_termination
>> example.
>>
>> The next step will be to announce a deadline for complete removal.
>> As preparation of the removal of rte_eth_ctrl.h, RTE_ETH_FLOW_*,
>> RTE_TUNNEL_TYPE_* and RTE_ETH_HASH_FUNCTION_* definitions are
>> moved to rte_ethdev.h and rte_flow.h.
>>
>> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> Acked-by: Shahaf Shuler <shahafs@mellanox.com>
>
> It's about time 😊.

Acked-by: Andrew Rybchenko <arybchenko@solarflare.com>
  
Jerin Jacob Kollanukkaran April 17, 2019, 6 a.m. UTC | #3
> -----Original Message-----
> From: dev <dev-bounces@dpdk.org> On Behalf Of Shahaf Shuler
> Sent: Wednesday, April 17, 2019 11:11 AM
> To: Thomas Monjalon <thomas@monjalon.net>; Wenzhuo Lu
> <wenzhuo.lu@intel.com>; Jingjing Wu <jingjing.wu@intel.com>; Bernard
> Iremonger <bernard.iremonger@intel.com>; Adrien Mazarguil
> <adrien.mazarguil@6wind.com>; Hemant Agrawal
> <hemant.agrawal@nxp.com>; Shreyansh Jain <shreyansh.jain@nxp.com>; John
> Daley <johndale@cisco.com>; Hyong Youb Kim <hyonkim@cisco.com>; Gaetan
> Rivet <gaetan.rivet@6wind.com>; Beilei Xing <beilei.xing@intel.com>; Qi Zhang
> <qi.z.zhang@intel.com>; Matan Azrad <matan@mellanox.com>; Yongseok Koh
> <yskoh@mellanox.com>; Andrew Rybchenko <arybchenko@solarflare.com>;
> John McNamara <john.mcnamara@intel.com>; Pablo de Lara
> <pablo.de.lara.guarch@intel.com>; Bruce Richardson
> <bruce.richardson@intel.com>; Harry van Haaren
> <harry.van.haaren@intel.com>; Xiaoyun Li <xiaoyun.li@intel.com>; Ferruh Yigit
> <ferruh.yigit@intel.com>
> Cc: dev@dpdk.org
> Subject: Re: [dpdk-dev] [PATCH] ethdev: deprecate legacy filter API
> 
> Wednesday, April 17, 2019 3:36 AM, Thomas Monjalon:
> > Subject: [PATCH] ethdev: deprecate legacy filter API
> >
> > As stated in the deprecation notice from December 2016, "the legacy
> > filter API, including rte_eth_dev_filter_supported(),
> > rte_eth_dev_filter_ctrl() as well as filter types MACVLAN, ETHERTYPE,
> > FLEXIBLE, SYN, NTUPLE, TUNNEL, FDIR, HASH and L2_TUNNEL, is superseded
> > by the generic flow API (rte_flow)".
> >
> > After a long wait of more than two years, the legacy filter API is
> > marked as deprecated, while still tested with testpmd and the
> > tep_termination example.
> >
> > The next step will be to announce a deadline for complete removal.
> > As preparation of the removal of rte_eth_ctrl.h, RTE_ETH_FLOW_*,
> > RTE_TUNNEL_TYPE_* and RTE_ETH_HASH_FUNCTION_* definitions are
> moved to
> > rte_ethdev.h and rte_flow.h.
> >
> > Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> 
> Acked-by: Shahaf Shuler <shahafs@mellanox.com>

Acked-by: Jerin Jacob <jerinj@marvell.com>
  
Stephen Hemminger April 17, 2019, 4:54 p.m. UTC | #4
On Wed, 17 Apr 2019 02:36:27 +0200
Thomas Monjalon <thomas@monjalon.net> wrote:

> As stated in the deprecation notice from December 2016,
> "the legacy filter API, including rte_eth_dev_filter_supported(),
> rte_eth_dev_filter_ctrl() as well as filter types MACVLAN, ETHERTYPE,
> FLEXIBLE, SYN, NTUPLE, TUNNEL, FDIR, HASH and L2_TUNNEL, is superseded
> by the generic flow API (rte_flow)".
> 
> After a long wait of more than two years, the legacy filter API
> is marked as deprecated, while still tested with testpmd and
> the tep_termination example.
> 
> The next step will be to announce a deadline for complete removal.
> As preparation of the removal of rte_eth_ctrl.h,
> RTE_ETH_FLOW_*, RTE_TUNNEL_TYPE_* and RTE_ETH_HASH_FUNCTION_* definitions
> are moved to rte_ethdev.h and rte_flow.h.
> 
> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>

Acked-by: Stephen Hemminger <stephen@networkplumber.org>
  
Hemant Agrawal April 18, 2019, 9:24 a.m. UTC | #5
>  drivers/net/dpaa2/dpaa2_flow.c       |  1 -
>  drivers/net/dpaa2/dpaa2_mux.c        |  1 -

Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com>
  
Adrien Mazarguil April 18, 2019, 12:37 p.m. UTC | #6
On Wed, Apr 17, 2019 at 02:36:27AM +0200, Thomas Monjalon wrote:
> As stated in the deprecation notice from December 2016,
> "the legacy filter API, including rte_eth_dev_filter_supported(),
> rte_eth_dev_filter_ctrl() as well as filter types MACVLAN, ETHERTYPE,
> FLEXIBLE, SYN, NTUPLE, TUNNEL, FDIR, HASH and L2_TUNNEL, is superseded
> by the generic flow API (rte_flow)".
> 
> After a long wait of more than two years, the legacy filter API
> is marked as deprecated, while still tested with testpmd and
> the tep_termination example.
> 
> The next step will be to announce a deadline for complete removal.
> As preparation of the removal of rte_eth_ctrl.h,
> RTE_ETH_FLOW_*, RTE_TUNNEL_TYPE_* and RTE_ETH_HASH_FUNCTION_* definitions
> are moved to rte_ethdev.h and rte_flow.h.
> 
> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>

Acked-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
  
Ajit Khaparde April 18, 2019, 5:58 p.m. UTC | #7
On Tue, Apr 16, 2019 at 5:37 PM Thomas Monjalon <thomas@monjalon.net> wrote:

> As stated in the deprecation notice from December 2016,
> "the legacy filter API, including rte_eth_dev_filter_supported(),
> rte_eth_dev_filter_ctrl() as well as filter types MACVLAN, ETHERTYPE,
> FLEXIBLE, SYN, NTUPLE, TUNNEL, FDIR, HASH and L2_TUNNEL, is superseded
> by the generic flow API (rte_flow)".
>
> After a long wait of more than two years, the legacy filter API
> is marked as deprecated, while still tested with testpmd and
> the tep_termination example.
>
> The next step will be to announce a deadline for complete removal.
> As preparation of the removal of rte_eth_ctrl.h,
> RTE_ETH_FLOW_*, RTE_TUNNEL_TYPE_* and RTE_ETH_HASH_FUNCTION_* definitions
> are moved to rte_ethdev.h and rte_flow.h.
>
> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
>
Acked-by: Ajit Khaparde <ajit.khaparde@broadcom.com>


> ---
>  app/test-pmd/cmdline.c               |  1 -
>  app/test-pmd/cmdline_flow.c          |  1 -
>  drivers/net/dpaa2/dpaa2_flow.c       |  1 -
>  drivers/net/dpaa2/dpaa2_mux.c        |  1 -
>  drivers/net/enic/enic_clsf.c         |  1 -
>  drivers/net/failsafe/failsafe_ops.c  | 20 +--------
>  drivers/net/i40e/i40e_ethdev.c       |  1 -
>  drivers/net/i40e/i40e_ethdev.h       |  1 -
>  drivers/net/i40e/i40e_flow.c         |  1 -
>  drivers/net/mlx4/mlx4_flow.c         |  1 -
>  drivers/net/mlx4/mlx4_flow.h         |  1 -
>  drivers/net/mlx5/mlx5_flow.c         |  1 -
>  drivers/net/mlx5/mlx5_flow_dv.c      |  1 -
>  drivers/net/mlx5/mlx5_flow_verbs.c   |  1 -
>  drivers/net/sfc/sfc_flow.c           |  1 -
>  examples/tep_termination/Makefile    |  2 +
>  examples/tep_termination/meson.build |  1 +
>  lib/librte_ethdev/rte_eth_ctrl.h     | 64 +---------------------------
>  lib/librte_ethdev/rte_ethdev.h       | 62 +++++++++++++++++++++++++--
>  lib/librte_ethdev/rte_flow.h         | 11 ++++-
>  20 files changed, 75 insertions(+), 99 deletions(-)
>
> diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
> index 2ab03c111..3e405d262 100644
> --- a/app/test-pmd/cmdline.c
> +++ b/app/test-pmd/cmdline.c
> @@ -44,7 +44,6 @@
>  #include <rte_ethdev.h>
>  #include <rte_string_fns.h>
>  #include <rte_devargs.h>
> -#include <rte_eth_ctrl.h>
>  #include <rte_flow.h>
>  #include <rte_gro.h>
>
> diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c
> index 54ff1753c..3070e0e0d 100644
> --- a/app/test-pmd/cmdline_flow.c
> +++ b/app/test-pmd/cmdline_flow.c
> @@ -15,7 +15,6 @@
>
>  #include <rte_string_fns.h>
>  #include <rte_common.h>
> -#include <rte_eth_ctrl.h>
>  #include <rte_ethdev.h>
>  #include <rte_byteorder.h>
>  #include <cmdline_parse.h>
> diff --git a/drivers/net/dpaa2/dpaa2_flow.c
> b/drivers/net/dpaa2/dpaa2_flow.c
> index c94c7ef6b..98f68139b 100644
> --- a/drivers/net/dpaa2/dpaa2_flow.c
> +++ b/drivers/net/dpaa2/dpaa2_flow.c
> @@ -12,7 +12,6 @@
>
>  #include <rte_ethdev.h>
>  #include <rte_log.h>
> -#include <rte_eth_ctrl.h>
>  #include <rte_malloc.h>
>  #include <rte_flow_driver.h>
>  #include <rte_tailq.h>
> diff --git a/drivers/net/dpaa2/dpaa2_mux.c b/drivers/net/dpaa2/dpaa2_mux.c
> index 1d043dcdc..e487c6b54 100644
> --- a/drivers/net/dpaa2/dpaa2_mux.c
> +++ b/drivers/net/dpaa2/dpaa2_mux.c
> @@ -12,7 +12,6 @@
>
>  #include <rte_ethdev.h>
>  #include <rte_log.h>
> -#include <rte_eth_ctrl.h>
>  #include <rte_malloc.h>
>  #include <rte_flow_driver.h>
>  #include <rte_tailq.h>
> diff --git a/drivers/net/enic/enic_clsf.c b/drivers/net/enic/enic_clsf.c
> index 48c8e6264..53f57b01a 100644
> --- a/drivers/net/enic/enic_clsf.c
> +++ b/drivers/net/enic/enic_clsf.c
> @@ -11,7 +11,6 @@
>  #include <rte_tcp.h>
>  #include <rte_udp.h>
>  #include <rte_sctp.h>
> -#include <rte_eth_ctrl.h>
>
>  #include "enic_compat.h"
>  #include "enic.h"
> diff --git a/drivers/net/failsafe/failsafe_ops.c
> b/drivers/net/failsafe/failsafe_ops.c
> index 65957a2e5..43d6a828f 100644
> --- a/drivers/net/failsafe/failsafe_ops.c
> +++ b/drivers/net/failsafe/failsafe_ops.c
> @@ -1208,33 +1208,17 @@ fs_rss_hash_update(struct rte_eth_dev *dev,
>  }
>
>  static int
> -fs_filter_ctrl(struct rte_eth_dev *dev,
> +fs_filter_ctrl(struct rte_eth_dev *dev __rte_unused,
>                 enum rte_filter_type type,
>                 enum rte_filter_op op,
>                 void *arg)
>  {
> -       struct sub_device *sdev;
> -       uint8_t i;
> -       int ret;
> -
>         if (type == RTE_ETH_FILTER_GENERIC &&
>             op == RTE_ETH_FILTER_GET) {
>                 *(const void **)arg = &fs_flow_ops;
>                 return 0;
>         }
> -       fs_lock(dev, 0);
> -       FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {
> -               DEBUG("Calling rte_eth_dev_filter_ctrl on sub_device %d",
> i);
> -               ret = rte_eth_dev_filter_ctrl(PORT_ID(sdev), type, op,
> arg);
> -               if ((ret = fs_err(sdev, ret))) {
> -                       ERROR("Operation rte_eth_dev_filter_ctrl failed
> for sub_device %d"
> -                             " with error %d", i, ret);
> -                       fs_unlock(dev, 0);
> -                       return ret;
> -               }
> -       }
> -       fs_unlock(dev, 0);
> -       return 0;
> +       return -ENOTSUP;
>  }
>
>  const struct eth_dev_ops failsafe_ops = {
> diff --git a/drivers/net/i40e/i40e_ethdev.c
> b/drivers/net/i40e/i40e_ethdev.c
> index 5b01dc1f0..f6fc0056c 100644
> --- a/drivers/net/i40e/i40e_ethdev.c
> +++ b/drivers/net/i40e/i40e_ethdev.c
> @@ -24,7 +24,6 @@
>  #include <rte_memcpy.h>
>  #include <rte_alarm.h>
>  #include <rte_dev.h>
> -#include <rte_eth_ctrl.h>
>  #include <rte_tailq.h>
>  #include <rte_hash_crc.h>
>
> diff --git a/drivers/net/i40e/i40e_ethdev.h
> b/drivers/net/i40e/i40e_ethdev.h
> index 930eb9aba..98550380e 100644
> --- a/drivers/net/i40e/i40e_ethdev.h
> +++ b/drivers/net/i40e/i40e_ethdev.h
> @@ -7,7 +7,6 @@
>
>  #include <stdint.h>
>
> -#include <rte_eth_ctrl.h>
>  #include <rte_time.h>
>  #include <rte_kvargs.h>
>  #include <rte_hash.h>
> diff --git a/drivers/net/i40e/i40e_flow.c b/drivers/net/i40e/i40e_flow.c
> index 3694df255..5447e4ea5 100644
> --- a/drivers/net/i40e/i40e_flow.c
> +++ b/drivers/net/i40e/i40e_flow.c
> @@ -15,7 +15,6 @@
>  #include <rte_ethdev_driver.h>
>  #include <rte_log.h>
>  #include <rte_malloc.h>
> -#include <rte_eth_ctrl.h>
>  #include <rte_tailq.h>
>  #include <rte_flow_driver.h>
>
> diff --git a/drivers/net/mlx4/mlx4_flow.c b/drivers/net/mlx4/mlx4_flow.c
> index 038dc71d3..1dcdb31a0 100644
> --- a/drivers/net/mlx4/mlx4_flow.c
> +++ b/drivers/net/mlx4/mlx4_flow.c
> @@ -28,7 +28,6 @@
>
>  #include <rte_byteorder.h>
>  #include <rte_errno.h>
> -#include <rte_eth_ctrl.h>
>  #include <rte_ethdev_driver.h>
>  #include <rte_ether.h>
>  #include <rte_flow.h>
> diff --git a/drivers/net/mlx4/mlx4_flow.h b/drivers/net/mlx4/mlx4_flow.h
> index 03a4bd05e..26465c66a 100644
> --- a/drivers/net/mlx4/mlx4_flow.h
> +++ b/drivers/net/mlx4/mlx4_flow.h
> @@ -18,7 +18,6 @@
>  #pragma GCC diagnostic error "-Wpedantic"
>  #endif
>
> -#include <rte_eth_ctrl.h>
>  #include <rte_ethdev_driver.h>
>  #include <rte_flow.h>
>  #include <rte_flow_driver.h>
> diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c
> index 1c78a5f8e..63420fc3e 100644
> --- a/drivers/net/mlx5/mlx5_flow.c
> +++ b/drivers/net/mlx5/mlx5_flow.c
> @@ -21,7 +21,6 @@
>
>  #include <rte_common.h>
>  #include <rte_ether.h>
> -#include <rte_eth_ctrl.h>
>  #include <rte_ethdev_driver.h>
>  #include <rte_flow.h>
>  #include <rte_flow_driver.h>
> diff --git a/drivers/net/mlx5/mlx5_flow_dv.c
> b/drivers/net/mlx5/mlx5_flow_dv.c
> index ccb2f7593..04c969b73 100644
> --- a/drivers/net/mlx5/mlx5_flow_dv.c
> +++ b/drivers/net/mlx5/mlx5_flow_dv.c
> @@ -19,7 +19,6 @@
>
>  #include <rte_common.h>
>  #include <rte_ether.h>
> -#include <rte_eth_ctrl.h>
>  #include <rte_ethdev_driver.h>
>  #include <rte_flow.h>
>  #include <rte_flow_driver.h>
> diff --git a/drivers/net/mlx5/mlx5_flow_verbs.c
> b/drivers/net/mlx5/mlx5_flow_verbs.c
> index 3956df1a7..dc074bfb3 100644
> --- a/drivers/net/mlx5/mlx5_flow_verbs.c
> +++ b/drivers/net/mlx5/mlx5_flow_verbs.c
> @@ -20,7 +20,6 @@
>
>  #include <rte_common.h>
>  #include <rte_ether.h>
> -#include <rte_eth_ctrl.h>
>  #include <rte_ethdev_driver.h>
>  #include <rte_flow.h>
>  #include <rte_flow_driver.h>
> diff --git a/drivers/net/sfc/sfc_flow.c b/drivers/net/sfc/sfc_flow.c
> index cffcd9a4c..944296d7d 100644
> --- a/drivers/net/sfc/sfc_flow.c
> +++ b/drivers/net/sfc/sfc_flow.c
> @@ -11,7 +11,6 @@
>  #include <rte_tailq.h>
>  #include <rte_common.h>
>  #include <rte_ethdev_driver.h>
> -#include <rte_eth_ctrl.h>
>  #include <rte_ether.h>
>  #include <rte_flow.h>
>  #include <rte_flow_driver.h>
> diff --git a/examples/tep_termination/Makefile
> b/examples/tep_termination/Makefile
> index 2da41922f..222679bc9 100644
> --- a/examples/tep_termination/Makefile
> +++ b/examples/tep_termination/Makefile
> @@ -26,6 +26,7 @@ LDFLAGS_SHARED = $(shell pkg-config --libs libdpdk)
>  LDFLAGS_STATIC = -Wl,-Bstatic $(shell pkg-config --static --libs libdpdk)
>
>  CFLAGS += -DALLOW_EXPERIMENTAL_API
> +CFLAGS += -Wno-deprecated-declarations
>
>  build/$(APP)-shared: $(SRCS-y) Makefile $(PC_FILE) | build
>         $(CC) $(CFLAGS) $(SRCS-y) -o $@ $(LDFLAGS) $(LDFLAGS_SHARED)
> @@ -60,6 +61,7 @@ endif
>  CFLAGS += -DALLOW_EXPERIMENTAL_API
>  CFLAGS += -O3
>  CFLAGS += $(WERROR_FLAGS)
> +CFLAGS += -Wno-deprecated-declarations
>
>  include $(RTE_SDK)/mk/rte.extapp.mk
>  endif
> diff --git a/examples/tep_termination/meson.build
> b/examples/tep_termination/meson.build
> index 6d3636243..0e0cb44f0 100644
> --- a/examples/tep_termination/meson.build
> +++ b/examples/tep_termination/meson.build
> @@ -11,6 +11,7 @@ if host_machine.system() != 'linux'
>  endif
>  deps += ['hash', 'vhost']
>  allow_experimental_apis = true
> +cflags += '-Wno-deprecated-declarations'
>  sources = files(
>         'main.c', 'vxlan.c', 'vxlan_setup.c'
>  )
> diff --git a/lib/librte_ethdev/rte_eth_ctrl.h
> b/lib/librte_ethdev/rte_eth_ctrl.h
> index b3416341b..9fb0657e5 100644
> --- a/lib/librte_ethdev/rte_eth_ctrl.h
> +++ b/lib/librte_ethdev/rte_eth_ctrl.h
> @@ -8,55 +8,20 @@
>  #include <stdint.h>
>  #include <rte_common.h>
>  #include "rte_ether.h"
> +#include "rte_flow.h"
>
>  /**
> + * @deprecated Please use rte_flow API instead of this legacy one.
>   * @file
>   *
>   * Ethernet device features and related data structures used
>   * by control APIs should be defined in this file.
> - *
>   */
>
>  #ifdef __cplusplus
>  extern "C" {
>  #endif
>
> -/*
> - * A packet can be identified by hardware as different flow types.
> Different
> - * NIC hardwares may support different flow types.
> - * Basically, the NIC hardware identifies the flow type as deep protocol
> as
> - * possible, and exclusively. For example, if a packet is identified as
> - * 'RTE_ETH_FLOW_NONFRAG_IPV4_TCP', it will not be any of other flow
> types,
> - * though it is an actual IPV4 packet.
> - * Note that the flow types are used to define RSS offload types in
> - * rte_ethdev.h.
> - */
> -#define RTE_ETH_FLOW_UNKNOWN             0
> -#define RTE_ETH_FLOW_RAW                 1
> -#define RTE_ETH_FLOW_IPV4                2
> -#define RTE_ETH_FLOW_FRAG_IPV4           3
> -#define RTE_ETH_FLOW_NONFRAG_IPV4_TCP    4
> -#define RTE_ETH_FLOW_NONFRAG_IPV4_UDP    5
> -#define RTE_ETH_FLOW_NONFRAG_IPV4_SCTP   6
> -#define RTE_ETH_FLOW_NONFRAG_IPV4_OTHER  7
> -#define RTE_ETH_FLOW_IPV6                8
> -#define RTE_ETH_FLOW_FRAG_IPV6           9
> -#define RTE_ETH_FLOW_NONFRAG_IPV6_TCP   10
> -#define RTE_ETH_FLOW_NONFRAG_IPV6_UDP   11
> -#define RTE_ETH_FLOW_NONFRAG_IPV6_SCTP  12
> -#define RTE_ETH_FLOW_NONFRAG_IPV6_OTHER 13
> -#define RTE_ETH_FLOW_L2_PAYLOAD         14
> -#define RTE_ETH_FLOW_IPV6_EX            15
> -#define RTE_ETH_FLOW_IPV6_TCP_EX        16
> -#define RTE_ETH_FLOW_IPV6_UDP_EX        17
> -#define RTE_ETH_FLOW_PORT               18
> -       /**< Consider device port number as a flow differentiator */
> -#define RTE_ETH_FLOW_VXLAN              19 /**< VXLAN protocol based flow
> */
> -#define RTE_ETH_FLOW_GENEVE             20 /**< GENEVE protocol based
> flow */
> -#define RTE_ETH_FLOW_NVGRE              21 /**< NVGRE protocol based flow
> */
> -#define RTE_ETH_FLOW_VXLAN_GPE          22 /**< VXLAN-GPE protocol based
> flow */
> -#define RTE_ETH_FLOW_MAX                23
> -
>  /**
>   * Feature filter types
>   */
> @@ -218,21 +183,6 @@ struct rte_eth_ntuple_filter {
>         uint16_t queue;          /**< Queue assigned to when match*/
>  };
>
> -/**
> - * Tunneled type.
> - */
> -enum rte_eth_tunnel_type {
> -       RTE_TUNNEL_TYPE_NONE = 0,
> -       RTE_TUNNEL_TYPE_VXLAN,
> -       RTE_TUNNEL_TYPE_GENEVE,
> -       RTE_TUNNEL_TYPE_TEREDO,
> -       RTE_TUNNEL_TYPE_NVGRE,
> -       RTE_TUNNEL_TYPE_IP_IN_GRE,
> -       RTE_L2_TUNNEL_TYPE_E_TAG,
> -       RTE_TUNNEL_TYPE_VXLAN_GPE,
> -       RTE_TUNNEL_TYPE_MAX,
> -};
> -
>  /**
>   * filter type of tunneling packet
>   */
> @@ -765,16 +715,6 @@ enum rte_eth_hash_filter_info_type {
>         RTE_ETH_HASH_FILTER_INFO_TYPE_MAX,
>  };
>
> -/**
> - * Hash function types.
> - */
> -enum rte_eth_hash_function {
> -       RTE_ETH_HASH_FUNCTION_DEFAULT = 0,
> -       RTE_ETH_HASH_FUNCTION_TOEPLITZ, /**< Toeplitz */
> -       RTE_ETH_HASH_FUNCTION_SIMPLE_XOR, /**< Simple XOR */
> -       RTE_ETH_HASH_FUNCTION_MAX,
> -};
> -
>  #define RTE_SYM_HASH_MASK_ARRAY_SIZE \
>         (RTE_ALIGN(RTE_ETH_FLOW_MAX, UINT64_BIT)/UINT64_BIT)
>  /**
> diff --git a/lib/librte_ethdev/rte_ethdev.h
> b/lib/librte_ethdev/rte_ethdev.h
> index 40a068fe8..ca3a990ae 100644
> --- a/lib/librte_ethdev/rte_ethdev.h
> +++ b/lib/librte_ethdev/rte_ethdev.h
> @@ -158,7 +158,6 @@ extern "C" {
>  #include <rte_config.h>
>
>  #include "rte_ether.h"
> -#include "rte_eth_ctrl.h"
>  #include "rte_dev_info.h"
>
>  extern int rte_eth_dev_logtype;
> @@ -448,8 +447,43 @@ struct rte_eth_rss_conf {
>  };
>
>  /*
> - * The RSS offload types are defined based on flow types which are defined
> - * in rte_eth_ctrl.h. Different NIC hardwares may support different RSS
> offload
> + * A packet can be identified by hardware as different flow types.
> Different
> + * NIC hardwares may support different flow types.
> + * Basically, the NIC hardware identifies the flow type as deep protocol
> as
> + * possible, and exclusively. For example, if a packet is identified as
> + * 'RTE_ETH_FLOW_NONFRAG_IPV4_TCP', it will not be any of other flow
> types,
> + * though it is an actual IPV4 packet.
> + * Note that the flow types are used to define RSS offload types.
> + */
> +#define RTE_ETH_FLOW_UNKNOWN             0
> +#define RTE_ETH_FLOW_RAW                 1
> +#define RTE_ETH_FLOW_IPV4                2
> +#define RTE_ETH_FLOW_FRAG_IPV4           3
> +#define RTE_ETH_FLOW_NONFRAG_IPV4_TCP    4
> +#define RTE_ETH_FLOW_NONFRAG_IPV4_UDP    5
> +#define RTE_ETH_FLOW_NONFRAG_IPV4_SCTP   6
> +#define RTE_ETH_FLOW_NONFRAG_IPV4_OTHER  7
> +#define RTE_ETH_FLOW_IPV6                8
> +#define RTE_ETH_FLOW_FRAG_IPV6           9
> +#define RTE_ETH_FLOW_NONFRAG_IPV6_TCP   10
> +#define RTE_ETH_FLOW_NONFRAG_IPV6_UDP   11
> +#define RTE_ETH_FLOW_NONFRAG_IPV6_SCTP  12
> +#define RTE_ETH_FLOW_NONFRAG_IPV6_OTHER 13
> +#define RTE_ETH_FLOW_L2_PAYLOAD         14
> +#define RTE_ETH_FLOW_IPV6_EX            15
> +#define RTE_ETH_FLOW_IPV6_TCP_EX        16
> +#define RTE_ETH_FLOW_IPV6_UDP_EX        17
> +#define RTE_ETH_FLOW_PORT               18
> +       /**< Consider device port number as a flow differentiator */
> +#define RTE_ETH_FLOW_VXLAN              19 /**< VXLAN protocol based flow
> */
> +#define RTE_ETH_FLOW_GENEVE             20 /**< GENEVE protocol based
> flow */
> +#define RTE_ETH_FLOW_NVGRE              21 /**< NVGRE protocol based flow
> */
> +#define RTE_ETH_FLOW_VXLAN_GPE          22 /**< VXLAN-GPE protocol based
> flow */
> +#define RTE_ETH_FLOW_MAX                23
> +
> +/*
> + * The RSS offload types are defined based on flow types.
> + * Different NIC hardwares may support different RSS offload
>   * types. The supported flow types or RSS offload types can be queried by
>   * rte_eth_dev_info_get().
>   */
> @@ -834,6 +868,24 @@ struct rte_eth_pfc_conf {
>         uint8_t priority;          /**< VLAN User Priority. */
>  };
>
> +/**
> + * Tunneled type.
> + */
> +enum rte_eth_tunnel_type {
> +       RTE_TUNNEL_TYPE_NONE = 0,
> +       RTE_TUNNEL_TYPE_VXLAN,
> +       RTE_TUNNEL_TYPE_GENEVE,
> +       RTE_TUNNEL_TYPE_TEREDO,
> +       RTE_TUNNEL_TYPE_NVGRE,
> +       RTE_TUNNEL_TYPE_IP_IN_GRE,
> +       RTE_L2_TUNNEL_TYPE_E_TAG,
> +       RTE_TUNNEL_TYPE_VXLAN_GPE,
> +       RTE_TUNNEL_TYPE_MAX,
> +};
> +
> +/* Deprecated API file for rte_eth_dev_filter_* functions */
> +#include "rte_eth_ctrl.h"
> +
>  /**
>   *  Memory space that can be configured to store Flow Director filters
>   *  in the board memory.
> @@ -934,7 +986,7 @@ struct rte_eth_conf {
>         /** Currently,Priority Flow Control(PFC) are supported,if DCB with
> PFC
>             is needed,and the variable must be set ETH_DCB_PFC_SUPPORT. */
>         uint32_t dcb_capability_en;
> -       struct rte_fdir_conf fdir_conf; /**< FDIR configuration. */
> +       struct rte_fdir_conf fdir_conf; /**< FDIR configuration.
> DEPRECATED */
>         struct rte_intr_conf intr_conf; /**< Interrupt mode configuration.
> */
>  };
>
> @@ -3251,6 +3303,7 @@ rte_eth_dev_udp_tunnel_port_delete(uint16_t port_id,
>   *   - (-ENODEV) if *port_id* invalid.
>   *   - (-EIO) if device is removed.
>   */
> +__rte_deprecated
>  int rte_eth_dev_filter_supported(uint16_t port_id,
>                 enum rte_filter_type filter_type);
>
> @@ -3273,6 +3326,7 @@ int rte_eth_dev_filter_supported(uint16_t port_id,
>   *   - (-EIO) if device is removed.
>   *   - others depends on the specific operations implementation.
>   */
> +__rte_deprecated
>  int rte_eth_dev_filter_ctrl(uint16_t port_id, enum rte_filter_type
> filter_type,
>                         enum rte_filter_op filter_op, void *arg);
>
> diff --git a/lib/librte_ethdev/rte_flow.h b/lib/librte_ethdev/rte_flow.h
> index c0fe87924..63f84fca6 100644
> --- a/lib/librte_ethdev/rte_flow.h
> +++ b/lib/librte_ethdev/rte_flow.h
> @@ -20,7 +20,6 @@
>  #include <rte_arp.h>
>  #include <rte_common.h>
>  #include <rte_ether.h>
> -#include <rte_eth_ctrl.h>
>  #include <rte_icmp.h>
>  #include <rte_ip.h>
>  #include <rte_sctp.h>
> @@ -1738,6 +1737,16 @@ struct rte_flow_query_count {
>         uint64_t bytes; /**< Number of bytes through this rule [out]. */
>  };
>
> +/**
> + * Hash function types.
> + */
> +enum rte_eth_hash_function {
> +       RTE_ETH_HASH_FUNCTION_DEFAULT = 0,
> +       RTE_ETH_HASH_FUNCTION_TOEPLITZ, /**< Toeplitz */
> +       RTE_ETH_HASH_FUNCTION_SIMPLE_XOR, /**< Simple XOR */
> +       RTE_ETH_HASH_FUNCTION_MAX,
> +};
> +
>  /**
>   * RTE_FLOW_ACTION_TYPE_RSS
>   *
> --
> 2.21.0
>
>
  
Ferruh Yigit April 18, 2019, 6:16 p.m. UTC | #8
On 4/18/2019 6:58 PM, Ajit Khaparde wrote:
> On Tue, Apr 16, 2019 at 5:37 PM Thomas Monjalon <thomas@monjalon.net> wrote:
> 
>> As stated in the deprecation notice from December 2016,
>> "the legacy filter API, including rte_eth_dev_filter_supported(),
>> rte_eth_dev_filter_ctrl() as well as filter types MACVLAN, ETHERTYPE,
>> FLEXIBLE, SYN, NTUPLE, TUNNEL, FDIR, HASH and L2_TUNNEL, is superseded
>> by the generic flow API (rte_flow)".
>>
>> After a long wait of more than two years, the legacy filter API
>> is marked as deprecated, while still tested with testpmd and
>> the tep_termination example.
>>
>> The next step will be to announce a deadline for complete removal.
>> As preparation of the removal of rte_eth_ctrl.h,
>> RTE_ETH_FLOW_*, RTE_TUNNEL_TYPE_* and RTE_ETH_HASH_FUNCTION_* definitions
>> are moved to rte_ethdev.h and rte_flow.h.
>>
>> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
>>
> Acked-by: Ajit Khaparde <ajit.khaparde@broadcom.com>

    Acked-by: Shahaf Shuler <shahafs@mellanox.com>
    Acked-by: Andrew Rybchenko <arybchenko@solarflare.com>
    Acked-by: Jerin Jacob <jerinj@marvell.com>
    Acked-by: Stephen Hemminger <stephen@networkplumber.org>
    Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com>
    Acked-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>

Applied to dpdk-next-net/master, thanks.
  

Patch

diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index 2ab03c111..3e405d262 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -44,7 +44,6 @@ 
 #include <rte_ethdev.h>
 #include <rte_string_fns.h>
 #include <rte_devargs.h>
-#include <rte_eth_ctrl.h>
 #include <rte_flow.h>
 #include <rte_gro.h>
 
diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c
index 54ff1753c..3070e0e0d 100644
--- a/app/test-pmd/cmdline_flow.c
+++ b/app/test-pmd/cmdline_flow.c
@@ -15,7 +15,6 @@ 
 
 #include <rte_string_fns.h>
 #include <rte_common.h>
-#include <rte_eth_ctrl.h>
 #include <rte_ethdev.h>
 #include <rte_byteorder.h>
 #include <cmdline_parse.h>
diff --git a/drivers/net/dpaa2/dpaa2_flow.c b/drivers/net/dpaa2/dpaa2_flow.c
index c94c7ef6b..98f68139b 100644
--- a/drivers/net/dpaa2/dpaa2_flow.c
+++ b/drivers/net/dpaa2/dpaa2_flow.c
@@ -12,7 +12,6 @@ 
 
 #include <rte_ethdev.h>
 #include <rte_log.h>
-#include <rte_eth_ctrl.h>
 #include <rte_malloc.h>
 #include <rte_flow_driver.h>
 #include <rte_tailq.h>
diff --git a/drivers/net/dpaa2/dpaa2_mux.c b/drivers/net/dpaa2/dpaa2_mux.c
index 1d043dcdc..e487c6b54 100644
--- a/drivers/net/dpaa2/dpaa2_mux.c
+++ b/drivers/net/dpaa2/dpaa2_mux.c
@@ -12,7 +12,6 @@ 
 
 #include <rte_ethdev.h>
 #include <rte_log.h>
-#include <rte_eth_ctrl.h>
 #include <rte_malloc.h>
 #include <rte_flow_driver.h>
 #include <rte_tailq.h>
diff --git a/drivers/net/enic/enic_clsf.c b/drivers/net/enic/enic_clsf.c
index 48c8e6264..53f57b01a 100644
--- a/drivers/net/enic/enic_clsf.c
+++ b/drivers/net/enic/enic_clsf.c
@@ -11,7 +11,6 @@ 
 #include <rte_tcp.h>
 #include <rte_udp.h>
 #include <rte_sctp.h>
-#include <rte_eth_ctrl.h>
 
 #include "enic_compat.h"
 #include "enic.h"
diff --git a/drivers/net/failsafe/failsafe_ops.c b/drivers/net/failsafe/failsafe_ops.c
index 65957a2e5..43d6a828f 100644
--- a/drivers/net/failsafe/failsafe_ops.c
+++ b/drivers/net/failsafe/failsafe_ops.c
@@ -1208,33 +1208,17 @@  fs_rss_hash_update(struct rte_eth_dev *dev,
 }
 
 static int
-fs_filter_ctrl(struct rte_eth_dev *dev,
+fs_filter_ctrl(struct rte_eth_dev *dev __rte_unused,
 		enum rte_filter_type type,
 		enum rte_filter_op op,
 		void *arg)
 {
-	struct sub_device *sdev;
-	uint8_t i;
-	int ret;
-
 	if (type == RTE_ETH_FILTER_GENERIC &&
 	    op == RTE_ETH_FILTER_GET) {
 		*(const void **)arg = &fs_flow_ops;
 		return 0;
 	}
-	fs_lock(dev, 0);
-	FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_ACTIVE) {
-		DEBUG("Calling rte_eth_dev_filter_ctrl on sub_device %d", i);
-		ret = rte_eth_dev_filter_ctrl(PORT_ID(sdev), type, op, arg);
-		if ((ret = fs_err(sdev, ret))) {
-			ERROR("Operation rte_eth_dev_filter_ctrl failed for sub_device %d"
-			      " with error %d", i, ret);
-			fs_unlock(dev, 0);
-			return ret;
-		}
-	}
-	fs_unlock(dev, 0);
-	return 0;
+	return -ENOTSUP;
 }
 
 const struct eth_dev_ops failsafe_ops = {
diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
index 5b01dc1f0..f6fc0056c 100644
--- a/drivers/net/i40e/i40e_ethdev.c
+++ b/drivers/net/i40e/i40e_ethdev.c
@@ -24,7 +24,6 @@ 
 #include <rte_memcpy.h>
 #include <rte_alarm.h>
 #include <rte_dev.h>
-#include <rte_eth_ctrl.h>
 #include <rte_tailq.h>
 #include <rte_hash_crc.h>
 
diff --git a/drivers/net/i40e/i40e_ethdev.h b/drivers/net/i40e/i40e_ethdev.h
index 930eb9aba..98550380e 100644
--- a/drivers/net/i40e/i40e_ethdev.h
+++ b/drivers/net/i40e/i40e_ethdev.h
@@ -7,7 +7,6 @@ 
 
 #include <stdint.h>
 
-#include <rte_eth_ctrl.h>
 #include <rte_time.h>
 #include <rte_kvargs.h>
 #include <rte_hash.h>
diff --git a/drivers/net/i40e/i40e_flow.c b/drivers/net/i40e/i40e_flow.c
index 3694df255..5447e4ea5 100644
--- a/drivers/net/i40e/i40e_flow.c
+++ b/drivers/net/i40e/i40e_flow.c
@@ -15,7 +15,6 @@ 
 #include <rte_ethdev_driver.h>
 #include <rte_log.h>
 #include <rte_malloc.h>
-#include <rte_eth_ctrl.h>
 #include <rte_tailq.h>
 #include <rte_flow_driver.h>
 
diff --git a/drivers/net/mlx4/mlx4_flow.c b/drivers/net/mlx4/mlx4_flow.c
index 038dc71d3..1dcdb31a0 100644
--- a/drivers/net/mlx4/mlx4_flow.c
+++ b/drivers/net/mlx4/mlx4_flow.c
@@ -28,7 +28,6 @@ 
 
 #include <rte_byteorder.h>
 #include <rte_errno.h>
-#include <rte_eth_ctrl.h>
 #include <rte_ethdev_driver.h>
 #include <rte_ether.h>
 #include <rte_flow.h>
diff --git a/drivers/net/mlx4/mlx4_flow.h b/drivers/net/mlx4/mlx4_flow.h
index 03a4bd05e..26465c66a 100644
--- a/drivers/net/mlx4/mlx4_flow.h
+++ b/drivers/net/mlx4/mlx4_flow.h
@@ -18,7 +18,6 @@ 
 #pragma GCC diagnostic error "-Wpedantic"
 #endif
 
-#include <rte_eth_ctrl.h>
 #include <rte_ethdev_driver.h>
 #include <rte_flow.h>
 #include <rte_flow_driver.h>
diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c
index 1c78a5f8e..63420fc3e 100644
--- a/drivers/net/mlx5/mlx5_flow.c
+++ b/drivers/net/mlx5/mlx5_flow.c
@@ -21,7 +21,6 @@ 
 
 #include <rte_common.h>
 #include <rte_ether.h>
-#include <rte_eth_ctrl.h>
 #include <rte_ethdev_driver.h>
 #include <rte_flow.h>
 #include <rte_flow_driver.h>
diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c
index ccb2f7593..04c969b73 100644
--- a/drivers/net/mlx5/mlx5_flow_dv.c
+++ b/drivers/net/mlx5/mlx5_flow_dv.c
@@ -19,7 +19,6 @@ 
 
 #include <rte_common.h>
 #include <rte_ether.h>
-#include <rte_eth_ctrl.h>
 #include <rte_ethdev_driver.h>
 #include <rte_flow.h>
 #include <rte_flow_driver.h>
diff --git a/drivers/net/mlx5/mlx5_flow_verbs.c b/drivers/net/mlx5/mlx5_flow_verbs.c
index 3956df1a7..dc074bfb3 100644
--- a/drivers/net/mlx5/mlx5_flow_verbs.c
+++ b/drivers/net/mlx5/mlx5_flow_verbs.c
@@ -20,7 +20,6 @@ 
 
 #include <rte_common.h>
 #include <rte_ether.h>
-#include <rte_eth_ctrl.h>
 #include <rte_ethdev_driver.h>
 #include <rte_flow.h>
 #include <rte_flow_driver.h>
diff --git a/drivers/net/sfc/sfc_flow.c b/drivers/net/sfc/sfc_flow.c
index cffcd9a4c..944296d7d 100644
--- a/drivers/net/sfc/sfc_flow.c
+++ b/drivers/net/sfc/sfc_flow.c
@@ -11,7 +11,6 @@ 
 #include <rte_tailq.h>
 #include <rte_common.h>
 #include <rte_ethdev_driver.h>
-#include <rte_eth_ctrl.h>
 #include <rte_ether.h>
 #include <rte_flow.h>
 #include <rte_flow_driver.h>
diff --git a/examples/tep_termination/Makefile b/examples/tep_termination/Makefile
index 2da41922f..222679bc9 100644
--- a/examples/tep_termination/Makefile
+++ b/examples/tep_termination/Makefile
@@ -26,6 +26,7 @@  LDFLAGS_SHARED = $(shell pkg-config --libs libdpdk)
 LDFLAGS_STATIC = -Wl,-Bstatic $(shell pkg-config --static --libs libdpdk)
 
 CFLAGS += -DALLOW_EXPERIMENTAL_API
+CFLAGS += -Wno-deprecated-declarations
 
 build/$(APP)-shared: $(SRCS-y) Makefile $(PC_FILE) | build
 	$(CC) $(CFLAGS) $(SRCS-y) -o $@ $(LDFLAGS) $(LDFLAGS_SHARED)
@@ -60,6 +61,7 @@  endif
 CFLAGS += -DALLOW_EXPERIMENTAL_API
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS)
+CFLAGS += -Wno-deprecated-declarations
 
 include $(RTE_SDK)/mk/rte.extapp.mk
 endif
diff --git a/examples/tep_termination/meson.build b/examples/tep_termination/meson.build
index 6d3636243..0e0cb44f0 100644
--- a/examples/tep_termination/meson.build
+++ b/examples/tep_termination/meson.build
@@ -11,6 +11,7 @@  if host_machine.system() != 'linux'
 endif
 deps += ['hash', 'vhost']
 allow_experimental_apis = true
+cflags += '-Wno-deprecated-declarations'
 sources = files(
 	'main.c', 'vxlan.c', 'vxlan_setup.c'
 )
diff --git a/lib/librte_ethdev/rte_eth_ctrl.h b/lib/librte_ethdev/rte_eth_ctrl.h
index b3416341b..9fb0657e5 100644
--- a/lib/librte_ethdev/rte_eth_ctrl.h
+++ b/lib/librte_ethdev/rte_eth_ctrl.h
@@ -8,55 +8,20 @@ 
 #include <stdint.h>
 #include <rte_common.h>
 #include "rte_ether.h"
+#include "rte_flow.h"
 
 /**
+ * @deprecated Please use rte_flow API instead of this legacy one.
  * @file
  *
  * Ethernet device features and related data structures used
  * by control APIs should be defined in this file.
- *
  */
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-/*
- * A packet can be identified by hardware as different flow types. Different
- * NIC hardwares may support different flow types.
- * Basically, the NIC hardware identifies the flow type as deep protocol as
- * possible, and exclusively. For example, if a packet is identified as
- * 'RTE_ETH_FLOW_NONFRAG_IPV4_TCP', it will not be any of other flow types,
- * though it is an actual IPV4 packet.
- * Note that the flow types are used to define RSS offload types in
- * rte_ethdev.h.
- */
-#define RTE_ETH_FLOW_UNKNOWN             0
-#define RTE_ETH_FLOW_RAW                 1
-#define RTE_ETH_FLOW_IPV4                2
-#define RTE_ETH_FLOW_FRAG_IPV4           3
-#define RTE_ETH_FLOW_NONFRAG_IPV4_TCP    4
-#define RTE_ETH_FLOW_NONFRAG_IPV4_UDP    5
-#define RTE_ETH_FLOW_NONFRAG_IPV4_SCTP   6
-#define RTE_ETH_FLOW_NONFRAG_IPV4_OTHER  7
-#define RTE_ETH_FLOW_IPV6                8
-#define RTE_ETH_FLOW_FRAG_IPV6           9
-#define RTE_ETH_FLOW_NONFRAG_IPV6_TCP   10
-#define RTE_ETH_FLOW_NONFRAG_IPV6_UDP   11
-#define RTE_ETH_FLOW_NONFRAG_IPV6_SCTP  12
-#define RTE_ETH_FLOW_NONFRAG_IPV6_OTHER 13
-#define RTE_ETH_FLOW_L2_PAYLOAD         14
-#define RTE_ETH_FLOW_IPV6_EX            15
-#define RTE_ETH_FLOW_IPV6_TCP_EX        16
-#define RTE_ETH_FLOW_IPV6_UDP_EX        17
-#define RTE_ETH_FLOW_PORT               18
-	/**< Consider device port number as a flow differentiator */
-#define RTE_ETH_FLOW_VXLAN              19 /**< VXLAN protocol based flow */
-#define RTE_ETH_FLOW_GENEVE             20 /**< GENEVE protocol based flow */
-#define RTE_ETH_FLOW_NVGRE              21 /**< NVGRE protocol based flow */
-#define RTE_ETH_FLOW_VXLAN_GPE          22 /**< VXLAN-GPE protocol based flow */
-#define RTE_ETH_FLOW_MAX                23
-
 /**
  * Feature filter types
  */
@@ -218,21 +183,6 @@  struct rte_eth_ntuple_filter {
 	uint16_t queue;          /**< Queue assigned to when match*/
 };
 
-/**
- * Tunneled type.
- */
-enum rte_eth_tunnel_type {
-	RTE_TUNNEL_TYPE_NONE = 0,
-	RTE_TUNNEL_TYPE_VXLAN,
-	RTE_TUNNEL_TYPE_GENEVE,
-	RTE_TUNNEL_TYPE_TEREDO,
-	RTE_TUNNEL_TYPE_NVGRE,
-	RTE_TUNNEL_TYPE_IP_IN_GRE,
-	RTE_L2_TUNNEL_TYPE_E_TAG,
-	RTE_TUNNEL_TYPE_VXLAN_GPE,
-	RTE_TUNNEL_TYPE_MAX,
-};
-
 /**
  * filter type of tunneling packet
  */
@@ -765,16 +715,6 @@  enum rte_eth_hash_filter_info_type {
 	RTE_ETH_HASH_FILTER_INFO_TYPE_MAX,
 };
 
-/**
- * Hash function types.
- */
-enum rte_eth_hash_function {
-	RTE_ETH_HASH_FUNCTION_DEFAULT = 0,
-	RTE_ETH_HASH_FUNCTION_TOEPLITZ, /**< Toeplitz */
-	RTE_ETH_HASH_FUNCTION_SIMPLE_XOR, /**< Simple XOR */
-	RTE_ETH_HASH_FUNCTION_MAX,
-};
-
 #define RTE_SYM_HASH_MASK_ARRAY_SIZE \
 	(RTE_ALIGN(RTE_ETH_FLOW_MAX, UINT64_BIT)/UINT64_BIT)
 /**
diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h
index 40a068fe8..ca3a990ae 100644
--- a/lib/librte_ethdev/rte_ethdev.h
+++ b/lib/librte_ethdev/rte_ethdev.h
@@ -158,7 +158,6 @@  extern "C" {
 #include <rte_config.h>
 
 #include "rte_ether.h"
-#include "rte_eth_ctrl.h"
 #include "rte_dev_info.h"
 
 extern int rte_eth_dev_logtype;
@@ -448,8 +447,43 @@  struct rte_eth_rss_conf {
 };
 
 /*
- * The RSS offload types are defined based on flow types which are defined
- * in rte_eth_ctrl.h. Different NIC hardwares may support different RSS offload
+ * A packet can be identified by hardware as different flow types. Different
+ * NIC hardwares may support different flow types.
+ * Basically, the NIC hardware identifies the flow type as deep protocol as
+ * possible, and exclusively. For example, if a packet is identified as
+ * 'RTE_ETH_FLOW_NONFRAG_IPV4_TCP', it will not be any of other flow types,
+ * though it is an actual IPV4 packet.
+ * Note that the flow types are used to define RSS offload types.
+ */
+#define RTE_ETH_FLOW_UNKNOWN             0
+#define RTE_ETH_FLOW_RAW                 1
+#define RTE_ETH_FLOW_IPV4                2
+#define RTE_ETH_FLOW_FRAG_IPV4           3
+#define RTE_ETH_FLOW_NONFRAG_IPV4_TCP    4
+#define RTE_ETH_FLOW_NONFRAG_IPV4_UDP    5
+#define RTE_ETH_FLOW_NONFRAG_IPV4_SCTP   6
+#define RTE_ETH_FLOW_NONFRAG_IPV4_OTHER  7
+#define RTE_ETH_FLOW_IPV6                8
+#define RTE_ETH_FLOW_FRAG_IPV6           9
+#define RTE_ETH_FLOW_NONFRAG_IPV6_TCP   10
+#define RTE_ETH_FLOW_NONFRAG_IPV6_UDP   11
+#define RTE_ETH_FLOW_NONFRAG_IPV6_SCTP  12
+#define RTE_ETH_FLOW_NONFRAG_IPV6_OTHER 13
+#define RTE_ETH_FLOW_L2_PAYLOAD         14
+#define RTE_ETH_FLOW_IPV6_EX            15
+#define RTE_ETH_FLOW_IPV6_TCP_EX        16
+#define RTE_ETH_FLOW_IPV6_UDP_EX        17
+#define RTE_ETH_FLOW_PORT               18
+	/**< Consider device port number as a flow differentiator */
+#define RTE_ETH_FLOW_VXLAN              19 /**< VXLAN protocol based flow */
+#define RTE_ETH_FLOW_GENEVE             20 /**< GENEVE protocol based flow */
+#define RTE_ETH_FLOW_NVGRE              21 /**< NVGRE protocol based flow */
+#define RTE_ETH_FLOW_VXLAN_GPE          22 /**< VXLAN-GPE protocol based flow */
+#define RTE_ETH_FLOW_MAX                23
+
+/*
+ * The RSS offload types are defined based on flow types.
+ * Different NIC hardwares may support different RSS offload
  * types. The supported flow types or RSS offload types can be queried by
  * rte_eth_dev_info_get().
  */
@@ -834,6 +868,24 @@  struct rte_eth_pfc_conf {
 	uint8_t priority;          /**< VLAN User Priority. */
 };
 
+/**
+ * Tunneled type.
+ */
+enum rte_eth_tunnel_type {
+	RTE_TUNNEL_TYPE_NONE = 0,
+	RTE_TUNNEL_TYPE_VXLAN,
+	RTE_TUNNEL_TYPE_GENEVE,
+	RTE_TUNNEL_TYPE_TEREDO,
+	RTE_TUNNEL_TYPE_NVGRE,
+	RTE_TUNNEL_TYPE_IP_IN_GRE,
+	RTE_L2_TUNNEL_TYPE_E_TAG,
+	RTE_TUNNEL_TYPE_VXLAN_GPE,
+	RTE_TUNNEL_TYPE_MAX,
+};
+
+/* Deprecated API file for rte_eth_dev_filter_* functions */
+#include "rte_eth_ctrl.h"
+
 /**
  *  Memory space that can be configured to store Flow Director filters
  *  in the board memory.
@@ -934,7 +986,7 @@  struct rte_eth_conf {
 	/** Currently,Priority Flow Control(PFC) are supported,if DCB with PFC
 	    is needed,and the variable must be set ETH_DCB_PFC_SUPPORT. */
 	uint32_t dcb_capability_en;
-	struct rte_fdir_conf fdir_conf; /**< FDIR configuration. */
+	struct rte_fdir_conf fdir_conf; /**< FDIR configuration. DEPRECATED */
 	struct rte_intr_conf intr_conf; /**< Interrupt mode configuration. */
 };
 
@@ -3251,6 +3303,7 @@  rte_eth_dev_udp_tunnel_port_delete(uint16_t port_id,
  *   - (-ENODEV) if *port_id* invalid.
  *   - (-EIO) if device is removed.
  */
+__rte_deprecated
 int rte_eth_dev_filter_supported(uint16_t port_id,
 		enum rte_filter_type filter_type);
 
@@ -3273,6 +3326,7 @@  int rte_eth_dev_filter_supported(uint16_t port_id,
  *   - (-EIO) if device is removed.
  *   - others depends on the specific operations implementation.
  */
+__rte_deprecated
 int rte_eth_dev_filter_ctrl(uint16_t port_id, enum rte_filter_type filter_type,
 			enum rte_filter_op filter_op, void *arg);
 
diff --git a/lib/librte_ethdev/rte_flow.h b/lib/librte_ethdev/rte_flow.h
index c0fe87924..63f84fca6 100644
--- a/lib/librte_ethdev/rte_flow.h
+++ b/lib/librte_ethdev/rte_flow.h
@@ -20,7 +20,6 @@ 
 #include <rte_arp.h>
 #include <rte_common.h>
 #include <rte_ether.h>
-#include <rte_eth_ctrl.h>
 #include <rte_icmp.h>
 #include <rte_ip.h>
 #include <rte_sctp.h>
@@ -1738,6 +1737,16 @@  struct rte_flow_query_count {
 	uint64_t bytes; /**< Number of bytes through this rule [out]. */
 };
 
+/**
+ * Hash function types.
+ */
+enum rte_eth_hash_function {
+	RTE_ETH_HASH_FUNCTION_DEFAULT = 0,
+	RTE_ETH_HASH_FUNCTION_TOEPLITZ, /**< Toeplitz */
+	RTE_ETH_HASH_FUNCTION_SIMPLE_XOR, /**< Simple XOR */
+	RTE_ETH_HASH_FUNCTION_MAX,
+};
+
 /**
  * RTE_FLOW_ACTION_TYPE_RSS
  *