Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 19 May 2015 08:00:40 +0000 (UTC)
From:      Xin LI <delphij@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r283100 - stable/10/sys/dev/hyperv/netvsc
Message-ID:  <201505190800.t4J80eXe083921@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);
 }
 
 /*



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201505190800.t4J80eXe083921>