diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c index 2dce242a3..2a2ef6f18 100644 --- a/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c @@ -4301,7 +4301,8 @@ static int wpa_driver_nl80211_ap(struct wpa_driver_nl80211_data *drv, return -1; } - if (nl80211_set_channel(drv->first_bss, ¶ms->freq, 0)) { + if (params->freq.freq && + nl80211_set_channel(drv->first_bss, ¶ms->freq, 0)) { if (old_mode != nlmode) wpa_driver_nl80211_set_mode(drv->first_bss, old_mode); nl80211_remove_monitor_interface(drv); diff --git a/wpa_supplicant/ap.c b/wpa_supplicant/ap.c index 5950207b9..ea5b2b4da 100644 --- a/wpa_supplicant/ap.c +++ b/wpa_supplicant/ap.c @@ -166,6 +166,13 @@ static int wpa_supplicant_conf_ap(struct wpa_supplicant *wpa_s, wpa_supplicant_conf_ap_ht(wpa_s, ssid, conf); + if (ieee80211_is_dfs(ssid->frequency) && wpa_s->conf->country[0]) { + conf->ieee80211h = 1; + conf->ieee80211d = 1; + conf->country[0] = wpa_s->conf->country[0]; + conf->country[1] = wpa_s->conf->country[1]; + } + #ifdef CONFIG_P2P if (conf->hw_mode == HOSTAPD_MODE_IEEE80211G && (ssid->mode == WPAS_MODE_P2P_GO || @@ -567,6 +574,9 @@ int wpa_supplicant_create_ap(struct wpa_supplicant *wpa_s, else params.uapsd = -1; + if (ieee80211_is_dfs(params.freq.freq)) + params.freq.freq = 0; /* set channel after CAC */ + if (wpa_drv_associate(wpa_s, ¶ms) < 0) { wpa_msg(wpa_s, MSG_INFO, "Failed to start AP functionality"); return -1;