diff options
-rw-r--r-- | sys/dev/dc/if_dc.c | 16 | ||||
-rw-r--r-- | sys/pci/if_dc.c | 16 |
2 files changed, 14 insertions, 18 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); } 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); } |