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