@@ -217,6 +217,7 @@ static int hostapd_driver_init(struct hostapd_iface *iface)
iface->extended_capa_mask = capa.extended_capa_mask;
iface->extended_capa_len = capa.extended_capa_len;
iface->drv_max_acl_mac_addrs = capa.max_acl_mac_addrs;
+ iface->csa_supported = !!(capa.flags & WPA_DRIVER_FLAGS_AP_CSA);
}
return 0;
@@ -2314,7 +2314,8 @@ static int hostapd_fill_csa_settings(struct hostapd_data *hapd,
int ret;
os_memset(&old_freq, 0, sizeof(old_freq));
- if (!iface || !iface->freq || hapd->csa_in_progress)
+ if (!iface || !iface->csa_supported ||
+ !iface->freq || hapd->csa_in_progress)
return -1;
ret = hostapd_change_config_freq(iface->bss[0], iface->conf,
@@ -351,6 +351,8 @@ struct hostapd_iface {
/* lowest observed noise floor in dBm */
s8 lowest_nf;
+ unsigned int csa_supported:1;
+
unsigned int dfs_cac_ms;
struct os_reltime dfs_cac_start;
@@ -559,6 +559,7 @@ int wpa_supplicant_create_ap(struct wpa_supplicant *wpa_s,
hapd_iface->extended_capa = wpa_s->extended_capa;
hapd_iface->extended_capa_mask = wpa_s->extended_capa_mask;
hapd_iface->extended_capa_len = wpa_s->extended_capa_len;
+ hapd_iface->csa_supported = wpa_s->csa_supported;
wpa_s->ap_iface->conf = conf = hostapd_config_defaults();
if (conf == NULL) {
@@ -3671,6 +3671,7 @@ static int wpa_supplicant_init_iface(struct wpa_supplicant *wpa_s,
wpa_s->extended_capa_len = capa.extended_capa_len;
wpa_s->num_multichan_concurrent =
capa.num_multichan_concurrent;
+ wpa_s->csa_supported = !!(capa.flags & WPA_DRIVER_FLAGS_AP_CSA);
}
if (wpa_s->max_remain_on_chan == 0)
wpa_s->max_remain_on_chan = 1000;
@@ -865,6 +865,8 @@ struct wpa_supplicant {
struct wpa_radio_work *connect_work;
unsigned int ext_work_id;
+
+ unsigned int csa_supported:1;
};