summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/dev/dc/if_dc.c16
-rw-r--r--sys/pci/if_dc.c16
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);
}
OpenPOWER on IntegriCloud