ethdev: check device promiscuous state
The promiscuous enable and disable functions now check the promiscuous state of the device before checking if the dev_ops function exists for the device. This change is necessary to allow sample applications run on virtual PMDs, as previously -ENOTSUP returned when the promiscuous enable function was called. This caused the sample application to fail unnecessarily. Signed-off-by: Ciara Power <ciara.power@intel.com> Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com> Reviewed-by: Andrew Rybchenko <arybchenko@solarflare.com>
This commit is contained in:
parent
d4bda0ab29
commit
400d758182
@ -1952,12 +1952,13 @@ rte_eth_promiscuous_enable(uint16_t port_id)
|
||||
RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);
|
||||
dev = &rte_eth_devices[port_id];
|
||||
|
||||
if (dev->data->promiscuous == 1)
|
||||
return 0;
|
||||
|
||||
RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->promiscuous_enable, -ENOTSUP);
|
||||
|
||||
if (dev->data->promiscuous == 0) {
|
||||
diag = (*dev->dev_ops->promiscuous_enable)(dev);
|
||||
dev->data->promiscuous = (diag == 0) ? 1 : 0;
|
||||
}
|
||||
diag = (*dev->dev_ops->promiscuous_enable)(dev);
|
||||
dev->data->promiscuous = (diag == 0) ? 1 : 0;
|
||||
|
||||
return eth_err(port_id, diag);
|
||||
}
|
||||
@ -1971,14 +1972,15 @@ rte_eth_promiscuous_disable(uint16_t port_id)
|
||||
RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);
|
||||
dev = &rte_eth_devices[port_id];
|
||||
|
||||
if (dev->data->promiscuous == 0)
|
||||
return 0;
|
||||
|
||||
RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->promiscuous_disable, -ENOTSUP);
|
||||
|
||||
if (dev->data->promiscuous == 1) {
|
||||
dev->data->promiscuous = 0;
|
||||
diag = (*dev->dev_ops->promiscuous_disable)(dev);
|
||||
if (diag != 0)
|
||||
dev->data->promiscuous = 1;
|
||||
}
|
||||
dev->data->promiscuous = 0;
|
||||
diag = (*dev->dev_ops->promiscuous_disable)(dev);
|
||||
if (diag != 0)
|
||||
dev->data->promiscuous = 1;
|
||||
|
||||
return eth_err(port_id, diag);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user