[RFC v2 PATCH 2/2] wpa_supplicant: Enable Automatic Channel Selection support for AP mode
Ulrich Ölmann
u.oelmann at pengutronix.de
Fri Nov 27 03:40:37 PST 2015
From: Tomasz Bursztyka <tomasz.bursztyka at linux.intel.com>
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 at linux.intel.com>
[u.oelmann at pengutronix.de: rebased series from hostap_2_1~944 to master]
[u.oelmann at pengutronix.de: adjusted added text in defconfig]
Signed-off-by: Ulrich Ölmann <u.oelmann at pengutronix.de>
---
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
More information about the Hostap
mailing list