Print this page
2869 duplicate packets with vnics over aggrs
*** 19,28 ****
--- 19,29 ----
* CDDL HEADER END
*/
/*
* Copyright 2010 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
+ * Copyright 2012 OmniTI Computer Consulting, Inc All rights reserved.
*/
/*
* IEEE 802.3ad Link Aggregation - Link Aggregation MAC ports.
*
*** 526,537 ****
/* already in desired promiscous mode */
return (0);
if (on) {
mac_rx_clear(port->lp_mch);
rc = mac_promisc_add(port->lp_mch, MAC_CLIENT_PROMISC_ALL,
! aggr_recv_cb, port, &port->lp_mphp,
MAC_PROMISC_FLAGS_NO_TX_LOOP);
if (rc != 0) {
mac_rx_set(port->lp_mch, aggr_recv_cb, port);
return (rc);
}
--- 527,543 ----
/* already in desired promiscous mode */
return (0);
if (on) {
mac_rx_clear(port->lp_mch);
+ /* We use the promisc callback because without hardware
+ * rings, we deliver through flows that will cause duplicate
+ * delivery of packets when we've flipped into this mode
+ * to compensate for the lack of hardware MAC matching
+ */
rc = mac_promisc_add(port->lp_mch, MAC_CLIENT_PROMISC_ALL,
! aggr_recv_promisc_cb, port, &port->lp_mphp,
MAC_PROMISC_FLAGS_NO_TX_LOOP);
if (rc != 0) {
mac_rx_set(port->lp_mch, aggr_recv_cb, port);
return (rc);
}