aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/mwl
diff options
context:
space:
mode:
authorRui Paulo <rpaulo@FreeBSD.org>2009-07-11 15:02:45 +0000
committerRui Paulo <rpaulo@FreeBSD.org>2009-07-11 15:02:45 +0000
commit59aa14a91db84e940b6732cd1ff069f0268793bf (patch)
tree7dd4e6a8c026ec13b70ca0a34e625684d79ec055 /sys/dev/mwl
parent35ea6959ac1cd556d2165973d7424798d45da5be (diff)
Notes
Diffstat (limited to 'sys/dev/mwl')
-rw-r--r--sys/dev/mwl/if_mwl.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/sys/dev/mwl/if_mwl.c b/sys/dev/mwl/if_mwl.c
index dbbdca728352..c320cdb49c3c 100644
--- a/sys/dev/mwl/if_mwl.c
+++ b/sys/dev/mwl/if_mwl.c
@@ -420,6 +420,7 @@ mwl_attach(uint16_t devid, struct mwl_softc *sc)
| IEEE80211_C_IBSS /* ibss, nee adhoc, mode */
| IEEE80211_C_AHDEMO /* adhoc demo mode */
#endif
+ | IEEE80211_C_MBSS /* mesh point link mode */
| IEEE80211_C_WDS /* WDS supported */
| IEEE80211_C_SHPREAMBLE /* short preamble supported */
| IEEE80211_C_SHSLOT /* short slot time supported */
@@ -615,6 +616,7 @@ mwl_vap_create(struct ieee80211com *ic,
IEEE80211_ADDR_COPY(mac, mac0);
switch (opmode) {
case IEEE80211_M_HOSTAP:
+ case IEEE80211_M_MBSS:
if ((flags & IEEE80211_CLONE_MACADDR) == 0)
assign_address(sc, mac, flags & IEEE80211_CLONE_BSSID);
hvap = mwl_hal_newvap(mh, MWL_HAL_AP, mac);
@@ -686,7 +688,7 @@ mwl_vap_create(struct ieee80211com *ic,
vap->iv_key_delete = mwl_key_delete;
vap->iv_key_set = mwl_key_set;
#ifdef MWL_HOST_PS_SUPPORT
- if (opmode == IEEE80211_M_HOSTAP) {
+ if (opmode == IEEE80211_M_HOSTAP || opmode == IEEE80211_M_MBSS) {
vap->iv_update_ps = mwl_update_ps;
mvp->mv_set_tim = vap->iv_set_tim;
vap->iv_set_tim = mwl_set_tim;
@@ -706,12 +708,14 @@ mwl_vap_create(struct ieee80211com *ic,
switch (vap->iv_opmode) {
case IEEE80211_M_HOSTAP:
+ case IEEE80211_M_MBSS:
case IEEE80211_M_STA:
/*
* Setup sta db entry for local address.
*/
mwl_localstadb(vap);
- if (vap->iv_opmode == IEEE80211_M_HOSTAP)
+ if (vap->iv_opmode == IEEE80211_M_HOSTAP ||
+ vap->iv_opmode == IEEE80211_M_MBSS)
sc->sc_napvaps++;
else
sc->sc_nstavaps++;
@@ -753,11 +757,12 @@ mwl_vap_delete(struct ieee80211vap *vap)
ieee80211_vap_detach(vap);
switch (opmode) {
case IEEE80211_M_HOSTAP:
+ case IEEE80211_M_MBSS:
case IEEE80211_M_STA:
KASSERT(hvap != NULL, ("no hal vap handle"));
(void) mwl_hal_delstation(hvap, vap->iv_myaddr);
mwl_hal_delvap(hvap);
- if (opmode == IEEE80211_M_HOSTAP)
+ if (opmode == IEEE80211_M_HOSTAP || opmode == IEEE80211_M_MBSS)
sc->sc_napvaps--;
else
sc->sc_nstavaps--;
@@ -1281,6 +1286,7 @@ mwl_reset_vap(struct ieee80211vap *vap, int state)
/* re-setup beacons */
if (state == IEEE80211_S_RUN &&
(vap->iv_opmode == IEEE80211_M_HOSTAP ||
+ vap->iv_opmode == IEEE80211_M_MBSS ||
vap->iv_opmode == IEEE80211_M_IBSS)) {
mwl_setapmode(vap, vap->iv_bss->ni_chan);
mwl_hal_setnprotmode(hvap,
@@ -4184,6 +4190,7 @@ mwl_localstadb(struct ieee80211vap *vap)
mwl_setglobalkeys(vap);
break;
case IEEE80211_M_HOSTAP:
+ case IEEE80211_M_MBSS:
error = mwl_hal_newstation(hvap, vap->iv_myaddr,
0, 0, NULL, vap->iv_flags & IEEE80211_F_WME, 0);
if (error == 0)
@@ -4248,7 +4255,8 @@ mwl_newstate(struct ieee80211vap *vap, enum ieee80211_state nstate, int arg)
(void) mwl_peerstadb(ni, 0, 0, NULL);
} else if (nstate == IEEE80211_S_CSA) {
/* XXX move to below? */
- if (vap->iv_opmode == IEEE80211_M_HOSTAP)
+ if (vap->iv_opmode == IEEE80211_M_HOSTAP ||
+ vap->iv_opmode == IEEE80211_M_MBSS)
mwl_startcsa(vap);
} else if (nstate == IEEE80211_S_CAC) {
/* XXX move to below? */
@@ -4282,6 +4290,7 @@ mwl_newstate(struct ieee80211vap *vap, enum ieee80211_state nstate, int arg)
mwl_localstadb(vap);
switch (vap->iv_opmode) {
case IEEE80211_M_HOSTAP:
+ case IEEE80211_M_MBSS:
if (ostate == IEEE80211_S_CAC) {
/* enable in-service radar detection */
mwl_hal_setradardetection(mh,