Date: Tue, 7 Jul 2009 19:48:30 +0000 (UTC) From: Rui Paulo <rpaulo@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r195428 - projects/mesh11s/sys/net80211 Message-ID: <200907071948.n67JmUSs027515@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200907071948.n67JmUSs027515>