Patchwork Add p2p_go_max_inactivity config option

login
register
mail settings
Submitter Eyal Shapira
Date Aug. 8, 2012, 11:10 p.m.
Message ID <1344467418-28618-1-git-send-email-eyal@wizery.com>
Download mbox | patch
Permalink /patch/175970/
State Accepted
Commit 462a7439e164198dc230c78a530875f719ff51e8
Headers show

Comments

Eyal Shapira - Aug. 8, 2012, 11:10 p.m.
This enables setting a different max inactivity timeout for P2P GO.
This timeout is used to detect inactive clients. In some scenarios
it may be useful to have control over this and set a shorter timeout
than the default 300s. For example when running STA and P2P GO interfaces
concurrently, the STA interface may perform scans which may cause the
GO to miss a disassoc / deauth frames from a client and keep assuming
that the client is connected until the inactivity detection kicks in.
300 secs is a bit too long for such scenarios and creates a bad user
experience.

Signed-hostap: Eyal Shapira <eyal@wizery.com>
---
 wpa_supplicant/config.c         |    4 +++-
 wpa_supplicant/config.h         |   10 ++++++++++
 wpa_supplicant/config_file.c    |    4 +++-
 wpa_supplicant/p2p_supplicant.c |    1 +
 4 files changed, 17 insertions(+), 2 deletions(-)
Jouni Malinen - Aug. 10, 2012, 1:29 p.m.
On Thu, Aug 09, 2012 at 02:10:18AM +0300, Eyal Shapira wrote:
> This enables setting a different max inactivity timeout for P2P GO.
> This timeout is used to detect inactive clients. In some scenarios
> it may be useful to have control over this and set a shorter timeout
> than the default 300s. For example when running STA and P2P GO interfaces
> concurrently, the STA interface may perform scans which may cause the
> GO to miss a disassoc / deauth frames from a client and keep assuming
> that the client is connected until the inactivity detection kicks in.
> 300 secs is a bit too long for such scenarios and creates a bad user
> experience.

Thanks, applied.

Patch

diff --git a/wpa_supplicant/config.c b/wpa_supplicant/config.c
index e72ac34..de7e528 100644
--- a/wpa_supplicant/config.c
+++ b/wpa_supplicant/config.c
@@ -2558,6 +2558,7 @@  struct wpa_config * wpa_config_alloc_empty(const char *ctrl_interface,
 	config->fast_reauth = DEFAULT_FAST_REAUTH;
 	config->p2p_go_intent = DEFAULT_P2P_GO_INTENT;
 	config->p2p_intra_bss = DEFAULT_P2P_INTRA_BSS;
+	config->p2p_go_max_inactivity = DEFAULT_P2P_GO_MAX_INACTIVITY;
 	config->bss_max_count = DEFAULT_BSS_MAX_COUNT;
 	config->bss_expiration_age = DEFAULT_BSS_EXPIRATION_AGE;
 	config->bss_expiration_scan_count = DEFAULT_BSS_EXPIRATION_SCAN_COUNT;
@@ -2984,7 +2985,8 @@  static const struct global_parse_data global_fields[] = {
 	{ BIN(wps_nfc_dh_pubkey), 0 },
 	{ BIN(wps_nfc_dh_privkey), 0 },
 	{ BIN(wps_nfc_dev_pw), 0 },
-	{ STR(ext_password_backend), CFG_CHANGED_EXT_PW_BACKEND }
+	{ STR(ext_password_backend), CFG_CHANGED_EXT_PW_BACKEND },
+	{ INT(p2p_go_max_inactivity), 0 },
 };
 
 #undef FUNC
diff --git a/wpa_supplicant/config.h b/wpa_supplicant/config.h
index 080c0cd..3bbca6a 100644
--- a/wpa_supplicant/config.h
+++ b/wpa_supplicant/config.h
@@ -18,6 +18,7 @@ 
 #define DEFAULT_FAST_REAUTH 1
 #define DEFAULT_P2P_GO_INTENT 7
 #define DEFAULT_P2P_INTRA_BSS 1
+#define DEFAULT_P2P_GO_MAX_INACTIVITY (5*60)
 #define DEFAULT_BSS_MAX_COUNT 200
 #define DEFAULT_BSS_EXPIRATION_AGE 180
 #define DEFAULT_BSS_EXPIRATION_SCAN_COUNT 2
@@ -723,6 +724,15 @@  struct wpa_config {
 	 * format: <backend name>[:<optional backend parameters>]
 	 */
 	char *ext_password_backend;
+
+	/*
+	 * p2p_go_max_inactivity - Timeout in seconds to detect STA's inactivity
+	 *
+	 * This timeout value is used in P2P GO mode to clean up
+	 * inactive stations.
+	 * By default: 300 seconds.
+	 */
+	int p2p_go_max_inactivity;
 };
 
 
diff --git a/wpa_supplicant/config_file.c b/wpa_supplicant/config_file.c
index 32d416e..2b732f8 100644
--- a/wpa_supplicant/config_file.c
+++ b/wpa_supplicant/config_file.c
@@ -877,10 +877,12 @@  static void wpa_config_write_global(FILE *f, struct wpa_config *config)
 	write_global_bin(f, "wps_nfc_dh_pubkey", config->wps_nfc_dh_pubkey);
 	write_global_bin(f, "wps_nfc_dh_privkey", config->wps_nfc_dh_privkey);
 	write_global_bin(f, "wps_nfc_dev_pw", config->wps_nfc_dev_pw);
-
 	if (config->ext_password_backend)
 		fprintf(f, "ext_password_backend=%s\n",
 			config->ext_password_backend);
+	if (config->p2p_go_max_inactivity != DEFAULT_P2P_GO_MAX_INACTIVITY)
+		fprintf(f, "p2p_go_max_inactivity=%d\n",
+			config->p2p_go_max_inactivity);
 }
 
 #endif /* CONFIG_NO_CONFIG_WRITE */
diff --git a/wpa_supplicant/p2p_supplicant.c b/wpa_supplicant/p2p_supplicant.c
index 218ed2f..abe120f 100644
--- a/wpa_supplicant/p2p_supplicant.c
+++ b/wpa_supplicant/p2p_supplicant.c
@@ -807,6 +807,7 @@  static void wpas_start_wps_go(struct wpa_supplicant *wpa_s,
 	ssid->proto = WPA_PROTO_RSN;
 	ssid->pairwise_cipher = WPA_CIPHER_CCMP;
 	ssid->passphrase = os_strdup(params->passphrase);
+	ssid->ap_max_inactivity = wpa_s->parent->conf->p2p_go_max_inactivity;
 
 	wpa_s->ap_configured_cb = p2p_go_configured;
 	wpa_s->ap_configured_cb_ctx = wpa_s;