Lines Matching refs:sm

37 void pmksa_candidate_free(struct wpa_sm *sm)  in pmksa_candidate_free()  argument
41 if (sm == NULL) in pmksa_candidate_free()
44 dl_list_for_each_safe(entry, n, &sm->pmksa_candidates, in pmksa_candidate_free()
65 struct wpa_sm *sm = ctx; in rsn_preauth_receive() local
70 if (sm->preauth_eapol == NULL || in rsn_preauth_receive()
71 is_zero_ether_addr(sm->preauth_bssid) || in rsn_preauth_receive()
72 !ether_addr_equal(sm->preauth_bssid, src_addr)) { in rsn_preauth_receive()
79 eapol_sm_rx_eapol(sm->preauth_eapol, src_addr, buf, len, in rsn_preauth_receive()
88 struct wpa_sm *sm = ctx; in rsn_preauth_eapol_cb() local
106 sm->pmk_len = pmk_len; in rsn_preauth_eapol_cb()
107 pmksa_cache_add(sm->pmksa, pmk, pmk_len, NULL, in rsn_preauth_eapol_cb()
109 sm->preauth_bssid, sm->own_addr, in rsn_preauth_eapol_cb()
110 sm->network_ctx, in rsn_preauth_eapol_cb()
113 wpa_msg(sm->ctx->msg_ctx, MSG_INFO, in rsn_preauth_eapol_cb()
120 wpa_msg(sm->ctx->msg_ctx, MSG_INFO, "RSN: pre-authentication with " in rsn_preauth_eapol_cb()
121 MACSTR " %s", MAC2STR(sm->preauth_bssid), in rsn_preauth_eapol_cb()
125 rsn_preauth_deinit(sm); in rsn_preauth_eapol_cb()
126 rsn_preauth_candidate_process(sm); in rsn_preauth_eapol_cb()
132 struct wpa_sm *sm = eloop_ctx; in rsn_preauth_timeout() local
134 wpa_msg(sm->ctx->msg_ctx, MSG_INFO, "RSN: pre-authentication with " in rsn_preauth_timeout()
135 MACSTR " timed out", MAC2STR(sm->preauth_bssid)); in rsn_preauth_timeout()
136 rsn_preauth_deinit(sm); in rsn_preauth_timeout()
137 rsn_preauth_candidate_process(sm); in rsn_preauth_timeout()
144 struct wpa_sm *sm = ctx; in rsn_preauth_eapol_send() local
152 if (sm->l2_preauth == NULL) in rsn_preauth_eapol_send()
155 msg = wpa_sm_alloc_eapol(sm, type, buf, len, &msglen, NULL); in rsn_preauth_eapol_send()
160 res = l2_packet_send(sm->l2_preauth, sm->preauth_bssid, in rsn_preauth_eapol_send()
181 int rsn_preauth_init(struct wpa_sm *sm, const u8 *dst, in rsn_preauth_init() argument
188 if (sm->preauth_eapol) in rsn_preauth_init()
191 wpa_msg(sm->ctx->msg_ctx, MSG_DEBUG, in rsn_preauth_init()
194 sm->l2_preauth = l2_packet_init(sm->ifname, sm->own_addr, in rsn_preauth_init()
196 rsn_preauth_receive, sm, 0); in rsn_preauth_init()
197 if (sm->l2_preauth == NULL) { in rsn_preauth_init()
203 if (sm->bridge_ifname) { in rsn_preauth_init()
204 sm->l2_preauth_br = l2_packet_init(sm->bridge_ifname, in rsn_preauth_init()
205 sm->own_addr, in rsn_preauth_init()
207 rsn_preauth_receive, sm, 0); in rsn_preauth_init()
208 if (sm->l2_preauth_br == NULL) { in rsn_preauth_init()
223 ctx->ctx = sm->ctx->ctx; in rsn_preauth_init()
224 ctx->msg_ctx = sm->ctx->ctx; in rsn_preauth_init()
227 ctx->cb_ctx = sm; in rsn_preauth_init()
228 ctx->scard_ctx = sm->scard_ctx; in rsn_preauth_init()
230 ctx->eapol_send_ctx = sm; in rsn_preauth_init()
231 ctx->set_config_blob = sm->ctx->set_config_blob; in rsn_preauth_init()
232 ctx->get_config_blob = sm->ctx->get_config_blob; in rsn_preauth_init()
234 sm->preauth_eapol = eapol_sm_init(ctx); in rsn_preauth_init()
235 if (sm->preauth_eapol == NULL) { in rsn_preauth_init()
245 eapol_conf.fast_reauth = sm->fast_reauth; in rsn_preauth_init()
246 eapol_conf.workaround = sm->eap_workaround; in rsn_preauth_init()
247 eapol_sm_notify_config(sm->preauth_eapol, eap_conf, &eapol_conf); in rsn_preauth_init()
254 eapol_sm_configure(sm->preauth_eapol, -1, -1, 5, 6); in rsn_preauth_init()
255 os_memcpy(sm->preauth_bssid, dst, ETH_ALEN); in rsn_preauth_init()
257 eapol_sm_notify_portValid(sm->preauth_eapol, true); in rsn_preauth_init()
259 eapol_sm_notify_portEnabled(sm->preauth_eapol, true); in rsn_preauth_init()
261 eloop_register_timeout(sm->dot11RSNAConfigSATimeout, 0, in rsn_preauth_init()
262 rsn_preauth_timeout, sm, NULL); in rsn_preauth_init()
267 if (sm->l2_preauth_br) { in rsn_preauth_init()
268 l2_packet_deinit(sm->l2_preauth_br); in rsn_preauth_init()
269 sm->l2_preauth_br = NULL; in rsn_preauth_init()
271 l2_packet_deinit(sm->l2_preauth); in rsn_preauth_init()
272 sm->l2_preauth = NULL; in rsn_preauth_init()
284 void rsn_preauth_deinit(struct wpa_sm *sm) in rsn_preauth_deinit() argument
286 if (sm == NULL || !sm->preauth_eapol) in rsn_preauth_deinit()
289 eloop_cancel_timeout(rsn_preauth_timeout, sm, NULL); in rsn_preauth_deinit()
290 eapol_sm_deinit(sm->preauth_eapol); in rsn_preauth_deinit()
291 sm->preauth_eapol = NULL; in rsn_preauth_deinit()
292 os_memset(sm->preauth_bssid, 0, ETH_ALEN); in rsn_preauth_deinit()
294 l2_packet_deinit(sm->l2_preauth); in rsn_preauth_deinit()
295 sm->l2_preauth = NULL; in rsn_preauth_deinit()
296 if (sm->l2_preauth_br) { in rsn_preauth_deinit()
297 l2_packet_deinit(sm->l2_preauth_br); in rsn_preauth_deinit()
298 sm->l2_preauth_br = NULL; in rsn_preauth_deinit()
311 void rsn_preauth_candidate_process(struct wpa_sm *sm) in rsn_preauth_candidate_process() argument
315 if (dl_list_empty(&sm->pmksa_candidates)) in rsn_preauth_candidate_process()
320 wpa_msg(sm->ctx->msg_ctx, MSG_DEBUG, "RSN: processing PMKSA candidate " in rsn_preauth_candidate_process()
322 if (sm->preauth_eapol || in rsn_preauth_candidate_process()
323 sm->proto != WPA_PROTO_RSN || in rsn_preauth_candidate_process()
324 wpa_sm_get_state(sm) != WPA_COMPLETED || in rsn_preauth_candidate_process()
325 !rsn_preauth_key_mgmt(sm->key_mgmt)) { in rsn_preauth_candidate_process()
326 wpa_msg(sm->ctx->msg_ctx, MSG_DEBUG, "RSN: not in suitable " in rsn_preauth_candidate_process()
331 dl_list_for_each_safe(candidate, n, &sm->pmksa_candidates, in rsn_preauth_candidate_process()
334 p = pmksa_cache_get(sm->pmksa, candidate->bssid, sm->own_addr, in rsn_preauth_candidate_process()
336 if (!ether_addr_equal(sm->bssid, candidate->bssid) && in rsn_preauth_candidate_process()
338 wpa_msg(sm->ctx->msg_ctx, MSG_DEBUG, "RSN: PMKSA " in rsn_preauth_candidate_process()
343 rsn_preauth_init(sm, candidate->bssid, in rsn_preauth_candidate_process()
344 sm->eap_conf_ctx); in rsn_preauth_candidate_process()
348 wpa_msg(sm->ctx->msg_ctx, MSG_DEBUG, "RSN: PMKSA candidate " in rsn_preauth_candidate_process()
354 wpa_sm_add_pmkid(sm, NULL, candidate->bssid, p->pmkid, in rsn_preauth_candidate_process()
362 wpa_msg(sm->ctx->msg_ctx, MSG_DEBUG, "RSN: no more pending PMKSA " in rsn_preauth_candidate_process()
378 void pmksa_candidate_add(struct wpa_sm *sm, const u8 *bssid, in pmksa_candidate_add() argument
383 if (sm->network_ctx && sm->proactive_key_caching) in pmksa_candidate_add()
384 pmksa_cache_get_opportunistic(sm->pmksa, sm->network_ctx, in pmksa_candidate_add()
396 dl_list_for_each(pos, &sm->pmksa_candidates, in pmksa_candidate_add()
418 dl_list_for_each(pos, &sm->pmksa_candidates, in pmksa_candidate_add()
439 dl_list_add_tail(&sm->pmksa_candidates, &cand->list); in pmksa_candidate_add()
441 wpa_msg(sm->ctx->msg_ctx, MSG_DEBUG, "RSN: added PMKSA cache " in pmksa_candidate_add()
443 rsn_preauth_candidate_process(sm); in pmksa_candidate_add()
458 int rsn_preauth_scan_results(struct wpa_sm *sm) in rsn_preauth_scan_results() argument
460 if (sm->ssid_len == 0) in rsn_preauth_scan_results()
467 pmksa_candidate_free(sm); in rsn_preauth_scan_results()
480 void rsn_preauth_scan_result(struct wpa_sm *sm, const u8 *bssid, in rsn_preauth_scan_result() argument
486 if (ssid[1] != sm->ssid_len || in rsn_preauth_scan_result()
487 os_memcmp(ssid + 2, sm->ssid, sm->ssid_len) != 0) in rsn_preauth_scan_result()
490 if (ether_addr_equal(bssid, sm->bssid)) in rsn_preauth_scan_result()
496 pmksa = pmksa_cache_get(sm->pmksa, bssid, sm->own_addr, NULL, NULL, 0); in rsn_preauth_scan_result()
505 pmksa_candidate_add(sm, bssid, PMKID_CANDIDATE_PRIO_SCAN, in rsn_preauth_scan_result()
523 int rsn_preauth_get_status(struct wpa_sm *sm, char *buf, size_t buflen, in rsn_preauth_get_status() argument
529 if (sm->preauth_eapol) { in rsn_preauth_get_status()
535 res = eapol_sm_get_status(sm->preauth_eapol, in rsn_preauth_get_status()
550 int rsn_preauth_in_progress(struct wpa_sm *sm) in rsn_preauth_in_progress() argument
552 return sm->preauth_eapol != NULL; in rsn_preauth_in_progress()