summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authormpi <mpi@openbsd.org>2013-11-05 10:20:04 +0000
committermpi <mpi@openbsd.org>2013-11-05 10:20:04 +0000
commit5caeb4df3d4c3456b72224acdb1268676f8dd28b (patch)
treef9d1fe12556f4205a599087b8f85f5c900ef00af /sys
parentAdd a stub for the new MD hook needed to handle ACPI Power Resources. (diff)
downloadwireguard-openbsd-5caeb4df3d4c3456b72224acdb1268676f8dd28b.tar.xz
wireguard-openbsd-5caeb4df3d4c3456b72224acdb1268676f8dd28b.zip
Instead of comparing the lower and higher addresses of all the multicast
entries to decide if the IFF_ALLMULTI flag should be set, check if there is at least one real range between them. This should not introduce any behavior change but will help changing our representation of multicast entries.
Diffstat (limited to 'sys')
-rw-r--r--sys/dev/usb/if_aue.c12
-rw-r--r--sys/dev/usb/if_cue.c12
-rw-r--r--sys/dev/usb/if_kue.c11
-rw-r--r--sys/dev/usb/if_otus.c10
-rw-r--r--sys/dev/usb/if_zyd.c10
5 files changed, 21 insertions, 34 deletions
diff --git a/sys/dev/usb/if_aue.c b/sys/dev/usb/if_aue.c
index 95aed7dab74..b2704672956 100644
--- a/sys/dev/usb/if_aue.c
+++ b/sys/dev/usb/if_aue.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_aue.c,v 1.88 2013/08/07 01:06:41 bluhm Exp $ */
+/* $OpenBSD: if_aue.c,v 1.89 2013/11/05 10:20:04 mpi Exp $ */
/* $NetBSD: if_aue.c,v 1.82 2003/03/05 17:37:36 shiba Exp $ */
/*
* Copyright (c) 1997, 1998, 1999, 2000
@@ -585,6 +585,7 @@ aue_crc(caddr_t addr)
void
aue_setmulti(struct aue_softc *sc)
{
+ struct arpcom *ac = &sc->arpcom;
struct ifnet *ifp;
struct ether_multi *enm;
struct ether_multistep step;
@@ -594,8 +595,7 @@ aue_setmulti(struct aue_softc *sc)
ifp = GET_IFP(sc);
- if (ifp->if_flags & IFF_PROMISC) {
-allmulti:
+ if (ifp->if_flags & IFF_PROMISC || ac->ac_multirangecnt > 0) {
ifp->if_flags |= IFF_ALLMULTI;
AUE_SETBIT(sc, AUE_CTL0, AUE_CTL0_ALLMULTI);
return;
@@ -608,12 +608,8 @@ allmulti:
aue_csr_write_1(sc, AUE_MAR0 + i, 0);
/* now program new ones */
- ETHER_FIRST_MULTI(step, &sc->arpcom, enm);
+ ETHER_FIRST_MULTI(step, ac, enm);
while (enm != NULL) {
- if (memcmp(enm->enm_addrlo,
- enm->enm_addrhi, ETHER_ADDR_LEN) != 0)
- goto allmulti;
-
h = aue_crc(enm->enm_addrlo);
AUE_SETBIT(sc, AUE_MAR + (h >> 3), 1 << (h & 0x7));
ETHER_NEXT_MULTI(step, enm);
diff --git a/sys/dev/usb/if_cue.c b/sys/dev/usb/if_cue.c
index 49dd15126aa..27ea1cc4a7f 100644
--- a/sys/dev/usb/if_cue.c
+++ b/sys/dev/usb/if_cue.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_cue.c,v 1.62 2013/08/07 01:06:41 bluhm Exp $ */
+/* $OpenBSD: if_cue.c,v 1.63 2013/11/05 10:20:04 mpi Exp $ */
/* $NetBSD: if_cue.c,v 1.40 2002/07/11 21:14:26 augustss Exp $ */
/*
* Copyright (c) 1997, 1998, 1999, 2000
@@ -342,6 +342,7 @@ cue_getmac(struct cue_softc *sc, void *buf)
void
cue_setmulti(struct cue_softc *sc)
{
+ struct arpcom *ac = &sc->arpcom;
struct ifnet *ifp;
struct ether_multi *enm;
struct ether_multistep step;
@@ -352,8 +353,7 @@ cue_setmulti(struct cue_softc *sc)
DPRINTFN(2,("%s: cue_setmulti if_flags=0x%x\n",
sc->cue_dev.dv_xname, ifp->if_flags));
- if (ifp->if_flags & IFF_PROMISC) {
-allmulti:
+ if (ifp->if_flags & IFF_PROMISC || ac->ac_multirangecnt > 0) {
ifp->if_flags |= IFF_ALLMULTI;
for (i = 0; i < CUE_MCAST_TABLE_LEN; i++)
sc->cue_mctab[i] = 0xFF;
@@ -367,12 +367,8 @@ allmulti:
sc->cue_mctab[i] = 0;
/* now program new ones */
- ETHER_FIRST_MULTI(step, &sc->arpcom, enm);
+ ETHER_FIRST_MULTI(step, ac, enm);
while (enm != NULL) {
- if (memcmp(enm->enm_addrlo,
- enm->enm_addrhi, ETHER_ADDR_LEN) != 0)
- goto allmulti;
-
h = ether_crc32_le(enm->enm_addrlo, ETHER_ADDR_LEN) &
((1 << CUE_BITS) - 1);
sc->cue_mctab[h >> 3] |= 1 << (h & 0x7);
diff --git a/sys/dev/usb/if_kue.c b/sys/dev/usb/if_kue.c
index eab30475e6e..757da46f288 100644
--- a/sys/dev/usb/if_kue.c
+++ b/sys/dev/usb/if_kue.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_kue.c,v 1.68 2013/08/07 01:06:41 bluhm Exp $ */
+/* $OpenBSD: if_kue.c,v 1.69 2013/11/05 10:20:04 mpi Exp $ */
/* $NetBSD: if_kue.c,v 1.50 2002/07/16 22:00:31 augustss Exp $ */
/*
* Copyright (c) 1997, 1998, 1999, 2000
@@ -333,6 +333,7 @@ kue_load_fw(struct kue_softc *sc)
void
kue_setmulti(struct kue_softc *sc)
{
+ struct arpcom *ac = &sc->arpcom;
struct ifnet *ifp = GET_IFP(sc);
struct ether_multi *enm;
struct ether_multistep step;
@@ -340,7 +341,7 @@ kue_setmulti(struct kue_softc *sc)
DPRINTFN(5,("%s: %s: enter\n", sc->kue_dev.dv_xname, __func__));
- if (ifp->if_flags & IFF_PROMISC) {
+ if (ifp->if_flags & IFF_PROMISC || ac->ac_multirangecnt > 0) {
allmulti:
ifp->if_flags |= IFF_ALLMULTI;
sc->kue_rxfilt |= KUE_RXFILT_ALLMULTI;
@@ -352,11 +353,9 @@ allmulti:
sc->kue_rxfilt &= ~KUE_RXFILT_ALLMULTI;
i = 0;
- ETHER_FIRST_MULTI(step, &sc->arpcom, enm);
+ ETHER_FIRST_MULTI(step, ac, enm);
while (enm != NULL) {
- if (i == KUE_MCFILTCNT(sc) ||
- memcmp(enm->enm_addrlo, enm->enm_addrhi,
- ETHER_ADDR_LEN) != 0)
+ if (i == KUE_MCFILTCNT(sc))
goto allmulti;
memcpy(KUE_MCFILT(sc, i), enm->enm_addrlo, ETHER_ADDR_LEN);
diff --git a/sys/dev/usb/if_otus.c b/sys/dev/usb/if_otus.c
index 26dea3add5f..3950d0af1cb 100644
--- a/sys/dev/usb/if_otus.c
+++ b/sys/dev/usb/if_otus.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_otus.c,v 1.35 2013/08/07 01:06:41 bluhm Exp $ */
+/* $OpenBSD: if_otus.c,v 1.36 2013/11/05 10:20:04 mpi Exp $ */
/*-
* Copyright (c) 2009 Damien Bergamini <damien.bergamini@free.fr>
@@ -1579,6 +1579,9 @@ otus_set_multi(struct otus_softc *sc)
uint32_t lo, hi;
uint8_t bit;
+ if (ac->ac_multirangecnt > 0)
+ ifp->if_flags |= IFF_ALLMULTI;
+
if ((ifp->if_flags & (IFF_ALLMULTI | IFF_PROMISC)) != 0) {
lo = hi = 0xffffffff;
goto done;
@@ -1586,11 +1589,6 @@ otus_set_multi(struct otus_softc *sc)
lo = hi = 0;
ETHER_FIRST_MULTI(step, ac, enm);
while (enm != NULL) {
- if (bcmp(enm->enm_addrlo, enm->enm_addrhi, ETHER_ADDR_LEN)) {
- ifp->if_flags |= IFF_ALLMULTI;
- lo = hi = 0xffffffff;
- goto done;
- }
bit = enm->enm_addrlo[5] >> 2;
if (bit < 32)
lo |= 1 << bit;
diff --git a/sys/dev/usb/if_zyd.c b/sys/dev/usb/if_zyd.c
index e5ac2d0603e..2c523867ef3 100644
--- a/sys/dev/usb/if_zyd.c
+++ b/sys/dev/usb/if_zyd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_zyd.c,v 1.91 2013/08/07 01:06:43 bluhm Exp $ */
+/* $OpenBSD: if_zyd.c,v 1.92 2013/11/05 10:20:05 mpi Exp $ */
/*-
* Copyright (c) 2006 by Damien Bergamini <damien.bergamini@free.fr>
@@ -1642,6 +1642,9 @@ zyd_set_multi(struct zyd_softc *sc)
uint32_t lo, hi;
uint8_t bit;
+ if (ac->ac_multirangecnt > 0)
+ ifp->if_flags |= IFF_ALLMULTI;
+
if ((ifp->if_flags & (IFF_ALLMULTI | IFF_PROMISC)) != 0) {
lo = hi = 0xffffffff;
goto done;
@@ -1649,11 +1652,6 @@ zyd_set_multi(struct zyd_softc *sc)
lo = hi = 0;
ETHER_FIRST_MULTI(step, ac, enm);
while (enm != NULL) {
- if (bcmp(enm->enm_addrlo, enm->enm_addrhi, ETHER_ADDR_LEN)) {
- ifp->if_flags |= IFF_ALLMULTI;
- lo = hi = 0xffffffff;
- goto done;
- }
bit = enm->enm_addrlo[5] >> 2;
if (bit < 32)
lo |= 1 << bit;