}
-static void tdls_clear_peer(struct wpa_sm *sm, struct wpa_tdls_peer *peer)
-{
- u8 mac[ETH_ALEN];
- struct wpa_tdls_peer *tmp;
-
- os_memcpy(mac, peer->addr, ETH_ALEN);
- tmp = peer->next;
- peer->initiator = 0;
- eloop_cancel_timeout(wpa_tdls_tpk_retry_timeout, sm, peer);
- os_free(peer->sm_tmr.buf);
-
- /* reset all */
- os_memset(peer, 0, sizeof(*peer));
-
- /* restore things */
- os_memcpy(peer->addr, mac, ETH_ALEN);
- peer->next = tmp;
-}
-
-
static void wpa_tdls_tpk_retry_timeout(void *eloop_ctx, void *timeout_ctx)
{
static void wpa_tdls_peer_free(struct wpa_sm *sm, struct wpa_tdls_peer *peer)
{
+ wpa_printf(MSG_DEBUG, "TDLS: Clear state for peer " MACSTR,
+ MAC2STR(peer->addr));
eloop_cancel_timeout(wpa_tdls_tpk_timeout, sm, peer);
-
- /* need to clear Peerkey SM */
- tdls_clear_peer(sm, peer);
- //os_free(peer);
+ eloop_cancel_timeout(wpa_tdls_tpk_retry_timeout, sm, peer);
+ peer->initiator = 0;
+ os_free(peer->sm_tmr.buf);
+ peer->sm_tmr.buf = NULL;
+ peer->rsnie_i_len = peer->rsnie_p_len = 0;
+ peer->cipher = 0;
+ peer->tpk_set = peer->tpk_success = 0;
+ os_memset(&peer->tpk, 0, sizeof(peer->tpk));
+ os_memset(peer->inonce, 0, WPA_NONCE_LEN);
+ os_memset(peer->rnonce, 0, WPA_NONCE_LEN);
}