Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 23 Aug 2016 10:01:35 GMT
From:      yuanxunzhang@FreeBSD.org
To:        svn-soc-all@FreeBSD.org
Subject:   socsvn commit: r308259 - in soc2016/yuanxunzhang/head: sys/net usr.sbin/eaps
Message-ID:  <201608231001.u7NA1ZcC096323@socsvn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: yuanxunzhang
Date: Tue Aug 23 10:01:35 2016
New Revision: 308259
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=308259

Log:
  EAPS: add primary/secondary port

Modified:
  soc2016/yuanxunzhang/head/sys/net/eaps.c
  soc2016/yuanxunzhang/head/usr.sbin/eaps/eaps.c

Modified: soc2016/yuanxunzhang/head/sys/net/eaps.c
==============================================================================
--- soc2016/yuanxunzhang/head/sys/net/eaps.c	Tue Aug 23 08:13:08 2016	(r308258)
+++ soc2016/yuanxunzhang/head/sys/net/eaps.c	Tue Aug 23 10:01:35 2016	(r308259)
@@ -282,6 +282,8 @@
 	es->hellotime = sc->sc_eaps.hellotime;
 	es->failtime = sc->sc_eaps.failtime;
 	(void) strlcpy(es->ifname, sc->sc_ifp->if_xname, sizeof(sc->sc_ifp->if_xname));
+	(void) strlcpy(es->p_port, sc->sc_eaps.p_port, sizeof(es->p_port));
+	(void) strlcpy(es->s_port, sc->sc_eaps.s_port, sizeof(es->s_port));
 	EAPS_RUNLOCK(sc, &tracker);
 
 	return (0);
@@ -304,7 +306,7 @@
 	EAPS_WLOCK(sc);
 	sc->sc_eaps.priority = es->priority;
 	EAPS_WUNLOCK(sc);
-	
+
 	return (0);
 }
 
@@ -336,12 +338,11 @@
 
 	struct rm_priotracker tracker;
 	EAPS_RLOCK(sc, &tracker);
-
-	// If the primary port has already used for secondary port, return error 
+	// If the port has already used for secondary port, then return error 
 	if (strcmp(sc->sc_eaps.s_port, p_port) == 0) {
+		EAPS_RUNLOCK(sc, &tracker);
 		return ENODEV;
 	}
-
 	EAPS_RUNLOCK(sc, &tracker);
 
 	EAPS_WLOCK(sc);
@@ -354,6 +355,22 @@
 int 
 set_eaps_secondary_port(struct eaps_softc *sc, struct eaps_state *es)
 {
+	char s_port[IFNAMSIZ];
+	(void) strlcpy(s_port, es->s_port, sizeof(es->s_port));
+
+	struct rm_priotracker tracker;
+	EAPS_RLOCK(sc, &tracker);
+	// If the port has already used for primary port, then return error 
+	if (strcmp(sc->sc_eaps.p_port, s_port) == 0) {
+		EAPS_RUNLOCK(sc, &tracker);
+		return ENODEV;
+	}
+	EAPS_RUNLOCK(sc, &tracker);
+
+	EAPS_WLOCK(sc);
+	(void) strlcpy(sc->sc_eaps.s_port, s_port, sizeof(sc->sc_eaps.s_port));
+	EAPS_WUNLOCK(sc);
+
 	return (0);
 }
 

Modified: soc2016/yuanxunzhang/head/usr.sbin/eaps/eaps.c
==============================================================================
--- soc2016/yuanxunzhang/head/usr.sbin/eaps/eaps.c	Tue Aug 23 08:13:08 2016	(r308258)
+++ soc2016/yuanxunzhang/head/usr.sbin/eaps/eaps.c	Tue Aug 23 10:01:35 2016	(r308259)
@@ -474,7 +474,40 @@
 static void
 set_eaps_secondary_port(int argc, char **argv, int s)
 {
+	int error = 0;
 
+	struct eaps_state es;
+	bzero(&es, sizeof(es));
+
+	// get eaps domain name
+	char *domain_name = *(++argv);
+
+	// check eaps domain name
+	if (domain_name == NULL) {
+		err(1, "EAPS domain name is NULL!");
+	}
+
+	// check if eaps domain exists
+	if (0 == if_nametoindex(domain_name))
+	{
+		errx(1, "EAPS domain %s does not exist", domain_name);
+	}
+
+	// get port name
+	char *port_name = *(++argv);
+
+	// check if eaps domain exists
+	if (0 == if_nametoindex(domain_name))
+	{
+		errx(1, "port %s does not exist", port_name);
+	}
+
+	strlcpy(es.ifname, domain_name, sizeof(es.ifname));
+	strlcpy(es.s_port, port_name, sizeof(es.s_port));
+	if (ioctl(s, SIOCESAPSSECONDARY, &es) != 0)
+		err(1, "SIOCESAPSSECONDARY");
+
+	exit(error);
 }
 
 static void



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