From: Tomasz Bursztyka <tomasz.bursztyka@xxxxxxxxxxxxxxx> Since hostapd supports ACS now, let's enable its support into wpa_supplicant when going on AP mode. Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@xxxxxxxxxxxxxxx> [u.oelmann@xxxxxxxxxxxxxx: rebased series from hostap_2_1~944 to master] [u.oelmann@xxxxxxxxxxxxxx: adjusted added text in defconfig] Signed-off-by: Ulrich Ölmann <u.oelmann@xxxxxxxxxxxxxx> --- wpa_supplicant/Makefile | 6 ++++++ wpa_supplicant/ap.c | 6 ++++++ wpa_supplicant/config.c | 3 +++ wpa_supplicant/config_ssid.h | 12 ++++++++++++ wpa_supplicant/defconfig | 27 +++++++++++++++++++++++++++ 5 files changed, 54 insertions(+) diff --git a/wpa_supplicant/Makefile b/wpa_supplicant/Makefile index 0789d43..423b4ae 100644 --- a/wpa_supplicant/Makefile +++ b/wpa_supplicant/Makefile @@ -884,6 +884,12 @@ OBJS += ../src/ap/peerkey_auth.o endif endif +ifdef CONFIG_ACS +CFLAGS += -DCONFIG_ACS +OBJS += ../src/ap/acs.o +LIBS += -lm +endif + ifdef CONFIG_PCSC # PC/SC interface for smartcards (USIM, GSM SIM) CFLAGS += -DPCSC_FUNCS -I/usr/include/PCSC diff --git a/wpa_supplicant/ap.c b/wpa_supplicant/ap.c index 27fa2a9..8f6b126 100644 --- a/wpa_supplicant/ap.c +++ b/wpa_supplicant/ap.c @@ -210,6 +210,12 @@ static int wpa_supplicant_conf_ap(struct wpa_supplicant *wpa_s, os_strlcpy(bss->iface, wpa_s->ifname, sizeof(bss->iface)); +#ifdef CONFIG_ACS + /* Setting channel to 0 in order to enable ACS */ + if (ssid->acs) + conf->channel = 0; +#endif + if (wpa_supplicant_conf_ap_ht(wpa_s, ssid, conf)) return -1; diff --git a/wpa_supplicant/config.c b/wpa_supplicant/config.c index bdcfe9f..9cce335 100644 --- a/wpa_supplicant/config.c +++ b/wpa_supplicant/config.c @@ -1920,6 +1920,9 @@ static const struct parse_data ssid_fields[] = { { INT_RANGE(mixed_cell, 0, 1) }, { INT_RANGE(frequency, 0, 65000) }, { INT_RANGE(fixed_freq, 0, 1) }, +#ifdef CONFIG_ACS + { INT_RANGE(acs, 0, 1) }, +#endif /* CONFIG_ACS */ #ifdef CONFIG_MESH { FUNC(mesh_basic_rates) }, { INT(dot11MeshMaxRetries) }, diff --git a/wpa_supplicant/config_ssid.h b/wpa_supplicant/config_ssid.h index de8157a..b296826 100644 --- a/wpa_supplicant/config_ssid.h +++ b/wpa_supplicant/config_ssid.h @@ -431,6 +431,18 @@ struct wpa_ssid { */ int fixed_freq; +#ifdef CONFIG_ACS + /** + * ACS - Automatic Channel Selection for AP mode + * + * If present, it will be handled together with frequency. + * frequency will be used to determine hardware mode only, when it is + * used for both hardware mode and channel when used alone. This will + * force the channel to be set to 0, thus enabling ACS. + */ + int acs; +#endif /* CONFIG_ACS */ + /** * mesh_basic_rates - BSS Basic rate set for mesh network * diff --git a/wpa_supplicant/defconfig b/wpa_supplicant/defconfig index e2e4bdc..216994c 100644 --- a/wpa_supplicant/defconfig +++ b/wpa_supplicant/defconfig @@ -513,3 +513,30 @@ CONFIG_PEERKEY=y # OS X builds. This is only for building eapol_test. #CONFIG_OSX=y + +# Automatic Channel Selection +# This will allow wpa_supplicant to pick the channel automatically when channel +# is set to "0". +# +# TODO: Extend parser to be able to parse "channel=acs_survey" as an alternative +# to "channel=0". This would enable us to eventually add other ACS algorithms in +# similar way. +# +# Automatic selection is currently only done through initialization, later on +# we hope to do background checks to keep us moving to more ideal channels as +# time goes by. ACS is currently only supported through the nl80211 driver and +# your driver must have survey dump capability that is filled by the driver +# during scanning. +# +# TODO: In analogy to hostapd be able to customize the ACS survey algorithm with +# a newly to create wpa_supplicant.conf variable acs_num_scans. +# +# Supported ACS drivers: +# * ath9k +# * ath5k +# * ath10k +# +# For more details refer to: +# http://wireless.kernel.org/en/users/Documentation/acs +# +#CONFIG_ACS=y -- 2.1.4 _______________________________________________ Hostap mailing list Hostap@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/hostap