#include "sfc_repr.h"
#include "sfc_dp.h"
+#include "sfc_flow.h"
+#include "sfc_mae.h"
#ifdef __cplusplus
extern "C" {
struct rte_ring *ring;
};
+struct sfc_repr_proxy_filter {
+ /*
+ * 2 filters are required to match all incoming traffic, unknown
+ * unicast and unknown multicast.
+ */
+ efx_filter_spec_t specs[2];
+};
+
struct sfc_repr_proxy_port {
TAILQ_ENTRY(sfc_repr_proxy_port) entries;
uint16_t repr_id;
efx_mport_id_t egress_mport;
struct sfc_repr_proxy_rxq rxq[SFC_REPR_RXQ_MAX];
struct sfc_repr_proxy_txq txq[SFC_REPR_TXQ_MAX];
+ struct sfc_mae_rule *mae_rule;
+ bool enabled;
+ bool started;
};
struct sfc_repr_proxy_dp_rxq {
struct rte_mempool *mp;
unsigned int ref_count;
+ eth_rx_burst_t pkt_burst;
+ struct sfc_dp_rxq *dp;
+
+ uint16_t route_port_id;
+ bool stop_route;
+ unsigned int available;
+ unsigned int forwarded;
+ unsigned int routed;
+ struct rte_mbuf *pkts[SFC_REPR_PROXY_TX_BURST];
+
sfc_sw_index_t sw_index;
};
struct sfc_repr_proxy_dp_txq {
+ eth_tx_burst_t pkt_burst;
+ struct sfc_dp_txq *dp;
+
+ unsigned int available;
+ unsigned int transmitted;
+ struct rte_mbuf *tx_pkts[SFC_REPR_PROXY_TX_BURST];
+
sfc_sw_index_t sw_index;
};
enum sfc_repr_proxy_mbox_op {
SFC_REPR_PROXY_MBOX_ADD_PORT,
SFC_REPR_PROXY_MBOX_DEL_PORT,
+ SFC_REPR_PROXY_MBOX_START_PORT,
+ SFC_REPR_PROXY_MBOX_STOP_PORT,
};
struct sfc_repr_proxy_mbox {
bool started;
struct sfc_repr_proxy_dp_rxq dp_rxq[SFC_REPR_PROXY_NB_RXQ_MAX];
struct sfc_repr_proxy_dp_txq dp_txq[SFC_REPR_PROXY_NB_TXQ_MAX];
+ struct sfc_repr_proxy_filter mport_filter;
struct sfc_repr_proxy_mbox mbox;
+ unsigned int nb_txq;
+ unsigned int nb_rxq;
};
struct sfc_adapter;