nl80211: Don't force VHT channel definition with HE
HE (802.11ax) is also supported on 2.4 GHz. And the 2.4 GHz band isn't
supposed to use VHT operations. Some codepaths in wpa_supplicant will
therefore not initialize the freq->bandwidth or the freq->center_freq1/2
members. As a result, the nl80211_put_freq_params() will directly return
an error (-1) or the kernel will return an error due to the invalid
channel definition.
Instead, the channel definitions should be created based on the actual
HT/VHT/none information on 2.4 GHz.
Fixes: ad9a1bfe78
("nl80211: Share VHT channel configuration for HE")
Signed-off-by: Sven Eckelmann <seckelmann@datto.com>
This commit is contained in:
parent
dd0153fced
commit
df4f959988
1 changed files with 9 additions and 1 deletions
|
@ -4344,6 +4344,10 @@ fail:
|
||||||
static int nl80211_put_freq_params(struct nl_msg *msg,
|
static int nl80211_put_freq_params(struct nl_msg *msg,
|
||||||
const struct hostapd_freq_params *freq)
|
const struct hostapd_freq_params *freq)
|
||||||
{
|
{
|
||||||
|
enum hostapd_hw_mode hw_mode;
|
||||||
|
int is_24ghz;
|
||||||
|
u8 channel;
|
||||||
|
|
||||||
wpa_printf(MSG_DEBUG, " * freq=%d", freq->freq);
|
wpa_printf(MSG_DEBUG, " * freq=%d", freq->freq);
|
||||||
if (nla_put_u32(msg, NL80211_ATTR_WIPHY_FREQ, freq->freq))
|
if (nla_put_u32(msg, NL80211_ATTR_WIPHY_FREQ, freq->freq))
|
||||||
return -ENOBUFS;
|
return -ENOBUFS;
|
||||||
|
@ -4352,7 +4356,11 @@ static int nl80211_put_freq_params(struct nl_msg *msg,
|
||||||
wpa_printf(MSG_DEBUG, " * vht_enabled=%d", freq->vht_enabled);
|
wpa_printf(MSG_DEBUG, " * vht_enabled=%d", freq->vht_enabled);
|
||||||
wpa_printf(MSG_DEBUG, " * ht_enabled=%d", freq->ht_enabled);
|
wpa_printf(MSG_DEBUG, " * ht_enabled=%d", freq->ht_enabled);
|
||||||
|
|
||||||
if (freq->vht_enabled || freq->he_enabled) {
|
hw_mode = ieee80211_freq_to_chan(freq->freq, &channel);
|
||||||
|
is_24ghz = hw_mode == HOSTAPD_MODE_IEEE80211G ||
|
||||||
|
hw_mode == HOSTAPD_MODE_IEEE80211B;
|
||||||
|
|
||||||
|
if (freq->vht_enabled || (freq->he_enabled && !is_24ghz)) {
|
||||||
enum nl80211_chan_width cw;
|
enum nl80211_chan_width cw;
|
||||||
|
|
||||||
wpa_printf(MSG_DEBUG, " * bandwidth=%d", freq->bandwidth);
|
wpa_printf(MSG_DEBUG, " * bandwidth=%d", freq->bandwidth);
|
||||||
|
|
Loading…
Reference in a new issue