Lines Matching refs:sm

86 static void wpa_tdls_peer_free(struct wpa_sm *sm, struct wpa_tdls_peer *peer);
87 static void wpa_tdls_disable_peer_link(struct wpa_sm *sm,
89 static int wpa_tdls_send_teardown(struct wpa_sm *sm, const u8 *addr,
169 static const u8 * wpa_tdls_get_link_bssid(struct wpa_sm *sm, int link_id) in wpa_tdls_get_link_bssid() argument
172 return sm->mlo.links[link_id].bssid; in wpa_tdls_get_link_bssid()
173 return sm->bssid; in wpa_tdls_get_link_bssid()
177 static int wpa_tdls_get_privacy(struct wpa_sm *sm) in wpa_tdls_get_privacy() argument
184 return sm->pairwise_cipher != WPA_CIPHER_NONE; in wpa_tdls_get_privacy()
195 static int wpa_tdls_del_key(struct wpa_sm *sm, struct wpa_tdls_peer *peer) in wpa_tdls_del_key() argument
197 if (wpa_sm_set_key(sm, -1, WPA_ALG_NONE, peer->addr, in wpa_tdls_del_key()
208 static int wpa_tdls_set_key(struct wpa_sm *sm, struct wpa_tdls_peer *peer) in wpa_tdls_set_key() argument
241 sm->pairwise_cipher); in wpa_tdls_set_key()
247 if (wpa_sm_set_key(sm, -1, alg, peer->addr, 0, 1, rsc, sizeof(rsc), in wpa_tdls_set_key()
259 static int wpa_tdls_send_tpk_msg(struct wpa_sm *sm, const u8 *dst, in wpa_tdls_send_tpk_msg() argument
265 return wpa_sm_send_tdls_mgmt(sm, dst, action_code, dialog_token, in wpa_tdls_send_tpk_msg()
271 static int wpa_tdls_tpk_send(struct wpa_sm *sm, const u8 *dest, u8 action_code, in wpa_tdls_tpk_send() argument
284 if (wpa_tdls_send_tpk_msg(sm, dest, action_code, dialog_token, in wpa_tdls_tpk_send()
298 for (peer = sm->tdls; peer; peer = peer->next) { in wpa_tdls_tpk_send()
309 eloop_cancel_timeout(wpa_tdls_tpk_retry_timeout, sm, peer); in wpa_tdls_tpk_send()
335 wpa_tdls_tpk_retry_timeout, sm, peer); in wpa_tdls_tpk_send()
340 static int wpa_tdls_do_teardown(struct wpa_sm *sm, struct wpa_tdls_peer *peer, in wpa_tdls_do_teardown() argument
345 ret = wpa_tdls_send_teardown(sm, peer->addr, reason_code); in wpa_tdls_do_teardown()
347 wpa_tdls_disable_peer_link(sm, peer); in wpa_tdls_do_teardown()
356 struct wpa_sm *sm = eloop_ctx; in wpa_tdls_tpk_retry_timeout() local
370 eloop_cancel_timeout(wpa_tdls_tpk_retry_timeout, sm, in wpa_tdls_tpk_retry_timeout()
376 if (wpa_tdls_send_tpk_msg(sm, peer->sm_tmr.dest, in wpa_tdls_tpk_retry_timeout()
388 eloop_cancel_timeout(wpa_tdls_tpk_retry_timeout, sm, peer); in wpa_tdls_tpk_retry_timeout()
391 wpa_tdls_tpk_retry_timeout, sm, peer); in wpa_tdls_tpk_retry_timeout()
393 eloop_cancel_timeout(wpa_tdls_tpk_retry_timeout, sm, peer); in wpa_tdls_tpk_retry_timeout()
396 wpa_tdls_do_teardown(sm, peer, in wpa_tdls_tpk_retry_timeout()
402 static void wpa_tdls_tpk_retry_timeout_cancel(struct wpa_sm *sm, in wpa_tdls_tpk_retry_timeout_cancel() argument
411 eloop_cancel_timeout(wpa_tdls_tpk_retry_timeout, sm, peer); in wpa_tdls_tpk_retry_timeout_cancel()
660 struct wpa_sm *sm = eloop_ctx; in wpa_tdls_tpk_timeout() local
678 wpa_tdls_do_teardown(sm, peer, in wpa_tdls_tpk_timeout()
680 wpa_tdls_start(sm, addr); in wpa_tdls_tpk_timeout()
684 wpa_tdls_do_teardown(sm, peer, in wpa_tdls_tpk_timeout()
690 static void wpa_tdls_peer_remove_from_list(struct wpa_sm *sm, in wpa_tdls_peer_remove_from_list() argument
695 cur = sm->tdls; in wpa_tdls_peer_remove_from_list()
712 sm->tdls = peer->next; in wpa_tdls_peer_remove_from_list()
716 static void wpa_tdls_peer_clear(struct wpa_sm *sm, struct wpa_tdls_peer *peer) in wpa_tdls_peer_clear() argument
720 eloop_cancel_timeout(wpa_tdls_tpk_timeout, sm, peer); in wpa_tdls_peer_clear()
721 eloop_cancel_timeout(wpa_tdls_tpk_retry_timeout, sm, peer); in wpa_tdls_peer_clear()
756 static void wpa_tdls_peer_free(struct wpa_sm *sm, struct wpa_tdls_peer *peer) in wpa_tdls_peer_free() argument
758 wpa_tdls_peer_clear(sm, peer); in wpa_tdls_peer_free()
759 wpa_tdls_peer_remove_from_list(sm, peer); in wpa_tdls_peer_free()
764 static void wpa_tdls_linkid(struct wpa_sm *sm, struct wpa_tdls_peer *peer, in wpa_tdls_linkid() argument
769 os_memcpy(lnkid->bssid, wpa_tdls_get_link_bssid(sm, peer->mld_link_id), in wpa_tdls_linkid()
772 os_memcpy(lnkid->init_sta, sm->own_addr, ETH_ALEN); in wpa_tdls_linkid()
776 os_memcpy(lnkid->resp_sta, sm->own_addr, ETH_ALEN); in wpa_tdls_linkid()
781 static int wpa_tdls_send_teardown(struct wpa_sm *sm, const u8 *addr, in wpa_tdls_send_teardown() argument
791 if (sm->tdls_disabled || !sm->tdls_supported) in wpa_tdls_send_teardown()
795 for (peer = sm->tdls; peer; peer = peer->next) { in wpa_tdls_send_teardown()
810 wpa_sm_tdls_disable_channel_switch(sm, peer->addr); in wpa_tdls_send_teardown()
819 if (wpa_tdls_get_privacy(sm) && peer->tpk_set && peer->tpk_success) { in wpa_tdls_send_teardown()
833 if (!wpa_tdls_get_privacy(sm) || !peer->tpk_set || !peer->tpk_success) in wpa_tdls_send_teardown()
857 wpa_tdls_linkid(sm, peer, &lnkid); in wpa_tdls_send_teardown()
868 wpa_tdls_tpk_send(sm, addr, WLAN_TDLS_TEARDOWN, 0, in wpa_tdls_send_teardown()
877 int wpa_tdls_teardown_link(struct wpa_sm *sm, const u8 *addr, u16 reason_code) in wpa_tdls_teardown_link() argument
881 if (sm->tdls_disabled || !sm->tdls_supported) in wpa_tdls_teardown_link()
884 for (peer = sm->tdls; peer; peer = peer->next) { in wpa_tdls_teardown_link()
901 return wpa_tdls_do_teardown(sm, peer, reason_code); in wpa_tdls_teardown_link()
905 static void wpa_tdls_disable_peer_link(struct wpa_sm *sm, in wpa_tdls_disable_peer_link() argument
908 wpa_sm_tdls_oper(sm, TDLS_DISABLE_LINK, peer->addr); in wpa_tdls_disable_peer_link()
909 wpa_tdls_peer_free(sm, peer); in wpa_tdls_disable_peer_link()
913 void wpa_tdls_disable_unreachable_link(struct wpa_sm *sm, const u8 *addr) in wpa_tdls_disable_unreachable_link() argument
917 for (peer = sm->tdls; peer; peer = peer->next) { in wpa_tdls_disable_unreachable_link()
929 if (wpa_tdls_is_external_setup(sm)) { in wpa_tdls_disable_unreachable_link()
935 wpa_sm_tdls_disable_channel_switch(sm, peer->addr); in wpa_tdls_disable_unreachable_link()
936 wpa_sm_tdls_oper(sm, TDLS_DISABLE_LINK, addr); in wpa_tdls_disable_unreachable_link()
937 wpa_tdls_send_teardown(sm, addr, in wpa_tdls_disable_unreachable_link()
939 wpa_tdls_peer_free(sm, peer); in wpa_tdls_disable_unreachable_link()
941 wpa_tdls_disable_peer_link(sm, peer); in wpa_tdls_disable_unreachable_link()
946 const char * wpa_tdls_get_link_status(struct wpa_sm *sm, const u8 *addr) in wpa_tdls_get_link_status() argument
950 if (sm->tdls_disabled || !sm->tdls_supported) in wpa_tdls_get_link_status()
953 for (peer = sm->tdls; peer; peer = peer->next) { in wpa_tdls_get_link_status()
968 static int wpa_tdls_recv_teardown(struct wpa_sm *sm, const u8 *src_addr, in wpa_tdls_recv_teardown() argument
980 for (peer = sm->tdls; peer; peer = peer->next) { in wpa_tdls_recv_teardown()
1018 if (!wpa_tdls_get_privacy(sm) || !peer->tpk_set || !peer->tpk_success) in wpa_tdls_recv_teardown()
1043 wpa_tdls_disable_peer_link(sm, peer); in wpa_tdls_recv_teardown()
1057 static int wpa_tdls_send_error(struct wpa_sm *sm, const u8 *dst, in wpa_tdls_send_error() argument
1064 return wpa_tdls_tpk_send(sm, dst, tdls_action, dialog_token, status, in wpa_tdls_send_error()
1070 wpa_tdls_add_peer(struct wpa_sm *sm, const u8 *addr, int *existing) in wpa_tdls_add_peer() argument
1076 for (peer = sm->tdls; peer; peer = peer->next) { in wpa_tdls_add_peer()
1093 peer->next = sm->tdls; in wpa_tdls_add_peer()
1094 sm->tdls = peer; in wpa_tdls_add_peer()
1100 static int wpa_tdls_send_tpk_m1(struct wpa_sm *sm, in wpa_tdls_send_tpk_m1() argument
1112 if (!wpa_tdls_get_privacy(sm)) { in wpa_tdls_send_tpk_m1()
1182 if (wpa_tdls_get_privacy(sm)) in wpa_tdls_send_tpk_m1()
1186 if (wpa_tdls_get_privacy(sm) && in wpa_tdls_send_tpk_m1()
1194 wpa_tdls_peer_free(sm, peer); in wpa_tdls_send_tpk_m1()
1199 if (!wpa_tdls_get_privacy(sm)) in wpa_tdls_send_tpk_m1()
1210 wpa_msg(sm->ctx->msg_ctx, MSG_WARNING, in wpa_tdls_send_tpk_m1()
1213 wpa_tdls_peer_free(sm, peer); in wpa_tdls_send_tpk_m1()
1263 wpa_tdls_linkid(sm, peer, l); in wpa_tdls_send_tpk_m1()
1273 status = wpa_tdls_tpk_send(sm, peer->addr, WLAN_TDLS_SETUP_REQUEST, in wpa_tdls_send_tpk_m1()
1282 static int wpa_tdls_send_tpk_m2(struct wpa_sm *sm, in wpa_tdls_send_tpk_m2() argument
1295 if (wpa_tdls_get_privacy(sm)) { in wpa_tdls_send_tpk_m2()
1311 if (!wpa_tdls_get_privacy(sm)) in wpa_tdls_send_tpk_m2()
1365 status = wpa_tdls_tpk_send(sm, src_addr, WLAN_TDLS_SETUP_RESPONSE, in wpa_tdls_send_tpk_m2()
1374 static int wpa_tdls_send_tpk_m3(struct wpa_sm *sm, in wpa_tdls_send_tpk_m3() argument
1388 if (wpa_tdls_get_privacy(sm)) { in wpa_tdls_send_tpk_m3()
1404 if (!wpa_tdls_get_privacy(sm)) in wpa_tdls_send_tpk_m3()
1466 status = wpa_tdls_tpk_send(sm, src_addr, WLAN_TDLS_SETUP_CONFIRM, in wpa_tdls_send_tpk_m3()
1475 static int wpa_tdls_send_discovery_response(struct wpa_sm *sm, in wpa_tdls_send_discovery_response() argument
1489 if (!wpa_tdls_get_privacy(sm)) in wpa_tdls_send_discovery_response()
1531 if (wpa_tdls_get_privacy(sm)) { in wpa_tdls_send_discovery_response()
1538 wpa_tdls_peer_free(sm, peer); in wpa_tdls_send_discovery_response()
1543 if (!wpa_tdls_get_privacy(sm)) in wpa_tdls_send_discovery_response()
1553 status = wpa_tdls_tpk_send(sm, peer->addr, WLAN_TDLS_DISCOVERY_RESPONSE, in wpa_tdls_send_discovery_response()
1562 static bool wpa_tdls_is_lnkid_bss_valid(struct wpa_sm *sm, in wpa_tdls_is_lnkid_bss_valid() argument
1568 if (!sm->mlo.valid_links) { in wpa_tdls_is_lnkid_bss_valid()
1569 if (!ether_addr_equal(sm->bssid, lnkid->bssid)) in wpa_tdls_is_lnkid_bss_valid()
1574 for_each_link(sm->mlo.valid_links, i) { in wpa_tdls_is_lnkid_bss_valid()
1576 sm->mlo.links[i].bssid)) { in wpa_tdls_is_lnkid_bss_valid()
1594 wpa_tdls_process_discovery_request(struct wpa_sm *sm, const u8 *addr, in wpa_tdls_process_discovery_request() argument
1636 if (!wpa_tdls_is_lnkid_bss_valid(sm, lnkid, &link_id)) { in wpa_tdls_process_discovery_request()
1643 peer = wpa_tdls_add_peer(sm, addr, NULL); in wpa_tdls_process_discovery_request()
1647 return wpa_tdls_send_discovery_response(sm, peer, dialog_token, in wpa_tdls_process_discovery_request()
1652 int wpa_tdls_send_discovery_request(struct wpa_sm *sm, const u8 *addr) in wpa_tdls_send_discovery_request() argument
1654 if (sm->tdls_disabled || !sm->tdls_supported) in wpa_tdls_send_discovery_request()
1659 return wpa_tdls_tpk_send(sm, addr, WLAN_TDLS_DISCOVERY_REQUEST, in wpa_tdls_send_discovery_request()
1906 static int wpa_tdls_addset_peer(struct wpa_sm *sm, struct wpa_tdls_peer *peer, in wpa_tdls_addset_peer() argument
1909 return wpa_sm_tdls_peer_addset(sm, peer->addr, add, peer->aid, in wpa_tdls_addset_peer()
1942 static int wpa_tdls_process_tpk_m1(struct wpa_sm *sm, const u8 *src_addr, in wpa_tdls_process_tpk_m1() argument
1963 int tdls_prohibited = sm->tdls_prohibited; in wpa_tdls_process_tpk_m1()
1978 peer = wpa_tdls_add_peer(sm, src_addr, &existing_peer); in wpa_tdls_process_tpk_m1()
1990 wpa_sm_tdls_oper(sm, TDLS_DISABLE_LINK, peer->addr); in wpa_tdls_process_tpk_m1()
1991 wpa_tdls_peer_clear(sm, peer); in wpa_tdls_process_tpk_m1()
2000 if (os_memcmp(sm->own_addr, src_addr, ETH_ALEN) < 0) { in wpa_tdls_process_tpk_m1()
2011 wpa_sm_tdls_oper(sm, TDLS_DISABLE_LINK, in wpa_tdls_process_tpk_m1()
2013 wpa_tdls_peer_clear(sm, peer); in wpa_tdls_process_tpk_m1()
2042 if (!wpa_tdls_is_lnkid_bss_valid(sm, lnkid, &link_id)) { in wpa_tdls_process_tpk_m1()
2086 peer = wpa_tdls_add_peer(sm, src_addr, NULL); in wpa_tdls_process_tpk_m1()
2092 wpa_sm_tdls_peer_addset(sm, peer->addr, 1, 0, 0, NULL, 0, NULL, in wpa_tdls_process_tpk_m1()
2095 if (wpa_tdls_send_tpk_m1(sm, peer) == -2) { in wpa_tdls_process_tpk_m1()
2115 if (!wpa_tdls_get_privacy(sm)) { in wpa_tdls_process_tpk_m1()
2182 if (os_memcmp(sm->own_addr, peer->addr, ETH_ALEN) < 0) { in wpa_tdls_process_tpk_m1()
2196 if (!wpa_tdls_get_privacy(sm)) { in wpa_tdls_process_tpk_m1()
2221 wpa_msg(sm->ctx->ctx, MSG_WARNING, in wpa_tdls_process_tpk_m1()
2278 wpa_tdls_generate_tpk(peer, sm->own_addr, in wpa_tdls_process_tpk_m1()
2279 wpa_tdls_get_link_bssid(sm, peer->mld_link_id)); in wpa_tdls_process_tpk_m1()
2288 if (wpa_tdls_addset_peer(sm, peer, 1) < 0) in wpa_tdls_process_tpk_m1()
2297 if (wpa_tdls_send_tpk_m2(sm, src_addr, dtoken, lnkid, peer) < 0) { in wpa_tdls_process_tpk_m1()
2298 wpa_sm_tdls_oper(sm, TDLS_DISABLE_LINK, peer->addr); in wpa_tdls_process_tpk_m1()
2305 wpa_tdls_send_tpk_m2(sm, src_addr, dtoken, lnkid, peer); in wpa_tdls_process_tpk_m1()
2312 wpa_tdls_send_error(sm, src_addr, WLAN_TDLS_SETUP_RESPONSE, dtoken, 0, in wpa_tdls_process_tpk_m1()
2315 wpa_tdls_peer_free(sm, peer); in wpa_tdls_process_tpk_m1()
2320 static int wpa_tdls_enable_link(struct wpa_sm *sm, struct wpa_tdls_peer *peer) in wpa_tdls_enable_link() argument
2324 eloop_cancel_timeout(wpa_tdls_tpk_timeout, sm, peer); in wpa_tdls_enable_link()
2325 if (wpa_tdls_get_privacy(sm)) { in wpa_tdls_enable_link()
2334 sm, peer); in wpa_tdls_enable_link()
2339 eloop_cancel_timeout(wpa_tdls_tpk_timeout, sm, peer); in wpa_tdls_enable_link()
2344 if (peer->reconfig_key && wpa_tdls_set_key(sm, peer) < 0) { in wpa_tdls_enable_link()
2351 return wpa_sm_tdls_oper(sm, TDLS_ENABLE_LINK, peer->addr); in wpa_tdls_enable_link()
2355 static int wpa_tdls_process_tpk_m2(struct wpa_sm *sm, const u8 *src_addr, in wpa_tdls_process_tpk_m2() argument
2374 for (peer = sm->tdls; peer; peer = peer->next) { in wpa_tdls_process_tpk_m2()
2401 wpa_tdls_tpk_retry_timeout_cancel(sm, peer, WLAN_TDLS_SETUP_REQUEST); in wpa_tdls_process_tpk_m2()
2404 wpa_tdls_disable_peer_link(sm, peer); in wpa_tdls_process_tpk_m2()
2416 wpa_tdls_disable_peer_link(sm, peer); in wpa_tdls_process_tpk_m2()
2428 wpa_tdls_disable_peer_link(sm, peer); in wpa_tdls_process_tpk_m2()
2464 if (!ether_addr_equal(sm->bssid, in wpa_tdls_process_tpk_m2()
2465 wpa_tdls_get_link_bssid(sm, peer->mld_link_id))) { in wpa_tdls_process_tpk_m2()
2502 if (!wpa_tdls_get_privacy(sm)) { in wpa_tdls_process_tpk_m2()
2595 wpa_tdls_generate_tpk(peer, sm->own_addr, in wpa_tdls_process_tpk_m2()
2596 wpa_tdls_get_link_bssid(sm, peer->mld_link_id)); in wpa_tdls_process_tpk_m2()
2603 wpa_tdls_del_key(sm, peer); in wpa_tdls_process_tpk_m2()
2604 wpa_tdls_disable_peer_link(sm, peer); in wpa_tdls_process_tpk_m2()
2608 if (wpa_tdls_set_key(sm, peer) < 0) { in wpa_tdls_process_tpk_m2()
2622 if (wpa_tdls_addset_peer(sm, peer, 0) < 0) in wpa_tdls_process_tpk_m2()
2627 if (wpa_tdls_send_tpk_m3(sm, src_addr, dtoken, lnkid, peer) < 0) in wpa_tdls_process_tpk_m2()
2636 ret = wpa_tdls_enable_link(sm, peer); in wpa_tdls_process_tpk_m2()
2640 sm, peer, in wpa_tdls_process_tpk_m2()
2647 wpa_tdls_send_error(sm, src_addr, WLAN_TDLS_SETUP_CONFIRM, dtoken, 1, in wpa_tdls_process_tpk_m2()
2650 wpa_tdls_disable_peer_link(sm, peer); in wpa_tdls_process_tpk_m2()
2655 static int wpa_tdls_process_tpk_m3(struct wpa_sm *sm, const u8 *src_addr, in wpa_tdls_process_tpk_m3() argument
2671 for (peer = sm->tdls; peer; peer = peer->next) { in wpa_tdls_process_tpk_m3()
2680 wpa_tdls_tpk_retry_timeout_cancel(sm, peer, WLAN_TDLS_SETUP_RESPONSE); in wpa_tdls_process_tpk_m3()
2717 if (!ether_addr_equal(wpa_tdls_get_link_bssid(sm, peer->mld_link_id), in wpa_tdls_process_tpk_m3()
2723 if (!wpa_tdls_get_privacy(sm)) in wpa_tdls_process_tpk_m3()
2778 wpa_tdls_del_key(sm, peer); in wpa_tdls_process_tpk_m3()
2782 if (wpa_tdls_set_key(sm, peer) < 0) { in wpa_tdls_process_tpk_m3()
2794 if (wpa_tdls_addset_peer(sm, peer, 0) < 0) in wpa_tdls_process_tpk_m3()
2803 ret = wpa_tdls_enable_link(sm, peer); in wpa_tdls_process_tpk_m3()
2811 wpa_tdls_do_teardown(sm, peer, WLAN_REASON_TDLS_TEARDOWN_UNSPECIFIED); in wpa_tdls_process_tpk_m3()
2839 int wpa_tdls_start(struct wpa_sm *sm, const u8 *addr) in wpa_tdls_start() argument
2842 int tdls_prohibited = sm->tdls_prohibited; in wpa_tdls_start()
2845 if (sm->tdls_disabled || !sm->tdls_supported) in wpa_tdls_start()
2863 peer = wpa_tdls_add_peer(sm, addr, NULL); in wpa_tdls_start()
2872 if (sm->mlo.valid_links && !peer->disc_resp_rcvd) { in wpa_tdls_start()
2881 if (wpa_sm_tdls_peer_addset(sm, peer->addr, 1, 0, 0, NULL, 0, NULL, in wpa_tdls_start()
2884 wpa_tdls_disable_peer_link(sm, peer); in wpa_tdls_start()
2890 res = wpa_tdls_send_tpk_m1(sm, peer); in wpa_tdls_start()
2893 wpa_tdls_disable_peer_link(sm, peer); in wpa_tdls_start()
2901 void wpa_tdls_remove(struct wpa_sm *sm, const u8 *addr) in wpa_tdls_remove() argument
2905 if (sm->tdls_disabled || !sm->tdls_supported) in wpa_tdls_remove()
2908 for (peer = sm->tdls; peer; peer = peer->next) { in wpa_tdls_remove()
2916 if (sm->tdls_external_setup) { in wpa_tdls_remove()
2921 wpa_tdls_do_teardown(sm, peer, in wpa_tdls_remove()
2935 struct wpa_sm *sm = ctx; in wpa_supplicant_rx_tdls() local
2941 if (sm->tdls_disabled || !sm->tdls_supported) { in wpa_supplicant_rx_tdls()
2947 if (ether_addr_equal(src_addr, sm->own_addr)) { in wpa_supplicant_rx_tdls()
2969 wpa_tdls_process_tpk_m1(sm, src_addr, buf, len); in wpa_supplicant_rx_tdls()
2972 wpa_tdls_process_tpk_m2(sm, src_addr, buf, len); in wpa_supplicant_rx_tdls()
2975 wpa_tdls_process_tpk_m3(sm, src_addr, buf, len); in wpa_supplicant_rx_tdls()
2978 wpa_tdls_recv_teardown(sm, src_addr, buf, len); in wpa_supplicant_rx_tdls()
2981 wpa_tdls_process_discovery_request(sm, src_addr, buf, len); in wpa_supplicant_rx_tdls()
3001 int wpa_tdls_init(struct wpa_sm *sm) in wpa_tdls_init() argument
3003 if (sm == NULL) in wpa_tdls_init()
3006 if (sm->l2_tdls) { in wpa_tdls_init()
3007 l2_packet_deinit(sm->l2_tdls); in wpa_tdls_init()
3008 sm->l2_tdls = NULL; in wpa_tdls_init()
3011 sm->l2_tdls = l2_packet_init(sm->bridge_ifname ? sm->bridge_ifname : in wpa_tdls_init()
3012 sm->ifname, in wpa_tdls_init()
3013 sm->own_addr, in wpa_tdls_init()
3015 sm, 0); in wpa_tdls_init()
3016 if (sm->l2_tdls == NULL) { in wpa_tdls_init()
3026 if (wpa_sm_tdls_get_capa(sm, &sm->tdls_supported, in wpa_tdls_init()
3027 &sm->tdls_external_setup, in wpa_tdls_init()
3028 &sm->tdls_chan_switch) < 0) { in wpa_tdls_init()
3029 sm->tdls_supported = 1; in wpa_tdls_init()
3030 sm->tdls_external_setup = 0; in wpa_tdls_init()
3034 "driver", sm->tdls_supported ? "" : " not"); in wpa_tdls_init()
3036 sm->tdls_external_setup ? "external" : "internal"); in wpa_tdls_init()
3038 sm->tdls_chan_switch ? "supports" : "does not support"); in wpa_tdls_init()
3044 void wpa_tdls_teardown_peers(struct wpa_sm *sm) in wpa_tdls_teardown_peers() argument
3048 if (!sm) in wpa_tdls_teardown_peers()
3050 peer = sm->tdls; in wpa_tdls_teardown_peers()
3058 if (sm->tdls_external_setup) in wpa_tdls_teardown_peers()
3059 wpa_tdls_do_teardown(sm, peer, in wpa_tdls_teardown_peers()
3062 wpa_sm_tdls_oper(sm, TDLS_TEARDOWN, peer->addr); in wpa_tdls_teardown_peers()
3069 static void wpa_tdls_remove_peers(struct wpa_sm *sm) in wpa_tdls_remove_peers() argument
3073 peer = sm->tdls; in wpa_tdls_remove_peers()
3078 res = wpa_sm_tdls_oper(sm, TDLS_DISABLE_LINK, peer->addr); in wpa_tdls_remove_peers()
3081 wpa_tdls_peer_free(sm, peer); in wpa_tdls_remove_peers()
3093 void wpa_tdls_deinit(struct wpa_sm *sm) in wpa_tdls_deinit() argument
3095 if (sm == NULL) in wpa_tdls_deinit()
3098 if (sm->l2_tdls) in wpa_tdls_deinit()
3099 l2_packet_deinit(sm->l2_tdls); in wpa_tdls_deinit()
3100 sm->l2_tdls = NULL; in wpa_tdls_deinit()
3102 wpa_tdls_remove_peers(sm); in wpa_tdls_deinit()
3106 void wpa_tdls_assoc(struct wpa_sm *sm) in wpa_tdls_assoc() argument
3109 wpa_tdls_remove_peers(sm); in wpa_tdls_assoc()
3113 void wpa_tdls_disassoc(struct wpa_sm *sm) in wpa_tdls_disassoc() argument
3116 wpa_tdls_remove_peers(sm); in wpa_tdls_disassoc()
3134 void wpa_tdls_ap_ies(struct wpa_sm *sm, const u8 *ies, size_t len) in wpa_tdls_ap_ies() argument
3138 sm->tdls_prohibited = 0; in wpa_tdls_ap_ies()
3139 sm->tdls_chan_switch_prohibited = 0; in wpa_tdls_ap_ies()
3146 sm->tdls_prohibited = wpa_tdls_prohibited(&elems); in wpa_tdls_ap_ies()
3148 sm->tdls_prohibited ? "prohibited" : "allowed"); in wpa_tdls_ap_ies()
3149 sm->tdls_chan_switch_prohibited = in wpa_tdls_ap_ies()
3152 sm->tdls_chan_switch_prohibited ? "prohibited" : "allowed"); in wpa_tdls_ap_ies()
3156 void wpa_tdls_assoc_resp_ies(struct wpa_sm *sm, const u8 *ies, size_t len) in wpa_tdls_assoc_resp_ies() argument
3165 if (!sm->tdls_prohibited && wpa_tdls_prohibited(&elems)) { in wpa_tdls_assoc_resp_ies()
3168 sm->tdls_prohibited = 1; in wpa_tdls_assoc_resp_ies()
3171 if (!sm->tdls_chan_switch_prohibited && in wpa_tdls_assoc_resp_ies()
3175 sm->tdls_chan_switch_prohibited = 1; in wpa_tdls_assoc_resp_ies()
3180 void wpa_tdls_enable(struct wpa_sm *sm, int enabled) in wpa_tdls_enable() argument
3183 sm->tdls_disabled = !enabled; in wpa_tdls_enable()
3187 int wpa_tdls_is_external_setup(struct wpa_sm *sm) in wpa_tdls_is_external_setup() argument
3189 return sm->tdls_external_setup; in wpa_tdls_is_external_setup()
3193 int wpa_tdls_process_discovery_response(struct wpa_sm *sm, const u8 *addr, in wpa_tdls_process_discovery_response() argument
3229 if (!wpa_tdls_is_lnkid_bss_valid(sm, lnkid, &link_id)) { in wpa_tdls_process_discovery_response()
3236 peer = wpa_tdls_add_peer(sm, addr, NULL); in wpa_tdls_process_discovery_response()
3250 return wpa_tdls_start(sm, addr); in wpa_tdls_process_discovery_response()
3257 int wpa_tdls_enable_chan_switch(struct wpa_sm *sm, const u8 *addr, in wpa_tdls_enable_chan_switch() argument
3264 if (sm->tdls_disabled || !sm->tdls_supported) in wpa_tdls_enable_chan_switch()
3267 if (!sm->tdls_chan_switch) { in wpa_tdls_enable_chan_switch()
3273 if (sm->tdls_chan_switch_prohibited) { in wpa_tdls_enable_chan_switch()
3279 for (peer = sm->tdls; peer; peer = peer->next) { in wpa_tdls_enable_chan_switch()
3297 ret = wpa_sm_tdls_enable_channel_switch(sm, peer->addr, in wpa_tdls_enable_chan_switch()
3306 int wpa_tdls_disable_chan_switch(struct wpa_sm *sm, const u8 *addr) in wpa_tdls_disable_chan_switch() argument
3310 if (sm->tdls_disabled || !sm->tdls_supported) in wpa_tdls_disable_chan_switch()
3313 for (peer = sm->tdls; peer; peer = peer->next) { in wpa_tdls_disable_chan_switch()
3325 wpa_sm_tdls_disable_channel_switch(sm, peer->addr); in wpa_tdls_disable_chan_switch()