summaryrefslogtreecommitdiff
path: root/sys/net
diff options
context:
space:
mode:
authorSUZUKI Shinsuke <suz@FreeBSD.org>2002-04-10 04:18:42 +0000
committerSUZUKI Shinsuke <suz@FreeBSD.org>2002-04-10 04:18:42 +0000
commitee0a4f7ee7ae75730b7f5f9cd974c8d66d3c3081 (patch)
tree3117bf4f4e3b993905d6174d789e4d846ccf3370 /sys/net
parent7edfb592df21762fd4fd75974f9715b78381ccaf (diff)
Notes
Diffstat (limited to 'sys/net')
-rw-r--r--sys/net/if.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/sys/net/if.c b/sys/net/if.c
index 854a879a0238..1b64e915aea1 100644
--- a/sys/net/if.c
+++ b/sys/net/if.c
@@ -1646,11 +1646,13 @@ if_allmulti(ifp, onswitch)
{
int error = 0;
int s = splimp();
+ struct ifreq ifr;
if (onswitch) {
if (ifp->if_amcount++ == 0) {
ifp->if_flags |= IFF_ALLMULTI;
- error = ifp->if_ioctl(ifp, SIOCSIFFLAGS, 0);
+ ifr.ifr_flags = ifp->if_flags;
+ error = ifp->if_ioctl(ifp, SIOCSIFFLAGS, (caddr_t)&ifr);
}
} else {
if (ifp->if_amcount > 1) {
@@ -1658,7 +1660,8 @@ if_allmulti(ifp, onswitch)
} else {
ifp->if_amcount = 0;
ifp->if_flags &= ~IFF_ALLMULTI;
- error = ifp->if_ioctl(ifp, SIOCSIFFLAGS, 0);
+ ifr.ifr_flags = ifp->if_flags;
+ error = ifp->if_ioctl(ifp, SIOCSIFFLAGS, (caddr_t)&ifr);
}
}
splx(s);
@@ -1870,9 +1873,11 @@ if_setlladdr(struct ifnet *ifp, const u_char *lladdr, int len)
*/
if ((ifp->if_flags & IFF_UP) != 0) {
ifp->if_flags &= ~IFF_UP;
- (*ifp->if_ioctl)(ifp, SIOCSIFFLAGS, NULL);
+ ifr.ifr_flags = ifp->if_flags;
+ (*ifp->if_ioctl)(ifp, SIOCSIFFLAGS, (caddr_t)&ifr);
ifp->if_flags |= IFF_UP;
- (*ifp->if_ioctl)(ifp, SIOCSIFFLAGS, NULL);
+ ifr.ifr_flags = ifp->if_flags;
+ (*ifp->if_ioctl)(ifp, SIOCSIFFLAGS, (caddr_t)&ifr);
#ifdef INET
/*
* Also send gratuitous ARPs to notify other nodes about