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);
172 static int wpa_tdls_del_key(struct wpa_sm *sm, struct wpa_tdls_peer *peer)
174 if (wpa_sm_set_key(sm, WPA_ALG_NONE, peer->addr,
185 static int wpa_tdls_set_key(struct wpa_sm *sm, struct wpa_tdls_peer *peer)
193 switch (peer->cipher) {
208 if (wpa_sm_set_key(sm, alg, peer->addr, -1, 1,
209 rsc, sizeof(rsc), peer->tpk.tk, key_len) < 0) {
232 struct wpa_tdls_peer *peer;
252 for (peer = sm->tdls; peer; peer = peer->next) {
253 if (os_memcmp(peer->addr, dest, ETH_ALEN) == 0)
257 if (peer == NULL) {
263 eloop_cancel_timeout(wpa_tdls_tpk_retry_timeout, sm, peer);
266 peer->sm_tmr.count = TPK_M2_RETRY_COUNT;
267 peer->sm_tmr.timer = TPK_M2_TIMEOUT;
269 peer->sm_tmr.count = TPK_M1_RETRY_COUNT;
270 peer->sm_tmr.timer = TPK_M1_TIMEOUT;
274 os_memcpy(peer->sm_tmr.dest, dest, ETH_ALEN);
275 peer->sm_tmr.action_code = action_code;
276 peer->sm_tmr.dialog_token = dialog_token;
277 peer->sm_tmr.status_code = status_code;
278 peer->sm_tmr.peer_capab = peer_capab;
279 peer->sm_tmr.buf_len = msg_len;
280 os_free(peer->sm_tmr.buf);
281 peer->sm_tmr.buf = os_malloc(msg_len);
282 if (peer->sm_tmr.buf == NULL)
284 os_memcpy(peer->sm_tmr.buf, msg, msg_len);
288 eloop_register_timeout(peer->sm_tmr.timer / 1000,
289 (peer->sm_tmr.timer % 1000) * 1000,
290 wpa_tdls_tpk_retry_timeout, sm, peer);
295 static int wpa_tdls_do_teardown(struct wpa_sm *sm, struct wpa_tdls_peer *peer,
300 ret = wpa_tdls_send_teardown(sm, peer->addr, reason_code);
302 wpa_tdls_disable_peer_link(sm, peer);
312 struct wpa_tdls_peer *peer = timeout_ctx;
314 if (peer->sm_tmr.count) {
315 peer->sm_tmr.count--;
319 peer->sm_tmr.action_code);
321 if (peer->sm_tmr.buf == NULL) {
324 peer->sm_tmr.action_code);
326 peer);
331 if (wpa_tdls_send_tpk_msg(sm, peer->sm_tmr.dest,
332 peer->sm_tmr.action_code,
333 peer->sm_tmr.dialog_token,
334 peer->sm_tmr.status_code,
335 peer->sm_tmr.peer_capab,
336 peer->sm_tmr.buf,
337 peer->sm_tmr.buf_len)) {
342 eloop_cancel_timeout(wpa_tdls_tpk_retry_timeout, sm, peer);
343 eloop_register_timeout(peer->sm_tmr.timer / 1000,
344 (peer->sm_tmr.timer % 1000) * 1000,
345 wpa_tdls_tpk_retry_timeout, sm, peer);
347 eloop_cancel_timeout(wpa_tdls_tpk_retry_timeout, sm, peer);
350 wpa_tdls_do_teardown(sm, peer,
357 struct wpa_tdls_peer *peer,
360 if (action_code == peer->sm_tmr.action_code) {
365 eloop_cancel_timeout(wpa_tdls_tpk_retry_timeout, sm, peer);
368 os_free(peer->sm_tmr.buf);
369 peer->sm_tmr.buf = NULL;
371 peer->sm_tmr.count = 0;
372 peer->sm_tmr.timer = 0;
373 peer->sm_tmr.buf_len = 0;
374 peer->sm_tmr.action_code = 0xff;
382 static void wpa_tdls_generate_tpk(struct wpa_tdls_peer *peer,
395 if (os_memcmp(peer->inonce, peer->rnonce, WPA_NONCE_LEN) < 0) {
396 nonce[0] = peer->inonce;
397 nonce[1] = peer->rnonce;
399 nonce[0] = peer->rnonce;
400 nonce[1] = peer->inonce;
416 if (os_memcmp(own_addr, peer->addr, ETH_ALEN) < 0) {
418 os_memcpy(data + ETH_ALEN, peer->addr, ETH_ALEN);
420 os_memcpy(data, peer->addr, ETH_ALEN);
427 (u8 *) &peer->tpk, sizeof(peer->tpk));
429 peer->tpk.kck, sizeof(peer->tpk.kck));
431 peer->tpk.tk, sizeof(peer->tpk.tk));
432 peer->tpk_set = 1;
557 struct wpa_tdls_peer *peer,
563 if (peer->tpk_set) {
564 wpa_tdls_ftie_mic(peer->tpk.kck, trans_seq, lnkid,
565 peer->rsnie_p, timeoutie, (u8 *) ftie,
586 u8 trans_seq, u16 rcode, u8 dtoken, struct wpa_tdls_peer *peer,
591 if (peer->tpk_set) {
592 wpa_tdls_key_mic_teardown(peer->tpk.kck, trans_seq, rcode,
611 struct wpa_tdls_peer *peer = timeout_ctx;
621 if (peer->initiator) {
623 " - try to renew", MAC2STR(peer->addr));
624 wpa_tdls_start(sm, peer->addr);
627 " - tear down", MAC2STR(peer->addr));
628 wpa_tdls_do_teardown(sm, peer,
635 struct wpa_tdls_peer *peer)
641 while (cur && cur != peer) {
646 if (cur != peer) {
647 wpa_printf(MSG_ERROR, "TDLS: Could not find peer " MACSTR
649 MAC2STR(peer->addr));
654 prev->next = peer->next;
656 sm->tdls = peer->next;
660 static void wpa_tdls_peer_clear(struct wpa_sm *sm, struct wpa_tdls_peer *peer)
662 wpa_printf(MSG_DEBUG, "TDLS: Clear state for peer " MACSTR,
663 MAC2STR(peer->addr));
664 eloop_cancel_timeout(wpa_tdls_tpk_timeout, sm, peer);
665 eloop_cancel_timeout(wpa_tdls_tpk_retry_timeout, sm, peer);
666 peer->reconfig_key = 0;
667 peer->initiator = 0;
668 peer->tpk_in_progress = 0;
669 os_free(peer->sm_tmr.buf);
670 peer->sm_tmr.buf = NULL;
671 os_free(peer->ht_capabilities);
672 peer->ht_capabilities = NULL;
673 os_free(peer->vht_capabilities);
674 peer->vht_capabilities = NULL;
675 os_free(peer->ext_capab);
676 peer->ext_capab = NULL;
677 os_free(peer->supp_channels);
678 peer->supp_channels = NULL;
679 os_free(peer->supp_oper_classes);
680 peer->supp_oper_classes = NULL;
681 peer->rsnie_i_len = peer->rsnie_p_len = 0;
682 peer->cipher = 0;
683 peer->qos_info = 0;
684 peer->wmm_capable = 0;
685 peer->tpk_set = peer->tpk_success = 0;
686 os_memset(&peer->tpk, 0, sizeof(peer->tpk));
687 os_memset(peer->inonce, 0, WPA_NONCE_LEN);
688 os_memset(peer->rnonce, 0, WPA_NONCE_LEN);
692 static void wpa_tdls_peer_free(struct wpa_sm *sm, struct wpa_tdls_peer *peer)
694 wpa_tdls_peer_clear(sm, peer);
695 wpa_tdls_peer_remove_from_list(sm, peer);
696 os_free(peer);
700 static void wpa_tdls_linkid(struct wpa_sm *sm, struct wpa_tdls_peer *peer,
706 if (peer->initiator) {
708 os_memcpy(lnkid->resp_sta, peer->addr, ETH_ALEN);
710 os_memcpy(lnkid->init_sta, peer->addr, ETH_ALEN);
719 struct wpa_tdls_peer *peer;
730 for (peer = sm->tdls; peer; peer = peer->next) {
731 if (os_memcmp(peer->addr, addr, ETH_ALEN) == 0)
735 if (peer == NULL) {
741 dialog_token = peer->dtoken;
747 if (wpa_tdls_get_privacy(sm) && peer->tpk_set && peer->tpk_success) {
761 if (!wpa_tdls_get_privacy(sm) || !peer->tpk_set || !peer->tpk_success)
767 os_memcpy(ftie->Anonce, peer->rnonce, WPA_NONCE_LEN);
768 os_memcpy(ftie->Snonce, peer->inonce, WPA_NONCE_LEN);
785 wpa_tdls_linkid(sm, peer, &lnkid);
786 wpa_tdls_key_mic_teardown(peer->tpk.kck, 4, reason_code,
805 struct wpa_tdls_peer *peer;
810 for (peer = sm->tdls; peer; peer = peer->next) {
811 if (os_memcmp(peer->addr, addr, ETH_ALEN) == 0)
815 if (peer == NULL) {
816 wpa_printf(MSG_DEBUG, "TDLS: Could not find peer " MACSTR
821 if (!peer->tpk_success) {
827 return wpa_tdls_do_teardown(sm, peer, reason_code);
832 struct wpa_tdls_peer *peer)
834 wpa_sm_tdls_oper(sm, TDLS_DISABLE_LINK, peer->addr);
835 wpa_tdls_peer_free(sm, peer);
841 struct wpa_tdls_peer *peer;
843 for (peer = sm->tdls; peer; peer = peer->next) {
844 if (os_memcmp(peer->addr, addr, ETH_ALEN) == 0)
848 if (!peer || !peer->tpk_success) {
863 wpa_tdls_peer_free(sm, peer);
865 wpa_tdls_disable_peer_link(sm, peer);
872 struct wpa_tdls_peer *peer;
877 for (peer = sm->tdls; peer; peer = peer->next) {
878 if (os_memcmp(peer->addr, addr, ETH_ALEN) == 0)
882 if (peer == NULL)
883 return "peer does not exist";
885 if (!peer->tpk_success)
886 return "peer not connected";
895 struct wpa_tdls_peer *peer = NULL;
904 for (peer = sm->tdls; peer; peer = peer->next) {
905 if (os_memcmp(peer->addr, src_addr, ETH_ALEN) == 0)
909 if (peer == NULL) {
937 if (!wpa_tdls_get_privacy(sm) || !peer->tpk_set || !peer->tpk_success)
949 peer->dtoken, peer,
961 wpa_tdls_disable_peer_link(sm, peer);
988 struct wpa_tdls_peer *peer;
992 for (peer = sm->tdls; peer; peer = peer->next) {
993 if (os_memcmp(peer->addr, addr, ETH_ALEN) == 0) {
996 return peer; /* re-use existing entry */
1000 wpa_printf(MSG_INFO, "TDLS: Creating peer entry for " MACSTR,
1003 peer = os_zalloc(sizeof(*peer));
1004 if (peer == NULL)
1007 os_memcpy(peer->addr, addr, ETH_ALEN);
1008 peer->next = sm->tdls;
1009 sm->tdls = peer;
1011 return peer;
1016 struct wpa_tdls_peer *peer)
1029 peer->rsnie_i_len = 0;
1040 hdr = (struct rsn_ie_hdr *) peer->rsnie_i;
1090 hdr->len = (pos - peer->rsnie_i) - 2;
1091 peer->rsnie_i_len = pos - peer->rsnie_i;
1093 peer->rsnie_i, peer->rsnie_i_len);
1098 buf_len += peer->rsnie_i_len + sizeof(struct wpa_tdls_ftie) +
1109 wpa_tdls_peer_free(sm, peer);
1118 pos = wpa_add_ie(pos, peer->rsnie_i, peer->rsnie_i_len);
1124 if (os_get_random(peer->inonce, WPA_NONCE_LEN)) {
1128 wpa_tdls_peer_free(sm, peer);
1132 peer->inonce, WPA_NONCE_LEN);
1133 os_memcpy(ftie->Snonce, peer->inonce, WPA_NONCE_LEN);
1152 peer->lifetime = TPK_LIFETIME;
1157 peer->lifetime = 301;
1162 peer->lifetime = 0xffffffff;
1166 sizeof(timeoutie), peer->lifetime);
1167 wpa_printf(MSG_DEBUG, "TDLS: TPK lifetime %u seconds", peer->lifetime);
1176 wpa_tdls_linkid(sm, peer, l);
1183 "Handshake Message 1 (peer " MACSTR ")",
1184 MAC2STR(peer->addr));
1186 status = wpa_tdls_tpk_send(sm, peer->addr, WLAN_TDLS_SETUP_REQUEST,
1197 const struct wpa_tdls_peer *peer)
1210 buf_len += peer->rsnie_i_len + sizeof(struct wpa_tdls_ftie) +
1227 pos = wpa_add_ie(pos, peer->rsnie_p, peer->rsnie_p_len);
1232 os_memcpy(ftie->Anonce, peer->rnonce, WPA_NONCE_LEN);
1233 os_memcpy(ftie->Snonce, peer->inonce, WPA_NONCE_LEN);
1252 lifetime = peer->lifetime;
1266 wpa_tdls_ftie_mic(peer->tpk.kck, 2, (u8 *) lnkid, peer->rsnie_p,
1287 const struct wpa_tdls_peer *peer)
1301 buf_len += peer->rsnie_i_len + sizeof(struct wpa_tdls_ftie) +
1318 pos = wpa_add_ie(pos, peer->rsnie_p, peer->rsnie_p_len);
1323 os_memcpy(ftie->Anonce, peer->rnonce, WPA_NONCE_LEN);
1324 os_memcpy(ftie->Snonce, peer->inonce, WPA_NONCE_LEN);
1341 lifetime = peer->lifetime;
1355 wpa_tdls_ftie_mic(peer->tpk.kck, 3, (u8 *) lnkid, peer->rsnie_p,
1366 if (peer->vht_capabilities)
1368 if (peer->ht_capabilities)
1370 if (peer->wmm_capable)
1382 struct wpa_tdls_peer *peer,
1386 "(peer " MACSTR ")", MAC2STR(peer->addr));
1388 return wpa_tdls_tpk_send(sm, peer->addr, WLAN_TDLS_DISCOVERY_RESPONSE,
1399 struct wpa_tdls_peer *peer;
1441 peer = wpa_tdls_add_peer(sm, addr, NULL);
1442 if (peer == NULL)
1445 return wpa_tdls_send_discovery_response(sm, peer, dialog_token);
1454 wpa_printf(MSG_DEBUG, "TDLS: Sending Discovery Request to peer "
1462 struct wpa_tdls_peer *peer)
1468 peer->supp_rates_len = merge_byte_arrays(
1469 peer->supp_rates, sizeof(peer->supp_rates),
1478 struct wpa_tdls_peer *peer)
1488 if (!peer->ht_capabilities) {
1489 peer->ht_capabilities =
1491 if (peer->ht_capabilities == NULL)
1495 os_memcpy(peer->ht_capabilities, kde->ht_capabilities,
1498 (u8 *) peer->ht_capabilities,
1506 struct wpa_tdls_peer *peer)
1516 if (!peer->vht_capabilities) {
1517 peer->vht_capabilities =
1519 if (peer->vht_capabilities == NULL)
1523 os_memcpy(peer->vht_capabilities, kde->vht_capabilities,
1526 (u8 *) peer->vht_capabilities,
1534 struct wpa_tdls_peer *peer)
1542 if (!peer->ext_capab || peer->ext_capab_len < kde->ext_capab_len - 2) {
1544 os_free(peer->ext_capab);
1545 peer->ext_capab = os_zalloc(kde->ext_capab_len - 2);
1546 if (peer->ext_capab == NULL)
1550 peer->ext_capab_len = kde->ext_capab_len - 2;
1551 os_memcpy(peer->ext_capab, kde->ext_capab + 2, peer->ext_capab_len);
1558 struct wpa_tdls_peer *peer)
1573 peer->qos_info = wmm->qos_info;
1575 peer->wmm_capable = 1;
1577 wpa_printf(MSG_DEBUG, "TDLS: Peer WMM QOS Info 0x%x", peer->qos_info);
1583 struct wpa_tdls_peer *peer)
1590 if (!peer->supp_channels ||
1591 peer->supp_channels_len < kde->supp_channels_len) {
1592 os_free(peer->supp_channels);
1593 peer->supp_channels = os_zalloc(kde->supp_channels_len);
1594 if (peer->supp_channels == NULL)
1598 peer->supp_channels_len = kde->supp_channels_len;
1600 os_memcpy(peer->supp_channels, kde->supp_channels,
1601 peer->supp_channels_len);
1603 (u8 *) peer->supp_channels, peer->supp_channels_len);
1609 struct wpa_tdls_peer *peer)
1616 if (!peer->supp_oper_classes ||
1617 peer->supp_oper_classes_len < kde->supp_oper_classes_len) {
1618 os_free(peer->supp_oper_classes);
1619 peer->supp_oper_classes = os_zalloc(kde->supp_oper_classes_len);
1620 if (peer->supp_oper_classes == NULL)
1624 peer->supp_oper_classes_len = kde->supp_oper_classes_len;
1625 os_memcpy(peer->supp_oper_classes, kde->supp_oper_classes,
1626 peer->supp_oper_classes_len);
1628 (u8 *) peer->supp_oper_classes,
1629 peer->supp_oper_classes_len);
1634 static int wpa_tdls_addset_peer(struct wpa_sm *sm, struct wpa_tdls_peer *peer,
1637 return wpa_sm_tdls_peer_addset(sm, peer->addr, add, peer->aid,
1638 peer->capability,
1639 peer->supp_rates, peer->supp_rates_len,
1640 peer->ht_capabilities,
1641 peer->vht_capabilities,
1642 peer->qos_info, peer->ext_capab,
1643 peer->ext_capab_len,
1644 peer->supp_channels,
1645 peer->supp_channels_len,
1646 peer->supp_oper_classes,
1647 peer->supp_oper_classes_len);
1654 struct wpa_tdls_peer *peer;
1686 peer = wpa_tdls_add_peer(sm, src_addr, &existing_peer);
1687 if (peer == NULL)
1694 if (peer->tpk_success) {
1698 wpa_sm_tdls_oper(sm, TDLS_DISABLE_LINK, peer->addr);
1699 wpa_tdls_peer_clear(sm, peer);
1700 } else if (peer->initiator) {
1710 "from peer with higher address "
1715 "from peer with lower address "
1720 peer->addr);
1721 wpa_tdls_peer_clear(sm, peer);
1727 peer->capability = WPA_GET_LE16(cpos);
1753 if (copy_supp_rates(&kde, peer) < 0)
1756 if (copy_peer_ht_capab(&kde, peer) < 0)
1759 if (copy_peer_vht_capab(&kde, peer) < 0)
1762 if (copy_peer_ext_capab(&kde, peer) < 0)
1765 if (copy_peer_supp_channels(&kde, peer) < 0)
1768 if (copy_peer_supp_oper_classes(&kde, peer) < 0)
1771 peer->qos_info = kde.qosinfo;
1774 if (copy_peer_wmm_capab(&kde, peer) < 0)
1777 peer->aid = kde.aid;
1781 peer = wpa_tdls_add_peer(sm, src_addr, NULL);
1782 if (peer == NULL)
1786 peer->initiator = 1;
1787 wpa_tdls_send_tpk_m1(sm, peer);
1871 if (os_memcmp(sm->own_addr, peer->addr, ETH_ALEN) < 0) {
1875 * the peer.
1882 peer->initiator = 0; /* Need to check */
1883 peer->dtoken = dtoken;
1886 peer->rsnie_i_len = 0;
1887 peer->rsnie_p_len = 0;
1888 peer->cipher = WPA_CIPHER_NONE;
1893 os_memcpy(peer->rsnie_i, kde.rsn_ie, kde.rsn_ie_len);
1894 peer->rsnie_i_len = kde.rsn_ie_len;
1895 peer->cipher = cipher;
1897 if (os_memcmp(peer->inonce, ftie->Snonce, WPA_NONCE_LEN) != 0) {
1907 os_memcpy(peer->inonce, ftie->Snonce, WPA_NONCE_LEN);
1908 if (os_get_random(peer->rnonce, WPA_NONCE_LEN)) {
1920 /* use min(peer's version, out version) */
1924 hdr = (struct rsn_ie_hdr *) peer->rsnie_p;
1949 hdr->len = (pos - peer->rsnie_p) - 2;
1950 peer->rsnie_p_len = pos - peer->rsnie_p;
1954 os_memcpy(peer->rsnie_p, peer->rsnie_i, peer->rsnie_i_len);
1955 peer->rsnie_p_len = peer->rsnie_i_len;
1958 peer->rsnie_p, peer->rsnie_p_len);
1960 peer->lifetime = lifetime;
1962 wpa_tdls_generate_tpk(peer, sm->own_addr, sm->bssid);
1965 /* add supported rates, capabilities, and qos_info to the TDLS peer */
1966 if (wpa_tdls_addset_peer(sm, peer, 1) < 0)
1969 peer->tpk_in_progress = 1;
1972 if (wpa_tdls_send_tpk_m2(sm, src_addr, dtoken, lnkid, peer) < 0) {
1973 wpa_sm_tdls_oper(sm, TDLS_DISABLE_LINK, peer->addr);
1982 if (peer)
1983 wpa_tdls_peer_free(sm, peer);
1988 static int wpa_tdls_enable_link(struct wpa_sm *sm, struct wpa_tdls_peer *peer)
1990 peer->tpk_success = 1;
1991 peer->tpk_in_progress = 0;
1992 eloop_cancel_timeout(wpa_tdls_tpk_timeout, sm, peer);
1994 u32 lifetime = peer->lifetime;
1999 if (lifetime > 3 && peer->initiator)
2002 sm, peer);
2007 eloop_cancel_timeout(wpa_tdls_tpk_timeout, sm, peer);
2012 if (peer->reconfig_key && wpa_tdls_set_key(sm, peer) < 0) {
2017 peer->reconfig_key = 0;
2019 return wpa_sm_tdls_oper(sm, TDLS_ENABLE_LINK, peer->addr);
2026 struct wpa_tdls_peer *peer;
2042 for (peer = sm->tdls; peer; peer = peer->next) {
2043 if (os_memcmp(peer->addr, src_addr, ETH_ALEN) == 0)
2046 if (peer == NULL) {
2047 wpa_printf(MSG_INFO, "TDLS: No matching peer found for "
2051 if (!peer->initiator) {
2054 * same time and we accept the TPK M1 from the peer in
2061 wpa_tdls_tpk_retry_timeout_cancel(sm, peer, WLAN_TDLS_SETUP_REQUEST);
2064 wpa_tdls_disable_peer_link(sm, peer);
2076 wpa_tdls_disable_peer_link(sm, peer);
2088 wpa_tdls_disable_peer_link(sm, peer);
2093 peer->capability = WPA_GET_LE16(pos);
2125 if (copy_supp_rates(&kde, peer) < 0)
2128 if (copy_peer_ht_capab(&kde, peer) < 0)
2131 if (copy_peer_vht_capab(&kde, peer) < 0)
2134 if (copy_peer_ext_capab(&kde, peer) < 0)
2137 if (copy_peer_supp_channels(&kde, peer) < 0)
2140 if (copy_peer_supp_oper_classes(&kde, peer) < 0)
2143 peer->qos_info = kde.qosinfo;
2146 if (copy_peer_wmm_capab(&kde, peer) < 0)
2149 peer->aid = kde.aid;
2152 peer->rsnie_p_len = 0;
2153 peer->cipher = WPA_CIPHER_NONE;
2179 if (kde.rsn_ie_len != peer->rsnie_i_len ||
2180 os_memcmp(peer->rsnie_i, kde.rsn_ie, peer->rsnie_i_len) != 0) {
2184 peer->rsnie_i, peer->rsnie_i_len);
2211 if (!os_memcmp(peer->inonce, ftie->Snonce, WPA_NONCE_LEN) == 0) {
2219 os_memcpy(peer->rnonce, ftie->Anonce, WPA_NONCE_LEN);
2220 os_memcpy(peer->rsnie_p, kde.rsn_ie, kde.rsn_ie_len);
2221 peer->rsnie_p_len = kde.rsn_ie_len;
2222 peer->cipher = cipher;
2234 if (lifetime != peer->lifetime) {
2236 "TPK M2 (expected %u)", lifetime, peer->lifetime);
2241 wpa_tdls_generate_tpk(peer, sm->own_addr, sm->bssid);
2244 if (wpa_supplicant_verify_tdls_mic(2, peer, (u8 *) lnkid,
2247 wpa_tdls_del_key(sm, peer);
2248 wpa_tdls_disable_peer_link(sm, peer);
2252 if (wpa_tdls_set_key(sm, peer) < 0) {
2259 peer->reconfig_key = 1;
2263 peer->dtoken = dtoken;
2265 /* add supported rates, capabilities, and qos_info to the TDLS peer */
2266 if (wpa_tdls_addset_peer(sm, peer, 0) < 0)
2271 if (wpa_tdls_send_tpk_m3(sm, src_addr, dtoken, lnkid, peer) < 0)
2274 if (!peer->tpk_success) {
2280 ret = wpa_tdls_enable_link(sm, peer);
2284 sm, peer,
2293 wpa_tdls_disable_peer_link(sm, peer);
2301 struct wpa_tdls_peer *peer;
2314 for (peer = sm->tdls; peer; peer = peer->next) {
2315 if (os_memcmp(peer->addr, src_addr, ETH_ALEN) == 0)
2318 if (peer == NULL) {
2319 wpa_printf(MSG_INFO, "TDLS: No matching peer found for "
2323 wpa_tdls_tpk_retry_timeout_cancel(sm, peer, WLAN_TDLS_SETUP_RESPONSE);
2382 if (kde.rsn_ie_len != peer->rsnie_p_len ||
2383 os_memcmp(kde.rsn_ie, peer->rsnie_p, peer->rsnie_p_len) != 0) {
2389 if (!os_memcmp(peer->rnonce, ftie->Anonce, WPA_NONCE_LEN) == 0) {
2395 if (!os_memcmp(peer->inonce, ftie->Snonce, WPA_NONCE_LEN) == 0) {
2411 if (lifetime != peer->lifetime) {
2413 "TPK M3 (expected %u)", lifetime, peer->lifetime);
2417 if (wpa_supplicant_verify_tdls_mic(3, peer, (u8 *) lnkid,
2419 wpa_tdls_del_key(sm, peer);
2423 if (wpa_tdls_set_key(sm, peer) < 0) {
2430 peer->reconfig_key = 1;
2434 /* add supported rates, capabilities, and qos_info to the TDLS peer */
2435 if (wpa_tdls_addset_peer(sm, peer, 0) < 0)
2438 if (!peer->tpk_success) {
2444 ret = wpa_tdls_enable_link(sm, peer);
2452 wpa_tdls_do_teardown(sm, peer, WLAN_REASON_TDLS_TEARDOWN_UNSPECIFIED);
2474 * @peer: MAC address of the peer STA
2478 * handshake with the peer.
2482 struct wpa_tdls_peer *peer;
2503 peer = wpa_tdls_add_peer(sm, addr, NULL);
2504 if (peer == NULL)
2507 if (peer->tpk_in_progress) {
2508 wpa_printf(MSG_DEBUG, "TDLS: Setup is already in progress with the peer");
2512 peer->initiator = 1;
2514 /* add the peer to the driver as a "setup in progress" peer */
2515 if (wpa_sm_tdls_peer_addset(sm, peer->addr, 1, 0, 0, NULL, 0, NULL,
2517 wpa_tdls_disable_peer_link(sm, peer);
2521 peer->tpk_in_progress = 1;
2523 if (wpa_tdls_send_tpk_m1(sm, peer) < 0) {
2524 wpa_tdls_disable_peer_link(sm, peer);
2534 struct wpa_tdls_peer *peer;
2539 for (peer = sm->tdls; peer; peer = peer->next) {
2540 if (os_memcmp(peer->addr, addr, ETH_ALEN) == 0)
2544 if (peer == NULL || !peer->tpk_success)
2552 wpa_tdls_do_teardown(sm, peer,
2669 struct wpa_tdls_peer *peer, *tmp;
2671 peer = sm->tdls;
2675 while (peer) {
2676 tmp = peer->next;
2677 wpa_printf(MSG_DEBUG, "TDLS: Tear down peer " MACSTR,
2678 MAC2STR(peer->addr));
2680 wpa_tdls_do_teardown(sm, peer,
2683 wpa_sm_tdls_oper(sm, TDLS_TEARDOWN, peer->addr);
2685 peer = tmp;
2692 struct wpa_tdls_peer *peer, *tmp;
2694 peer = sm->tdls;
2696 while (peer) {
2698 tmp = peer->next;
2699 res = wpa_sm_tdls_oper(sm, TDLS_DISABLE_LINK, peer->addr);
2700 wpa_printf(MSG_DEBUG, "TDLS: Remove peer " MACSTR " (res=%d)",
2701 MAC2STR(peer->addr), res);
2702 wpa_tdls_peer_free(sm, peer);
2703 peer = tmp;