hostapd: Add testing option to use only ECSA
authorJohannes Berg <johannes.berg@intel.com>
Tue, 8 Sep 2015 09:46:32 +0000 (12:46 +0300)
committerJouni Malinen <j@w1.fi>
Sat, 3 Oct 2015 18:37:17 +0000 (21:37 +0300)
Some APs don't include a CSA IE when an ECSA IE is generated,
and mac80211 used to fail following their channel switch. Add
a testing option to hostapd to allow reproducing the behavior.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
hostapd/config_file.c
hostapd/hostapd.conf
src/ap/ap_config.c
src/ap/ap_config.h
src/ap/beacon.c

index 82ac61d..37030d0 100644 (file)
@@ -3249,6 +3249,8 @@ static int hostapd_config_fill(struct hostapd_config *conf,
        PARSE_TEST_PROBABILITY(ignore_assoc_probability)
        PARSE_TEST_PROBABILITY(ignore_reassoc_probability)
        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, "bss_load_test") == 0) {
                WPA_PUT_LE16(bss->bss_load_test, atoi(pos));
                pos = os_strchr(pos, ':');
index a0071f7..c15cc44 100644 (file)
@@ -1844,6 +1844,10 @@ own_ip_addr=127.0.0.1
 #
 # Corrupt Key MIC in GTK rekey EAPOL-Key frames with the given probability
 #corrupt_gtk_rekey_mic_probability=0.0
+#
+# Include only ECSA IE without CSA IE where possible
+# (channel switch operating class is needed)
+#ecsa_ie_only=0
 
 ##### Multiple BSSID support ##################################################
 #
index 9a96e50..7533710 100644 (file)
@@ -180,6 +180,7 @@ struct hostapd_config * hostapd_config_defaults(void)
        conf->ignore_assoc_probability = 0.0;
        conf->ignore_reassoc_probability = 0.0;
        conf->corrupt_gtk_rekey_mic_probability = 0.0;
+       conf->ecsa_ie_only = 0;
 #endif /* CONFIG_TESTING_OPTIONS */
 
        conf->acs = 0;
index de470a9..aa8da63 100644 (file)
@@ -652,6 +652,7 @@ struct hostapd_config {
        double ignore_assoc_probability;
        double ignore_reassoc_probability;
        double corrupt_gtk_rekey_mic_probability;
+       int ecsa_ie_only;
 #endif /* CONFIG_TESTING_OPTIONS */
 
 #ifdef CONFIG_ACS
index 4c67285..5f1fc3e 100644 (file)
@@ -297,6 +297,11 @@ static u8 * hostapd_eid_wpa(struct hostapd_data *hapd, u8 *eid, size_t len)
 
 static u8 * hostapd_eid_csa(struct hostapd_data *hapd, u8 *eid)
 {
+#ifdef CONFIG_TESTING_OPTIONS
+       if (hapd->iface->cs_oper_class && hapd->iconf->ecsa_ie_only)
+               return eid;
+#endif /* CONFIG_TESTING_OPTIONS */
+
        if (!hapd->cs_freq_params.channel)
                return eid;