Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 22 Feb 2017 06:26:50 +0000 (UTC)
From:      Dexuan Cui <dexuan@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org
Subject:   svn commit: r314085 - stable/11/sys/net
Message-ID:  <201702220626.v1M6Qo9m004554@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: dexuan
Date: Wed Feb 22 06:26:50 2017
New Revision: 314085
URL: https://svnweb.freebsd.org/changeset/base/314085

Log:
  MFC: 312687, 312688
  
  Approved by:	sephe (mentor)
  
  r312687
      ifnet: introduce event handlers for ifup/ifdown events
  
      Hyper-V's NIC SR-IOV implementation needs a Hyper-V synthetic NIC and
      a VF NIC to work together, mainly to support seamless live migration.
  
      When the VF device becomes UP (or DOWN), the synthetic NIC driver needs
      to switch the data path from the synthetic NIC to the VF (or the opposite).
  
      So the synthetic NIC driver needs to know when a VF device is becoming
      UP or DOWN and hence the patch is made.
  
      Reviewed by:	sephe
      Approved by:	sephe (mentor)
      Sponsored by:	Microsoft
      Differential Revision:	https://reviews.freebsd.org/D8963
  
  r312688
      hyperv/hn: add the support for VF drivers (SR-IOV)
  
      Hyper-V's NIC SR-IOV implementation needs a Hyper-V synthetic NIC and
      a VF NIC to work together (both NICs have the same MAC address), mainly to
      support seamless live migration.
  
      When the VF device becomes UP (or DOWN), the synthetic NIC driver needs
      to switch the data path from the synthetic NIC to the VF (or the opposite).
  
      Note: multicast/broadcast packets are still received through the synthetic
      NIC and we need to inject the packets through the VF interface (if the VF is
      UP), even if the synthetic NIC is DOWN (so we need to force the rxfilter
      to be NDIS_PACKET_TYPE_PROMISCUOUS, when the VF is UP).
  
      Reviewed by:	sephe
      Approved by:	sephe (mentor)
      Sponsored by:	Microsoft
      Differential Revision:	https://reviews.freebsd.org/D8964

Modified:
  stable/11/sys/net/if.c
  stable/11/sys/net/if_var.h

Modified: stable/11/sys/net/if.c
==============================================================================
--- stable/11/sys/net/if.c	Wed Feb 22 06:12:33 2017	(r314084)
+++ stable/11/sys/net/if.c	Wed Feb 22 06:26:50 2017	(r314085)
@@ -2218,6 +2218,7 @@ void
 if_down(struct ifnet *ifp)
 {
 
+	EVENTHANDLER_INVOKE(ifnet_event, ifp, IFNET_EVENT_DOWN);
 	if_unroute(ifp, IFF_UP, AF_UNSPEC);
 }
 
@@ -2230,6 +2231,7 @@ if_up(struct ifnet *ifp)
 {
 
 	if_route(ifp, IFF_UP, AF_UNSPEC);
+	EVENTHANDLER_INVOKE(ifnet_event, ifp, IFNET_EVENT_UP);
 }
 
 /*

Modified: stable/11/sys/net/if_var.h
==============================================================================
--- stable/11/sys/net/if_var.h	Wed Feb 22 06:12:33 2017	(r314084)
+++ stable/11/sys/net/if_var.h	Wed Feb 22 06:26:50 2017	(r314085)
@@ -359,6 +359,11 @@ EVENTHANDLER_DECLARE(ifnet_departure_eve
 /* Interface link state change event */
 typedef void (*ifnet_link_event_handler_t)(void *, struct ifnet *, int);
 EVENTHANDLER_DECLARE(ifnet_link_event, ifnet_link_event_handler_t);
+/* Interface up/down event */
+#define IFNET_EVENT_UP		0
+#define IFNET_EVENT_DOWN	1
+typedef void (*ifnet_event_fn)(void *, struct ifnet *ifp, int event);
+EVENTHANDLER_DECLARE(ifnet_event, ifnet_event_fn);
 #endif /* _SYS_EVENTHANDLER_H_ */
 
 /*



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