mac80211: 802.11p OCB mode support
This patch adds 802.11p OCB (Outside the Context of a BSS) mode support. When communicating in OCB mode a mandatory wildcard BSSID (48 '1' bits) is used. The EDCA parameters handling function was changed to support 802.11p specific values. The insertion of a newly discovered STAs is done in the similar way as in the IBSS mode -- through the deferred insertion. The OCB mode uses a periodic 'housekeeping task' for expiration of disconnected STAs (in the similar manner as in the MESH mode). New Kconfig option for verbose OCB debugging outputs is added. Signed-off-by: Rostislav Lisovy <rostislav.lisovy@fel.cvut.cz> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:

committed by
Johannes Berg

parent
6e0bd6c35b
commit
239281f803
@@ -1101,6 +1101,7 @@ void ieee80211_set_wmm_default(struct ieee80211_sub_if_data *sdata,
|
||||
struct ieee80211_chanctx_conf *chanctx_conf;
|
||||
int ac;
|
||||
bool use_11b, enable_qos;
|
||||
bool is_ocb; /* Use another EDCA parameters if dot11OCBActivated=true */
|
||||
int aCWmin, aCWmax;
|
||||
|
||||
if (!local->ops->conf_tx)
|
||||
@@ -1125,6 +1126,8 @@ void ieee80211_set_wmm_default(struct ieee80211_sub_if_data *sdata,
|
||||
*/
|
||||
enable_qos = (sdata->vif.type != NL80211_IFTYPE_STATION);
|
||||
|
||||
is_ocb = (sdata->vif.type == NL80211_IFTYPE_OCB);
|
||||
|
||||
/* Set defaults according to 802.11-2007 Table 7-37 */
|
||||
aCWmax = 1023;
|
||||
if (use_11b)
|
||||
@@ -1146,7 +1149,10 @@ void ieee80211_set_wmm_default(struct ieee80211_sub_if_data *sdata,
|
||||
qparam.cw_max = aCWmax;
|
||||
qparam.cw_min = aCWmin;
|
||||
qparam.txop = 0;
|
||||
qparam.aifs = 7;
|
||||
if (is_ocb)
|
||||
qparam.aifs = 9;
|
||||
else
|
||||
qparam.aifs = 7;
|
||||
break;
|
||||
/* never happens but let's not leave undefined */
|
||||
default:
|
||||
@@ -1154,21 +1160,32 @@ void ieee80211_set_wmm_default(struct ieee80211_sub_if_data *sdata,
|
||||
qparam.cw_max = aCWmax;
|
||||
qparam.cw_min = aCWmin;
|
||||
qparam.txop = 0;
|
||||
qparam.aifs = 3;
|
||||
if (is_ocb)
|
||||
qparam.aifs = 6;
|
||||
else
|
||||
qparam.aifs = 3;
|
||||
break;
|
||||
case IEEE80211_AC_VI:
|
||||
qparam.cw_max = aCWmin;
|
||||
qparam.cw_min = (aCWmin + 1) / 2 - 1;
|
||||
if (use_11b)
|
||||
if (is_ocb)
|
||||
qparam.txop = 0;
|
||||
else if (use_11b)
|
||||
qparam.txop = 6016/32;
|
||||
else
|
||||
qparam.txop = 3008/32;
|
||||
qparam.aifs = 2;
|
||||
|
||||
if (is_ocb)
|
||||
qparam.aifs = 3;
|
||||
else
|
||||
qparam.aifs = 2;
|
||||
break;
|
||||
case IEEE80211_AC_VO:
|
||||
qparam.cw_max = (aCWmin + 1) / 2 - 1;
|
||||
qparam.cw_min = (aCWmin + 1) / 4 - 1;
|
||||
if (use_11b)
|
||||
if (is_ocb)
|
||||
qparam.txop = 0;
|
||||
else if (use_11b)
|
||||
qparam.txop = 3264/32;
|
||||
else
|
||||
qparam.txop = 1504/32;
|
||||
@@ -1842,7 +1859,8 @@ int ieee80211_reconfig(struct ieee80211_local *local)
|
||||
sdata_unlock(sdata);
|
||||
break;
|
||||
case NL80211_IFTYPE_OCB:
|
||||
/* to be implemented in the future */
|
||||
changed |= BSS_CHANGED_OCB;
|
||||
ieee80211_bss_info_change_notify(sdata, changed);
|
||||
break;
|
||||
case NL80211_IFTYPE_ADHOC:
|
||||
changed |= BSS_CHANGED_IBSS;
|
||||
|
Reference in New Issue
Block a user