[PATCH] AP: Add a csa_ie_only testing option
Andrei Otcheretianski
andrei.otcheretianski at intel.com
Sun Jan 12 00:30:54 PST 2025
From: Emmanuel Grumbach <emmanuel.grumbach at intel.com>
This allows to configure hostapd to add the CSA IE and not the
ECSA IE, to mimic behaviour of some AP's.
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach at intel.com>
Signed-off-by: Andrei Otcheretianski <andrei.otcheretianski at intel.com>
---
hostapd/config_file.c | 2 ++
hostapd/hostapd.conf | 4 ++++
src/ap/ap_config.h | 1 +
src/ap/beacon.c | 5 +++++
tests/hwsim/test_ap_csa.py | 11 +++++++++++
5 files changed, 23 insertions(+)
diff --git a/hostapd/config_file.c b/hostapd/config_file.c
index 12d1d9fb0d..8f637fdb60 100644
--- a/hostapd/config_file.c
+++ b/hostapd/config_file.c
@@ -4501,6 +4501,8 @@ static int hostapd_config_fill(struct hostapd_config *conf,
PARSE_TEST_PROBABILITY(corrupt_gtk_rekey_mic_probability)
} else if (os_strcmp(buf, "ecsa_ie_only") == 0) {
conf->ecsa_ie_only = atoi(pos);
+ } else if (os_strcmp(buf, "csa_ie_only") == 0) {
+ conf->csa_ie_only = atoi(pos);
} else if (os_strcmp(buf, "bss_load_test") == 0) {
WPA_PUT_LE16(bss->bss_load_test, atoi(pos));
pos = os_strchr(pos, ':');
diff --git a/hostapd/hostapd.conf b/hostapd/hostapd.conf
index b1e8ac5bba..eea39c8155 100644
--- a/hostapd/hostapd.conf
+++ b/hostapd/hostapd.conf
@@ -3340,6 +3340,10 @@ own_ip_addr=127.0.0.1
# (channel switch operating class is needed)
#ecsa_ie_only=0
#
+# Include only CSA IE without ECSA IE
+# (the operating class is not mentioned)
+#csa_ie_only=0
+
# Delay EAPOL-Key messages 1/4 and 3/4 by not sending the frame until the last
# attempt (wpa_pairwise_update_count). This will trigger a timeout on all
# previous attempts and thus delays the frame. (testing only)
diff --git a/src/ap/ap_config.h b/src/ap/ap_config.h
index 2f9ed3af88..b936702df6 100644
--- a/src/ap/ap_config.h
+++ b/src/ap/ap_config.h
@@ -1153,6 +1153,7 @@ struct hostapd_config {
double ignore_reassoc_probability;
double corrupt_gtk_rekey_mic_probability;
int ecsa_ie_only;
+ int csa_ie_only;
bool delay_eapol_tx;
#endif /* CONFIG_TESTING_OPTIONS */
diff --git a/src/ap/beacon.c b/src/ap/beacon.c
index 542768daa4..225f314b34 100644
--- a/src/ap/beacon.c
+++ b/src/ap/beacon.c
@@ -516,6 +516,11 @@ static u8 * hostapd_eid_ecsa(struct hostapd_data *hapd, u8 *eid)
if (!hapd->cs_freq_params.channel || !hapd->iface->cs_oper_class)
return eid;
+#ifdef CONFIG_TESTING_OPTIONS
+ if (hapd->iconf->csa_ie_only)
+ return eid;
+#endif /* CONFIG_TESTING_OPTIONS */
+
*eid++ = WLAN_EID_EXT_CHANSWITCH_ANN;
*eid++ = 4;
*eid++ = hapd->cs_block_tx;
diff --git a/tests/hwsim/test_ap_csa.py b/tests/hwsim/test_ap_csa.py
index ae1162c993..8adf77e689 100644
--- a/tests/hwsim/test_ap_csa.py
+++ b/tests/hwsim/test_ap_csa.py
@@ -172,6 +172,17 @@ def test_ap_csa_ecsa_only(dev, apdev):
wait_channel_switch(dev[0], 2462)
hwsim_utils.test_connectivity(dev[0], ap)
+ at remote_compatible
+def test_ap_csa_csa_only(dev, apdev):
+ """AP Channel Switch, one switch with only CSA IE"""
+ csa_supported(dev[0])
+ ap = connect(dev[0], apdev, csa_ie_only="1")
+
+ hwsim_utils.test_connectivity(dev[0], ap)
+ switch_channel(ap, 10, 2462, extra="ht")
+ wait_channel_switch(dev[0], 2462)
+ hwsim_utils.test_connectivity(dev[0], ap)
+
@remote_compatible
def test_ap_csa_invalid(dev, apdev):
"""AP Channel Switch - invalid channel"""
--
2.43.0
More information about the Hostap
mailing list