Index: head/sys/dev/vnic/nicvf_main.c =================================================================== --- head/sys/dev/vnic/nicvf_main.c +++ head/sys/dev/vnic/nicvf_main.c @@ -425,6 +425,7 @@ struct nicvf *nic; struct rcv_queue *rq; struct ifreq *ifr; + uint32_t flags; int mask, err; int rq_idx; #if defined(INET) || defined(INET6) @@ -479,10 +480,10 @@ break; case SIOCSIFFLAGS: NICVF_CORE_LOCK(nic); - if (if_getflags(ifp) & IFF_UP) { + flags = if_getflags(ifp); + if (flags & IFF_UP) { if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) { - if ((nic->if_flags & if_getflags(ifp)) & - IFF_PROMISC) { + if ((flags ^ nic->if_flags) & IFF_PROMISC) { /* Change promiscous mode */ #if 0 /* ARM64TODO */ @@ -490,8 +491,7 @@ #endif } - if ((nic->if_flags ^ if_getflags(ifp)) & - IFF_ALLMULTI) { + if ((flags ^ nic->if_flags) & IFF_ALLMULTI) { /* Change multicasting settings */ #if 0 /* ARM64TODO */ @@ -504,7 +504,7 @@ } else if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) nicvf_stop_locked(nic); - nic->if_flags = if_getflags(ifp); + nic->if_flags = flags; NICVF_CORE_UNLOCK(nic); break;