#include "efx.h"
+#include "sfc_flow_rss.h"
+
#ifdef __cplusplus
extern "C" {
#endif
#define SFC_BUILD_SET_OVERFLOW(_action, _set) \
RTE_BUILD_BUG_ON((_action) >= sizeof(_set) * CHAR_BIT)
-/* RSS configuration storage */
-struct sfc_flow_rss {
- unsigned int rxq_hw_index_min;
- unsigned int rxq_hw_index_max;
- unsigned int rss_hash_types;
- uint8_t rss_key[EFX_RSS_KEY_SIZE];
- unsigned int rss_tbl[EFX_RSS_TBL_SIZE];
-};
-
/* Flow engines supported by the implementation */
enum sfc_flow_spec_type {
SFC_FLOW_SPEC_FILTER = 0,
efx_filter_spec_t filters[SF_FLOW_SPEC_NB_FILTERS_MAX];
/* number of complete specifications */
unsigned int count;
- /* RSS toggle */
- boolean_t rss;
- /* RSS hash toggle */
- boolean_t rss_hash_required;
- /* RSS configuration */
- struct sfc_flow_rss rss_conf;
+ /* RSS context (or NULL) */
+ struct sfc_flow_rss_ctx *rss_ctx;
};
/* Indicates the role of a given flow in tunnel offload */
-enum sfc_flow_tunnel_rule_type {
+enum sfc_ft_rule_type {
/* The flow has nothing to do with tunnel offload */
SFC_FT_RULE_NONE = 0,
- /* The flow represents a JUMP rule */
- SFC_FT_RULE_JUMP,
- /* The flow represents a GROUP rule */
- SFC_FT_RULE_GROUP,
+ /* The flow is a TUNNEL rule, to match on an outer header */
+ SFC_FT_RULE_TUNNEL,
+ /*
+ * The flow is a SWITCH rule, to discard the outer header
+ * and dispatch the resulting packets to a vSwitch tenant
+ */
+ SFC_FT_RULE_SWITCH,
};
/* MAE-specific flow specification */
struct sfc_flow_spec_mae {
/* FLow Tunnel (FT) rule type (or NONE) */
- enum sfc_flow_tunnel_rule_type ft_rule_type;
+ enum sfc_ft_rule_type ft_rule_type;
/* Flow Tunnel (FT) context (or NULL) */
- struct sfc_flow_tunnel *ft;
+ struct sfc_ft_ctx *ft_ctx;
/* Desired priority level */
unsigned int priority;
/* Outer rule registry entry */