svn commit: r191359 - projects/mesh11s/sys/net80211
Rui Paulo
rpaulo at FreeBSD.org
Tue Apr 21 15:56:14 UTC 2009
Author: rpaulo
Date: Tue Apr 21 15:56:13 2009
New Revision: 191359
URL: http://svn.freebsd.org/changeset/base/191359
Log:
Move the ioctl processing code from ieee80211_ioctl.c to ieee80211_mesh.c
because we are now using linker sets.
Sponsored by: The FreeBSD Foundation
Modified:
projects/mesh11s/sys/net80211/ieee80211_ioctl.c
projects/mesh11s/sys/net80211/ieee80211_ioctl.h
projects/mesh11s/sys/net80211/ieee80211_mesh.c
Modified: projects/mesh11s/sys/net80211/ieee80211_ioctl.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_ioctl.c Tue Apr 21 15:54:17 2009 (r191358)
+++ projects/mesh11s/sys/net80211/ieee80211_ioctl.c Tue Apr 21 15:56:13 2009 (r191359)
@@ -1110,14 +1110,6 @@ ieee80211_ioctl_get80211(struct ieee8021
ireq->i_val =
(vap->iv_flags_ext & IEEE80211_FEXT_RIFS) != 0;
break;
- case IEEE80211_IOC_MESHID:
- if (vap->iv_opmode != IEEE80211_M_MBSS)
- return EINVAL;
-
- ireq->i_len = vap->iv_meshidlen;
- memcpy(tmpssid, vap->iv_meshid, ireq->i_len);
- error = copyout(tmpssid, ireq->i_data, ireq->i_len);
- break;
default:
error = ieee80211_ioctl_getdefault(vap, ireq);
break;
@@ -3145,17 +3137,6 @@ ieee80211_ioctl_set80211(struct ieee8021
if (isvapht(vap))
error = ERESTART;
break;
- case IEEE80211_IOC_MESHID:
- if (ireq->i_val != 0 ||
- ireq->i_len > IEEE80211_NWID_LEN)
- return EINVAL;
- error = copyin(ireq->i_data, tmpssid, ireq->i_len);
- if (error)
- break;
- memset(vap->iv_meshid, 0, IEEE80211_NWID_LEN);
- vap->iv_meshidlen = ireq->i_len;
- memcpy(vap->iv_meshid, tmpssid, ireq->i_len);
- break;
default:
error = ieee80211_ioctl_setdefault(vap, ireq);
break;
Modified: projects/mesh11s/sys/net80211/ieee80211_ioctl.h
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_ioctl.h Tue Apr 21 15:54:17 2009 (r191358)
+++ projects/mesh11s/sys/net80211/ieee80211_ioctl.h Tue Apr 21 15:56:13 2009 (r191359)
@@ -628,7 +628,8 @@ struct ieee80211req {
#define IEEE80211_IOC_STA_VLAN 109 /* per-station vlan tag */
#define IEEE80211_IOC_SMPS 110 /* MIMO power save */
#define IEEE80211_IOC_RIFS 111 /* RIFS config (on, off) */
-#define IEEE80211_IOC_MESHID 112 /* Mesh identifier */
+
+#define IEEE80211_IOC_MESH_ID 190 /* Mesh identifier */
#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 Apr 21 15:54:17 2009 (r191358)
+++ projects/mesh11s/sys/net80211/ieee80211_mesh.c Tue Apr 21 15:56:13 2009 (r191359)
@@ -111,9 +111,20 @@ mesh_newstate(struct ieee80211vap *vap,
vap->iv_state = nstate; /* state transition */
if (ostate != IEEE80211_S_SCAN)
ieee80211_cancel_scan(vap); /* background scan */
- switch (nstate) {
+ ni = vap->iv_bss; /* NB: no reference held */
+ switch (nstate) {
case IEEE80211_S_INIT:
+ if (ostate == IEEE80211_S_SCAN)
+ ieee80211_cancel_scan(vap);
+ if (ostate != IEEE80211_S_INIT) {
+ /* NB: optimize INIT -> INIT case */
+ ieee80211_reset_bss(vap);
+ }
+ break;
case IEEE80211_S_SCAN:
+ switch (ostate) {
+ case IEEE80211_S_INIT:
+ }
case IEEE80211_S_AUTH:
case IEEE80211_S_ASSOC:
case IEEE80211_S_CAC:
@@ -164,3 +175,53 @@ mesh_recv_mgmt(struct ieee80211_node *ni
}
}
+
+
+static int
+mesh_ioctl_get80211(struct ieee80211vap *vap, struct ieee80211req *ireq)
+{
+ int error;
+ uint8_t tmpmeshid[IEEE80211_NWID_LEN];
+
+ error = 0;
+ switch (ireq->i_type) {
+ case IEEE80211_IOC_MESH_ID:
+ if (vap->iv_opmode != IEEE80211_M_MBSS)
+ return EINVAL;
+ ireq->i_len = vap->iv_meshidlen;
+ memcpy(meshid, vap->iv_meshid, ireq->i_len);
+ error = copyout(tmpmeshid, ireq->i_data, ireq->i_len);
+ break;
+ default:
+ return ENOSYS;
+ }
+
+ return error;
+}
+IEEE80211_IOCTL_GET(mesh, mesh_ioctl_get80211);
+
+static int
+mesh_ioctl_set80211(struct ieee80211vap *vap, struct ieee80211req *ireq)
+{
+ int error;
+ uint8_t tmpmeshid[IEEE80211_NWID_LEN];
+
+ error = 0;
+ switch (ireq->i_type) {
+ case IEEE80211_IOC_MESH_ID:
+ if (ireq->i_val != 0 || ireq->i_len > IEEE80211_NWID_LEN)
+ return EINVAL;
+ error = copyin(ireq->i_data, tmpmeshid, ireq->i_len);
+ if (error)
+ break;
+ memset(vap->iv_meshid, 0, IEEE80211_NWID_LEN);
+ vap->iv_meshidlen = ireq->i_len;
+ memcpy(vap->iv_meshid, tmpmeshid, ireq->i_len);
+ break;
+ default:
+ return ENOSYS;
+ }
+
+ return error;
+}
+IEEE80211_IOCTL_SET(mesh, mesh_ioctl_set80211);
More information about the svn-src-projects
mailing list