| From 87dbbd2f6e02272e2ceee1e30dce60828bf0cc1c Mon Sep 17 00:00:00 2001 |
| From: Amit Khatri <amit.khatri@mediatek.com> |
| Date: Thu, 23 Mar 2023 14:26:46 +0800 |
| Subject: [PATCH 24/29] hostapd: mtk: Add support for masking EHT capabilities. |
| |
| If STA want to disable EHT mode connection. |
| STA can set |
| disable_eht=1 in netowrk bloack of AP configuration. |
| e.g. |
| wpa_cli -iapcli0 set_network 0 disable_eht=1 |
| |
| It will make EHT capability on driver level. |
| |
| Signed-off-by: Amit Khatri <amit.khatri@mediatek.com> |
| --- |
| src/drivers/driver.h | 8 ++++++++ |
| src/drivers/driver_nl80211.c | 9 +++++++++ |
| src/drivers/nl80211_copy.h | 2 ++ |
| wpa_supplicant/Makefile | 4 ++++ |
| wpa_supplicant/config.c | 3 +++ |
| wpa_supplicant/config_file.c | 3 +++ |
| wpa_supplicant/config_ssid.h | 11 +++++++++++ |
| wpa_supplicant/sme.c | 4 ++++ |
| wpa_supplicant/wpa_cli.c | 3 +++ |
| wpa_supplicant/wpa_supplicant.c | 15 +++++++++++++++ |
| wpa_supplicant/wpa_supplicant_i.h | 6 ++++++ |
| 11 files changed, 68 insertions(+) |
| |
| diff --git a/src/drivers/driver.h b/src/drivers/driver.h |
| index 7f6392f..1bf0cd6 100644 |
| --- a/src/drivers/driver.h |
| +++ b/src/drivers/driver.h |
| @@ -1151,6 +1151,14 @@ struct wpa_driver_associate_params { |
| int disable_he; |
| #endif /* CONFIG_HE_OVERRIDES */ |
| |
| +#ifdef CONFIG_EHT_OVERRIDES |
| + /** |
| + * disable_eht - Disable EHT for this connection |
| + */ |
| + int disable_eht; |
| +#endif /* CONFIG_EHT_OVERRIDES */ |
| + |
| + |
| /** |
| * req_key_mgmt_offload - Request key management offload for connection |
| * |
| diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c |
| index f9a8763..945ce3e 100644 |
| --- a/src/drivers/driver_nl80211.c |
| +++ b/src/drivers/driver_nl80211.c |
| @@ -6058,6 +6058,15 @@ static int nl80211_ht_vht_overrides(struct nl_msg *msg, |
| } |
| #endif /* CONFIG_HE_OVERRIDES */ |
| |
| +#ifdef CONFIG_EHT_OVERRIDES |
| + if (params->disable_eht) { |
| + wpa_printf(MSG_DEBUG, " * EHT disabled"); |
| + if (nla_put_flag(msg, NL80211_ATTR_DISABLE_EHT)) |
| + return -1; |
| + } |
| +#endif /* CONFIG_EHT_OVERRIDES */ |
| + |
| + |
| return 0; |
| } |
| |
| diff --git a/src/drivers/nl80211_copy.h b/src/drivers/nl80211_copy.h |
| index 0937752..ce8ee58 100644 |
| --- a/src/drivers/nl80211_copy.h |
| +++ b/src/drivers/nl80211_copy.h |
| @@ -3175,6 +3175,8 @@ enum nl80211_attrs { |
| |
| NL80211_ATTR_EHT_CAPABILITY, |
| |
| + NL80211_ATTR_DISABLE_EHT, |
| + |
| /* add attributes here, update the policy in nl80211.c */ |
| |
| __NL80211_ATTR_AFTER_LAST, |
| diff --git a/wpa_supplicant/Makefile b/wpa_supplicant/Makefile |
| index ef36b56..40cdb59 100644 |
| --- a/wpa_supplicant/Makefile |
| +++ b/wpa_supplicant/Makefile |
| @@ -208,6 +208,10 @@ ifdef CONFIG_HE_OVERRIDES |
| CFLAGS += -DCONFIG_HE_OVERRIDES |
| endif |
| |
| +ifdef CONFIG_EHT_OVERRIDES |
| +CFLAGS += -DCONFIG_EHT_OVERRIDES |
| +endif |
| + |
| ifndef CONFIG_BACKEND |
| CONFIG_BACKEND=file |
| endif |
| diff --git a/wpa_supplicant/config.c b/wpa_supplicant/config.c |
| index f9880ed..994ee5e 100644 |
| --- a/wpa_supplicant/config.c |
| +++ b/wpa_supplicant/config.c |
| @@ -2718,6 +2718,9 @@ static const struct parse_data ssid_fields[] = { |
| #ifdef CONFIG_HE_OVERRIDES |
| { INT_RANGE(disable_he, 0, 1)}, |
| #endif /* CONFIG_HE_OVERRIDES */ |
| +#ifdef CONFIG_EHT_OVERRIDES |
| + { INT_RANGE(disable_eht, 0, 1)}, |
| +#endif /* CONFIG_EHT_OVERRIDES */ |
| { INT(ap_max_inactivity) }, |
| { INT(dtim_period) }, |
| { INT(beacon_int) }, |
| diff --git a/wpa_supplicant/config_file.c b/wpa_supplicant/config_file.c |
| index 24c2998..056b265 100644 |
| --- a/wpa_supplicant/config_file.c |
| +++ b/wpa_supplicant/config_file.c |
| @@ -881,6 +881,9 @@ static void wpa_config_write_network(FILE *f, struct wpa_ssid *ssid) |
| #ifdef CONFIG_HE_OVERRIDES |
| INT(disable_he); |
| #endif /* CONFIG_HE_OVERRIDES */ |
| +#ifdef CONFIG_EHT_OVERRIDES |
| + INT(disable_eht); |
| +#endif /* CONFIG_EHT_OVERRIDES */ |
| |
| #undef STR |
| #undef INT |
| diff --git a/wpa_supplicant/config_ssid.h b/wpa_supplicant/config_ssid.h |
| index 9a389cc..cc9aa8e 100644 |
| --- a/wpa_supplicant/config_ssid.h |
| +++ b/wpa_supplicant/config_ssid.h |
| @@ -810,6 +810,17 @@ struct wpa_ssid { |
| int disable_he; |
| #endif /* CONFIG_HE_OVERRIDES */ |
| |
| +#ifdef CONFIG_EHT_OVERRIDES |
| + /** |
| + * disable_eht - Disable EHT (IEEE 802.11be) for this network |
| + * |
| + * By default, use it if it is available, but this can be configured |
| + * to 1 to have it disabled. |
| + */ |
| + int disable_eht; |
| +#endif /* CONFIG_EHT_OVERRIDES */ |
| + |
| + |
| /** |
| * ap_max_inactivity - Timeout in seconds to detect STA's inactivity |
| * |
| diff --git a/wpa_supplicant/sme.c b/wpa_supplicant/sme.c |
| index 2dad36d..e7aadf6 100644 |
| --- a/wpa_supplicant/sme.c |
| +++ b/wpa_supplicant/sme.c |
| @@ -2001,6 +2001,10 @@ mscs_fail: |
| #ifdef CONFIG_HE_OVERRIDES |
| wpa_supplicant_apply_he_overrides(wpa_s, ssid, ¶ms); |
| #endif /* CONFIG_HE_OVERRIDES */ |
| +#ifdef CONFIG_EHT_OVERRIDES |
| + wpa_supplicant_apply_eht_overrides(wpa_s, ssid, ¶ms); |
| +#endif /* CONFIG_EHT_OVERRIDES */ |
| + |
| #ifdef CONFIG_IEEE80211R |
| if (auth_type == WLAN_AUTH_FT && wpa_s->sme.ft_ies && |
| get_ie(wpa_s->sme.ft_ies, wpa_s->sme.ft_ies_len, |
| diff --git a/wpa_supplicant/wpa_cli.c b/wpa_supplicant/wpa_cli.c |
| index 8443f54..ea251db 100644 |
| --- a/wpa_supplicant/wpa_cli.c |
| +++ b/wpa_supplicant/wpa_cli.c |
| @@ -1476,6 +1476,9 @@ static const char *network_fields[] = { |
| #ifdef CONFIG_HE_OVERRIDES |
| "disable_he", |
| #endif /* CONFIG_HE_OVERRIDES */ |
| +#ifdef CONFIG_EHT_OVERRIDES |
| + "disable_eht", |
| +#endif /* CONFIG_EHT_OVERRIDES */ |
| "ap_max_inactivity", "dtim_period", "beacon_int", |
| #ifdef CONFIG_MACSEC |
| "macsec_policy", |
| diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c |
| index 04c37b1..67c801d 100644 |
| --- a/wpa_supplicant/wpa_supplicant.c |
| +++ b/wpa_supplicant/wpa_supplicant.c |
| @@ -4084,6 +4084,10 @@ static void wpas_start_assoc_cb(struct wpa_radio_work *work, int deinit) |
| #ifdef CONFIG_HE_OVERRIDES |
| wpa_supplicant_apply_he_overrides(wpa_s, ssid, ¶ms); |
| #endif /* CONFIG_HE_OVERRIDES */ |
| +#ifdef CONFIG_EHT_OVERRIDES |
| + wpa_supplicant_apply_eht_overrides(wpa_s, ssid, ¶ms); |
| +#endif /* CONFIG_EHT_OVERRIDES */ |
| + |
| |
| #ifdef CONFIG_P2P |
| /* |
| @@ -5879,6 +5883,17 @@ void wpa_supplicant_apply_he_overrides( |
| } |
| #endif /* CONFIG_HE_OVERRIDES */ |
| |
| +#ifdef CONFIG_EHT_OVERRIDES |
| +void wpa_supplicant_apply_eht_overrides( |
| + struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid, |
| + struct wpa_driver_associate_params *params) |
| +{ |
| + if (!ssid) |
| + return; |
| + |
| + params->disable_eht = ssid->disable_eht; |
| +} |
| +#endif /* CONFIG_EHT_OVERRIDES */ |
| |
| static int pcsc_reader_init(struct wpa_supplicant *wpa_s) |
| { |
| diff --git a/wpa_supplicant/wpa_supplicant_i.h b/wpa_supplicant/wpa_supplicant_i.h |
| index 3285af3..1140360 100644 |
| --- a/wpa_supplicant/wpa_supplicant_i.h |
| +++ b/wpa_supplicant/wpa_supplicant_i.h |
| @@ -1576,6 +1576,12 @@ void wpa_supplicant_apply_vht_overrides( |
| void wpa_supplicant_apply_he_overrides( |
| struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid, |
| struct wpa_driver_associate_params *params); |
| +#ifdef CONFIG_EHT_OVERRIDES |
| +void wpa_supplicant_apply_eht_overrides( |
| + struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid, |
| + struct wpa_driver_associate_params *params); |
| +#endif /* CONFIG_EHT_OVERRIDES */ |
| + |
| |
| 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, |
| -- |
| 2.18.0 |
| |