diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2013-10-04 17:23:43 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2013-10-04 17:23:43 -0700 |
| commit | 48119a1eaaa1798aef056c7935ede5531745dd25 (patch) | |
| tree | 5af83b59bcf8b98623d96a0d1204b077175256db | |
| parent | 504ead8c670c6aeb99ec47f96fb56ea799fa9390 (diff) | |
| parent | d9801082e01ec7ed36ae8d6f35634a88d783df64 (diff) | |
| download | android_external_wpa_supplicant_8-48119a1eaaa1798aef056c7935ede5531745dd25.tar.gz android_external_wpa_supplicant_8-48119a1eaaa1798aef056c7935ede5531745dd25.tar.bz2 android_external_wpa_supplicant_8-48119a1eaaa1798aef056c7935ede5531745dd25.zip | |
Merge "TDLS: Do not start concurrent TDLS setup"
| -rw-r--r-- | src/rsn_supp/tdls.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/rsn_supp/tdls.c b/src/rsn_supp/tdls.c index 85fdd8d5..53206142 100644 --- a/src/rsn_supp/tdls.c +++ b/src/rsn_supp/tdls.c @@ -108,6 +108,7 @@ struct wpa_tdls_peer { } tpk; int tpk_set; int tpk_success; + int tpk_in_progress; struct tpk_timer { u8 dest[ETH_ALEN]; @@ -621,6 +622,7 @@ static void wpa_tdls_peer_free(struct wpa_sm *sm, struct wpa_tdls_peer *peer) eloop_cancel_timeout(wpa_tdls_tpk_timeout, sm, peer); eloop_cancel_timeout(wpa_tdls_tpk_retry_timeout, sm, peer); peer->initiator = 0; + peer->tpk_in_progress = 0; os_free(peer->sm_tmr.buf); peer->sm_tmr.buf = NULL; os_free(peer->ht_capabilities); @@ -1741,6 +1743,7 @@ skip_rsn_check: /* add the peer to the driver as a "setup in progress" peer */ wpa_sm_tdls_peer_addset(sm, peer->addr, 1, 0, 0, NULL, 0, NULL, NULL, 0, NULL, 0); + peer->tpk_in_progress = 1; wpa_printf(MSG_DEBUG, "TDLS: Sending TDLS Setup Response / TPK M2"); if (wpa_tdls_send_tpk_m2(sm, src_addr, dtoken, lnkid, peer) < 0) { @@ -1760,6 +1763,7 @@ error: static void wpa_tdls_enable_link(struct wpa_sm *sm, struct wpa_tdls_peer *peer) { peer->tpk_success = 1; + peer->tpk_in_progress = 0; eloop_cancel_timeout(wpa_tdls_tpk_timeout, sm, peer); if (wpa_tdls_get_privacy(sm)) { u32 lifetime = peer->lifetime; @@ -2207,12 +2211,19 @@ int wpa_tdls_start(struct wpa_sm *sm, const u8 *addr) if (peer == NULL) return -1; + if (peer->tpk_in_progress) { + wpa_printf(MSG_DEBUG, "TDLS: Setup is already in progress with the peer"); + return 0; + } + peer->initiator = 1; /* add the peer to the driver as a "setup in progress" peer */ wpa_sm_tdls_peer_addset(sm, peer->addr, 1, 0, 0, NULL, 0, NULL, NULL, 0, NULL, 0); + peer->tpk_in_progress = 1; + if (wpa_tdls_send_tpk_m1(sm, peer) < 0) { wpa_tdls_disable_peer_link(sm, peer); return -1; |
