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:
parent
597d9b4008
commit
73f4b4ebac
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=351664
@ -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;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user