From d560f7208b1d714fa4e69d9ea94713ae89e078a9 Mon Sep 17 00:00:00 2001 From: Luigi Rizzo Date: Mon, 1 Mar 1999 16:54:28 +0000 Subject: [PATCH] Fix handling of IFF_ALLMULTI. The code did not call tulip_addr_filter() on SIOCSIFFLAGS, and was nuking the IFF_ALLMULTI on entering tulip_addr_filter(). As a result it was impossible to run a multicast router on a machine with a "de" interface. --- sys/dev/de/if_de.c | 6 ++++-- sys/pci/if_de.c | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/sys/dev/de/if_de.c b/sys/dev/de/if_de.c index 49ae4a2f450..f3f0a2b9958 100644 --- a/sys/dev/de/if_de.c +++ b/sys/dev/de/if_de.c @@ -1,5 +1,5 @@ /* $NetBSD: if_de.c,v 1.80 1998/09/25 18:06:53 matt Exp $ */ -/* $Id: if_de.c,v 1.97 1999/01/29 08:29:05 bde Exp $ */ +/* $Id: if_de.c,v 1.98 1999/01/29 11:31:45 bde Exp $ */ /*- * Copyright (c) 1994-1997 Matt Thomas (matt@3am-software.com) @@ -3085,7 +3085,8 @@ tulip_addr_filter( sc->tulip_cmdmode &= ~TULIP_CMD_RXRUN; sc->tulip_intrmask &= ~TULIP_STS_RXSTOPPED; #if defined(IFF_ALLMULTI) - sc->tulip_if.if_flags &= ~IFF_ALLMULTI; + if (sc->tulip_if.if_flags & IFF_ALLMULTI) + sc->tulip_flags |= TULIP_ALLMULTI ; #endif #if defined(__FreeBSD__) && __FreeBSD_version >= 300000 @@ -4754,6 +4755,7 @@ tulip_ifioctl( printf(TULIP_PRINTF_FMT ": ignored invalid media request\n", TULIP_PRINTF_ARGS); } #endif + tulip_addr_filter(sc); /* reinit multicast filter */ tulip_init(sc); break; } diff --git a/sys/pci/if_de.c b/sys/pci/if_de.c index 49ae4a2f450..f3f0a2b9958 100644 --- a/sys/pci/if_de.c +++ b/sys/pci/if_de.c @@ -1,5 +1,5 @@ /* $NetBSD: if_de.c,v 1.80 1998/09/25 18:06:53 matt Exp $ */ -/* $Id: if_de.c,v 1.97 1999/01/29 08:29:05 bde Exp $ */ +/* $Id: if_de.c,v 1.98 1999/01/29 11:31:45 bde Exp $ */ /*- * Copyright (c) 1994-1997 Matt Thomas (matt@3am-software.com) @@ -3085,7 +3085,8 @@ tulip_addr_filter( sc->tulip_cmdmode &= ~TULIP_CMD_RXRUN; sc->tulip_intrmask &= ~TULIP_STS_RXSTOPPED; #if defined(IFF_ALLMULTI) - sc->tulip_if.if_flags &= ~IFF_ALLMULTI; + if (sc->tulip_if.if_flags & IFF_ALLMULTI) + sc->tulip_flags |= TULIP_ALLMULTI ; #endif #if defined(__FreeBSD__) && __FreeBSD_version >= 300000 @@ -4754,6 +4755,7 @@ tulip_ifioctl( printf(TULIP_PRINTF_FMT ": ignored invalid media request\n", TULIP_PRINTF_ARGS); } #endif + tulip_addr_filter(sc); /* reinit multicast filter */ tulip_init(sc); break; }