vnic: correct and simplify SIOCSIFFLAGS

PR:		223573, 223575
Sponsored by:	The FreeBSD Foundation
Differential Revision:	https://reviews.freebsd.org/D13028
This commit is contained in:
Ed Maste 2019-09-01 16:53:17 +00:00
parent 597d9b4008
commit 73f4b4ebac
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=351664

View File

@ -425,6 +425,7 @@ nicvf_if_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
struct nicvf *nic; struct nicvf *nic;
struct rcv_queue *rq; struct rcv_queue *rq;
struct ifreq *ifr; struct ifreq *ifr;
uint32_t flags;
int mask, err; int mask, err;
int rq_idx; int rq_idx;
#if defined(INET) || defined(INET6) #if defined(INET) || defined(INET6)
@ -479,10 +480,10 @@ nicvf_if_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
break; break;
case SIOCSIFFLAGS: case SIOCSIFFLAGS:
NICVF_CORE_LOCK(nic); 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 (if_getdrvflags(ifp) & IFF_DRV_RUNNING) {
if ((nic->if_flags & if_getflags(ifp)) & if ((flags ^ nic->if_flags) & IFF_PROMISC) {
IFF_PROMISC) {
/* Change promiscous mode */ /* Change promiscous mode */
#if 0 #if 0
/* ARM64TODO */ /* ARM64TODO */
@ -490,8 +491,7 @@ nicvf_if_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
#endif #endif
} }
if ((nic->if_flags ^ if_getflags(ifp)) & if ((flags ^ nic->if_flags) & IFF_ALLMULTI) {
IFF_ALLMULTI) {
/* Change multicasting settings */ /* Change multicasting settings */
#if 0 #if 0
/* ARM64TODO */ /* ARM64TODO */
@ -504,7 +504,7 @@ nicvf_if_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
} else if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) } else if (if_getdrvflags(ifp) & IFF_DRV_RUNNING)
nicvf_stop_locked(nic); nicvf_stop_locked(nic);
nic->if_flags = if_getflags(ifp); nic->if_flags = flags;
NICVF_CORE_UNLOCK(nic); NICVF_CORE_UNLOCK(nic);
break; break;