bnx2x: Duplication in promisc mode

Prevent packets duplication for frames targeting FCoE L2 ring:
packets were arriving to stack from both L2 RSS and from FCoE
L2 in a promiscuous mode.

Configure FCoE L2 ring to DROP_ALL rx mode, when interface is
configured to PROMISC, and to accept only unicast frames, when
interface is configured to ALL_MULTI.

Signed-off-by: Vladislav Zolotarov <vladz@broadcom.com>
Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Vladislav Zolotarov 2011-02-06 11:21:49 -08:00 committed by David S. Miller
parent bf1f9ae050
commit 711c914688

View File

@ -4276,9 +4276,12 @@ void bnx2x_set_storm_rx_mode(struct bnx2x *bp)
def_q_filters |= BNX2X_ACCEPT_UNICAST | BNX2X_ACCEPT_BROADCAST |
BNX2X_ACCEPT_MULTICAST;
#ifdef BCM_CNIC
cl_id = bnx2x_fcoe(bp, cl_id);
bnx2x_rxq_set_mac_filters(bp, cl_id, BNX2X_ACCEPT_UNICAST |
BNX2X_ACCEPT_MULTICAST);
if (!NO_FCOE(bp)) {
cl_id = bnx2x_fcoe(bp, cl_id);
bnx2x_rxq_set_mac_filters(bp, cl_id,
BNX2X_ACCEPT_UNICAST |
BNX2X_ACCEPT_MULTICAST);
}
#endif
break;
@ -4286,18 +4289,29 @@ void bnx2x_set_storm_rx_mode(struct bnx2x *bp)
def_q_filters |= BNX2X_ACCEPT_UNICAST | BNX2X_ACCEPT_BROADCAST |
BNX2X_ACCEPT_ALL_MULTICAST;
#ifdef BCM_CNIC
cl_id = bnx2x_fcoe(bp, cl_id);
bnx2x_rxq_set_mac_filters(bp, cl_id, BNX2X_ACCEPT_UNICAST |
BNX2X_ACCEPT_MULTICAST);
/*
* Prevent duplication of multicast packets by configuring FCoE
* L2 Client to receive only matched unicast frames.
*/
if (!NO_FCOE(bp)) {
cl_id = bnx2x_fcoe(bp, cl_id);
bnx2x_rxq_set_mac_filters(bp, cl_id,
BNX2X_ACCEPT_UNICAST);
}
#endif
break;
case BNX2X_RX_MODE_PROMISC:
def_q_filters |= BNX2X_PROMISCUOUS_MODE;
#ifdef BCM_CNIC
cl_id = bnx2x_fcoe(bp, cl_id);
bnx2x_rxq_set_mac_filters(bp, cl_id, BNX2X_ACCEPT_UNICAST |
BNX2X_ACCEPT_MULTICAST);
/*
* Prevent packets duplication by configuring DROP_ALL for FCoE
* L2 Client.
*/
if (!NO_FCOE(bp)) {
cl_id = bnx2x_fcoe(bp, cl_id);
bnx2x_rxq_set_mac_filters(bp, cl_id, BNX2X_ACCEPT_NONE);
}
#endif
/* pass management unicast packets as well */
llh_mask |= NIG_LLH0_BRB1_DRV_MASK_REG_LLH0_BRB1_DRV_MASK_UNCST;