Hi team, With current code I see that as soon as we receive ft auth, if the pmkr1 entry is not present we send the pull request and start the timer like below. tsecs = sm->wpa_auth->conf.rkh_pull_timeout / 1000; tusecs = (sm->wpa_auth->conf.rkh_pull_timeout % 1000) * 1000; eloop_register_timeout(tsecs, tusecs, wpa_ft_expire_pull, sm, NULL); And we do this again if we receive the auth message again and we do this till ft_pending_pull_left_retries is 0 or less than 0. And when a timeout happens we cancel all the timers like below. static void wpa_ft_expire_pull(void *eloop_ctx, void *timeout_ctx) { struct wpa_state_machine *sm = eloop_ctx; wpa_printf(MSG_DEBUG, "FT: Timeout pending pull request for " MACSTR, MAC2STR(sm->addr)); if (sm->ft_pending_pull_left_retries <= 0) wpa_ft_block_r0kh(sm->wpa_auth, sm->r0kh_id, sm->r0kh_id_len); /* cancel multiple timeouts */ eloop_cancel_timeout(wpa_ft_expire_pull, sm, NULL); ft_finish_pull(sm); } My questions are a) Why for the same client we run multiple timers ? b) Why are we stopping all the timers in case of first timeout only ? Thanks & Regards, Harisha J A _______________________________________________ Hostap mailing list Hostap@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/hostap