qed: Fix bug in tx promiscuous mode settings
When running tx switched traffic between VNICs created via a bridge(to which VFs are added), adapter drops the unicast packets in tx flow due to VNIC's ucast mac being unknown to it. But VF interfaces being in promiscuous mode should have caused adapter to accept all the unknown ucast packets. Later, it was found that driver doesn't really configure tx promiscuous mode settings to accept all unknown unicast macs. This patch fixes tx promiscuous mode settings to accept all unknown/unmatched unicast macs and works out the scenario. Signed-off-by: Manish Chopra <manishc@marvell.com> Signed-off-by: Ariel Elior <aelior@marvell.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
ca89932430
Коммит
9e71a15d8b
|
@ -609,6 +609,10 @@ qed_sp_update_accept_mode(struct qed_hwfn *p_hwfn,
|
||||||
(!!(accept_filter & QED_ACCEPT_MCAST_MATCHED) &&
|
(!!(accept_filter & QED_ACCEPT_MCAST_MATCHED) &&
|
||||||
!!(accept_filter & QED_ACCEPT_MCAST_UNMATCHED)));
|
!!(accept_filter & QED_ACCEPT_MCAST_UNMATCHED)));
|
||||||
|
|
||||||
|
SET_FIELD(state, ETH_VPORT_TX_MODE_UCAST_ACCEPT_ALL,
|
||||||
|
(!!(accept_filter & QED_ACCEPT_UCAST_MATCHED) &&
|
||||||
|
!!(accept_filter & QED_ACCEPT_UCAST_UNMATCHED)));
|
||||||
|
|
||||||
SET_FIELD(state, ETH_VPORT_TX_MODE_BCAST_ACCEPT_ALL,
|
SET_FIELD(state, ETH_VPORT_TX_MODE_BCAST_ACCEPT_ALL,
|
||||||
!!(accept_filter & QED_ACCEPT_BCAST));
|
!!(accept_filter & QED_ACCEPT_BCAST));
|
||||||
|
|
||||||
|
@ -2688,7 +2692,8 @@ static int qed_configure_filter_rx_mode(struct qed_dev *cdev,
|
||||||
if (type == QED_FILTER_RX_MODE_TYPE_PROMISC) {
|
if (type == QED_FILTER_RX_MODE_TYPE_PROMISC) {
|
||||||
accept_flags.rx_accept_filter |= QED_ACCEPT_UCAST_UNMATCHED |
|
accept_flags.rx_accept_filter |= QED_ACCEPT_UCAST_UNMATCHED |
|
||||||
QED_ACCEPT_MCAST_UNMATCHED;
|
QED_ACCEPT_MCAST_UNMATCHED;
|
||||||
accept_flags.tx_accept_filter |= QED_ACCEPT_MCAST_UNMATCHED;
|
accept_flags.tx_accept_filter |= QED_ACCEPT_UCAST_UNMATCHED |
|
||||||
|
QED_ACCEPT_MCAST_UNMATCHED;
|
||||||
} else if (type == QED_FILTER_RX_MODE_TYPE_MULTI_PROMISC) {
|
} else if (type == QED_FILTER_RX_MODE_TYPE_MULTI_PROMISC) {
|
||||||
accept_flags.rx_accept_filter |= QED_ACCEPT_MCAST_UNMATCHED;
|
accept_flags.rx_accept_filter |= QED_ACCEPT_MCAST_UNMATCHED;
|
||||||
accept_flags.tx_accept_filter |= QED_ACCEPT_MCAST_UNMATCHED;
|
accept_flags.tx_accept_filter |= QED_ACCEPT_MCAST_UNMATCHED;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче