IBSS RSN: Use monotonic time for reinit detection
authorJohannes Berg <johannes.berg@intel.com>
Mon, 16 Dec 2013 20:08:39 +0000 (21:08 +0100)
committerJouni Malinen <j@w1.fi>
Tue, 24 Dec 2013 05:58:21 +0000 (07:58 +0200)
The reinit detection skips reinit when the time since the own
authentication frame TX is less than half a second, so it shouldn't
be affected by wall time and use monotonic time instead.

Signed-hostap: Johannes Berg <johannes.berg@intel.com>

wpa_supplicant/ibss_rsn.c
wpa_supplicant/ibss_rsn.h

index 47ef35e..3083dd8 100644 (file)
@@ -590,7 +590,7 @@ int ibss_rsn_start(struct ibss_rsn *ibss_rsn, const u8 *addr)
                peer->authentication_status |= IBSS_RSN_AUTH_BY_US;
                return ibss_rsn_auth_init(ibss_rsn, peer);
        } else {
-               os_get_time(&peer->own_auth_tx);
+               os_get_reltime(&peer->own_auth_tx);
                eloop_register_timeout(1, 0, ibss_rsn_auth_timeout, peer, NULL);
        }
 
@@ -834,9 +834,9 @@ static void ibss_rsn_handle_auth_1_of_2(struct ibss_rsn *ibss_rsn,
        if (peer &&
            peer->authentication_status & IBSS_RSN_AUTH_EAPOL_BY_PEER) {
                if (peer->own_auth_tx.sec) {
-                       struct os_time now, diff;
-                       os_get_time(&now);
-                       os_time_sub(&now, &peer->own_auth_tx, &diff);
+                       struct os_reltime now, diff;
+                       os_get_reltime(&now);
+                       os_reltime_sub(&now, &peer->own_auth_tx, &diff);
                        if (diff.sec == 0 && diff.usec < 500000) {
                                wpa_printf(MSG_DEBUG, "RSN: Skip IBSS reinit since only %u usec from own Auth frame TX",
                                           (int) diff.usec);
index 3089283..67fae2d 100644 (file)
@@ -40,7 +40,7 @@ struct ibss_rsn_peer {
        struct wpa_state_machine *auth;
        int authentication_status;
 
-       struct os_time own_auth_tx;
+       struct os_reltime own_auth_tx;
 };
 
 struct ibss_rsn {