svn commit: r283100 - stable/10/sys/dev/hyperv/netvsc

Xin LI delphij at FreeBSD.org
Tue May 19 08:00:40 UTC 2015


Author: delphij
Date: Tue May 19 08:00:39 2015
New Revision: 283100
URL: https://svnweb.freebsd.org/changeset/base/283100

Log:
  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

Modified:
  stable/10/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
==============================================================================
--- stable/10/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c	Tue May 19 06:45:56 2015	(r283099)
+++ stable/10/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c	Tue May 19 08:00:39 2015	(r283100)
@@ -738,7 +738,14 @@ hn_ioctl(struct ifnet *ifp, u_long cmd, 
 	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);
 }
 
 /*


More information about the svn-src-all mailing list