|
@@ -68,17 +68,24 @@ ieee80211_tdls_add_subband(struct ieee80211_sub_if_data *sdata,
|
|
ch = ieee80211_get_channel(sdata->local->hw.wiphy, i);
|
|
ch = ieee80211_get_channel(sdata->local->hw.wiphy, i);
|
|
if (ch) {
|
|
if (ch) {
|
|
/* we will be active on the channel */
|
|
/* we will be active on the channel */
|
|
- u32 flags = IEEE80211_CHAN_DISABLED |
|
|
|
|
- IEEE80211_CHAN_NO_IR;
|
|
|
|
cfg80211_chandef_create(&chandef, ch,
|
|
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++;
|
|
ch_cnt++;
|
|
|
|
+ /*
|
|
|
|
+ * check if the next channel is also part of
|
|
|
|
+ * this allowed range
|
|
|
|
+ */
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /*
|
|
|
|
+ * we've reached the end of a range, with allowed channels
|
|
|
|
+ * found
|
|
|
|
+ */
|
|
if (ch_cnt) {
|
|
if (ch_cnt) {
|
|
u8 *pos = skb_put(skb, 2);
|
|
u8 *pos = skb_put(skb, 2);
|
|
*pos++ = ieee80211_frequency_to_channel(subband_start);
|
|
*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;
|
|
return subband_cnt;
|
|
}
|
|
}
|
|
|
|
|