socsvn commit: r305133 - in soc2016/yuanxunzhang/head: sys/net usr.sbin/eaps
yuanxunzhang at FreeBSD.org
yuanxunzhang at FreeBSD.org
Mon Jun 13 05:08:41 UTC 2016
Author: yuanxunzhang
Date: Mon Jun 13 05:08:38 2016
New Revision: 305133
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=305133
Log:
EAPS: Create EAPS interface
Modified:
soc2016/yuanxunzhang/head/sys/net/eaps.c
soc2016/yuanxunzhang/head/sys/net/eaps.h
soc2016/yuanxunzhang/head/sys/net/if_types.h
soc2016/yuanxunzhang/head/usr.sbin/eaps/eaps.c
Modified: soc2016/yuanxunzhang/head/sys/net/eaps.c
==============================================================================
--- soc2016/yuanxunzhang/head/sys/net/eaps.c Mon Jun 13 03:45:08 2016 (r305132)
+++ soc2016/yuanxunzhang/head/sys/net/eaps.c Mon Jun 13 05:08:38 2016 (r305133)
@@ -34,6 +34,8 @@
#include <sys/param.h>
#include <sys/file.h>
#include <sys/queue.h>
+#include <sys/lock.h>
+#include <sys/mutex.h>
#include <ctype.h>
#include <err.h>
#include <errno.h>
@@ -52,5 +54,59 @@
/*
* EAPS Protocol Module
*/
+static int eaps_clone_create(struct if_clone *, int, caddr_t);
+static void eaps_clone_destroy(struct ifnet *);
+
+static VNET_DEFINE(struct if_clone *, eaps_cloner);
+#define V_eaps_cloner VNET(V_eaps_cloner)
+
+static const char eaps_name[] = "EAPS";
+
+SYSCTL_DECL(_net_link);
+static SYSCTL_NODE(_net_link, IFT_EAPS, eaps, CTLFLAG_RW, 0, "EAPS");
+
+static VNET_DEFINE(LIST_HEAD(, eaps_softc), eaps_list);
+#define V_eaps_list VNET(eaps_list)
+static VNET_DEFINE(struct mtx, eaps_list_mtx);
+#define V_eaps_list_mtx VNET(eaps_list_mtx)
+#define EAPS_LIST_LOCK_INIT(x) mtx_init(&V_eaps_list_mtx, \
+ "EAPS interface list", NULL, MTX_DEF)
+#define EAPS_LIST_LOCK_DESTROY(x) mtx_destroy(&V_eaps_list_mtx)
+#define EAPS_LIST_LOCK(x) mtx_lock(&V_eaps_list_mtx)
+#define EAPS_LIST_UNLOCK(x) mtx_unlock(&V_eaps_list_mtx)
+
+static void
+vnet_eaps_init(const void *unused __unused)
+{
+
+ EAPS_LIST_LOCK_INIT();
+ LIST_INIT(&V_eaps_list);
+ V_eaps_cloner = if_clone_simple(eaps_name,
+ eaps_clone_create, eaps_clone_destroy, 0);
+}
+VNET_SYSINIT(vnet_eaps_init, SI_SUB_PROTO_IFATTACHDOMAIN, SI_ORDER_ANY,
+ vnet_eaps_init, NULL);
+
+
+/*
+ * eaps_clone_create:
+ *
+ * Create a new eaps instance.
+ */
+static int
+eaps_clone_create(struct if_clone *ifc, int unit, caddr_t params)
+{
+ return (0);
+}
+
+/*
+ * eaps_clone_destroy:
+ *
+ * Destroy a eaps instance.
+ */
+static void
+eaps_clone_destroy(struct ifnet *ifp)
+{
+
+}
-static SLIST_HEAD(slisthead, eaps_d) head = SLIST_HEAD_INITIALIZER(head);
Modified: soc2016/yuanxunzhang/head/sys/net/eaps.h
==============================================================================
--- soc2016/yuanxunzhang/head/sys/net/eaps.h Mon Jun 13 03:45:08 2016 (r305132)
+++ soc2016/yuanxunzhang/head/sys/net/eaps.h Mon Jun 13 05:08:38 2016 (r305133)
@@ -31,11 +31,15 @@
#ifndef _NET_EAPS_H_
#define _NET_EAPS_H_
+
#ifdef _KERNEL
-struct eaps_d {
- char eaps_name[32]; /* name of the EAPS domain */
- SLIST_ENTRY(eaps_d) eaps_entries;
+/*
+ * Software state for each EAPS Domain
+ */
+struct eaps_softc {
+ struct ifnet *sc_ifp; /* make this an interface */
+ LIST_ENTRY(eaps_softc) sc_list;
};
/*
Modified: soc2016/yuanxunzhang/head/sys/net/if_types.h
==============================================================================
--- soc2016/yuanxunzhang/head/sys/net/if_types.h Mon Jun 13 03:45:08 2016 (r305132)
+++ soc2016/yuanxunzhang/head/sys/net/if_types.h Mon Jun 13 05:08:38 2016 (r305133)
@@ -242,7 +242,7 @@
IFT_INFINIBAND = 0xc7, /* Infiniband */
IFT_BRIDGE = 0xd1, /* Transparent bridge interface */
IFT_STF = 0xd7, /* 6to4 interface */
-
+ IFT_EAPS = 0xd8, /* EAPS interface */
/*
* Not based on IANA assignments. Conflicting with IANA assignments.
* We should make them negative probably.
Modified: soc2016/yuanxunzhang/head/usr.sbin/eaps/eaps.c
==============================================================================
--- soc2016/yuanxunzhang/head/usr.sbin/eaps/eaps.c Mon Jun 13 03:45:08 2016 (r305132)
+++ soc2016/yuanxunzhang/head/usr.sbin/eaps/eaps.c Mon Jun 13 05:08:38 2016 (r305133)
@@ -67,9 +67,9 @@
};
int keyword(const char *);
-static void createdomain(int, char **, int);
-static void deletedomain(int, char **);
-static void displayeaps(int, char **);
+static void create_domain(int, char **, int);
+static void delete_domain(int, char **);
+static void display(int, char **);
static void usage(const char *);
int
@@ -86,20 +86,20 @@
if (*(++argv) != NULL)
switch (keyword(*argv)) {
case K_CREATE:
- createdomain(argc, argv, s);
+ create_domain(argc, argv, s);
case K_DELETE:
- deletedomain(argc, argv);
+ delete_domain(argc, argv);
case K_DISPLAY:
- displayeaps(argc, argv);
+ display(argc, argv);
}
usage(*argv);
return retval;
}
static void
-createdomain(int argc, char **argv, int s)
+create_domain(int argc, char **argv, int s)
{
int error = 0;
char *domain_name = *(++argv);
@@ -110,7 +110,7 @@
struct ifreq ifr;
memset(&ifr, 0, sizeof(ifr));
- (void) strlcpy(ifr.ifr_name, "bridge", sizeof(ifr.ifr_name));
+ (void) strlcpy(ifr.ifr_name, "eaps", sizeof(ifr.ifr_name));
if (ioctl(s, SIOCIFCREATE2, &ifr) < 0)
err(1, "SIOCIFCREATE2");
@@ -119,7 +119,7 @@
}
static void
-deletedomain(int argc, char **argv)
+delete_domain(int argc, char **argv)
{
int error = 0;
printf("Delete eaps domain %s!\n", *(++argv));
@@ -127,7 +127,7 @@
}
static void
-displayeaps(int argc, char **argv)
+display(int argc, char **argv)
{
int error = 0;
More information about the svn-soc-all
mailing list