MFC r279819:

Fix CARP when in use in a HyperV environment:

 - Bump link state when stopping or starting the interface;
 - Don't handle SIOCGIFADDR specially, similar to r277103.

This change is based on a previous revision from Andy Zhang
(Microsoft) who did the diagnostic work and many thanks to
them for their help in supporting the HyperV work.

PR:		kern/187203
This commit is contained in:
Xin LI 2015-05-19 08:00:39 +00:00
parent bf0d9ac10d
commit 9bce46d020
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/stable/10/; revision=283100

View File

@ -738,7 +738,14 @@ hn_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
switch(cmd) {
case SIOCSIFADDR:
case SIOCGIFADDR:
#ifdef INET
if (ifa->ifa_addr->sa_family == AF_INET) {
ifp->if_flags |= IFF_UP;
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
hn_ifinit(sc);
arp_ifinit(ifp, ifa);
} else
#endif
error = ether_ioctl(ifp, cmd, data);
break;
case SIOCSIFMTU:
@ -902,6 +909,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 +959,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);
}
/*