summaryrefslogtreecommitdiffstats
path: root/net/mac80211/mlme.c
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2014-02-04 03:54:07 -0500
committerJohannes Berg <johannes.berg@intel.com>2014-02-05 08:03:24 -0500
commit3de3802c3d0909c4f222df93cfc0f4ed91191e4c (patch)
treec9b6e67c659e2e7b4d0aed9089fea59a65e453e2 /net/mac80211/mlme.c
parent4d9523005f956e23da2df1b884a08c17e2a2d5a2 (diff)
mac80211: order IEs in association request correctly
In association request frames, there may be IEs passed from userspace (such as interworking IEs) between HT and VHT, so add code to insert those inbetween them. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211/mlme.c')
-rw-r--r--net/mac80211/mlme.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index 6c9ebca02394..61604834b914 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -756,6 +756,34 @@ static void ieee80211_send_assoc(struct ieee80211_sub_if_data *sdata)
756 ieee80211_add_ht_ie(sdata, skb, assoc_data->ap_ht_param, 756 ieee80211_add_ht_ie(sdata, skb, assoc_data->ap_ht_param,
757 sband, chan, sdata->smps_mode); 757 sband, chan, sdata->smps_mode);
758 758
759 /* if present, add any custom IEs that go before VHT */
760 if (assoc_data->ie_len) {
761 static const u8 before_vht[] = {
762 WLAN_EID_SSID,
763 WLAN_EID_SUPP_RATES,
764 WLAN_EID_EXT_SUPP_RATES,
765 WLAN_EID_PWR_CAPABILITY,
766 WLAN_EID_SUPPORTED_CHANNELS,
767 WLAN_EID_RSN,
768 WLAN_EID_QOS_CAPA,
769 WLAN_EID_RRM_ENABLED_CAPABILITIES,
770 WLAN_EID_MOBILITY_DOMAIN,
771 WLAN_EID_SUPPORTED_REGULATORY_CLASSES,
772 WLAN_EID_HT_CAPABILITY,
773 WLAN_EID_BSS_COEX_2040,
774 WLAN_EID_EXT_CAPABILITY,
775 WLAN_EID_QOS_TRAFFIC_CAPA,
776 WLAN_EID_TIM_BCAST_REQ,
777 WLAN_EID_INTERWORKING,
778 };
779 noffset = ieee80211_ie_split(assoc_data->ie, assoc_data->ie_len,
780 before_vht, ARRAY_SIZE(before_vht),
781 offset);
782 pos = skb_put(skb, noffset - offset);
783 memcpy(pos, assoc_data->ie + offset, noffset - offset);
784 offset = noffset;
785 }
786
759 if (!(ifmgd->flags & IEEE80211_STA_DISABLE_VHT)) 787 if (!(ifmgd->flags & IEEE80211_STA_DISABLE_VHT))
760 ieee80211_add_vht_ie(sdata, skb, sband, 788 ieee80211_add_vht_ie(sdata, skb, sband,
761 &assoc_data->ap_vht_cap); 789 &assoc_data->ap_vht_cap);