Lines Matching refs:peer

84 static void wpa_tdls_peer_free(struct wpa_sm *sm, struct wpa_tdls_peer *peer);
86 struct wpa_tdls_peer *peer);
175 static int wpa_tdls_del_key(struct wpa_sm *sm, struct wpa_tdls_peer *peer)
177 if (wpa_sm_set_key(sm, WPA_ALG_NONE, peer->addr,
188 static int wpa_tdls_set_key(struct wpa_sm *sm, struct wpa_tdls_peer *peer)
196 switch (peer->cipher) {
211 if (wpa_sm_set_key(sm, alg, peer->addr, -1, 1,
212 rsc, sizeof(rsc), peer->tpk.tk, key_len) < 0) {
236 struct wpa_tdls_peer *peer;
258 for (peer = sm->tdls; peer; peer = peer->next) {
259 if (os_memcmp(peer->addr, dest, ETH_ALEN) == 0)
263 if (peer == NULL) {
269 eloop_cancel_timeout(wpa_tdls_tpk_retry_timeout, sm, peer);
272 peer->sm_tmr.count = TPK_M2_RETRY_COUNT;
273 peer->sm_tmr.timer = TPK_M2_TIMEOUT;
275 peer->sm_tmr.count = TPK_M1_RETRY_COUNT;
276 peer->sm_tmr.timer = TPK_M1_TIMEOUT;
280 os_memcpy(peer->sm_tmr.dest, dest, ETH_ALEN);
281 peer->sm_tmr.action_code = action_code;
282 peer->sm_tmr.dialog_token = dialog_token;
283 peer->sm_tmr.status_code = status_code;
284 peer->sm_tmr.peer_capab = peer_capab;
285 peer->sm_tmr.buf_len = msg_len;
286 os_free(peer->sm_tmr.buf);
287 peer->sm_tmr.buf = os_malloc(msg_len);
288 if (peer->sm_tmr.buf == NULL)
290 os_memcpy(peer->sm_tmr.buf, msg, msg_len);
294 eloop_register_timeout(peer->sm_tmr.timer / 1000,
295 (peer->sm_tmr.timer % 1000) * 1000,
296 wpa_tdls_tpk_retry_timeout, sm, peer);
301 static int wpa_tdls_do_teardown(struct wpa_sm *sm, struct wpa_tdls_peer *peer,
306 ret = wpa_tdls_send_teardown(sm, peer->addr, reason_code);
308 wpa_tdls_disable_peer_link(sm, peer);
318 struct wpa_tdls_peer *peer = timeout_ctx;
320 if (peer->sm_tmr.count) {
321 peer->sm_tmr.count--;
325 peer->sm_tmr.action_code);
327 if (peer->sm_tmr.buf == NULL) {
330 peer->sm_tmr.action_code);
332 peer);
337 if (wpa_tdls_send_tpk_msg(sm, peer->sm_tmr.dest,
338 peer->sm_tmr.action_code,
339 peer->sm_tmr.dialog_token,
340 peer->sm_tmr.status_code,
341 peer->sm_tmr.peer_capab,
342 peer->initiator,
343 peer->sm_tmr.buf,
344 peer->sm_tmr.buf_len)) {
349 eloop_cancel_timeout(wpa_tdls_tpk_retry_timeout, sm, peer);
350 eloop_register_timeout(peer->sm_tmr.timer / 1000,
351 (peer->sm_tmr.timer % 1000) * 1000,
352 wpa_tdls_tpk_retry_timeout, sm, peer);
354 eloop_cancel_timeout(wpa_tdls_tpk_retry_timeout, sm, peer);
357 wpa_tdls_do_teardown(sm, peer,
364 struct wpa_tdls_peer *peer,
367 if (action_code == peer->sm_tmr.action_code) {
372 eloop_cancel_timeout(wpa_tdls_tpk_retry_timeout, sm, peer);
375 os_free(peer->sm_tmr.buf);
376 peer->sm_tmr.buf = NULL;
378 peer->sm_tmr.count = 0;
379 peer->sm_tmr.timer = 0;
380 peer->sm_tmr.buf_len = 0;
381 peer->sm_tmr.action_code = 0xff;
389 static void wpa_tdls_generate_tpk(struct wpa_tdls_peer *peer,
402 if (os_memcmp(peer->inonce, peer->rnonce, WPA_NONCE_LEN) < 0) {
403 nonce[0] = peer->inonce;
404 nonce[1] = peer->rnonce;
406 nonce[0] = peer->rnonce;
407 nonce[1] = peer->inonce;
423 if (os_memcmp(own_addr, peer->addr, ETH_ALEN) < 0) {
425 os_memcpy(data + ETH_ALEN, peer->addr, ETH_ALEN);
427 os_memcpy(data, peer->addr, ETH_ALEN);
434 (u8 *) &peer->tpk, sizeof(peer->tpk));
436 peer->tpk.kck, sizeof(peer->tpk.kck));
438 peer->tpk.tk, sizeof(peer->tpk.tk));
439 peer->tpk_set = 1;
564 struct wpa_tdls_peer *peer,
570 if (peer->tpk_set) {
571 wpa_tdls_ftie_mic(peer->tpk.kck, trans_seq, lnkid,
572 peer->rsnie_p, timeoutie, (u8 *) ftie,
593 u8 trans_seq, u16 rcode, u8 dtoken, struct wpa_tdls_peer *peer,
598 if (peer->tpk_set) {
599 wpa_tdls_key_mic_teardown(peer->tpk.kck, trans_seq, rcode,
618 struct wpa_tdls_peer *peer = timeout_ctx;
628 if (peer->initiator) {
630 " - try to renew", MAC2STR(peer->addr));
631 wpa_tdls_start(sm, peer->addr);
634 " - tear down", MAC2STR(peer->addr));
635 wpa_tdls_do_teardown(sm, peer,
642 struct wpa_tdls_peer *peer)
648 while (cur && cur != peer) {
653 if (cur != peer) {
654 wpa_printf(MSG_ERROR, "TDLS: Could not find peer " MACSTR
656 MAC2STR(peer->addr));
661 prev->next = peer->next;
663 sm->tdls = peer->next;
667 static void wpa_tdls_peer_clear(struct wpa_sm *sm, struct wpa_tdls_peer *peer)
669 wpa_printf(MSG_DEBUG, "TDLS: Clear state for peer " MACSTR,
670 MAC2STR(peer->addr));
671 eloop_cancel_timeout(wpa_tdls_tpk_timeout, sm, peer);
672 eloop_cancel_timeout(wpa_tdls_tpk_retry_timeout, sm, peer);
673 peer->reconfig_key = 0;
674 peer->initiator = 0;
675 peer->tpk_in_progress = 0;
676 os_free(peer->sm_tmr.buf);
677 peer->sm_tmr.buf = NULL;
678 os_free(peer->ht_capabilities);
679 peer->ht_capabilities = NULL;
680 os_free(peer->vht_capabilities);
681 peer->vht_capabilities = NULL;
682 os_free(peer->ext_capab);
683 peer->ext_capab = NULL;
684 os_free(peer->supp_channels);
685 peer->supp_channels = NULL;
686 os_free(peer->supp_oper_classes);
687 peer->supp_oper_classes = NULL;
688 peer->rsnie_i_len = peer->rsnie_p_len = 0;
689 peer->cipher = 0;
690 peer->qos_info = 0;
691 peer->wmm_capable = 0;
692 peer->tpk_set = peer->tpk_success = 0;
693 peer->chan_switch_enabled = 0;
694 os_memset(&peer->tpk, 0, sizeof(peer->tpk));
695 os_memset(peer->inonce, 0, WPA_NONCE_LEN);
696 os_memset(peer->rnonce, 0, WPA_NONCE_LEN);
700 static void wpa_tdls_peer_free(struct wpa_sm *sm, struct wpa_tdls_peer *peer)
702 wpa_tdls_peer_clear(sm, peer);
703 wpa_tdls_peer_remove_from_list(sm, peer);
704 os_free(peer);
708 static void wpa_tdls_linkid(struct wpa_sm *sm, struct wpa_tdls_peer *peer,
714 if (peer->initiator) {
716 os_memcpy(lnkid->resp_sta, peer->addr, ETH_ALEN);
718 os_memcpy(lnkid->init_sta, peer->addr, ETH_ALEN);
727 struct wpa_tdls_peer *peer;
738 for (peer = sm->tdls; peer; peer = peer->next) {
739 if (os_memcmp(peer->addr, addr, ETH_ALEN) == 0)
743 if (peer == NULL) {
750 if (peer->chan_switch_enabled) {
753 wpa_sm_tdls_disable_channel_switch(sm, peer->addr);
756 dialog_token = peer->dtoken;
762 if (wpa_tdls_get_privacy(sm) && peer->tpk_set && peer->tpk_success) {
776 if (!wpa_tdls_get_privacy(sm) || !peer->tpk_set || !peer->tpk_success)
782 os_memcpy(ftie->Anonce, peer->rnonce, WPA_NONCE_LEN);
783 os_memcpy(ftie->Snonce, peer->inonce, WPA_NONCE_LEN);
800 wpa_tdls_linkid(sm, peer, &lnkid);
801 wpa_tdls_key_mic_teardown(peer->tpk.kck, 4, reason_code,
811 reason_code, 0, peer->initiator, rbuf, pos - rbuf);
820 struct wpa_tdls_peer *peer;
825 for (peer = sm->tdls; peer; peer = peer->next) {
826 if (os_memcmp(peer->addr, addr, ETH_ALEN) == 0)
830 if (peer == NULL) {
831 wpa_printf(MSG_DEBUG, "TDLS: Could not find peer " MACSTR
836 if (!peer->tpk_success) {
842 return wpa_tdls_do_teardown(sm, peer, reason_code);
847 struct wpa_tdls_peer *peer)
849 wpa_sm_tdls_oper(sm, TDLS_DISABLE_LINK, peer->addr);
850 wpa_tdls_peer_free(sm, peer);
856 struct wpa_tdls_peer *peer;
858 for (peer = sm->tdls; peer; peer = peer->next) {
859 if (os_memcmp(peer->addr, addr, ETH_ALEN) == 0)
863 if (!peer || !peer->tpk_success) {
875 if (peer->chan_switch_enabled)
876 wpa_sm_tdls_disable_channel_switch(sm, peer->addr);
880 wpa_tdls_peer_free(sm, peer);
882 wpa_tdls_disable_peer_link(sm, peer);
889 struct wpa_tdls_peer *peer;
894 for (peer = sm->tdls; peer; peer = peer->next) {
895 if (os_memcmp(peer->addr, addr, ETH_ALEN) == 0)
899 if (peer == NULL)
900 return "peer does not exist";
902 if (!peer->tpk_success)
903 return "peer not connected";
912 struct wpa_tdls_peer *peer = NULL;
921 for (peer = sm->tdls; peer; peer = peer->next) {
922 if (os_memcmp(peer->addr, src_addr, ETH_ALEN) == 0)
926 if (peer == NULL) {
959 if (!wpa_tdls_get_privacy(sm) || !peer->tpk_set || !peer->tpk_success)
971 peer->dtoken, peer,
983 wpa_tdls_disable_peer_link(sm, peer);
1012 struct wpa_tdls_peer *peer;
1016 for (peer = sm->tdls; peer; peer = peer->next) {
1017 if (os_memcmp(peer->addr, addr, ETH_ALEN) == 0) {
1020 return peer; /* re-use existing entry */
1024 wpa_printf(MSG_INFO, "TDLS: Creating peer entry for " MACSTR,
1027 peer = os_zalloc(sizeof(*peer));
1028 if (peer == NULL)
1031 os_memcpy(peer->addr, addr, ETH_ALEN);
1032 peer->next = sm->tdls;
1033 sm->tdls = peer;
1035 return peer;
1040 struct wpa_tdls_peer *peer)
1053 peer->rsnie_i_len = 0;
1064 hdr = (struct rsn_ie_hdr *) peer->rsnie_i;
1114 hdr->len = (pos - peer->rsnie_i) - 2;
1115 peer->rsnie_i_len = pos - peer->rsnie_i;
1117 peer->rsnie_i, peer->rsnie_i_len);
1122 buf_len += peer->rsnie_i_len + sizeof(struct wpa_tdls_ftie) +
1133 wpa_tdls_peer_free(sm, peer);
1142 pos = wpa_add_ie(pos, peer->rsnie_i, peer->rsnie_i_len);
1148 if (os_get_random(peer->inonce, WPA_NONCE_LEN)) {
1152 wpa_tdls_peer_free(sm, peer);
1156 peer->inonce, WPA_NONCE_LEN);
1157 os_memcpy(ftie->Snonce, peer->inonce, WPA_NONCE_LEN);
1176 peer->lifetime = TPK_LIFETIME;
1181 peer->lifetime = 301;
1186 peer->lifetime = 0xffffffff;
1190 sizeof(timeoutie), peer->lifetime);
1191 wpa_printf(MSG_DEBUG, "TDLS: TPK lifetime %u seconds", peer->lifetime);
1200 wpa_tdls_linkid(sm, peer, l);
1207 "Handshake Message 1 (peer " MACSTR ")",
1208 MAC2STR(peer->addr));
1210 status = wpa_tdls_tpk_send(sm, peer->addr, WLAN_TDLS_SETUP_REQUEST,
1211 1, 0, 0, peer->initiator, rbuf, pos - rbuf);
1221 const struct wpa_tdls_peer *peer)
1234 buf_len += peer->rsnie_i_len + sizeof(struct wpa_tdls_ftie) +
1251 pos = wpa_add_ie(pos, peer->rsnie_p, peer->rsnie_p_len);
1256 os_memcpy(ftie->Anonce, peer->rnonce, WPA_NONCE_LEN);
1257 os_memcpy(ftie->Snonce, peer->inonce, WPA_NONCE_LEN);
1276 lifetime = peer->lifetime;
1290 wpa_tdls_ftie_mic(peer->tpk.kck, 2, (u8 *) lnkid, peer->rsnie_p,
1301 dtoken, 0, 0, peer->initiator, rbuf,
1312 const struct wpa_tdls_peer *peer)
1326 buf_len += peer->rsnie_i_len + sizeof(struct wpa_tdls_ftie) +
1343 pos = wpa_add_ie(pos, peer->rsnie_p, peer->rsnie_p_len);
1348 os_memcpy(ftie->Anonce, peer->rnonce, WPA_NONCE_LEN);
1349 os_memcpy(ftie->Snonce, peer->inonce, WPA_NONCE_LEN);
1366 lifetime = peer->lifetime;
1380 wpa_tdls_ftie_mic(peer->tpk.kck, 3, (u8 *) lnkid, peer->rsnie_p,
1391 if (peer->vht_capabilities)
1393 if (peer->ht_capabilities)
1395 if (peer->wmm_capable)
1399 dtoken, 0, peer_capab, peer->initiator,
1408 struct wpa_tdls_peer *peer,
1420 "(peer " MACSTR ")", MAC2STR(peer->addr));
1425 hdr = (struct rsn_ie_hdr *) peer->rsnie_i;
1457 peer->rsnie_i_len = pos - peer->rsnie_i;
1465 buf_len += peer->rsnie_i_len +
1470 wpa_tdls_peer_free(sm, peer);
1478 pos = wpa_add_ie(pos, peer->rsnie_i, peer->rsnie_i_len);
1480 peer->lifetime = TPK_LIFETIME;
1482 sizeof(timeoutie), peer->lifetime);
1483 wpa_printf(MSG_DEBUG, "TDLS: TPK lifetime %u seconds", peer->lifetime);
1485 status = wpa_tdls_tpk_send(sm, peer->addr, WLAN_TDLS_DISCOVERY_RESPONSE,
1499 struct wpa_tdls_peer *peer;
1541 peer = wpa_tdls_add_peer(sm, addr, NULL);
1542 if (peer == NULL)
1545 return wpa_tdls_send_discovery_response(sm, peer, dialog_token);
1554 wpa_printf(MSG_DEBUG, "TDLS: Sending Discovery Request to peer "
1562 struct wpa_tdls_peer *peer)
1568 peer->supp_rates_len = merge_byte_arrays(
1569 peer->supp_rates, sizeof(peer->supp_rates),
1578 struct wpa_tdls_peer *peer)
1586 if (!peer->ht_capabilities) {
1587 peer->ht_capabilities =
1589 if (peer->ht_capabilities == NULL)
1593 os_memcpy(peer->ht_capabilities, kde->ht_capabilities,
1596 (u8 *) peer->ht_capabilities,
1604 struct wpa_tdls_peer *peer)
1612 if (!peer->vht_capabilities) {
1613 peer->vht_capabilities =
1615 if (peer->vht_capabilities == NULL)
1619 os_memcpy(peer->vht_capabilities, kde->vht_capabilities,
1622 (u8 *) peer->vht_capabilities,
1630 struct wpa_tdls_peer *peer)
1638 if (!peer->ext_capab || peer->ext_capab_len < kde->ext_capab_len - 2) {
1640 os_free(peer->ext_capab);
1641 peer->ext_capab = os_zalloc(kde->ext_capab_len - 2);
1642 if (peer->ext_capab == NULL)
1646 peer->ext_capab_len = kde->ext_capab_len - 2;
1647 os_memcpy(peer->ext_capab, kde->ext_capab + 2, peer->ext_capab_len);
1654 struct wpa_tdls_peer *peer)
1669 peer->qos_info = wmm->qos_info;
1671 peer->wmm_capable = 1;
1673 wpa_printf(MSG_DEBUG, "TDLS: Peer WMM QOS Info 0x%x", peer->qos_info);
1679 struct wpa_tdls_peer *peer)
1686 if (!peer->supp_channels ||
1687 peer->supp_channels_len < kde->supp_channels_len) {
1688 os_free(peer->supp_channels);
1689 peer->supp_channels = os_zalloc(kde->supp_channels_len);
1690 if (peer->supp_channels == NULL)
1694 peer->supp_channels_len = kde->supp_channels_len;
1696 os_memcpy(peer->supp_channels, kde->supp_channels,
1697 peer->supp_channels_len);
1699 (u8 *) peer->supp_channels, peer->supp_channels_len);
1705 struct wpa_tdls_peer *peer)
1712 if (!peer->supp_oper_classes ||
1713 peer->supp_oper_classes_len < kde->supp_oper_classes_len) {
1714 os_free(peer->supp_oper_classes);
1715 peer->supp_oper_classes = os_zalloc(kde->supp_oper_classes_len);
1716 if (peer->supp_oper_classes == NULL)
1720 peer->supp_oper_classes_len = kde->supp_oper_classes_len;
1721 os_memcpy(peer->supp_oper_classes, kde->supp_oper_classes,
1722 peer->supp_oper_classes_len);
1724 (u8 *) peer->supp_oper_classes,
1725 peer->supp_oper_classes_len);
1730 static int wpa_tdls_addset_peer(struct wpa_sm *sm, struct wpa_tdls_peer *peer,
1733 return wpa_sm_tdls_peer_addset(sm, peer->addr, add, peer->aid,
1734 peer->capability,
1735 peer->supp_rates, peer->supp_rates_len,
1736 peer->ht_capabilities,
1737 peer->vht_capabilities,
1738 peer->qos_info, peer->wmm_capable,
1739 peer->ext_capab, peer->ext_capab_len,
1740 peer->supp_channels,
1741 peer->supp_channels_len,
1742 peer->supp_oper_classes,
1743 peer->supp_oper_classes_len);
1750 struct wpa_tdls_peer *peer;
1782 peer = wpa_tdls_add_peer(sm, src_addr, &existing_peer);
1783 if (peer == NULL)
1790 if (peer->tpk_success) {
1794 wpa_sm_tdls_oper(sm, TDLS_DISABLE_LINK, peer->addr);
1795 wpa_tdls_peer_clear(sm, peer);
1796 } else if (peer->initiator) {
1806 "from peer with higher address "
1811 "from peer with lower address "
1816 peer->addr);
1817 wpa_tdls_peer_clear(sm, peer);
1823 peer->capability = WPA_GET_LE16(cpos);
1854 if (copy_supp_rates(&kde, peer) < 0)
1857 if (copy_peer_ht_capab(&kde, peer) < 0)
1860 if (copy_peer_vht_capab(&kde, peer) < 0)
1863 if (copy_peer_ext_capab(&kde, peer) < 0)
1866 if (copy_peer_supp_channels(&kde, peer) < 0)
1869 if (copy_peer_supp_oper_classes(&kde, peer) < 0)
1872 peer->qos_info = kde.qosinfo;
1875 if (copy_peer_wmm_capab(&kde, peer) < 0)
1878 peer->aid = kde.aid;
1882 peer = wpa_tdls_add_peer(sm, src_addr, NULL);
1883 if (peer == NULL)
1887 peer->initiator = 1;
1888 wpa_sm_tdls_peer_addset(sm, peer->addr, 1, 0, 0, NULL, 0, NULL,
1890 wpa_tdls_send_tpk_m1(sm, peer);
1974 if (os_memcmp(sm->own_addr, peer->addr, ETH_ALEN) < 0) {
1978 * the peer.
1985 peer->initiator = 0; /* Need to check */
1986 peer->dtoken = dtoken;
1989 peer->rsnie_i_len = 0;
1990 peer->rsnie_p_len = 0;
1991 peer->cipher = WPA_CIPHER_NONE;
1996 os_memcpy(peer->rsnie_i, kde.rsn_ie, kde.rsn_ie_len);
1997 peer->rsnie_i_len = kde.rsn_ie_len;
1998 peer->cipher = cipher;
2000 if (os_memcmp(peer->inonce, ftie->Snonce, WPA_NONCE_LEN) != 0) {
2010 os_memcpy(peer->inonce, ftie->Snonce, WPA_NONCE_LEN);
2011 if (os_get_random(peer->rnonce, WPA_NONCE_LEN)) {
2023 /* use min(peer's version, out version) */
2027 hdr = (struct rsn_ie_hdr *) peer->rsnie_p;
2052 hdr->len = (pos - peer->rsnie_p) - 2;
2053 peer->rsnie_p_len = pos - peer->rsnie_p;
2057 os_memcpy(peer->rsnie_p, peer->rsnie_i, peer->rsnie_i_len);
2058 peer->rsnie_p_len = peer->rsnie_i_len;
2061 peer->rsnie_p, peer->rsnie_p_len);
2063 peer->lifetime = lifetime;
2065 wpa_tdls_generate_tpk(peer, sm->own_addr, sm->bssid);
2073 /* add supported rates, capabilities, and qos_info to the TDLS peer */
2074 if (wpa_tdls_addset_peer(sm, peer, 1) < 0)
2080 peer->tpk_in_progress = 1;
2083 if (wpa_tdls_send_tpk_m2(sm, src_addr, dtoken, lnkid, peer) < 0) {
2084 wpa_sm_tdls_oper(sm, TDLS_DISABLE_LINK, peer->addr);
2093 if (peer)
2094 wpa_tdls_peer_free(sm, peer);
2099 static int wpa_tdls_enable_link(struct wpa_sm *sm, struct wpa_tdls_peer *peer)
2101 peer->tpk_success = 1;
2102 peer->tpk_in_progress = 0;
2103 eloop_cancel_timeout(wpa_tdls_tpk_timeout, sm, peer);
2105 u32 lifetime = peer->lifetime;
2110 if (lifetime > 3 && peer->initiator)
2113 sm, peer);
2118 eloop_cancel_timeout(wpa_tdls_tpk_timeout, sm, peer);
2123 if (peer->reconfig_key && wpa_tdls_set_key(sm, peer) < 0) {
2128 peer->reconfig_key = 0;
2130 return wpa_sm_tdls_oper(sm, TDLS_ENABLE_LINK, peer->addr);
2137 struct wpa_tdls_peer *peer;
2153 for (peer = sm->tdls; peer; peer = peer->next) {
2154 if (os_memcmp(peer->addr, src_addr, ETH_ALEN) == 0)
2157 if (peer == NULL) {
2158 wpa_printf(MSG_INFO, "TDLS: No matching peer found for "
2162 if (!peer->initiator) {
2165 * same time and we accept the TPK M1 from the peer in
2172 wpa_tdls_tpk_retry_timeout_cancel(sm, peer, WLAN_TDLS_SETUP_REQUEST);
2175 wpa_tdls_disable_peer_link(sm, peer);
2187 wpa_tdls_disable_peer_link(sm, peer);
2199 wpa_tdls_disable_peer_link(sm, peer);
2204 peer->capability = WPA_GET_LE16(pos);
2241 if (copy_supp_rates(&kde, peer) < 0)
2244 if (copy_peer_ht_capab(&kde, peer) < 0)
2247 if (copy_peer_vht_capab(&kde, peer) < 0)
2250 if (copy_peer_ext_capab(&kde, peer) < 0)
2253 if (copy_peer_supp_channels(&kde, peer) < 0)
2256 if (copy_peer_supp_oper_classes(&kde, peer) < 0)
2259 peer->qos_info = kde.qosinfo;
2262 if (copy_peer_wmm_capab(&kde, peer) < 0)
2265 peer->aid = kde.aid;
2268 peer->rsnie_p_len = 0;
2269 peer->cipher = WPA_CIPHER_NONE;
2295 if (kde.rsn_ie_len != peer->rsnie_i_len ||
2296 os_memcmp(peer->rsnie_i, kde.rsn_ie, peer->rsnie_i_len) != 0) {
2300 peer->rsnie_i, peer->rsnie_i_len);
2327 if (!os_memcmp(peer->inonce, ftie->Snonce, WPA_NONCE_LEN) == 0) {
2335 os_memcpy(peer->rnonce, ftie->Anonce, WPA_NONCE_LEN);
2336 os_memcpy(peer->rsnie_p, kde.rsn_ie, kde.rsn_ie_len);
2337 peer->rsnie_p_len = kde.rsn_ie_len;
2338 peer->cipher = cipher;
2350 if (lifetime != peer->lifetime) {
2352 "TPK M2 (expected %u)", lifetime, peer->lifetime);
2357 wpa_tdls_generate_tpk(peer, sm->own_addr, sm->bssid);
2360 if (wpa_supplicant_verify_tdls_mic(2, peer, (u8 *) lnkid,
2363 wpa_tdls_del_key(sm, peer);
2364 wpa_tdls_disable_peer_link(sm, peer);
2368 if (wpa_tdls_set_key(sm, peer) < 0) {
2375 peer->reconfig_key = 1;
2379 peer->dtoken = dtoken;
2381 /* add supported rates, capabilities, and qos_info to the TDLS peer */
2382 if (wpa_tdls_addset_peer(sm, peer, 0) < 0)
2387 if (wpa_tdls_send_tpk_m3(sm, src_addr, dtoken, lnkid, peer) < 0)
2390 if (!peer->tpk_success) {
2396 ret = wpa_tdls_enable_link(sm, peer);
2400 sm, peer,
2409 wpa_tdls_disable_peer_link(sm, peer);
2417 struct wpa_tdls_peer *peer;
2430 for (peer = sm->tdls; peer; peer = peer->next) {
2431 if (os_memcmp(peer->addr, src_addr, ETH_ALEN) == 0)
2434 if (peer == NULL) {
2435 wpa_printf(MSG_INFO, "TDLS: No matching peer found for "
2439 wpa_tdls_tpk_retry_timeout_cancel(sm, peer, WLAN_TDLS_SETUP_RESPONSE);
2498 if (kde.rsn_ie_len != peer->rsnie_p_len ||
2499 os_memcmp(kde.rsn_ie, peer->rsnie_p, peer->rsnie_p_len) != 0) {
2505 if (!os_memcmp(peer->rnonce, ftie->Anonce, WPA_NONCE_LEN) == 0) {
2511 if (!os_memcmp(peer->inonce, ftie->Snonce, WPA_NONCE_LEN) == 0) {
2527 if (lifetime != peer->lifetime) {
2529 "TPK M3 (expected %u)", lifetime, peer->lifetime);
2533 if (wpa_supplicant_verify_tdls_mic(3, peer, (u8 *) lnkid,
2535 wpa_tdls_del_key(sm, peer);
2539 if (wpa_tdls_set_key(sm, peer) < 0) {
2546 peer->reconfig_key = 1;
2550 /* add supported rates, capabilities, and qos_info to the TDLS peer */
2551 if (wpa_tdls_addset_peer(sm, peer, 0) < 0)
2554 if (!peer->tpk_success) {
2560 ret = wpa_tdls_enable_link(sm, peer);
2568 wpa_tdls_do_teardown(sm, peer, WLAN_REASON_TDLS_TEARDOWN_UNSPECIFIED);
2590 * @peer: MAC address of the peer STA
2594 * handshake with the peer.
2598 struct wpa_tdls_peer *peer;
2619 peer = wpa_tdls_add_peer(sm, addr, NULL);
2620 if (peer == NULL)
2623 if (peer->tpk_in_progress) {
2624 wpa_printf(MSG_DEBUG, "TDLS: Setup is already in progress with the peer");
2628 peer->initiator = 1;
2630 /* add the peer to the driver as a "setup in progress" peer */
2631 if (wpa_sm_tdls_peer_addset(sm, peer->addr, 1, 0, 0, NULL, 0, NULL,
2633 wpa_tdls_disable_peer_link(sm, peer);
2637 peer->tpk_in_progress = 1;
2639 if (wpa_tdls_send_tpk_m1(sm, peer) < 0) {
2640 wpa_tdls_disable_peer_link(sm, peer);
2650 struct wpa_tdls_peer *peer;
2655 for (peer = sm->tdls; peer; peer = peer->next) {
2656 if (os_memcmp(peer->addr, addr, ETH_ALEN) == 0)
2660 if (peer == NULL || !peer->tpk_success)
2668 wpa_tdls_do_teardown(sm, peer,
2788 struct wpa_tdls_peer *peer, *tmp;
2792 peer = sm->tdls;
2796 while (peer) {
2797 tmp = peer->next;
2798 wpa_printf(MSG_DEBUG, "TDLS: Tear down peer " MACSTR,
2799 MAC2STR(peer->addr));
2801 wpa_tdls_do_teardown(sm, peer,
2804 wpa_sm_tdls_oper(sm, TDLS_TEARDOWN, peer->addr);
2806 peer = tmp;
2813 struct wpa_tdls_peer *peer, *tmp;
2815 peer = sm->tdls;
2817 while (peer) {
2819 tmp = peer->next;
2820 res = wpa_sm_tdls_oper(sm, TDLS_DISABLE_LINK, peer->addr);
2821 wpa_printf(MSG_DEBUG, "TDLS: Remove peer " MACSTR " (res=%d)",
2822 MAC2STR(peer->addr), res);
2823 wpa_tdls_peer_free(sm, peer);
2824 peer = tmp;
2937 struct wpa_tdls_peer *peer;
2955 for (peer = sm->tdls; peer; peer = peer->next) {
2956 if (os_memcmp(peer->addr, addr, ETH_ALEN) == 0)
2960 if (peer == NULL || !peer->tpk_success) {
2966 if (peer->chan_switch_enabled) {
2973 ret = wpa_sm_tdls_enable_channel_switch(sm, peer->addr,
2976 peer->chan_switch_enabled = 1;
2984 struct wpa_tdls_peer *peer;
2989 for (peer = sm->tdls; peer; peer = peer->next) {
2990 if (os_memcmp(peer->addr, addr, ETH_ALEN) == 0)
2994 if (!peer || !peer->chan_switch_enabled) {
3001 wpa_sm_tdls_disable_channel_switch(sm, peer->addr);
3003 peer->chan_switch_enabled = 0;