summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/dev/pci/if_bge.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/sys/dev/pci/if_bge.c b/sys/dev/pci/if_bge.c
index 0cffcecd381..90aba697882 100644
--- a/sys/dev/pci/if_bge.c
+++ b/sys/dev/pci/if_bge.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_bge.c,v 1.267 2009/06/03 05:19:21 naddy Exp $ */
+/* $OpenBSD: if_bge.c,v 1.268 2009/06/03 05:55:15 naddy Exp $ */
/*
* Copyright (c) 2001 Wind River Systems
@@ -1192,23 +1192,25 @@ bge_iff(struct bge_softc *sc)
ifp->if_flags &= ~IFF_ALLMULTI;
memset(hashes, 0x00, sizeof(hashes));
- if (ifp->if_flags & IFF_PROMISC)
+ if (ifp->if_flags & IFF_PROMISC) {
+ ifp->if_flags |= IFF_ALLMULTI;
rxmode |= BGE_RXMODE_RX_PROMISC;
- else if (ac->ac_multirangecnt > 0) {
+ } else if (ac->ac_multirangecnt > 0) {
ifp->if_flags |= IFF_ALLMULTI;
memset(hashes, 0xff, sizeof(hashes));
} else {
ETHER_FIRST_MULTI(step, ac, enm);
while (enm != NULL) {
h = ether_crc32_le(enm->enm_addrlo, ETHER_ADDR_LEN);
+
setbit(hashes, h & 0x7F);
+
ETHER_NEXT_MULTI(step, enm);
}
}
bus_space_write_raw_region_4(sc->bge_btag, sc->bge_bhandle, BGE_MAR0,
hashes, sizeof(hashes));
-
CSR_WRITE_4(sc, BGE_RX_MODE, rxmode);
}