efx_counter_t mae_id;
/* ID of a counter in RTE */
uint32_t rte_id;
+ /* RTE counter ID validity status */
+ bool rte_id_valid;
+
+ /* Flow Tunnel (FT) GROUP hit counter (or NULL) */
+ uint64_t *ft_group_hit_counter;
+ /* Flow Tunnel (FT) context (for JUMP rules; otherwise, NULL) */
+ struct sfc_flow_tunnel *ft;
};
/** Action set registry entry */
enum sfc_mae_status {
SFC_MAE_STATUS_UNKNOWN = 0,
SFC_MAE_STATUS_UNSUPPORTED,
- SFC_MAE_STATUS_SUPPORTED
+ SFC_MAE_STATUS_SUPPORTED,
+ SFC_MAE_STATUS_ADMIN,
};
/*
uint32_t generation_count;
union sfc_pkts_bytes value;
union sfc_pkts_bytes reset;
+
+ uint64_t *ft_group_hit_counter;
};
struct sfc_mae_counters_xstats {
uint32_t service_id;
};
+/**
+ * MAE rules used to capture traffic generated by VFs and direct it to
+ * representors (one for each VF).
+ */
+#define SFC_MAE_NB_REPR_RULES_MAX (64)
+
/** Rules to forward traffic from PHY port to PF and from PF to PHY port */
#define SFC_MAE_NB_SWITCHDEV_RULES (2)
/** Maximum required internal MAE rules */
-#define SFC_MAE_NB_RULES_MAX (SFC_MAE_NB_SWITCHDEV_RULES)
+#define SFC_MAE_NB_RULES_MAX (SFC_MAE_NB_SWITCHDEV_RULES + \
+ SFC_MAE_NB_REPR_RULES_MAX)
struct sfc_mae_rule {
efx_mae_match_spec_t *spec;
size_t tunnel_def_mask_size;
const void *tunnel_def_mask;
bool match_mport_set;
+ enum sfc_flow_tunnel_rule_type ft_rule_type;
struct sfc_mae_pattern_data pattern_data;
efx_tunnel_protocol_t encap_type;
+ const struct rte_flow_item *pattern;
unsigned int priority;
+ struct sfc_flow_tunnel *ft;
};
int sfc_mae_attach(struct sfc_adapter *sa);