Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 313991
b: refs/heads/master
c: 9dde642
h: refs/heads/master
i:
  313989: ff8c929
  313987: d62f790
  313983: db36d0b
v: v3
  • Loading branch information
Johannes Berg authored and John W. Linville committed Jun 5, 2012
1 parent 52daee6 commit 347677c
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 17 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 10bab00afed042c1a38ed5ffb135e2aea5ce1277
refs/heads/master: 9dde64232586bd35c8454615266d209106b73c0f
3 changes: 2 additions & 1 deletion trunk/net/mac80211/ieee80211_i.h
Original file line number Diff line number Diff line change
Expand Up @@ -399,7 +399,6 @@ struct ieee80211_mgd_auth_data {
struct ieee80211_mgd_assoc_data {
struct cfg80211_bss *bss;
const u8 *supp_rates;
const u8 *ht_operation_ie;

unsigned long timeout;
int tries;
Expand All @@ -414,6 +413,8 @@ struct ieee80211_mgd_assoc_data {
bool sent_assoc;
bool synced;

u8 ap_ht_param;

size_t ie_len;
u8 ie[];
};
Expand Down
26 changes: 11 additions & 15 deletions trunk/net/mac80211/mlme.c
Original file line number Diff line number Diff line change
Expand Up @@ -258,34 +258,25 @@ static int ieee80211_compatible_rates(const u8 *supp_rates, int supp_rates_len,
}

static void ieee80211_add_ht_ie(struct ieee80211_sub_if_data *sdata,
struct sk_buff *skb, const u8 *ht_oper_ie,
struct sk_buff *skb, u8 ap_ht_param,
struct ieee80211_supported_band *sband,
struct ieee80211_channel *channel,
enum ieee80211_smps_mode smps)
{
struct ieee80211_ht_operation *ht_oper;
u8 *pos;
u32 flags = channel->flags;
u16 cap;
struct ieee80211_sta_ht_cap ht_cap;

BUILD_BUG_ON(sizeof(ht_cap) != sizeof(sband->ht_cap));

if (!ht_oper_ie)
return;

if (ht_oper_ie[1] < sizeof(struct ieee80211_ht_operation))
return;

memcpy(&ht_cap, &sband->ht_cap, sizeof(ht_cap));
ieee80211_apply_htcap_overrides(sdata, &ht_cap);

ht_oper = (struct ieee80211_ht_operation *)(ht_oper_ie + 2);

/* determine capability flags */
cap = ht_cap.cap;

switch (ht_oper->ht_param & IEEE80211_HT_PARAM_CHA_SEC_OFFSET) {
switch (ap_ht_param & IEEE80211_HT_PARAM_CHA_SEC_OFFSET) {
case IEEE80211_HT_PARAM_CHA_SEC_ABOVE:
if (flags & IEEE80211_CHAN_NO_HT40PLUS) {
cap &= ~IEEE80211_HT_CAP_SUP_WIDTH_20_40;
Expand Down Expand Up @@ -509,7 +500,7 @@ static void ieee80211_send_assoc(struct ieee80211_sub_if_data *sdata)
}

if (!(ifmgd->flags & IEEE80211_STA_DISABLE_11N))
ieee80211_add_ht_ie(sdata, skb, assoc_data->ht_operation_ie,
ieee80211_add_ht_ie(sdata, skb, assoc_data->ap_ht_param,
sband, local->oper_channel, ifmgd->ap_smps);

/* if present, add any custom non-vendor IEs that go after HT */
Expand Down Expand Up @@ -3260,7 +3251,7 @@ int ieee80211_mgd_assoc(struct ieee80211_sub_if_data *sdata,
struct ieee80211_bss *bss = (void *)req->bss->priv;
struct ieee80211_mgd_assoc_data *assoc_data;
struct ieee80211_supported_band *sband;
const u8 *ssidie;
const u8 *ssidie, *ht_ie;
int i, err;

ssidie = ieee80211_bss_get_ie(req->bss, WLAN_EID_SSID);
Expand Down Expand Up @@ -3347,8 +3338,13 @@ int ieee80211_mgd_assoc(struct ieee80211_sub_if_data *sdata,
(local->hw.queues >= IEEE80211_NUM_ACS);
assoc_data->supp_rates = bss->supp_rates;
assoc_data->supp_rates_len = bss->supp_rates_len;
assoc_data->ht_operation_ie =
ieee80211_bss_get_ie(req->bss, WLAN_EID_HT_OPERATION);

ht_ie = ieee80211_bss_get_ie(req->bss, WLAN_EID_HT_OPERATION);
if (ht_ie && ht_ie[1] >= sizeof(struct ieee80211_ht_operation))
assoc_data->ap_ht_param =
((struct ieee80211_ht_operation *)(ht_ie + 2))->ht_param;
else
ifmgd->flags |= IEEE80211_STA_DISABLE_11N;

if (bss->wmm_used && bss->uapsd_supported &&
(sdata->local->hw.flags & IEEE80211_HW_SUPPORTS_UAPSD)) {
Expand Down

0 comments on commit 347677c

Please sign in to comment.