TDLS: Provide external control to specify the peers for setup (DO NOT MERGE)
Bug: 11631777
Change-Id: I3fbcf3cef4a6a4d894f78dd3dbe4757831e4fc56
Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
diff --git a/wpa_supplicant/config.c b/wpa_supplicant/config.c
index d666c91..69f920d 100644
--- a/wpa_supplicant/config.c
+++ b/wpa_supplicant/config.c
@@ -3172,6 +3172,7 @@
{ FUNC(freq_list), 0 },
{ INT(scan_cur_freq), 0 },
{ INT(sched_scan_interval), 0 },
+ { INT(tdls_external_control), 0},
};
#undef FUNC
diff --git a/wpa_supplicant/config.h b/wpa_supplicant/config.h
index 1748cf3..3fe46e3 100644
--- a/wpa_supplicant/config.h
+++ b/wpa_supplicant/config.h
@@ -876,6 +876,17 @@
* sched_scan_interval - schedule scan interval
*/
unsigned int sched_scan_interval;
+
+ /**
+ * tdls_external_control - External control for TDLS setup requests
+ *
+ * Enable TDLS mode where external programs are given the control
+ * to specify the TDLS link to get established to the driver. The
+ * driver requests the TDLS setup to the supplicant only for the
+ * specified TDLS peers.
+ *
+ */
+ int tdls_external_control;
};
diff --git a/wpa_supplicant/config_file.c b/wpa_supplicant/config_file.c
index a2791eb..bb0e536 100644
--- a/wpa_supplicant/config_file.c
+++ b/wpa_supplicant/config_file.c
@@ -1048,6 +1048,10 @@
if (config->sched_scan_interval)
fprintf(f, "sched_scan_interval=%u\n",
config->sched_scan_interval);
+
+ if (config->tdls_external_control)
+ fprintf(f, "tdls_external_control=%u\n",
+ config->tdls_external_control);
}
#endif /* CONFIG_NO_CONFIG_WRITE */
diff --git a/wpa_supplicant/ctrl_iface.c b/wpa_supplicant/ctrl_iface.c
index bafe1e9..6335605 100644
--- a/wpa_supplicant/ctrl_iface.c
+++ b/wpa_supplicant/ctrl_iface.c
@@ -568,6 +568,11 @@
wpa_printf(MSG_DEBUG, "CTRL_IFACE TDLS_SETUP " MACSTR,
MAC2STR(peer));
+ if ((wpa_s->conf->tdls_external_control) &&
+ wpa_tdls_is_external_setup(wpa_s->wpa)) {
+ return wpa_drv_tdls_oper(wpa_s, TDLS_SETUP, peer);
+ }
+
wpa_tdls_remove(wpa_s->wpa, peer);
if (wpa_tdls_is_external_setup(wpa_s->wpa))
@@ -594,6 +599,11 @@
wpa_printf(MSG_DEBUG, "CTRL_IFACE TDLS_TEARDOWN " MACSTR,
MAC2STR(peer));
+ if ((wpa_s->conf->tdls_external_control) &&
+ wpa_tdls_is_external_setup(wpa_s->wpa)) {
+ return wpa_drv_tdls_oper(wpa_s, TDLS_TEARDOWN, peer);
+ }
+
if (wpa_tdls_is_external_setup(wpa_s->wpa))
ret = wpa_tdls_teardown_link(
wpa_s->wpa, peer,