net/sfc: do not allow flow rules to refer to VF representors
VF representors do not own dedicated m-ports and thus cannot be referred to as traffic endpoints in flow items or actions. Fixes:a62ec90522
("net/sfc: add port representors infrastructure") Fixes:f55b61cec9
("net/sfc: support port representor flow item") Signed-off-by: Ivan Malov <ivan.malov@oktetlabs.ru> Reviewed-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
This commit is contained in:
parent
ec4e11d41d
commit
b7b7b9f800
@ -512,7 +512,7 @@ sfc_mae_clear_switch_port(uint16_t switch_domain_id,
|
|||||||
static int
|
static int
|
||||||
sfc_mae_find_switch_port_by_ethdev(uint16_t switch_domain_id,
|
sfc_mae_find_switch_port_by_ethdev(uint16_t switch_domain_id,
|
||||||
uint16_t ethdev_port_id,
|
uint16_t ethdev_port_id,
|
||||||
efx_mport_sel_t *mport_sel)
|
struct sfc_mae_switch_port **switch_port)
|
||||||
{
|
{
|
||||||
struct sfc_mae_switch_domain *domain;
|
struct sfc_mae_switch_domain *domain;
|
||||||
struct sfc_mae_switch_port *port;
|
struct sfc_mae_switch_port *port;
|
||||||
@ -528,7 +528,7 @@ sfc_mae_find_switch_port_by_ethdev(uint16_t switch_domain_id,
|
|||||||
|
|
||||||
TAILQ_FOREACH(port, &domain->ports, switch_domain_ports) {
|
TAILQ_FOREACH(port, &domain->ports, switch_domain_ports) {
|
||||||
if (port->ethdev_port_id == ethdev_port_id) {
|
if (port->ethdev_port_id == ethdev_port_id) {
|
||||||
*mport_sel = port->ethdev_mport;
|
*switch_port = port;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -541,11 +541,27 @@ sfc_mae_switch_port_by_ethdev(uint16_t switch_domain_id,
|
|||||||
uint16_t ethdev_port_id,
|
uint16_t ethdev_port_id,
|
||||||
efx_mport_sel_t *mport_sel)
|
efx_mport_sel_t *mport_sel)
|
||||||
{
|
{
|
||||||
|
struct sfc_mae_switch_port *port;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
rte_spinlock_lock(&sfc_mae_switch.lock);
|
rte_spinlock_lock(&sfc_mae_switch.lock);
|
||||||
rc = sfc_mae_find_switch_port_by_ethdev(switch_domain_id,
|
rc = sfc_mae_find_switch_port_by_ethdev(switch_domain_id,
|
||||||
ethdev_port_id, mport_sel);
|
ethdev_port_id, &port);
|
||||||
|
if (rc != 0)
|
||||||
|
goto unlock;
|
||||||
|
|
||||||
|
if (port->type != SFC_MAE_SWITCH_PORT_INDEPENDENT) {
|
||||||
|
/*
|
||||||
|
* The ethdev is a "VF representor". It does not own
|
||||||
|
* a dedicated m-port suitable for use in flow rules.
|
||||||
|
*/
|
||||||
|
rc = ENOTSUP;
|
||||||
|
goto unlock;
|
||||||
|
}
|
||||||
|
|
||||||
|
*mport_sel = port->ethdev_mport;
|
||||||
|
|
||||||
|
unlock:
|
||||||
rte_spinlock_unlock(&sfc_mae_switch.lock);
|
rte_spinlock_unlock(&sfc_mae_switch.lock);
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
|
Loading…
Reference in New Issue
Block a user