Add p2p_go_max_inactivity config option
authorEyal Shapira <eyal@wizery.com>
Fri, 10 Aug 2012 13:28:38 +0000 (16:28 +0300)
committerJouni Malinen <j@w1.fi>
Fri, 10 Aug 2012 13:28:38 +0000 (16:28 +0300)
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
wpa_supplicant/config.h
wpa_supplicant/config_file.c
wpa_supplicant/p2p_supplicant.c
wpa_supplicant/wpa_supplicant.conf

index e72ac34..de7e528 100644 (file)
@@ -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
index 080c0cd..f163385 100644 (file)
@@ -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 inactivity
+        *
+        * This timeout value is used in P2P GO mode to clean up
+        * inactive stations.
+        * By default: 300 seconds.
+        */
+       int p2p_go_max_inactivity;
 };
 
 
index 32d416e..8eb9ba5 100644 (file)
@@ -881,6 +881,9 @@ static void wpa_config_write_global(FILE *f, struct wpa_config *config)
        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 */
index 218ed2f..abe120f 100644 (file)
@@ -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;
index 37e36b3..33581c1 100644 (file)
@@ -259,6 +259,12 @@ fast_reauth=1
 # format: <backend name>[:<optional backend parameters>]
 #ext_password_backend=test:pw1=password|pw2=testing
 
+# Timeout in seconds to detect STA inactivity (default: 300 seconds)
+#
+# This timeout value is used in P2P GO mode to clean up
+# inactive stations.
+#p2p_go_max_inactivity=300
+
 
 # Interworking (IEEE 802.11u)