mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 01:10:04 +00:00
mac80211: add TDLS supported channels correctly
The function adding the supported channels IE during a TDLS connection had several issues: 1. If the entire subband is usable, the function exitted the loop without adding it 2. The function only checked chandef_usable, ignoring flags like RADAR which would prevent TDLS off-channel communcation. 3. HT20 was explicitly required in the chandef, while not a requirement for TDLS off-channel. Signed-off-by: Arik Nemtsov <arikx.nemtsov@intel.com> Reviewed-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
3b24f4c653
commit
50075892ba
1 changed files with 21 additions and 5 deletions
|
@ -68,17 +68,24 @@ ieee80211_tdls_add_subband(struct ieee80211_sub_if_data *sdata,
|
|||
ch = ieee80211_get_channel(sdata->local->hw.wiphy, i);
|
||||
if (ch) {
|
||||
/* we will be active on the channel */
|
||||
u32 flags = IEEE80211_CHAN_DISABLED |
|
||||
IEEE80211_CHAN_NO_IR;
|
||||
cfg80211_chandef_create(&chandef, ch,
|
||||
NL80211_CHAN_HT20);
|
||||
if (cfg80211_chandef_usable(sdata->local->hw.wiphy,
|
||||
&chandef, flags)) {
|
||||
NL80211_CHAN_NO_HT);
|
||||
if (cfg80211_reg_can_beacon(sdata->local->hw.wiphy,
|
||||
&chandef,
|
||||
sdata->wdev.iftype)) {
|
||||
ch_cnt++;
|
||||
/*
|
||||
* check if the next channel is also part of
|
||||
* this allowed range
|
||||
*/
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* we've reached the end of a range, with allowed channels
|
||||
* found
|
||||
*/
|
||||
if (ch_cnt) {
|
||||
u8 *pos = skb_put(skb, 2);
|
||||
*pos++ = ieee80211_frequency_to_channel(subband_start);
|
||||
|
@ -89,6 +96,15 @@ ieee80211_tdls_add_subband(struct ieee80211_sub_if_data *sdata,
|
|||
}
|
||||
}
|
||||
|
||||
/* all channels in the requested range are allowed - add them here */
|
||||
if (ch_cnt) {
|
||||
u8 *pos = skb_put(skb, 2);
|
||||
*pos++ = ieee80211_frequency_to_channel(subband_start);
|
||||
*pos++ = ch_cnt;
|
||||
|
||||
subband_cnt++;
|
||||
}
|
||||
|
||||
return subband_cnt;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue