svn commit: r195428 - projects/mesh11s/sys/net80211

Rui Paulo rpaulo at FreeBSD.org
Tue Jul 7 19:48:31 UTC 2009


Author: rpaulo
Date: Tue Jul  7 19:48:30 2009
New Revision: 195428
URL: http://svn.freebsd.org/changeset/base/195428

Log:
  * reserve some ioctl numbers
  * move hwmp route ioctl code to mesh
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  projects/mesh11s/sys/net80211/ieee80211_hwmp.c
  projects/mesh11s/sys/net80211/ieee80211_ioctl.h
  projects/mesh11s/sys/net80211/ieee80211_mesh.c

Modified: projects/mesh11s/sys/net80211/ieee80211_hwmp.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_hwmp.c	Tue Jul  7 19:29:55 2009	(r195427)
+++ projects/mesh11s/sys/net80211/ieee80211_hwmp.c	Tue Jul  7 19:48:30 2009	(r195428)
@@ -1304,55 +1304,12 @@ static int
 hwmp_ioctl_get80211(struct ieee80211vap *vap, struct ieee80211req *ireq)
 {
 	struct ieee80211_hwmp_state *hs = vap->iv_hwmp;
-#if 0
-	struct ieee80211_mesh_route *rt;
-	size_t len, off;
-	uint8_t *p;
-#endif
 	int error;
  
 	if (vap->iv_opmode != IEEE80211_M_MBSS)
 		return ENOSYS;
 	error = 0;
 	switch (ireq->i_type) {
-#if 0
-	case IEEE80211_IOC_HWMP_CMD:
-		switch (ireq->i_val) {
-		case IEEE80211_HWMP_CMD_LIST:
-			len = 0;
-			HWMP_LOCK(hs);
-			TAILQ_FOREACH(rt, &hs->hs_routes, rt_next) {
-				len += sizeof(*rt);
-			}
-			HWMP_UNLOCK(hs);
-			if (len > ireq->i_len || ireq->i_len < sizeof(*rt))
-				return ENOMEM;
-			ireq->i_len = len;
-			p = malloc(len, M_TEMP, M_NOWAIT | M_ZERO);
-			if (p == NULL)
-				return ENOMEM;
-			off = 0;
-			HWMP_LOCK(hs);
-			TAILQ_FOREACH(rt, &hs->hs_routes, rt_next) {
-				if (off >= len)
-					break;
-				memcpy(p + off, rt, sizeof(*rt));
-				off += sizeof(*rt);
-			}
-			HWMP_UNLOCK(hs);
-			error = copyout(p, (uint8_t *)ireq->i_data,
-			    ireq->i_len);
-			free(p, M_TEMP);
-			break;
-		case IEEE80211_HWMP_CMD_FLUSH:
-		case IEEE80211_HWMP_CMD_ADD:
-		case IEEE80211_HWMP_CMD_DELETE:
-			return EINVAL;
-		default:
-			return ENOSYS;
-		}
-		break;
-#endif
 	case IEEE80211_IOC_HWMP_ROOTMODE:
 		ireq->i_val = hs->hs_rootmode;
 		break;
@@ -1379,25 +1336,6 @@ hwmp_ioctl_set80211(struct ieee80211vap 
 		return ENOSYS;
 	error = 0;
 	switch (ireq->i_type) {
-#if 0
-	case IEEE80211_IOC_HWMP_CMD:
-		switch (ireq->i_val) {
-		case IEEE80211_HWMP_CMD_LIST:
-			return EINVAL;
-		case IEEE80211_HWMP_CMD_FLUSH:
-			hwmp_rt_flush(vap);
-			break;
-		case IEEE80211_HWMP_CMD_ADD:
-			hwmp_rt_add(vap, ireq->i_data);
-			break;
-		case IEEE80211_HWMP_CMD_DELETE:
-			hwmp_rt_del(vap, ireq->i_data);
-			break;
-		default:
-			return ENOSYS;
-		}
-		break;
-#endif
 	case IEEE80211_IOC_HWMP_ROOTMODE:
 		if (ireq->i_val < 0 || ireq->i_val > 3)
 			return EINVAL;

Modified: projects/mesh11s/sys/net80211/ieee80211_ioctl.h
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_ioctl.h	Tue Jul  7 19:29:55 2009	(r195427)
+++ projects/mesh11s/sys/net80211/ieee80211_ioctl.h	Tue Jul  7 19:48:30 2009	(r195428)
@@ -318,13 +318,13 @@ struct ieee80211req_maclist {
 };
 
 /*
- * HWMP table operations.
+ * Mesh Routing Table Operations.
  */
 enum {
-	IEEE80211_HWMP_CMD_LIST	  = 0,	/* list HWMP routing table */
-	IEEE80211_HWMP_CMD_FLUSH  = 1,	/* flush HWMP routing table */
-	IEEE80211_HWMP_CMD_ADD	  = 2,	/* add entry to the table */
-	IEEE80211_HWMP_CMD_DELETE = 3,	/* delete an entry from the table */
+	IEEE80211_MESH_RTCMD_LIST   = 0, /* list HWMP routing table */
+	IEEE80211_MESH_RTCMD_FLUSH  = 1, /* flush HWMP routing table */
+	IEEE80211_MESH_RTCMD_ADD    = 2, /* add entry to the table */
+	IEEE80211_MESH_RTCMD_DELETE = 3, /* delete an entry from the table */
 };
 /*
  * HWMP root modes
@@ -674,15 +674,21 @@ struct ieee80211req {
 #define	IEEE80211_IOC_GREENFIELD	112	/* Greenfield (on, off) */
 #define	IEEE80211_IOC_STBC		113	/* STBC Tx/RX (on, off) */
 
-#define	IEEE80211_IOC_MESH_ID		190	/* mesh identifier */
-#define	IEEE80211_IOC_MESH_AP		191	/* accepting peerings */
-#define	IEEE80211_IOC_MESH_FWRD		192	/* forward frames */
-#define	IEEE80211_IOC_MESH_PROTO	193	/* mesh protocols */
-#define	IEEE80211_IOC_MESH_TTL		194	/* mesh TTL */
-#define	IEEE80211_IOC_HWMP_CMD		195	/* HWMP table commands */
-#define	IEEE80211_IOC_HWMP_ROOTMODE	196	/* HWMP root mode */
-#define	IEEE80211_IOC_HWMP_MAXHOPS	197	/* number of hops before drop */
-#define	IEEE80211_IOC_HWMP_TTL		198	/* HWMP TTL */
+#define	IEEE80211_IOC_MESH_ID		170	/* mesh identifier */
+#define	IEEE80211_IOC_MESH_AP		171	/* accepting peerings */
+#define	IEEE80211_IOC_MESH_FWRD		172	/* forward frames */
+#define	IEEE80211_IOC_MESH_PROTO	173	/* mesh protocols */
+#define	IEEE80211_IOC_MESH_TTL		174	/* mesh TTL */
+#define	IEEE80211_IOC_MESH_RTCMD	175	/* mesh routing table commands*/
+#define IEEE80211_IOC_MESH_PR_METRIC	176	/* mesh metric protocol */
+#define	IEEE80211_IOC_MESH_PR_PATH	177	/* mesh path protocol */
+#define	IEEE80211_IOC_MESH_PR_SIG	178	/* mesh sig protocol */
+#define	IEEE80211_IOC_MESH_PR_CC	179	/* mesh congestion protocol */
+#define	IEEE80211_IOC_MESH_PR_AUTH	180	/* mesh auth protocol */
+
+#define	IEEE80211_IOC_HWMP_ROOTMODE	190	/* HWMP root mode */
+#define	IEEE80211_IOC_HWMP_MAXHOPS	191	/* number of hops before drop */
+#define	IEEE80211_IOC_HWMP_TTL		192	/* HWMP TTL */
 
 #define	IEEE80211_IOC_TDMA_SLOT		201	/* TDMA: assigned slot */
 #define	IEEE80211_IOC_TDMA_SLOTCNT	202	/* TDMA: slots in bss */

Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_mesh.c	Tue Jul  7 19:29:55 2009	(r195427)
+++ projects/mesh11s/sys/net80211/ieee80211_mesh.c	Tue Jul  7 19:48:30 2009	(r195428)
@@ -2381,8 +2381,11 @@ static int
 mesh_ioctl_get80211(struct ieee80211vap *vap, struct ieee80211req *ireq)
 {
 	struct ieee80211_mesh_state *ms = vap->iv_mesh;
-	int error;
 	uint8_t tmpmeshid[IEEE80211_NWID_LEN];
+	struct ieee80211_mesh_route *rt;
+	size_t len, off;
+	uint8_t *p;
+	int error;
 
 	if (vap->iv_opmode != IEEE80211_M_MBSS)
 		return ENOSYS;
@@ -2403,6 +2406,44 @@ mesh_ioctl_get80211(struct ieee80211vap 
 	case IEEE80211_IOC_MESH_TTL:
 		ireq->i_val = ms->ms_ttl;
 		break;
+	case IEEE80211_IOC_MESH_RTCMD:
+		switch (ireq->i_val) {
+		case IEEE80211_MESH_RTCMD_LIST:
+			len = 0;
+			MESH_RT_LOCK(ms);
+			TAILQ_FOREACH(rt, &ms->ms_routes, rt_next) {
+				len += sizeof(*rt);
+			}
+			MESH_RT_UNLOCK(ms);
+			if (len > ireq->i_len || ireq->i_len < sizeof(*rt)) {
+				ireq->i_len = len;
+				return ENOMEM;
+			}
+			ireq->i_len = len;
+			p = malloc(len, M_TEMP, M_NOWAIT | M_ZERO);
+			if (p == NULL)
+				return ENOMEM;
+			off = 0;
+			MESH_RT_LOCK(ms);
+			TAILQ_FOREACH(rt, &ms->ms_routes, rt_next) {
+				if (off >= len)
+					break;
+				memcpy(p + off, rt, sizeof(*rt));
+				off += sizeof(*rt);
+			}
+			MESH_RT_UNLOCK(ms);
+			error = copyout(p, (uint8_t *)ireq->i_data,
+			    ireq->i_len);
+			free(p, M_TEMP);
+			break;
+		case IEEE80211_MESH_RTCMD_FLUSH:
+		case IEEE80211_MESH_RTCMD_ADD:
+		case IEEE80211_MESH_RTCMD_DELETE:
+			return EINVAL;
+		default:
+			return ENOSYS;
+                }
+                break;
 	default:
 		return ENOSYS;
 	}
@@ -2448,10 +2489,28 @@ mesh_ioctl_set80211(struct ieee80211vap 
 	case IEEE80211_IOC_MESH_TTL:
 		ms->ms_ttl = (uint8_t) ireq->i_val;
 		break;
+	case IEEE80211_IOC_MESH_RTCMD:
+		switch (ireq->i_val) {
+		case IEEE80211_MESH_RTCMD_LIST:
+			return EINVAL;
+		case IEEE80211_MESH_RTCMD_FLUSH:
+			ieee80211_mesh_rt_flush(vap);
+			break;
+		case IEEE80211_MESH_RTCMD_ADD:
+			if (IEEE80211_ADDR_EQ(vap->iv_myaddr, ireq->i_data))
+				return EINVAL;
+			ieee80211_mesh_rt_add(vap, ireq->i_data);
+			break;
+		case IEEE80211_MESH_RTCMD_DELETE:
+			ieee80211_mesh_rt_del(vap, ireq->i_data);
+			break;
+		default:
+			return ENOSYS;
+		}
+		break;
 	default:
 		return ENOSYS;
 	}
-
 	return error;
 }
 IEEE80211_IOCTL_SET(mesh, mesh_ioctl_set80211);


More information about the svn-src-projects mailing list