HE: Add HE support to hostapd_set_freq_params()
The parameters that need to be applied are symmetric to those of VHT, however the validation code needs to be tweaked to check the HE capabilities. Signed-off-by: Shashidhar Lakkavalli <slakkavalli@datto.com> Signed-off-by: John Crispin <john@phrozen.org>
This commit is contained in:
parent
8e467e3cf4
commit
1e8ea0833d
1 changed files with 61 additions and 12 deletions
|
@ -475,7 +475,67 @@ int hostapd_set_freq_params(struct hostapd_freq_params *data,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data->vht_enabled) switch (oper_chwidth) {
|
if (data->he_enabled) switch (oper_chwidth) {
|
||||||
|
case CHANWIDTH_USE_HT:
|
||||||
|
if (mode == HOSTAPD_MODE_IEEE80211G && sec_channel_offset) {
|
||||||
|
if (!(he_cap->phy_cap[HE_PHYCAP_CHANNEL_WIDTH_SET_IDX] &
|
||||||
|
HE_PHYCAP_CHANNEL_WIDTH_SET_40MHZ_IN_2G)) {
|
||||||
|
wpa_printf(MSG_ERROR,
|
||||||
|
"40 MHz channel width is not supported in 2.4 GHz");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
/* fall through */
|
||||||
|
case CHANWIDTH_80MHZ:
|
||||||
|
if (mode == HOSTAPD_MODE_IEEE80211A) {
|
||||||
|
if (!(he_cap->phy_cap[HE_PHYCAP_CHANNEL_WIDTH_SET_IDX] &
|
||||||
|
HE_PHYCAP_CHANNEL_WIDTH_SET_40MHZ_80MHZ_IN_5G)) {
|
||||||
|
wpa_printf(MSG_ERROR,
|
||||||
|
"40/80 MHz channel width is not supported in 5/6 GHz");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case CHANWIDTH_80P80MHZ:
|
||||||
|
if (!(he_cap->phy_cap[HE_PHYCAP_CHANNEL_WIDTH_SET_IDX] &
|
||||||
|
HE_PHYCAP_CHANNEL_WIDTH_SET_80PLUS80MHZ_IN_5G)) {
|
||||||
|
wpa_printf(MSG_ERROR,
|
||||||
|
"80+80 MHz channel width is not supported in 5/6 GHz");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case CHANWIDTH_160MHZ:
|
||||||
|
if (!(he_cap->phy_cap[HE_PHYCAP_CHANNEL_WIDTH_SET_IDX] &
|
||||||
|
HE_PHYCAP_CHANNEL_WIDTH_SET_160MHZ_IN_5G)) {
|
||||||
|
wpa_printf(MSG_ERROR,
|
||||||
|
"160 MHz channel width is not supported in 5 / 6GHz");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
} else if (data->vht_enabled) switch (oper_chwidth) {
|
||||||
|
case CHANWIDTH_USE_HT:
|
||||||
|
break;
|
||||||
|
case CHANWIDTH_80P80MHZ:
|
||||||
|
if (!(vht_caps & VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ)) {
|
||||||
|
wpa_printf(MSG_ERROR,
|
||||||
|
"80+80 channel width is not supported!");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
/* fall through */
|
||||||
|
case CHANWIDTH_80MHZ:
|
||||||
|
break;
|
||||||
|
case CHANWIDTH_160MHZ:
|
||||||
|
if (!(vht_caps & (VHT_CAP_SUPP_CHAN_WIDTH_160MHZ |
|
||||||
|
VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ))) {
|
||||||
|
wpa_printf(MSG_ERROR,
|
||||||
|
"160 MHz channel width is not supported!");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data->he_enabled || data->vht_enabled) switch (oper_chwidth) {
|
||||||
case CHANWIDTH_USE_HT:
|
case CHANWIDTH_USE_HT:
|
||||||
if (center_segment1 ||
|
if (center_segment1 ||
|
||||||
(center_segment0 != 0 &&
|
(center_segment0 != 0 &&
|
||||||
|
@ -484,11 +544,6 @@ int hostapd_set_freq_params(struct hostapd_freq_params *data,
|
||||||
return -1;
|
return -1;
|
||||||
break;
|
break;
|
||||||
case CHANWIDTH_80P80MHZ:
|
case CHANWIDTH_80P80MHZ:
|
||||||
if (!(vht_caps & VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ)) {
|
|
||||||
wpa_printf(MSG_ERROR,
|
|
||||||
"80+80 channel width is not supported!");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (center_segment1 == center_segment0 + 4 ||
|
if (center_segment1 == center_segment0 + 4 ||
|
||||||
center_segment1 == center_segment0 - 4)
|
center_segment1 == center_segment0 - 4)
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -533,12 +588,6 @@ int hostapd_set_freq_params(struct hostapd_freq_params *data,
|
||||||
break;
|
break;
|
||||||
case CHANWIDTH_160MHZ:
|
case CHANWIDTH_160MHZ:
|
||||||
data->bandwidth = 160;
|
data->bandwidth = 160;
|
||||||
if (!(vht_caps & (VHT_CAP_SUPP_CHAN_WIDTH_160MHZ |
|
|
||||||
VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ))) {
|
|
||||||
wpa_printf(MSG_ERROR,
|
|
||||||
"160MHZ channel width is not supported!");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (center_segment1)
|
if (center_segment1)
|
||||||
return -1;
|
return -1;
|
||||||
if (!sec_channel_offset)
|
if (!sec_channel_offset)
|
||||||
|
|
Loading…
Reference in a new issue