forked from luck/tmp_suning_uos_patched
mac80211: add QoS IE during TDLS setup start
If QoS is supported by the card, add an appropriate IE to TDLS setup- request and setup-response frames. Consolidate the setting of the WMM info IE across mac80211. Signed-off-by: Arik Nemtsov <arikx.nemtsov@intel.com> Reviewed-by: Liad Kaufman <liad.kaufman@intel.com> Reviewed-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
dd8c0b03d3
commit
40b861a0ee
|
@ -189,17 +189,8 @@ ieee80211_ibss_build_presp(struct ieee80211_sub_if_data *sdata,
|
|||
chandef, 0);
|
||||
}
|
||||
|
||||
if (local->hw.queues >= IEEE80211_NUM_ACS) {
|
||||
*pos++ = WLAN_EID_VENDOR_SPECIFIC;
|
||||
*pos++ = 7; /* len */
|
||||
*pos++ = 0x00; /* Microsoft OUI 00:50:F2 */
|
||||
*pos++ = 0x50;
|
||||
*pos++ = 0xf2;
|
||||
*pos++ = 2; /* WME */
|
||||
*pos++ = 0; /* WME info */
|
||||
*pos++ = 1; /* WME ver */
|
||||
*pos++ = 0; /* U-APSD no in use */
|
||||
}
|
||||
if (local->hw.queues >= IEEE80211_NUM_ACS)
|
||||
pos = ieee80211_add_wmm_info_ie(pos, 0); /* U-APSD not in use */
|
||||
|
||||
presp->head_len = pos - presp->head;
|
||||
if (WARN_ON(presp->head_len > frame_len))
|
||||
|
|
|
@ -1824,6 +1824,7 @@ int ieee80211_add_srates_ie(struct ieee80211_sub_if_data *sdata,
|
|||
int ieee80211_add_ext_srates_ie(struct ieee80211_sub_if_data *sdata,
|
||||
struct sk_buff *skb, bool need_basic,
|
||||
enum ieee80211_band band);
|
||||
u8 *ieee80211_add_wmm_info_ie(u8 *buf, u8 qosinfo);
|
||||
|
||||
/* channel management */
|
||||
void ieee80211_ht_oper_to_chandef(struct ieee80211_channel *control_chan,
|
||||
|
|
|
@ -830,16 +830,7 @@ static void ieee80211_send_assoc(struct ieee80211_sub_if_data *sdata)
|
|||
qos_info = 0;
|
||||
}
|
||||
|
||||
pos = skb_put(skb, 9);
|
||||
*pos++ = WLAN_EID_VENDOR_SPECIFIC;
|
||||
*pos++ = 7; /* len */
|
||||
*pos++ = 0x00; /* Microsoft OUI 00:50:F2 */
|
||||
*pos++ = 0x50;
|
||||
*pos++ = 0xf2;
|
||||
*pos++ = 2; /* WME */
|
||||
*pos++ = 0; /* WME info */
|
||||
*pos++ = 1; /* WME ver */
|
||||
*pos++ = qos_info;
|
||||
pos = ieee80211_add_wmm_info_ie(skb_put(skb, 9), qos_info);
|
||||
}
|
||||
|
||||
/* add any remaining custom (i.e. vendor specific here) IEs */
|
||||
|
|
|
@ -100,6 +100,7 @@ ieee80211_tdls_add_setup_start_ies(struct ieee80211_sub_if_data *sdata,
|
|||
const u8 *extra_ies, size_t extra_ies_len)
|
||||
{
|
||||
enum ieee80211_band band = ieee80211_get_sdata_band(sdata);
|
||||
struct ieee80211_local *local = sdata->local;
|
||||
size_t offset = 0, noffset;
|
||||
u8 *pos;
|
||||
|
||||
|
@ -126,6 +127,11 @@ ieee80211_tdls_add_setup_start_ies(struct ieee80211_sub_if_data *sdata,
|
|||
|
||||
ieee80211_tdls_add_ext_capab(skb);
|
||||
|
||||
/* add the QoS element if we support it */
|
||||
if (local->hw.queues >= IEEE80211_NUM_ACS &&
|
||||
action_code != WLAN_PUB_ACTION_TDLS_DISCOVER_RES)
|
||||
ieee80211_add_wmm_info_ie(skb_put(skb, 9), 0); /* no U-APSD */
|
||||
|
||||
/* add any custom IEs that go before HT capabilities */
|
||||
if (extra_ies_len) {
|
||||
static const u8 before_ht_cap[] = {
|
||||
|
@ -310,6 +316,7 @@ ieee80211_tdls_prep_mgmt_packet(struct wiphy *wiphy, struct net_device *dev,
|
|||
sizeof(struct ieee80211_tdls_data)) +
|
||||
50 + /* supported rates */
|
||||
7 + /* ext capab */
|
||||
26 + /* max(WMM-info, WMM-param) */
|
||||
extra_ies_len +
|
||||
sizeof(struct ieee80211_tdls_lnkie));
|
||||
if (!skb)
|
||||
|
|
|
@ -3082,3 +3082,18 @@ int ieee80211_max_num_channels(struct ieee80211_local *local)
|
|||
|
||||
return max_num_different_channels;
|
||||
}
|
||||
|
||||
u8 *ieee80211_add_wmm_info_ie(u8 *buf, u8 qosinfo)
|
||||
{
|
||||
*buf++ = WLAN_EID_VENDOR_SPECIFIC;
|
||||
*buf++ = 7; /* len */
|
||||
*buf++ = 0x00; /* Microsoft OUI 00:50:F2 */
|
||||
*buf++ = 0x50;
|
||||
*buf++ = 0xf2;
|
||||
*buf++ = 2; /* WME */
|
||||
*buf++ = 0; /* WME info */
|
||||
*buf++ = 1; /* WME ver */
|
||||
*buf++ = qosinfo; /* U-APSD no in use */
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user