summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Smith <mgsmith@netgate.com>2015-11-18 10:31:13 -0600
committerMatt Smith <mgsmith@netgate.com>2015-11-18 10:31:13 -0600
commite7bb171d66ca2b2bb767111ceb55bb13a6e58932 (patch)
tree711e49fe4be965185a9467e7ff8a64eedb1cec59
parentf3e10164b29d4ece9c857db0a44aec0fea02c35b (diff)
downloadFreeBSD-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.c21
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);
}
/*
OpenPOWER on IntegriCloud