Module Name: src Committed By: nisimura Date: Wed Apr 1 00:07:04 UTC 2020
Modified Files: src/sys/dev/pci: if_kse.c Log Message: switch to use ETHER_F_ALLMULTI flag To generate a diff of this commit: cvs rdiff -u -r1.51 -r1.52 src/sys/dev/pci/if_kse.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/pci/if_kse.c diff -u src/sys/dev/pci/if_kse.c:1.51 src/sys/dev/pci/if_kse.c:1.52 --- src/sys/dev/pci/if_kse.c:1.51 Tue Mar 24 04:00:26 2020 +++ src/sys/dev/pci/if_kse.c Wed Apr 1 00:07:04 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: if_kse.c,v 1.51 2020/03/24 04:00:26 nisimura Exp $ */ +/* $NetBSD: if_kse.c,v 1.52 2020/04/01 00:07:04 nisimura Exp $ */ /*- * Copyright (c) 2006 The NetBSD Foundation, Inc. @@ -34,7 +34,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_kse.c,v 1.51 2020/03/24 04:00:26 nisimura Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_kse.c,v 1.52 2020/04/01 00:07:04 nisimura Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -1096,18 +1096,19 @@ kse_set_filter(struct kse_softc *sc) sc->sc_rxc &= ~(RXC_MHTE | RXC_RM | RXC_RA); - if (ifp->if_flags & IFF_PROMISC) { - ifp->if_flags |= IFF_ALLMULTI; - goto update; - } - ifp->if_flags &= ~IFF_ALLMULTI; - /* clear perfect match filter and prepare mcast hash table */ for (i = 0; i < 16; i++) CSR_WRITE_4(sc, MAAH0 + i*8, 0); crc = mchash[0] = mchash[1] = 0; ETHER_LOCK(ec); + if (ifp->if_flags & IFF_PROMISC) { + ec->ec_flags |= ETHER_F_ALLMULTI; + /* run promisc. mode */ + sc->sc_rxc |= RXC_RA; + goto update; + } + ec->ec_flags &= ~ETHER_F_ALLMULTI; ETHER_FIRST_MULTI(step, ec, enm); i = 0; while (enm != NULL) { @@ -1120,8 +1121,10 @@ kse_set_filter(struct kse_softc *sc) * ranges is for IP multicast routing, for which the * range is big enough to require all bits set.) */ + ec->ec_flags |= ETHER_F_ALLMULTI; ETHER_UNLOCK(ec); - ifp->if_flags |= IFF_ALLMULTI; + /* accept all multicast */ + sc->sc_rxc |= RXC_RM; goto update; } #if KSE_MCASTDEBUG == 1 @@ -1150,14 +1153,8 @@ kse_set_filter(struct kse_softc *sc) sc->sc_rxc |= RXC_MHTE; CSR_WRITE_4(sc, MTR0, mchash[0]); CSR_WRITE_4(sc, MTR1, mchash[1]); - return; - update: /* With RA or RM, MHTE/MTR0/MTR1 are never consulted. */ - if (ifp->if_flags & IFF_PROMISC) - sc->sc_rxc |= RXC_RA; - else - sc->sc_rxc |= RXC_RM; return; }