summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/dev/pci/if_oce.c22
-rw-r--r--sys/dev/pci/ocevar.h4
2 files changed, 11 insertions, 15 deletions
diff --git a/sys/dev/pci/if_oce.c b/sys/dev/pci/if_oce.c
index 12b4e035c9b..0749eb42725 100644
--- a/sys/dev/pci/if_oce.c
+++ b/sys/dev/pci/if_oce.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_oce.c,v 1.2 2012/08/02 22:14:31 mikeb Exp $ */
+/* $OpenBSD: if_oce.c,v 1.3 2012/08/06 21:55:31 mikeb Exp $ */
/*
* Copyright (c) 2012 Mike Belopuhov
@@ -236,7 +236,6 @@ oce_attach(struct device *parent, struct device *self, void *aux)
sc->rx_ring_size = OCE_RX_RING_SIZE;
sc->rq_frag_size = OCE_RQ_BUF_SIZE;
sc->flow_control = OCE_DEFAULT_FLOW_CONTROL;
- sc->promisc = OCE_DEFAULT_PROMISCUOUS;
/* initialise the hardware */
rc = oce_hw_init(sc);
@@ -397,19 +396,18 @@ void
oce_iff(struct oce_softc *sc)
{
struct ifnet *ifp = &sc->arpcom.ac_if;
+ struct arpcom *ac = &sc->arpcom;
+ int promisc = 0;
ifp->if_flags &= ~IFF_ALLMULTI;
- if ((ifp->if_flags & IFF_PROMISC) && !sc->promisc) {
- sc->promisc = TRUE;
- oce_rxf_set_promiscuous(sc, sc->promisc);
- } else if (!(ifp->if_flags & IFF_PROMISC) && sc->promisc) {
- sc->promisc = FALSE;
- oce_rxf_set_promiscuous(sc, sc->promisc);
- }
- if (oce_hw_update_multicast(sc))
- printf("%s: Update multicast address failed\n",
- sc->dev.dv_xname);
+ if (ifp->if_flags & IFF_PROMISC || ac->ac_multirangecnt > 0 ||
+ ac->ac_multicnt > OCE_MAX_MC_FILTER_SIZE)
+ promisc = 1;
+ else
+ oce_hw_update_multicast(sc);
+
+ oce_rxf_set_promiscuous(sc, promisc);
}
int
diff --git a/sys/dev/pci/ocevar.h b/sys/dev/pci/ocevar.h
index aaa66f0df02..56f25ac0217 100644
--- a/sys/dev/pci/ocevar.h
+++ b/sys/dev/pci/ocevar.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: ocevar.h,v 1.3 2012/08/02 22:14:31 mikeb Exp $ */
+/* $OpenBSD: ocevar.h,v 1.4 2012/08/06 21:55:31 mikeb Exp $ */
/*-
* Copyright (C) 2012 Emulex
@@ -80,7 +80,6 @@
#define OCE_MAX_TX_SIZE 65535
#define OCE_MAX_RX_SIZE 4096
#define OCE_MAX_RQ_POSTS 255
-#define OCE_DEFAULT_PROMISCUOUS 0
#define RSS_ENABLE_IPV4 0x1
#define RSS_ENABLE_TCP_IPV4 0x2
@@ -678,7 +677,6 @@ struct oce_softc {
uint32_t if_cap_flags;
uint32_t flow_control;
- char promisc;
char be3_native;
uint32_t pvid;