wpa_supplicant: Add HE override support
Add HE override support under the build parameter CONFIG_HE_OVERRIDES=y. The disable_he=1 network profile parameter can be used to disable HE. This requires a fallback to VHT on the 5 GHz band and to HT on the 2.4 GHz band. There is no nl80211 support for configuring the driver to disable HE, so for now, this applies only to IBSS and mesh cases. Signed-off-by: P Praneesh <ppranees@codeaurora.org>
This commit is contained in:
parent
e149051ced
commit
7c8f540ee0
10 changed files with 66 additions and 0 deletions
|
@ -1096,6 +1096,13 @@ struct wpa_driver_associate_params {
|
||||||
const struct ieee80211_vht_capabilities *vhtcaps_mask;
|
const struct ieee80211_vht_capabilities *vhtcaps_mask;
|
||||||
#endif /* CONFIG_VHT_OVERRIDES */
|
#endif /* CONFIG_VHT_OVERRIDES */
|
||||||
|
|
||||||
|
#ifdef CONFIG_HE_OVERRIDES
|
||||||
|
/**
|
||||||
|
* disable_he - Disable HE for this connection
|
||||||
|
*/
|
||||||
|
int disable_he;
|
||||||
|
#endif /* CONFIG_HE_OVERRIDES */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* req_key_mgmt_offload - Request key management offload for connection
|
* req_key_mgmt_offload - Request key management offload for connection
|
||||||
*
|
*
|
||||||
|
|
|
@ -166,6 +166,10 @@ ifdef CONFIG_VHT_OVERRIDES
|
||||||
L_CFLAGS += -DCONFIG_VHT_OVERRIDES
|
L_CFLAGS += -DCONFIG_VHT_OVERRIDES
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifdef CONFIG_HE_OVERRIDES
|
||||||
|
L_CFLAGS += -DCONFIG_HE_OVERRIDES
|
||||||
|
endif
|
||||||
|
|
||||||
ifndef CONFIG_BACKEND
|
ifndef CONFIG_BACKEND
|
||||||
CONFIG_BACKEND=file
|
CONFIG_BACKEND=file
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -198,6 +198,10 @@ ifdef CONFIG_VHT_OVERRIDES
|
||||||
CFLAGS += -DCONFIG_VHT_OVERRIDES
|
CFLAGS += -DCONFIG_VHT_OVERRIDES
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifdef CONFIG_HE_OVERRIDES
|
||||||
|
CFLAGS += -DCONFIG_HE_OVERRIDES
|
||||||
|
endif
|
||||||
|
|
||||||
ifndef CONFIG_BACKEND
|
ifndef CONFIG_BACKEND
|
||||||
CONFIG_BACKEND=file
|
CONFIG_BACKEND=file
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -2544,6 +2544,9 @@ static const struct parse_data ssid_fields[] = {
|
||||||
{ INT_RANGE(vht_tx_mcs_nss_7, -1, 3) },
|
{ INT_RANGE(vht_tx_mcs_nss_7, -1, 3) },
|
||||||
{ INT_RANGE(vht_tx_mcs_nss_8, -1, 3) },
|
{ INT_RANGE(vht_tx_mcs_nss_8, -1, 3) },
|
||||||
#endif /* CONFIG_VHT_OVERRIDES */
|
#endif /* CONFIG_VHT_OVERRIDES */
|
||||||
|
#ifdef CONFIG_HE_OVERRIDES
|
||||||
|
{ INT_RANGE(disable_he, 0, 1)},
|
||||||
|
#endif /* CONFIG_HE_OVERRIDES */
|
||||||
{ INT(ap_max_inactivity) },
|
{ INT(ap_max_inactivity) },
|
||||||
{ INT(dtim_period) },
|
{ INT(dtim_period) },
|
||||||
{ INT(beacon_int) },
|
{ INT(beacon_int) },
|
||||||
|
|
|
@ -971,6 +971,9 @@ static void wpa_config_write_network(FILE *f, struct wpa_ssid *ssid)
|
||||||
INT_DEF(vht_tx_mcs_nss_7, -1);
|
INT_DEF(vht_tx_mcs_nss_7, -1);
|
||||||
INT_DEF(vht_tx_mcs_nss_8, -1);
|
INT_DEF(vht_tx_mcs_nss_8, -1);
|
||||||
#endif /* CONFIG_VHT_OVERRIDES */
|
#endif /* CONFIG_VHT_OVERRIDES */
|
||||||
|
#ifdef CONFIG_HE_OVERRIDES
|
||||||
|
INT(disable_he);
|
||||||
|
#endif /* CONFIG_HE_OVERRIDES */
|
||||||
|
|
||||||
#undef STR
|
#undef STR
|
||||||
#undef INT
|
#undef INT
|
||||||
|
|
|
@ -779,6 +779,16 @@ struct wpa_ssid {
|
||||||
vht_tx_mcs_nss_7, vht_tx_mcs_nss_8;
|
vht_tx_mcs_nss_7, vht_tx_mcs_nss_8;
|
||||||
#endif /* CONFIG_VHT_OVERRIDES */
|
#endif /* CONFIG_VHT_OVERRIDES */
|
||||||
|
|
||||||
|
#ifdef CONFIG_HE_OVERRIDES
|
||||||
|
/**
|
||||||
|
* disable_he - Disable HE (IEEE 802.11ax) for this network
|
||||||
|
*
|
||||||
|
* By default, use it if it is available, but this can be configured
|
||||||
|
* to 1 to have it disabled.
|
||||||
|
*/
|
||||||
|
int disable_he;
|
||||||
|
#endif /* CONFIG_HE_OVERRIDES */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ap_max_inactivity - Timeout in seconds to detect STA's inactivity
|
* ap_max_inactivity - Timeout in seconds to detect STA's inactivity
|
||||||
*
|
*
|
||||||
|
|
|
@ -1869,6 +1869,9 @@ pfs_fail:
|
||||||
params.vhtcaps_mask = &vhtcaps_mask;
|
params.vhtcaps_mask = &vhtcaps_mask;
|
||||||
wpa_supplicant_apply_vht_overrides(wpa_s, wpa_s->current_ssid, ¶ms);
|
wpa_supplicant_apply_vht_overrides(wpa_s, wpa_s->current_ssid, ¶ms);
|
||||||
#endif /* CONFIG_VHT_OVERRIDES */
|
#endif /* CONFIG_VHT_OVERRIDES */
|
||||||
|
#ifdef CONFIG_HE_OVERRIDES
|
||||||
|
wpa_supplicant_apply_he_overrides(wpa_s, wpa_s->current_ssid, ¶ms);
|
||||||
|
#endif /* CONFIG_HE_OVERRIDES */
|
||||||
#ifdef CONFIG_IEEE80211R
|
#ifdef CONFIG_IEEE80211R
|
||||||
if (auth_type == WLAN_AUTH_FT && wpa_s->sme.ft_ies &&
|
if (auth_type == WLAN_AUTH_FT && wpa_s->sme.ft_ies &&
|
||||||
get_ie(wpa_s->sme.ft_ies, wpa_s->sme.ft_ies_len,
|
get_ie(wpa_s->sme.ft_ies, wpa_s->sme.ft_ies_len,
|
||||||
|
|
|
@ -1460,6 +1460,9 @@ static const char *network_fields[] = {
|
||||||
"vht_tx_mcs_nss_3", "vht_tx_mcs_nss_4", "vht_tx_mcs_nss_5",
|
"vht_tx_mcs_nss_3", "vht_tx_mcs_nss_4", "vht_tx_mcs_nss_5",
|
||||||
"vht_tx_mcs_nss_6", "vht_tx_mcs_nss_7", "vht_tx_mcs_nss_8",
|
"vht_tx_mcs_nss_6", "vht_tx_mcs_nss_7", "vht_tx_mcs_nss_8",
|
||||||
#endif /* CONFIG_VHT_OVERRIDES */
|
#endif /* CONFIG_VHT_OVERRIDES */
|
||||||
|
#ifdef CONFIG_HE_OVERRIDES
|
||||||
|
"disable_he",
|
||||||
|
#endif /* CONFIG_HE_OVERRIDES */
|
||||||
"ap_max_inactivity", "dtim_period", "beacon_int",
|
"ap_max_inactivity", "dtim_period", "beacon_int",
|
||||||
#ifdef CONFIG_MACSEC
|
#ifdef CONFIG_MACSEC
|
||||||
"macsec_policy",
|
"macsec_policy",
|
||||||
|
|
|
@ -2406,6 +2406,10 @@ void ibss_mesh_setup_freq(struct wpa_supplicant *wpa_s,
|
||||||
/* Allow HE on 2.4 GHz without VHT: see nl80211_put_freq_params() */
|
/* Allow HE on 2.4 GHz without VHT: see nl80211_put_freq_params() */
|
||||||
if (is_24ghz)
|
if (is_24ghz)
|
||||||
freq->he_enabled = mode->he_capab[ieee80211_mode].he_supported;
|
freq->he_enabled = mode->he_capab[ieee80211_mode].he_supported;
|
||||||
|
#ifdef CONFIG_HE_OVERRIDES
|
||||||
|
if (is_24ghz && ssid->disable_he)
|
||||||
|
freq->he_enabled = 0;
|
||||||
|
#endif /* CONFIG_HE_OVERRIDES */
|
||||||
|
|
||||||
/* Setup higher BW only for 5 GHz */
|
/* Setup higher BW only for 5 GHz */
|
||||||
if (mode->mode != HOSTAPD_MODE_IEEE80211A)
|
if (mode->mode != HOSTAPD_MODE_IEEE80211A)
|
||||||
|
@ -2604,6 +2608,12 @@ skip_ht40:
|
||||||
#endif /* CONFIG_HT_OVERRIDES */
|
#endif /* CONFIG_HT_OVERRIDES */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_HE_OVERRIDES
|
||||||
|
if (ssid->disable_he) {
|
||||||
|
vht_freq.he_enabled = 0;
|
||||||
|
freq->he_enabled = 0;
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_HE_OVERRIDES */
|
||||||
if (hostapd_set_freq_params(&vht_freq, mode->mode, freq->freq,
|
if (hostapd_set_freq_params(&vht_freq, mode->mode, freq->freq,
|
||||||
freq->channel, ssid->enable_edmg,
|
freq->channel, ssid->enable_edmg,
|
||||||
ssid->edmg_channel, freq->ht_enabled,
|
ssid->edmg_channel, freq->ht_enabled,
|
||||||
|
@ -3710,6 +3720,9 @@ static void wpas_start_assoc_cb(struct wpa_radio_work *work, int deinit)
|
||||||
params.vhtcaps_mask = &vhtcaps_mask;
|
params.vhtcaps_mask = &vhtcaps_mask;
|
||||||
wpa_supplicant_apply_vht_overrides(wpa_s, ssid, ¶ms);
|
wpa_supplicant_apply_vht_overrides(wpa_s, ssid, ¶ms);
|
||||||
#endif /* CONFIG_VHT_OVERRIDES */
|
#endif /* CONFIG_VHT_OVERRIDES */
|
||||||
|
#ifdef CONFIG_HE_OVERRIDES
|
||||||
|
wpa_supplicant_apply_he_overrides(wpa_s, ssid, ¶ms);
|
||||||
|
#endif /* CONFIG_HE_OVERRIDES */
|
||||||
|
|
||||||
#ifdef CONFIG_P2P
|
#ifdef CONFIG_P2P
|
||||||
/*
|
/*
|
||||||
|
@ -5272,6 +5285,19 @@ void wpa_supplicant_apply_vht_overrides(
|
||||||
#endif /* CONFIG_VHT_OVERRIDES */
|
#endif /* CONFIG_VHT_OVERRIDES */
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef CONFIG_HE_OVERRIDES
|
||||||
|
void wpa_supplicant_apply_he_overrides(
|
||||||
|
struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid,
|
||||||
|
struct wpa_driver_associate_params *params)
|
||||||
|
{
|
||||||
|
if (!ssid)
|
||||||
|
return;
|
||||||
|
|
||||||
|
params->disable_he = ssid->disable_he;
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_HE_OVERRIDES */
|
||||||
|
|
||||||
|
|
||||||
static int pcsc_reader_init(struct wpa_supplicant *wpa_s)
|
static int pcsc_reader_init(struct wpa_supplicant *wpa_s)
|
||||||
{
|
{
|
||||||
#ifdef PCSC_FUNCS
|
#ifdef PCSC_FUNCS
|
||||||
|
|
|
@ -1311,6 +1311,9 @@ void wpa_supplicant_apply_ht_overrides(
|
||||||
void wpa_supplicant_apply_vht_overrides(
|
void wpa_supplicant_apply_vht_overrides(
|
||||||
struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid,
|
struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid,
|
||||||
struct wpa_driver_associate_params *params);
|
struct wpa_driver_associate_params *params);
|
||||||
|
void wpa_supplicant_apply_he_overrides(
|
||||||
|
struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid,
|
||||||
|
struct wpa_driver_associate_params *params);
|
||||||
|
|
||||||
int wpa_set_wep_keys(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid);
|
int wpa_set_wep_keys(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid);
|
||||||
int wpa_supplicant_set_wpa_none_key(struct wpa_supplicant *wpa_s,
|
int wpa_supplicant_set_wpa_none_key(struct wpa_supplicant *wpa_s,
|
||||||
|
|
Loading…
Reference in a new issue