summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Monjalon <thomas@monjalon.net>2019-04-17 02:36:27 +0200
committerFerruh Yigit <ferruh.yigit@intel.com>2019-04-19 14:51:54 +0200
commitb7ed955a20eee5979eaecc9fab500a176e2741c5 (patch)
treeff439d30ef2fe15868dc044ac031f72e407104f8
parenta1db738273f90e4e0ae98e64c222c52879a75c35 (diff)
downloaddpdk-b7ed955a20eee5979eaecc9fab500a176e2741c5.zip
dpdk-b7ed955a20eee5979eaecc9fab500a176e2741c5.tar.gz
dpdk-b7ed955a20eee5979eaecc9fab500a176e2741c5.tar.xz
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: 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> Acked-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
-rw-r--r--app/test-pmd/cmdline.c1
-rw-r--r--app/test-pmd/cmdline_flow.c1
-rw-r--r--drivers/net/dpaa2/dpaa2_flow.c1
-rw-r--r--drivers/net/dpaa2/dpaa2_mux.c1
-rw-r--r--drivers/net/enic/enic_clsf.c1
-rw-r--r--drivers/net/failsafe/failsafe_ops.c20
-rw-r--r--drivers/net/i40e/i40e_ethdev.c1
-rw-r--r--drivers/net/i40e/i40e_ethdev.h1
-rw-r--r--drivers/net/i40e/i40e_flow.c1
-rw-r--r--drivers/net/mlx4/mlx4_flow.c1
-rw-r--r--drivers/net/mlx4/mlx4_flow.h1
-rw-r--r--drivers/net/mlx5/mlx5_flow.c1
-rw-r--r--drivers/net/mlx5/mlx5_flow_dv.c1
-rw-r--r--drivers/net/mlx5/mlx5_flow_verbs.c1
-rw-r--r--drivers/net/sfc/sfc_flow.c1
-rw-r--r--examples/tep_termination/Makefile2
-rw-r--r--examples/tep_termination/meson.build1
-rw-r--r--lib/librte_ethdev/rte_eth_ctrl.h64
-rw-r--r--lib/librte_ethdev/rte_ethdev.h62
-rw-r--r--lib/librte_ethdev/rte_flow.h11
20 files changed, 75 insertions, 99 deletions
diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index 691d818..0558bc5 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 54ff175..3070e0e 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 c94c7ef..98f6813 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 1d043dc..e487c6b 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 48c8e62..53f57b0 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 65957a2..43d6a82 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 5b01dc1..f6fc005 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 930eb9a..9855038 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 3694df2..5447e4e 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 038dc71..1dcdb31 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 03a4bd0..26465c6 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 a0683ee..5115d5b 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 3862b26..5127e40 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 773213e..c44e15d 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 cffcd9a..944296d 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 2da4192..222679b 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 a75cc71..1dc341e 100644
--- a/examples/tep_termination/meson.build
+++ b/examples/tep_termination/meson.build
@@ -11,6 +11,7 @@ if not is_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 b341634..9fb0657 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
*/
@@ -219,21 +184,6 @@ struct rte_eth_ntuple_filter {
};
/**
- * 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
*/
#define ETH_TUNNEL_FILTER_OMAC 0x01 /**< filter by outer MAC addr */
@@ -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 40a068f..ca3a990 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().
*/
@@ -835,6 +869,24 @@ struct rte_eth_pfc_conf {
};
/**
+ * 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 c0fe879..63f84fc 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>
@@ -1739,6 +1738,16 @@ struct rte_flow_query_count {
};
/**
+ * 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
*
* Similar to QUEUE, except RSS is additionally performed on packets to