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 rcv_queue *rq;
struct ifreq *ifr;
uint32_t flags;
int mask, err;
int rq_idx;
#if defined(INET) || defined(INET6)
@ -479,10 +480,10 @@ nicvf_if_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
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 @@ nicvf_if_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
#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 @@ nicvf_if_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
} 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;