summaryrefslogtreecommitdiffstats
path: root/sys/dev/dc
diff options
context:
space:
mode:
authorluigi <luigi@FreeBSD.org>2002-11-25 19:28:01 +0000
committerluigi <luigi@FreeBSD.org>2002-11-25 19:28:01 +0000
commit0877551f282283fdb7abfac195b5b2507b61be76 (patch)
tree08bdf140491fece57f7b2394dacd1a89ec9d82a6 /sys/dev/dc
parent091d78e0a77f8724d788d4cdd7e1b8dad6e18355 (diff)
downloadFreeBSD-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/dev/dc')
-rw-r--r--sys/dev/dc/if_dc.c16
1 files changed, 7 insertions, 9 deletions
diff --git a/sys/dev/dc/if_dc.c b/sys/dev/dc/if_dc.c
index 7047261..6b2d86c 100644
--- a/sys/dev/dc/if_dc.c
+++ b/sys/dev/dc/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);
}
OpenPOWER on IntegriCloud