]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
DPP: Take response wait time into account for init retries
authorJouni Malinen <jouni@qca.qualcomm.com>
Wed, 22 Nov 2017 22:42:20 +0000 (00:42 +0200)
committerJouni Malinen <j@w1.fi>
Wed, 22 Nov 2017 22:42:20 +0000 (00:42 +0200)
Previously, the Authentication Request frame was retried after 2+10 = 12
seconds since the wait for the response was not accounted for. Substract
that wait from the 10 second wait time to start the retries more quickly
based on the 10 second timer described in the tech spec.

Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
wpa_supplicant/dpp_supplicant.c

index 40506da8df1e947921772e9df6dbb2f2aa4a1583..f8a450d7f4e872c01f8816031e1a0e1004db76ed 100644 (file)
@@ -657,7 +657,8 @@ static int wpas_dpp_auth_init_next(struct wpa_supplicant *wpa_s)
 {
        struct dpp_authentication *auth = wpa_s->dpp_auth;
        const u8 *dst;
-       unsigned int wait_time, freq, max_tries;
+       unsigned int wait_time, freq, max_tries, used;
+       struct os_reltime now, diff;
 
        if (!auth)
                return -1;
@@ -684,6 +685,15 @@ static int wpas_dpp_auth_init_next(struct wpa_supplicant *wpa_s)
                        wait_time = wpa_s->dpp_init_retry_time;
                else
                        wait_time = 10000;
+               os_get_reltime(&now);
+               os_reltime_sub(&now, &wpa_s->dpp_last_init, &diff);
+               used = diff.sec * 1000 + diff.usec / 1000;
+               if (used > wait_time)
+                       wait_time = 0;
+               else
+                       wait_time -= used;
+               wpa_printf(MSG_DEBUG, "DPP: Next init attempt in %u ms",
+                          wait_time);
                eloop_register_timeout(wait_time / 1000,
                                       (wait_time % 1000) * 1000,
                                       wpas_dpp_init_timeout, wpa_s,