P2P: Add a testing option to force P2P GO CSA
authorIlan Peer <ilan.peer@intel.com>
Sun, 22 Nov 2015 13:57:51 +0000 (15:57 +0200)
committerJouni Malinen <j@w1.fi>
Sun, 22 Nov 2015 19:49:19 +0000 (21:49 +0200)
Add a testing option to force a P2P GO CSA on successful
invitation to join an active P2P GO.

Signed-off-by: Ilan Peer <ilan.peer@intel.com>
wpa_supplicant/ctrl_iface.c
wpa_supplicant/p2p_supplicant.c
wpa_supplicant/wpa_supplicant_i.h

index 598e76b..de68f56 100644 (file)
@@ -467,6 +467,8 @@ static int wpa_supplicant_ctrl_iface_set(struct wpa_supplicant *wpa_s,
                wpa_s->extra_roc_dur = atoi(value);
        } else if (os_strcasecmp(cmd, "test_failure") == 0) {
                wpa_s->test_failure = atoi(value);
+       } else if (os_strcasecmp(cmd, "p2p_go_csa_on_inv") == 0) {
+               wpa_s->p2p_go_csa_on_inv = !!atoi(value);
 #endif /* CONFIG_TESTING_OPTIONS */
 #ifndef CONFIG_NO_CONFIG_BLOBS
        } else if (os_strcmp(cmd, "blob") == 0) {
@@ -6888,6 +6890,7 @@ static void wpa_supplicant_ctrl_iface_flush(struct wpa_supplicant *wpa_s)
 #ifdef CONFIG_TESTING_OPTIONS
        wpa_s->extra_roc_dur = 0;
        wpa_s->test_failure = WPAS_TEST_FAILURE_NONE;
+       wpa_s->p2p_go_csa_on_inv = 0;
 #endif /* CONFIG_TESTING_OPTIONS */
 
        wpa_s->disconnected = 0;
index 88c90d0..ea4bd0e 100644 (file)
@@ -3113,8 +3113,22 @@ static void wpas_invitation_result(void *ctx, int status, const u8 *bssid,
                 */
                if (status == P2P_SC_SUCCESS &&
                    group_if && group_if->current_ssid &&
-                   group_if->current_ssid->mode == WPAS_MODE_P2P_GO)
+                   group_if->current_ssid->mode == WPAS_MODE_P2P_GO) {
                        os_get_reltime(&wpa_s->global->p2p_go_wait_client);
+#ifdef CONFIG_TESTING_OPTIONS
+                       if (group_if->p2p_go_csa_on_inv) {
+                               wpa_printf(MSG_DEBUG,
+                                          "Testing: force P2P GO CSA after invitation");
+                               eloop_cancel_timeout(
+                                       wpas_p2p_reconsider_moving_go,
+                                       wpa_s, NULL);
+                               eloop_register_timeout(
+                                       0, 50000,
+                                       wpas_p2p_reconsider_moving_go,
+                                       wpa_s, NULL);
+                       }
+#endif /* CONFIG_TESTING_OPTIONS */
+               }
                return;
        }
 
index 6d2786b..56382ae 100644 (file)
@@ -982,6 +982,7 @@ struct wpa_supplicant {
        struct l2_packet_data *l2_test;
        unsigned int extra_roc_dur;
        enum wpa_supplicant_test_failure test_failure;
+       unsigned int p2p_go_csa_on_inv:1;
 #endif /* CONFIG_TESTING_OPTIONS */
 
        struct wmm_ac_assoc_data *wmm_ac_assoc_info;