svn commit: r272572 - head/sys/net
Hiroki Sato
hrs at FreeBSD.org
Sun Oct 5 21:27:27 UTC 2014
Author: hrs
Date: Sun Oct 5 21:27:26 2014
New Revision: 272572
URL: https://svnweb.freebsd.org/changeset/base/272572
Log:
Virtualize if_edsc(4).
Modified:
head/sys/net/if_edsc.c
Modified: head/sys/net/if_edsc.c
==============================================================================
--- head/sys/net/if_edsc.c Sun Oct 5 20:30:49 2014 (r272571)
+++ head/sys/net/if_edsc.c Sun Oct 5 21:27:26 2014 (r272572)
@@ -51,6 +51,7 @@
#include <net/if_clone.h> /* network interface cloning */
#include <net/if_types.h> /* IFT_ETHER and friends */
#include <net/if_var.h> /* kernel-only part of ifnet(9) */
+#include <net/vnet.h>
static const char edscname[] = "edsc";
@@ -69,7 +70,8 @@ struct edsc_softc {
/*
* Attach to the interface cloning framework.
*/
-static struct if_clone *edsc_cloner;
+static VNET_DEFINE(struct if_clone *, edsc_cloner);
+#define V_edsc_cloner VNET(edsc_cloner)
static int edsc_clone_create(struct if_clone *, int, caddr_t);
static void edsc_clone_destroy(struct ifnet *);
@@ -307,6 +309,36 @@ edsc_start(struct ifnet *ifp)
*/
}
+static void
+vnet_edsc_init(const void *unused __unused)
+{
+
+ /*
+ * Connect to the network interface cloning framework.
+ * The last argument is the number of units to be created
+ * from the outset. It's also the minimum number of units
+ * allowed. We don't want any units created as soon as the
+ * driver is loaded.
+ */
+ V_edsc_cloner = if_clone_simple(edscname, edsc_clone_create,
+ edsc_clone_destroy, 0);
+}
+VNET_SYSINIT(vnet_edsc_init, SI_SUB_PROTO_IFATTACHDOMAIN, SI_ORDER_ANY,
+ vnet_edsc_init, NULL);
+
+static void
+vnet_edsc_uninit(const void *unused __unused)
+{
+
+ /*
+ * Disconnect from the cloning framework.
+ * Existing interfaces will be disposed of properly.
+ */
+ if_clone_detach(V_edsc_cloner);
+}
+VNET_SYSUNINIT(vnet_edsc_uninit, SI_SUB_PROTO_IFATTACHDOMAIN, SI_ORDER_ANY,
+ vnet_edsc_uninit, NULL);
+
/*
* This function provides handlers for module events, namely load and unload.
*/
@@ -316,25 +348,8 @@ edsc_modevent(module_t mod, int type, vo
switch (type) {
case MOD_LOAD:
- /*
- * Connect to the network interface cloning framework.
- * The last argument is the number of units to be created
- * from the outset. It's also the minimum number of units
- * allowed. We don't want any units created as soon as the
- * driver is loaded.
- */
- edsc_cloner = if_clone_simple(edscname, edsc_clone_create,
- edsc_clone_destroy, 0);
- break;
-
case MOD_UNLOAD:
- /*
- * Disconnect from the cloning framework.
- * Existing interfaces will be disposed of properly.
- */
- if_clone_detach(edsc_cloner);
break;
-
default:
/*
* There are other event types, but we don't handle them.
More information about the svn-src-all
mailing list