diff options
author | Matt Smith <mgsmith@netgate.com> | 2015-11-18 10:31:13 -0600 |
---|---|---|
committer | Matt Smith <mgsmith@netgate.com> | 2015-11-18 10:31:13 -0600 |
commit | e7bb171d66ca2b2bb767111ceb55bb13a6e58932 (patch) | |
tree | 711e49fe4be965185a9467e7ff8a64eedb1cec59 | |
parent | f3e10164b29d4ece9c857db0a44aec0fea02c35b (diff) | |
download | FreeBSD-src-e7bb171d66ca2b2bb767111ceb55bb13a6e58932.zip FreeBSD-src-e7bb171d66ca2b2bb767111ceb55bb13a6e58932.tar.gz |
Importing pfSense patch carp_fix_hyperv.diff
-rw-r--r-- | sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c b/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c index 1f5fc3d..7acb3c9 100644 --- a/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c +++ b/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c @@ -739,7 +739,26 @@ hn_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) case SIOCSIFADDR: case SIOCGIFADDR: +#ifdef INET + NV_LOCK(sc); + if (ifa->ifa_addr->sa_family == AF_INET) { + ifp->if_flags |= IFF_UP; + if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) { + ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE); + if_link_state_change(ifp, LINK_STATE_DOWN); + ifp->if_drv_flags |= IFF_DRV_RUNNING; + ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; + if_link_state_change(ifp, LINK_STATE_UP); + } + arp_ifinit(ifp, ifa); + NV_UNLOCK(sc); + } else { + NV_UNLOCK(sc); +#endif error = ether_ioctl(ifp, cmd, data); +#ifdef INET + } +#endif break; case SIOCSIFMTU: hn_dev = vmbus_get_devctx(sc->hn_dev); @@ -902,6 +921,7 @@ hn_stop(hn_softc_t *sc) printf(" Closing Device ...\n"); ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE); + if_link_state_change(ifp, LINK_STATE_DOWN); sc->hn_initdone = 0; ret = hv_rf_on_close(device_ctx); @@ -951,6 +971,7 @@ hn_ifinit_locked(hn_softc_t *sc) } ifp->if_drv_flags |= IFF_DRV_RUNNING; ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; + if_link_state_change(ifp, LINK_STATE_UP); } /* |