diff options
author | luigi <luigi@FreeBSD.org> | 2002-11-25 19:28:01 +0000 |
---|---|---|
committer | luigi <luigi@FreeBSD.org> | 2002-11-25 19:28:01 +0000 |
commit | 0877551f282283fdb7abfac195b5b2507b61be76 (patch) | |
tree | 08bdf140491fece57f7b2394dacd1a89ec9d82a6 /sys/pci | |
parent | 091d78e0a77f8724d788d4cdd7e1b8dad6e18355 (diff) | |
download | FreeBSD-src-0877551f282283fdb7abfac195b5b2507b61be76.zip FreeBSD-src-0877551f282283fdb7abfac195b5b2507b61be76.tar.gz |
Fix handling of IFF_ALLMULTI. The same bug in various forms affects
the following drivers:
dc mn sf sk ste ti tl xl an bge em gem gx ie lge sr aue cue kue wi xe
Approved by: re
Diffstat (limited to 'sys/pci')
-rw-r--r-- | sys/pci/if_dc.c | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/sys/pci/if_dc.c b/sys/pci/if_dc.c index 7047261..6b2d86c 100644 --- a/sys/pci/if_dc.c +++ b/sys/pci/if_dc.c @@ -3539,15 +3539,13 @@ dc_ioctl(ifp, command, data) switch(command) { case SIOCSIFFLAGS: if (ifp->if_flags & IFF_UP) { - if (ifp->if_flags & IFF_RUNNING && - ifp->if_flags & IFF_PROMISC && - !(sc->dc_if_flags & IFF_PROMISC)) { - dc_setfilt(sc); - } else if (ifp->if_flags & IFF_RUNNING && - !(ifp->if_flags & IFF_PROMISC) && - sc->dc_if_flags & IFF_PROMISC) { - dc_setfilt(sc); - } else if (!(ifp->if_flags & IFF_RUNNING)) { + int need_setfilt = (ifp->if_flags ^ sc->dc_if_flags) & + (IFF_PROMISC | IFF_ALLMULTI); + + if (ifp->if_flags & IFF_RUNNING) { + if (need_setfilt) + dc_setfilt(sc); + } else { sc->dc_txthresh = 0; dc_init(sc); } |