diff options
Diffstat (limited to 'sys/net80211')
-rw-r--r-- | sys/net80211/ieee80211_proto.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/sys/net80211/ieee80211_proto.c b/sys/net80211/ieee80211_proto.c index edac519..a0ddeb4 100644 --- a/sys/net80211/ieee80211_proto.c +++ b/sys/net80211/ieee80211_proto.c @@ -207,6 +207,21 @@ ieee80211_proto_vattach(struct ieee80211vap *vap) const struct ieee80211_rateset *rs = &ic->ic_sup_rates[i]; vap->iv_txparms[i].ucastrate = IEEE80211_FIXED_RATE_NONE; + + /* + * Setting the management rate to MCS 0 assumes that the + * BSS Basic rate set is empty and the BSS Basic MCS set + * is not. + * + * Since we're not checking this, default to the lowest + * defined rate for this mode. + * + * At least one 11n AP (DLINK DIR-825) is reported to drop + * some MCS management traffic (eg BA response frames.) + * + * See also: 9.6.0 of the 802.11n-2009 specification. + */ +#ifdef NOTYET if (i == IEEE80211_MODE_11NA || i == IEEE80211_MODE_11NG) { vap->iv_txparms[i].mgmtrate = 0 | IEEE80211_RATE_MCS; vap->iv_txparms[i].mcastrate = 0 | IEEE80211_RATE_MCS; @@ -216,6 +231,9 @@ ieee80211_proto_vattach(struct ieee80211vap *vap) vap->iv_txparms[i].mcastrate = rs->rs_rates[0] & IEEE80211_RATE_VAL; } +#endif + vap->iv_txparms[i].mgmtrate = rs->rs_rates[0] & IEEE80211_RATE_VAL; + vap->iv_txparms[i].mcastrate = rs->rs_rates[0] & IEEE80211_RATE_VAL; vap->iv_txparms[i].maxretry = IEEE80211_TXMAX_DEFAULT; } vap->iv_roaming = IEEE80211_ROAMING_AUTO; |