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()
64 struct wpa_sm *sm = ctx; in rsn_preauth_receive() local
69 if (sm->preauth_eapol == NULL || in rsn_preauth_receive()
70 is_zero_ether_addr(sm->preauth_bssid) || in rsn_preauth_receive()
71 os_memcmp(sm->preauth_bssid, src_addr, ETH_ALEN) != 0) { in rsn_preauth_receive()
78 eapol_sm_rx_eapol(sm->preauth_eapol, src_addr, buf, len); in rsn_preauth_receive()
86 struct wpa_sm *sm = ctx; in rsn_preauth_eapol_cb() local
104 sm->pmk_len = pmk_len; in rsn_preauth_eapol_cb()
105 pmksa_cache_add(sm->pmksa, pmk, pmk_len, NULL, in rsn_preauth_eapol_cb()
107 sm->preauth_bssid, sm->own_addr, in rsn_preauth_eapol_cb()
108 sm->network_ctx, in rsn_preauth_eapol_cb()
111 wpa_msg(sm->ctx->msg_ctx, MSG_INFO, in rsn_preauth_eapol_cb()
118 wpa_msg(sm->ctx->msg_ctx, MSG_INFO, "RSN: pre-authentication with " in rsn_preauth_eapol_cb()
119 MACSTR " %s", MAC2STR(sm->preauth_bssid), in rsn_preauth_eapol_cb()
123 rsn_preauth_deinit(sm); in rsn_preauth_eapol_cb()
124 rsn_preauth_candidate_process(sm); in rsn_preauth_eapol_cb()
130 struct wpa_sm *sm = eloop_ctx; in rsn_preauth_timeout() local
132 wpa_msg(sm->ctx->msg_ctx, MSG_INFO, "RSN: pre-authentication with " in rsn_preauth_timeout()
133 MACSTR " timed out", MAC2STR(sm->preauth_bssid)); in rsn_preauth_timeout()
134 rsn_preauth_deinit(sm); in rsn_preauth_timeout()
135 rsn_preauth_candidate_process(sm); in rsn_preauth_timeout()
142 struct wpa_sm *sm = ctx; in rsn_preauth_eapol_send() local
150 if (sm->l2_preauth == NULL) in rsn_preauth_eapol_send()
153 msg = wpa_sm_alloc_eapol(sm, type, buf, len, &msglen, NULL); in rsn_preauth_eapol_send()
158 res = l2_packet_send(sm->l2_preauth, sm->preauth_bssid, in rsn_preauth_eapol_send()
179 int rsn_preauth_init(struct wpa_sm *sm, const u8 *dst, in rsn_preauth_init() argument
186 if (sm->preauth_eapol) in rsn_preauth_init()
189 wpa_msg(sm->ctx->msg_ctx, MSG_DEBUG, in rsn_preauth_init()
192 sm->l2_preauth = l2_packet_init(sm->ifname, sm->own_addr, in rsn_preauth_init()
194 rsn_preauth_receive, sm, 0); in rsn_preauth_init()
195 if (sm->l2_preauth == NULL) { in rsn_preauth_init()
201 if (sm->bridge_ifname) { in rsn_preauth_init()
202 sm->l2_preauth_br = l2_packet_init(sm->bridge_ifname, in rsn_preauth_init()
203 sm->own_addr, in rsn_preauth_init()
205 rsn_preauth_receive, sm, 0); in rsn_preauth_init()
206 if (sm->l2_preauth_br == NULL) { in rsn_preauth_init()
221 ctx->ctx = sm->ctx->ctx; in rsn_preauth_init()
222 ctx->msg_ctx = sm->ctx->ctx; in rsn_preauth_init()
225 ctx->cb_ctx = sm; in rsn_preauth_init()
226 ctx->scard_ctx = sm->scard_ctx; in rsn_preauth_init()
228 ctx->eapol_send_ctx = sm; in rsn_preauth_init()
229 ctx->set_config_blob = sm->ctx->set_config_blob; in rsn_preauth_init()
230 ctx->get_config_blob = sm->ctx->get_config_blob; in rsn_preauth_init()
232 sm->preauth_eapol = eapol_sm_init(ctx); in rsn_preauth_init()
233 if (sm->preauth_eapol == NULL) { in rsn_preauth_init()
243 eapol_conf.fast_reauth = sm->fast_reauth; in rsn_preauth_init()
244 eapol_conf.workaround = sm->eap_workaround; in rsn_preauth_init()
245 eapol_sm_notify_config(sm->preauth_eapol, eap_conf, &eapol_conf); in rsn_preauth_init()
252 eapol_sm_configure(sm->preauth_eapol, -1, -1, 5, 6); in rsn_preauth_init()
253 os_memcpy(sm->preauth_bssid, dst, ETH_ALEN); in rsn_preauth_init()
255 eapol_sm_notify_portValid(sm->preauth_eapol, true); in rsn_preauth_init()
257 eapol_sm_notify_portEnabled(sm->preauth_eapol, true); in rsn_preauth_init()
259 eloop_register_timeout(sm->dot11RSNAConfigSATimeout, 0, in rsn_preauth_init()
260 rsn_preauth_timeout, sm, NULL); in rsn_preauth_init()
265 if (sm->l2_preauth_br) { in rsn_preauth_init()
266 l2_packet_deinit(sm->l2_preauth_br); in rsn_preauth_init()
267 sm->l2_preauth_br = NULL; in rsn_preauth_init()
269 l2_packet_deinit(sm->l2_preauth); in rsn_preauth_init()
270 sm->l2_preauth = NULL; in rsn_preauth_init()
282 void rsn_preauth_deinit(struct wpa_sm *sm) in rsn_preauth_deinit() argument
284 if (sm == NULL || !sm->preauth_eapol) in rsn_preauth_deinit()
287 eloop_cancel_timeout(rsn_preauth_timeout, sm, NULL); in rsn_preauth_deinit()
288 eapol_sm_deinit(sm->preauth_eapol); in rsn_preauth_deinit()
289 sm->preauth_eapol = NULL; in rsn_preauth_deinit()
290 os_memset(sm->preauth_bssid, 0, ETH_ALEN); in rsn_preauth_deinit()
292 l2_packet_deinit(sm->l2_preauth); in rsn_preauth_deinit()
293 sm->l2_preauth = NULL; in rsn_preauth_deinit()
294 if (sm->l2_preauth_br) { in rsn_preauth_deinit()
295 l2_packet_deinit(sm->l2_preauth_br); in rsn_preauth_deinit()
296 sm->l2_preauth_br = NULL; in rsn_preauth_deinit()
309 void rsn_preauth_candidate_process(struct wpa_sm *sm) in rsn_preauth_candidate_process() argument
313 if (dl_list_empty(&sm->pmksa_candidates)) in rsn_preauth_candidate_process()
318 wpa_msg(sm->ctx->msg_ctx, MSG_DEBUG, "RSN: processing PMKSA candidate " in rsn_preauth_candidate_process()
320 if (sm->preauth_eapol || in rsn_preauth_candidate_process()
321 sm->proto != WPA_PROTO_RSN || in rsn_preauth_candidate_process()
322 wpa_sm_get_state(sm) != WPA_COMPLETED || in rsn_preauth_candidate_process()
323 !rsn_preauth_key_mgmt(sm->key_mgmt)) { in rsn_preauth_candidate_process()
324 wpa_msg(sm->ctx->msg_ctx, MSG_DEBUG, "RSN: not in suitable " in rsn_preauth_candidate_process()
329 dl_list_for_each_safe(candidate, n, &sm->pmksa_candidates, in rsn_preauth_candidate_process()
332 p = pmksa_cache_get(sm->pmksa, candidate->bssid, NULL, NULL, 0); in rsn_preauth_candidate_process()
333 if (os_memcmp(sm->bssid, candidate->bssid, ETH_ALEN) != 0 && in rsn_preauth_candidate_process()
335 wpa_msg(sm->ctx->msg_ctx, MSG_DEBUG, "RSN: PMKSA " in rsn_preauth_candidate_process()
340 rsn_preauth_init(sm, candidate->bssid, in rsn_preauth_candidate_process()
341 sm->eap_conf_ctx); in rsn_preauth_candidate_process()
345 wpa_msg(sm->ctx->msg_ctx, MSG_DEBUG, "RSN: PMKSA candidate " in rsn_preauth_candidate_process()
351 wpa_sm_add_pmkid(sm, NULL, candidate->bssid, p->pmkid, in rsn_preauth_candidate_process()
359 wpa_msg(sm->ctx->msg_ctx, MSG_DEBUG, "RSN: no more pending PMKSA " in rsn_preauth_candidate_process()
375 void pmksa_candidate_add(struct wpa_sm *sm, const u8 *bssid, in pmksa_candidate_add() argument
380 if (sm->network_ctx && sm->proactive_key_caching) in pmksa_candidate_add()
381 pmksa_cache_get_opportunistic(sm->pmksa, sm->network_ctx, in pmksa_candidate_add()
393 dl_list_for_each(pos, &sm->pmksa_candidates, in pmksa_candidate_add()
415 dl_list_for_each(pos, &sm->pmksa_candidates, in pmksa_candidate_add()
436 dl_list_add_tail(&sm->pmksa_candidates, &cand->list); in pmksa_candidate_add()
438 wpa_msg(sm->ctx->msg_ctx, MSG_DEBUG, "RSN: added PMKSA cache " in pmksa_candidate_add()
440 rsn_preauth_candidate_process(sm); in pmksa_candidate_add()
455 int rsn_preauth_scan_results(struct wpa_sm *sm) in rsn_preauth_scan_results() argument
457 if (sm->ssid_len == 0) in rsn_preauth_scan_results()
464 pmksa_candidate_free(sm); in rsn_preauth_scan_results()
477 void rsn_preauth_scan_result(struct wpa_sm *sm, const u8 *bssid, in rsn_preauth_scan_result() argument
483 if (ssid[1] != sm->ssid_len || in rsn_preauth_scan_result()
484 os_memcmp(ssid + 2, sm->ssid, sm->ssid_len) != 0) in rsn_preauth_scan_result()
487 if (os_memcmp(bssid, sm->bssid, ETH_ALEN) == 0) in rsn_preauth_scan_result()
493 pmksa = pmksa_cache_get(sm->pmksa, bssid, NULL, NULL, 0); in rsn_preauth_scan_result()
502 pmksa_candidate_add(sm, bssid, PMKID_CANDIDATE_PRIO_SCAN, in rsn_preauth_scan_result()
520 int rsn_preauth_get_status(struct wpa_sm *sm, char *buf, size_t buflen, in rsn_preauth_get_status() argument
526 if (sm->preauth_eapol) { in rsn_preauth_get_status()
532 res = eapol_sm_get_status(sm->preauth_eapol, in rsn_preauth_get_status()
547 int rsn_preauth_in_progress(struct wpa_sm *sm) in rsn_preauth_in_progress() argument
549 return sm->preauth_eapol != NULL; in rsn_preauth_in_progress()