FT pull

harisha ja harisha.ja at gmail.com
Sat Aug 26 11:22:33 PDT 2023

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,
    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);

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

More information about the Hostap mailing list