• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /freebsd-13-stable/contrib/wpa/wpa_supplicant/

Lines Matching defs:wpa_s

31 static int wpas_dpp_listen_start(struct wpa_supplicant *wpa_s,
34 static void wpas_dpp_auth_success(struct wpa_supplicant *wpa_s, int initiator);
35 static void wpas_dpp_tx_status(struct wpa_supplicant *wpa_s,
41 static int wpas_dpp_auth_init_next(struct wpa_supplicant *wpa_s);
43 wpas_dpp_tx_pkex_status(struct wpa_supplicant *wpa_s,
58 * @wpa_s: Pointer to wpa_supplicant data
62 int wpas_dpp_qr_code(struct wpa_supplicant *wpa_s, const char *cmd)
65 struct dpp_authentication *auth = wpa_s->dpp_auth;
67 bi = dpp_add_qr_code(wpa_s->dpp, cmd);
75 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_TX "dst=" MACSTR
79 offchannel_send_action(wpa_s, auth->curr_freq,
80 auth->peer_mac_addr, wpa_s->own_addr,
93 struct wpa_supplicant *wpa_s = eloop_ctx;
94 struct dpp_authentication *auth = wpa_s->dpp_auth;
101 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_TX "dst=" MACSTR
105 offchannel_send_action(wpa_s, auth->curr_freq, auth->peer_mac_addr,
106 wpa_s->own_addr, broadcast,
113 static void wpas_dpp_auth_resp_retry(struct wpa_supplicant *wpa_s)
115 struct dpp_authentication *auth = wpa_s->dpp_auth;
121 if (wpa_s->dpp_resp_max_tries)
122 max_tries = wpa_s->dpp_resp_max_tries;
128 offchannel_send_action_done(wpa_s);
129 dpp_auth_deinit(wpa_s->dpp_auth);
130 wpa_s->dpp_auth = NULL;
134 if (wpa_s->dpp_resp_retry_time)
135 wait_time = wpa_s->dpp_resp_retry_time;
141 eloop_cancel_timeout(wpas_dpp_auth_resp_retry_timeout, wpa_s, NULL);
144 wpas_dpp_auth_resp_retry_timeout, wpa_s, NULL);
148 static void wpas_dpp_try_to_connect(struct wpa_supplicant *wpa_s)
151 wpa_s->disconnected = 0;
152 wpa_s->reassociate = 1;
153 wpa_s->scan_runs = 0;
154 wpa_s->normal_scans = 0;
155 wpa_supplicant_cancel_sched_scan(wpa_s);
156 wpa_supplicant_req_scan(wpa_s, 0, 0);
160 static void wpas_dpp_tx_status(struct wpa_supplicant *wpa_s,
167 struct dpp_authentication *auth = wpa_s->dpp_auth;
174 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_TX_STATUS "dst=" MACSTR
177 if (!wpa_s->dpp_auth) {
187 wpas_dpp_try_to_connect(wpa_s);
188 dpp_auth_deinit(wpa_s->dpp_auth);
189 wpa_s->dpp_auth = NULL;
194 if (wpa_s->dpp_auth->remove_on_tx_status) {
197 eloop_cancel_timeout(wpas_dpp_init_timeout, wpa_s, NULL);
198 eloop_cancel_timeout(wpas_dpp_reply_wait_timeout, wpa_s, NULL);
199 eloop_cancel_timeout(wpas_dpp_auth_resp_retry_timeout, wpa_s,
201 offchannel_send_action_done(wpa_s);
202 dpp_auth_deinit(wpa_s->dpp_auth);
203 wpa_s->dpp_auth = NULL;
207 if (wpa_s->dpp_auth_ok_on_ack)
208 wpas_dpp_auth_success(wpa_s, 1);
217 offchannel_send_action_done(wpa_s);
218 wpas_dpp_auth_init_next(wpa_s);
222 wpas_dpp_auth_resp_retry(wpa_s);
234 if (!wpa_s->dpp_auth_ok_on_ack && wpa_s->dpp_auth->neg_freq > 0 &&
235 wpa_s->dpp_auth->curr_freq != wpa_s->dpp_auth->neg_freq) {
238 wpa_s->dpp_auth->curr_freq,
239 wpa_s->dpp_auth->neg_freq);
240 offchannel_send_action_done(wpa_s);
241 wpas_dpp_listen_start(wpa_s, wpa_s->dpp_auth->neg_freq);
244 if (wpa_s->dpp_auth_ok_on_ack)
245 wpa_s->dpp_auth_ok_on_ack = 0;
251 struct wpa_supplicant *wpa_s = eloop_ctx;
252 struct dpp_authentication *auth = wpa_s->dpp_auth;
260 wait_time = wpa_s->dpp_resp_wait_time ?
261 wpa_s->dpp_resp_wait_time : 2000;
263 os_reltime_sub(&now, &wpa_s->dpp_last_init, &diff);
274 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_AUTH_INIT_FAILED);
275 offchannel_send_action_done(wpa_s);
276 wpas_dpp_listen_stop(wpa_s);
278 wpa_s->dpp_auth = NULL;
287 offchannel_send_action_done(wpa_s);
288 wpas_dpp_listen_stop(wpa_s);
289 wpas_dpp_auth_init_next(wpa_s);
307 wpa_s->dpp_in_response_listen = 1;
308 wpas_dpp_listen_start(wpa_s, freq);
311 wpas_dpp_reply_wait_timeout, wpa_s, NULL);
315 static void wpas_dpp_set_testing_options(struct wpa_supplicant *wpa_s,
319 if (wpa_s->dpp_config_obj_override)
321 os_strdup(wpa_s->dpp_config_obj_override);
322 if (wpa_s->dpp_discovery_override)
324 os_strdup(wpa_s->dpp_discovery_override);
325 if (wpa_s->dpp_groups_override)
327 os_strdup(wpa_s->dpp_groups_override);
329 wpa_s->dpp_ignore_netaccesskey_mismatch;
336 struct wpa_supplicant *wpa_s = eloop_ctx;
338 if (!wpa_s->dpp_auth)
341 wpas_dpp_auth_init_next(wpa_s);
345 static int wpas_dpp_auth_init_next(struct wpa_supplicant *wpa_s)
347 struct dpp_authentication *auth = wpa_s->dpp_auth;
352 wpa_s->dpp_in_response_listen = 0;
357 os_get_reltime(&wpa_s->dpp_init_iter_start);
361 if (wpa_s->dpp_init_max_tries)
362 max_tries = wpa_s->dpp_init_max_tries;
368 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_AUTH_INIT_FAILED);
370 wpa_s, NULL);
371 offchannel_send_action_done(wpa_s);
372 dpp_auth_deinit(wpa_s->dpp_auth);
373 wpa_s->dpp_auth = NULL;
377 eloop_cancel_timeout(wpas_dpp_init_timeout, wpa_s, NULL);
378 if (wpa_s->dpp_init_retry_time)
379 wait_time = wpa_s->dpp_init_retry_time;
383 os_reltime_sub(&now, &wpa_s->dpp_init_iter_start, &diff);
393 wpas_dpp_init_timeout, wpa_s,
404 wpa_s->dpp_auth_ok_on_ack = 0;
405 eloop_cancel_timeout(wpas_dpp_reply_wait_timeout, wpa_s, NULL);
406 wait_time = wpa_s->max_remain_on_chan;
407 max_wait_time = wpa_s->dpp_resp_wait_time ?
408 wpa_s->dpp_resp_wait_time : 2000;
414 wpa_s, NULL);
421 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_TX "dst=" MACSTR " freq=%u type=%d",
424 os_get_reltime(&wpa_s->dpp_last_init);
425 return offchannel_send_action(wpa_s, freq, dst,
426 wpa_s->own_addr, broadcast,
433 int wpas_dpp_auth_init(struct wpa_supplicant *wpa_s, const char *cmd)
447 wpa_s->dpp_gas_client = 0;
453 peer_bi = dpp_bootstrap_get_id(wpa_s->dpp, atoi(pos));
482 own_bi = dpp_bootstrap_get_id(wpa_s->dpp, atoi(pos));
514 wpa_s->dpp_netrole_ap = os_strncmp(pos, "ap", 2) == 0;
521 if (!tcp && wpa_s->dpp_auth) {
522 eloop_cancel_timeout(wpas_dpp_init_timeout, wpa_s, NULL);
523 eloop_cancel_timeout(wpas_dpp_reply_wait_timeout, wpa_s, NULL);
524 eloop_cancel_timeout(wpas_dpp_auth_resp_retry_timeout, wpa_s,
526 offchannel_send_action_done(wpa_s);
527 dpp_auth_deinit(wpa_s->dpp_auth);
528 wpa_s->dpp_auth = NULL;
531 auth = dpp_auth_init(wpa_s, peer_bi, own_bi, allowed_roles, neg_freq,
532 wpa_s->hw.modes, wpa_s->hw.num_modes);
535 wpas_dpp_set_testing_options(wpa_s, auth);
536 if (dpp_set_configurator(wpa_s->dpp, wpa_s, auth, cmd) < 0) {
548 return dpp_tcp_init(wpa_s->dpp, auth, &ipaddr, tcp_port);
551 wpa_s->dpp_auth = auth;
552 return wpas_dpp_auth_init_next(wpa_s);
573 static void wpas_dpp_listen_work_done(struct wpa_supplicant *wpa_s)
577 if (!wpa_s->dpp_listen_work)
580 lwork = wpa_s->dpp_listen_work->ctx;
582 radio_work_done(wpa_s->dpp_listen_work);
583 wpa_s->dpp_listen_work = NULL;
589 struct wpa_supplicant *wpa_s = work->wpa_s;
594 wpa_s->dpp_listen_work = NULL;
595 wpas_dpp_listen_stop(wpa_s);
601 wpa_s->dpp_listen_work = work;
603 wpa_s->dpp_pending_listen_freq = lwork->freq;
605 if (wpa_drv_remain_on_channel(wpa_s, lwork->freq,
606 wpa_s->max_remain_on_chan) < 0) {
610 wpa_s->dpp_listen_freq = 0;
611 wpas_dpp_listen_work_done(wpa_s);
612 wpa_s->dpp_pending_listen_freq = 0;
615 wpa_s->off_channel_freq = 0;
616 wpa_s->roc_waiting_drv_freq = lwork->freq;
620 static int wpas_dpp_listen_start(struct wpa_supplicant *wpa_s,
625 if (wpa_s->dpp_listen_work) {
631 if (wpa_s->dpp_listen_freq)
632 wpas_dpp_listen_stop(wpa_s);
633 wpa_s->dpp_listen_freq = freq;
640 if (radio_add_work(wpa_s, freq, "dpp-listen", 0, dpp_start_listen_cb,
650 int wpas_dpp_listen(struct wpa_supplicant *wpa_s, const char *cmd)
659 wpa_s->dpp_allowed_roles = DPP_CAPAB_CONFIGURATOR;
661 wpa_s->dpp_allowed_roles = DPP_CAPAB_ENROLLEE;
663 wpa_s->dpp_allowed_roles = DPP_CAPAB_CONFIGURATOR |
665 wpa_s->dpp_qr_mutual = os_strstr(cmd, " qr=mutual") != NULL;
666 wpa_s->dpp_netrole_ap = os_strstr(cmd, " netrole=ap") != NULL;
667 if (wpa_s->dpp_listen_freq == (unsigned int) freq) {
673 return wpas_dpp_listen_start(wpa_s, freq);
677 void wpas_dpp_listen_stop(struct wpa_supplicant *wpa_s)
679 wpa_s->dpp_in_response_listen = 0;
680 if (!wpa_s->dpp_listen_freq)
684 wpa_s->dpp_listen_freq);
685 wpa_drv_cancel_remain_on_channel(wpa_s);
686 wpa_s->dpp_listen_freq = 0;
687 wpas_dpp_listen_work_done(wpa_s);
691 void wpas_dpp_cancel_remain_on_channel_cb(struct wpa_supplicant *wpa_s,
694 wpas_dpp_listen_work_done(wpa_s);
696 if (wpa_s->dpp_auth && wpa_s->dpp_in_response_listen) {
700 if (wpa_s->dpp_auth->neg_freq > 0)
701 new_freq = wpa_s->dpp_auth->neg_freq;
703 new_freq = wpa_s->dpp_auth->curr_freq;
707 wpas_dpp_listen_start(wpa_s, new_freq);
711 if (wpa_s->dpp_listen_freq) {
713 wpas_dpp_listen_start(wpa_s, wpa_s->dpp_listen_freq);
718 static void wpas_dpp_rx_auth_req(struct wpa_supplicant *wpa_s, const u8 *src,
726 if (!wpa_s->dpp)
735 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_FAIL
745 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_FAIL
754 dpp_bootstrap_find_pair(wpa_s->dpp, i_bootstrap, r_bootstrap,
757 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_FAIL
762 if (wpa_s->dpp_auth) {
763 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_FAIL
768 wpa_s->dpp_gas_client = 0;
769 wpa_s->dpp_auth_ok_on_ack = 0;
770 wpa_s->dpp_auth = dpp_auth_req_rx(wpa_s, wpa_s->dpp_allowed_roles,
771 wpa_s->dpp_qr_mutual,
773 if (!wpa_s->dpp_auth) {
777 wpas_dpp_set_testing_options(wpa_s, wpa_s->dpp_auth);
778 if (dpp_set_configurator(wpa_s->dpp, wpa_s, wpa_s->dpp_auth,
779 wpa_s->dpp_configurator_params) < 0) {
780 dpp_auth_deinit(wpa_s->dpp_auth);
781 wpa_s->dpp_auth = NULL;
784 os_memcpy(wpa_s->dpp_auth->peer_mac_addr, src, ETH_ALEN);
786 if (wpa_s->dpp_listen_freq &&
787 wpa_s->dpp_listen_freq != wpa_s->dpp_auth->curr_freq) {
790 wpa_s->dpp_listen_freq, wpa_s->dpp_auth->curr_freq);
791 wpas_dpp_listen_stop(wpa_s);
794 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_TX "dst=" MACSTR " freq=%u type=%d",
795 MAC2STR(src), wpa_s->dpp_auth->curr_freq,
797 offchannel_send_action(wpa_s, wpa_s->dpp_auth->curr_freq,
798 src, wpa_s->own_addr, broadcast,
799 wpabuf_head(wpa_s->dpp_auth->resp_msg),
800 wpabuf_len(wpa_s->dpp_auth->resp_msg),
805 static void wpas_dpp_start_gas_server(struct wpa_supplicant *wpa_s)
811 static struct wpa_ssid * wpas_dpp_add_network(struct wpa_supplicant *wpa_s,
822 res = wpa_drv_get_capa(wpa_s, &capa);
825 !(wpa_s->drv_flags & WPA_DRIVER_FLAGS_SAE)) {
837 ssid = wpa_config_add_network(wpa_s->conf);
840 wpas_notify_network_added(wpa_s, ssid);
904 wpas_notify_network_removed(wpa_s, ssid);
905 wpa_config_remove_network(wpa_s->conf, ssid->id);
910 static int wpas_dpp_process_config(struct wpa_supplicant *wpa_s,
915 if (wpa_s->conf->dpp_config_processing < 1)
918 ssid = wpas_dpp_add_network(wpa_s, auth);
922 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_NETWORK_ID "%d", ssid->id);
923 if (wpa_s->conf->dpp_config_processing == 2)
927 if (wpa_s->conf->update_config &&
928 wpa_config_write(wpa_s->confname, wpa_s->conf))
932 if (wpa_s->conf->dpp_config_processing < 2)
944 wpas_dpp_try_to_connect(wpa_s);
949 static int wpas_dpp_handle_config_obj(struct wpa_supplicant *wpa_s,
952 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_CONF_RECEIVED);
954 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_CONFOBJ_SSID "%s",
962 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_CONNECTOR "%s",
975 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_C_SIGN_KEY "%s",
991 wpa_msg(wpa_s, MSG_INFO,
996 wpa_msg(wpa_s, MSG_INFO,
1002 return wpas_dpp_process_config(wpa_s, auth);
1011 struct wpa_supplicant *wpa_s = ctx;
1013 struct dpp_authentication *auth = wpa_s->dpp_auth;
1017 wpa_s->dpp_gas_dialog_token = -1;
1053 res = wpas_dpp_handle_config_obj(wpa_s, auth);
1066 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_CONF_FAILED);
1077 wpa_msg(wpa_s, MSG_INFO,
1081 offchannel_send_action(wpa_s, auth->curr_freq,
1082 addr, wpa_s->own_addr, broadcast,
1093 dpp_auth_deinit(wpa_s->dpp_auth);
1094 wpa_s->dpp_auth = NULL;
1098 static void wpas_dpp_start_gas_client(struct wpa_supplicant *wpa_s)
1100 struct dpp_authentication *auth = wpa_s->dpp_auth;
1105 wpa_s->dpp_gas_client = 1;
1110 wpa_s->dpp_netrole_ap ? "ap" : "sta");
1119 offchannel_send_action_done(wpa_s);
1120 wpas_dpp_listen_stop(wpa_s);
1132 res = gas_query_req(wpa_s->gas, auth->peer_mac_addr, auth->curr_freq,
1133 1, buf, wpas_dpp_gas_resp_cb, wpa_s);
1135 wpa_msg(wpa_s, MSG_DEBUG, "GAS: Failed to send Query Request");
1140 wpa_s->dpp_gas_dialog_token = res;
1145 static void wpas_dpp_auth_success(struct wpa_supplicant *wpa_s, int initiator)
1148 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_AUTH_SUCCESS "init=%d", initiator);
1153 if (wpa_s->dpp_auth->configurator) {
1155 wpa_s->dpp_auth->auth_success = 0;
1161 if (wpa_s->dpp_auth->configurator)
1162 wpas_dpp_start_gas_server(wpa_s);
1164 wpas_dpp_start_gas_client(wpa_s);
1168 static void wpas_dpp_rx_auth_resp(struct wpa_supplicant *wpa_s, const u8 *src,
1172 struct dpp_authentication *auth = wpa_s->dpp_auth;
1191 eloop_cancel_timeout(wpas_dpp_reply_wait_timeout, wpa_s, NULL);
1199 eloop_cancel_timeout(wpas_dpp_init_timeout, wpa_s, NULL);
1205 offchannel_send_action_done(wpa_s);
1206 wpas_dpp_listen_start(wpa_s, auth->curr_freq);
1214 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_TX "dst=" MACSTR " freq=%u type=%d",
1216 offchannel_send_action(wpa_s, auth->curr_freq,
1217 src, wpa_s->own_addr, broadcast,
1221 wpa_s->dpp_auth_ok_on_ack = 1;
1225 static void wpas_dpp_rx_auth_conf(struct wpa_supplicant *wpa_s, const u8 *src,
1228 struct dpp_authentication *auth = wpa_s->dpp_auth;
1250 wpas_dpp_auth_success(wpa_s, 0);
1259 struct wpa_supplicant *wpa_s = eloop_ctx;
1260 struct dpp_authentication *auth = wpa_s->dpp_auth;
1267 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_CONF_FAILED);
1269 wpa_s->dpp_auth = NULL;
1273 static void wpas_dpp_rx_conf_result(struct wpa_supplicant *wpa_s, const u8 *src,
1276 struct dpp_authentication *auth = wpa_s->dpp_auth;
1296 offchannel_send_action_done(wpa_s);
1297 wpas_dpp_listen_stop(wpa_s);
1299 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_CONF_SENT);
1301 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_CONF_FAILED);
1303 wpa_s->dpp_auth = NULL;
1304 eloop_cancel_timeout(wpas_dpp_config_result_wait_timeout, wpa_s, NULL);
1311 struct wpa_supplicant *wpa_s = ctx;
1313 return wpas_dpp_handle_config_obj(wpa_s, auth);
1319 static void wpas_dpp_rx_peer_disc_resp(struct wpa_supplicant *wpa_s,
1336 if (is_zero_ether_addr(wpa_s->dpp_intro_bssid) ||
1337 os_memcmp(src, wpa_s->dpp_intro_bssid, ETH_ALEN) != 0) {
1342 offchannel_send_action_done(wpa_s);
1344 for (ssid = wpa_s->conf->ssid; ssid; ssid = ssid->next) {
1345 if (ssid == wpa_s->dpp_intro_network)
1360 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_INTRO "peer=" MACSTR
1368 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_INTRO "peer=" MACSTR
1376 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_INTRO "peer=" MACSTR
1384 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_INTRO "peer=" MACSTR
1393 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_INTRO "peer=" MACSTR
1407 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_INTRO "peer=" MACSTR
1430 wpa_sm_pmksa_cache_add_entry(wpa_s->wpa, entry);
1432 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_INTRO "peer=" MACSTR
1437 if (wpa_supplicant_fast_associate(wpa_s) != 1) {
1438 wpa_supplicant_cancel_sched_scan(wpa_s);
1439 wpa_supplicant_req_scan(wpa_s, 0, 0);
1446 static int wpas_dpp_allow_ir(struct wpa_supplicant *wpa_s, unsigned int freq)
1450 if (!wpa_s->hw.modes)
1453 for (i = 0; i < wpa_s->hw.num_modes; i++) {
1454 struct hostapd_hw_modes *mode = &wpa_s->hw.modes[i];
1479 static int wpas_dpp_pkex_next_channel(struct wpa_supplicant *wpa_s,
1491 if (wpas_dpp_allow_ir(wpa_s, pkex->freq) == 1) {
1498 return wpas_dpp_pkex_next_channel(wpa_s, pkex);
1504 struct wpa_supplicant *wpa_s = eloop_ctx;
1505 struct dpp_pkex *pkex = wpa_s->dpp_pkex;
1510 if (wpas_dpp_pkex_next_channel(wpa_s, pkex) < 0) {
1511 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_FAIL
1514 wpa_s->dpp_pkex = NULL;
1523 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_TX "dst=" MACSTR " freq=%u type=%d",
1525 offchannel_send_action(wpa_s, pkex->freq, broadcast,
1526 wpa_s->own_addr, broadcast,
1535 wpas_dpp_tx_pkex_status(struct wpa_supplicant *wpa_s,
1542 struct dpp_pkex *pkex = wpa_s->dpp_pkex;
1550 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_TX_STATUS "dst=" MACSTR
1565 wpa_s->dpp_pkex = NULL;
1572 eloop_cancel_timeout(wpas_dpp_pkex_retry_timeout, wpa_s, NULL);
1575 wpas_dpp_pkex_retry_timeout, wpa_s,
1582 wpas_dpp_rx_pkex_exchange_req(struct wpa_supplicant *wpa_s, const u8 *src,
1594 if (!wpa_s->dpp_pkex_code || !wpa_s->dpp_pkex_bi) {
1600 if (wpa_s->dpp_pkex) {
1607 wpa_s->dpp_pkex = dpp_pkex_rx_exchange_req(wpa_s, wpa_s->dpp_pkex_bi,
1608 wpa_s->own_addr, src,
1609 wpa_s->dpp_pkex_identifier,
1610 wpa_s->dpp_pkex_code,
1612 if (!wpa_s->dpp_pkex) {
1618 msg = wpa_s->dpp_pkex->exchange_resp;
1619 wait_time = wpa_s->max_remain_on_chan;
1622 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_TX "dst=" MACSTR " freq=%u type=%d",
1624 offchannel_send_action(wpa_s, freq, src, wpa_s->own_addr,
1632 wpas_dpp_rx_pkex_exchange_resp(struct wpa_supplicant *wpa_s, const u8 *src,
1644 if (!wpa_s->dpp_pkex || !wpa_s->dpp_pkex->initiator ||
1645 wpa_s->dpp_pkex->exchange_done) {
1650 eloop_cancel_timeout(wpas_dpp_pkex_retry_timeout, wpa_s, NULL);
1651 wpa_s->dpp_pkex->exch_req_wait_time = 0;
1653 msg = dpp_pkex_rx_exchange_resp(wpa_s->dpp_pkex, src, buf, len);
1662 wait_time = wpa_s->max_remain_on_chan;
1665 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_TX "dst=" MACSTR " freq=%u type=%d",
1667 offchannel_send_action(wpa_s, freq, src, wpa_s->own_addr,
1676 wpas_dpp_pkex_finish(struct wpa_supplicant *wpa_s, const u8 *peer,
1681 bi = dpp_pkex_finish(wpa_s->dpp, wpa_s->dpp_pkex, peer, freq);
1684 wpa_s->dpp_pkex = NULL;
1690 wpas_dpp_rx_pkex_commit_reveal_req(struct wpa_supplicant *wpa_s, const u8 *src,
1696 struct dpp_pkex *pkex = wpa_s->dpp_pkex;
1713 dpp_pkex_free(wpa_s->dpp_pkex);
1714 wpa_s->dpp_pkex = NULL;
1722 wait_time = wpa_s->max_remain_on_chan;
1725 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_TX "dst=" MACSTR " freq=%u type=%d",
1727 offchannel_send_action(wpa_s, freq, src, wpa_s->own_addr,
1733 wpas_dpp_pkex_finish(wpa_s, src, freq);
1738 wpas_dpp_rx_pkex_commit_reveal_resp(struct wpa_supplicant *wpa_s, const u8 *src,
1744 struct dpp_pkex *pkex = wpa_s->dpp_pkex;
1761 bi = wpas_dpp_pkex_finish(wpa_s, src, freq);
1767 wpa_s->dpp_pkex_auth_cmd ? wpa_s->dpp_pkex_auth_cmd : "");
1771 if (wpas_dpp_auth_init(wpa_s, cmd) < 0) {
1779 void wpas_dpp_rx_action(struct wpa_supplicant *wpa_s, const u8 *src,
1805 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_RX "src=" MACSTR
1812 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_RX "src=" MACSTR
1817 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_RX "src=" MACSTR " freq=%u type=%d",
1822 wpas_dpp_rx_auth_req(wpa_s, src, hdr, buf, len, freq);
1825 wpas_dpp_rx_auth_resp(wpa_s, src, hdr, buf, len, freq);
1828 wpas_dpp_rx_auth_conf(wpa_s, src, hdr, buf, len);
1831 wpas_dpp_rx_peer_disc_resp(wpa_s, src, buf, len);
1834 wpas_dpp_rx_pkex_exchange_req(wpa_s, src, buf, len, freq);
1837 wpas_dpp_rx_pkex_exchange_resp(wpa_s, src, buf, len, freq);
1840 wpas_dpp_rx_pkex_commit_reveal_req(wpa_s, src, hdr, buf, len,
1844 wpas_dpp_rx_pkex_commit_reveal_resp(wpa_s, src, hdr, buf, len,
1849 wpas_dpp_rx_conf_result(wpa_s, src, hdr, buf, len);
1858 if (wpa_s->dpp_pkex)
1859 pkex_t = wpa_s->dpp_pkex->t;
1860 else if (wpa_s->dpp_pkex_bi)
1861 pkex_t = wpa_s->dpp_pkex_bi->pkex_t;
1865 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_PKEX_T_LIMIT "id=0");
1866 wpas_dpp_pkex_remove(wpa_s, "*");
1875 struct wpa_supplicant *wpa_s = ctx;
1876 struct dpp_authentication *auth = wpa_s->dpp_auth;
1887 if (wpa_s->dpp_auth_ok_on_ack && auth->configurator) {
1894 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_AUTH_SUCCESS "init=1");
1895 wpa_s->dpp_auth_ok_on_ack = 0;
1901 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_CONF_REQ_RX "src=" MACSTR,
1905 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_CONF_FAILED);
1914 struct wpa_supplicant *wpa_s = ctx;
1915 struct dpp_authentication *auth = wpa_s->dpp_auth;
1931 eloop_cancel_timeout(wpas_dpp_reply_wait_timeout, wpa_s, NULL);
1932 eloop_cancel_timeout(wpas_dpp_auth_resp_retry_timeout, wpa_s, NULL);
1941 wpa_s, NULL);
1944 wpa_s, NULL);
1948 offchannel_send_action_done(wpa_s);
1949 wpas_dpp_listen_stop(wpa_s);
1951 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_CONF_SENT);
1953 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_CONF_FAILED);
1954 dpp_auth_deinit(wpa_s->dpp_auth);
1955 wpa_s->dpp_auth = NULL;
1960 int wpas_dpp_configurator_sign(struct wpa_supplicant *wpa_s, const char *cmd)
1971 wpas_dpp_set_testing_options(wpa_s, auth);
1972 if (dpp_set_configurator(wpa_s->dpp, wpa_s, auth, cmd) == 0 &&
1974 ret = wpas_dpp_handle_config_obj(wpa_s, auth);
1984 wpas_dpp_tx_introduction_status(struct wpa_supplicant *wpa_s,
1998 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_TX_STATUS "dst=" MACSTR
2004 int wpas_dpp_check_connect(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid,
2019 if (wpa_sm_pmksa_exists(wpa_s->wpa, bss->bssid, ssid))
2024 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_MISSING_CONNECTOR
2036 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_MISSING_CONNECTOR
2102 wait_time = wpa_s->max_remain_on_chan;
2105 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_TX "dst=" MACSTR " freq=%u type=%d",
2107 offchannel_send_action(wpa_s, bss->freq, bss->bssid, wpa_s->own_addr,
2115 os_memcpy(wpa_s->dpp_intro_bssid, bss->bssid, ETH_ALEN);
2116 wpa_s->dpp_intro_network = ssid;
2121 int wpas_dpp_pkex_add(struct wpa_supplicant *wpa_s, const char *cmd)
2131 own_bi = dpp_bootstrap_get_id(wpa_s->dpp, atoi(pos));
2142 wpa_s->dpp_pkex_bi = own_bi;
2145 os_free(wpa_s->dpp_pkex_identifier);
2146 wpa_s->dpp_pkex_identifier = NULL;
2153 wpa_s->dpp_pkex_identifier = os_malloc(end - pos + 1);
2154 if (!wpa_s->dpp_pkex_identifier)
2156 os_memcpy(wpa_s->dpp_pkex_identifier, pos, end - pos);
2157 wpa_s->dpp_pkex_identifier[end - pos] = '\0';
2163 os_free(wpa_s->dpp_pkex_code);
2164 wpa_s->dpp_pkex_code = os_strdup(pos + 6);
2165 if (!wpa_s->dpp_pkex_code)
2173 dpp_pkex_free(wpa_s->dpp_pkex);
2174 wpa_s->dpp_pkex = dpp_pkex_init(wpa_s, own_bi, wpa_s->own_addr,
2175 wpa_s->dpp_pkex_identifier,
2176 wpa_s->dpp_pkex_code);
2177 pkex = wpa_s->dpp_pkex;
2182 wait_time = wpa_s->max_remain_on_chan;
2186 wpa_msg(wpa_s, MSG_INFO, DPP_EVENT_TX "dst=" MACSTR
2190 offchannel_send_action(wpa_s, pkex->freq, broadcast,
2191 wpa_s->own_addr, broadcast,
2202 os_free(wpa_s->dpp_pkex_auth_cmd);
2203 wpa_s->dpp_pkex_auth_cmd = os_strdup(cmd);
2209 int wpas_dpp_pkex_remove(struct wpa_supplicant *wpa_s, const char *id)
2221 if ((id_val != 0 && id_val != 1) || !wpa_s->dpp_pkex_code)
2225 os_free(wpa_s->dpp_pkex_code);
2226 wpa_s->dpp_pkex_code = NULL;
2227 os_free(wpa_s->dpp_pkex_identifier);
2228 wpa_s->dpp_pkex_identifier = NULL;
2229 os_free(wpa_s->dpp_pkex_auth_cmd);
2230 wpa_s->dpp_pkex_auth_cmd = NULL;
2231 wpa_s->dpp_pkex_bi = NULL;
2233 dpp_pkex_free(wpa_s->dpp_pkex);
2234 wpa_s->dpp_pkex = NULL;
2239 void wpas_dpp_stop(struct wpa_supplicant *wpa_s)
2241 dpp_auth_deinit(wpa_s->dpp_auth);
2242 wpa_s->dpp_auth = NULL;
2243 dpp_pkex_free(wpa_s->dpp_pkex);
2244 wpa_s->dpp_pkex = NULL;
2245 if (wpa_s->dpp_gas_client && wpa_s->dpp_gas_dialog_token >= 0)
2246 gas_query_stop(wpa_s->gas, wpa_s->dpp_gas_dialog_token);
2250 int wpas_dpp_init(struct wpa_supplicant *wpa_s)
2261 if (gas_server_register(wpa_s->gas_server, adv_proto_id,
2263 wpas_dpp_gas_status_handler, wpa_s) < 0)
2267 config.msg_ctx = wpa_s;
2268 config.cb_ctx = wpa_s;
2272 wpa_s->dpp = dpp_global_init(&config);
2273 return wpa_s->dpp ? 0 : -1;
2277 void wpas_dpp_deinit(struct wpa_supplicant *wpa_s)
2280 os_free(wpa_s->dpp_config_obj_override);
2281 wpa_s->dpp_config_obj_override = NULL;
2282 os_free(wpa_s->dpp_discovery_override);
2283 wpa_s->dpp_discovery_override = NULL;
2284 os_free(wpa_s->dpp_groups_override);
2285 wpa_s->dpp_groups_override = NULL;
2286 wpa_s->dpp_ignore_netaccesskey_mismatch = 0;
2288 if (!wpa_s->dpp)
2290 dpp_global_clear(wpa_s->dpp);
2291 eloop_cancel_timeout(wpas_dpp_pkex_retry_timeout, wpa_s, NULL);
2292 eloop_cancel_timeout(wpas_dpp_reply_wait_timeout, wpa_s, NULL);
2293 eloop_cancel_timeout(wpas_dpp_init_timeout, wpa_s, NULL);
2294 eloop_cancel_timeout(wpas_dpp_auth_resp_retry_timeout, wpa_s, NULL);
2296 eloop_cancel_timeout(wpas_dpp_config_result_wait_timeout, wpa_s, NULL);
2297 dpp_pfs_free(wpa_s->dpp_pfs);
2298 wpa_s->dpp_pfs = NULL;
2300 offchannel_send_action_done(wpa_s);
2301 wpas_dpp_listen_stop(wpa_s);
2302 wpas_dpp_stop(wpa_s);
2303 wpas_dpp_pkex_remove(wpa_s, "*");
2304 os_memset(wpa_s->dpp_intro_bssid, 0, ETH_ALEN);
2305 os_free(wpa_s->dpp_configurator_params);
2306 wpa_s->dpp_configurator_params = NULL;
2311 int wpas_dpp_controller_start(struct wpa_supplicant *wpa_s, const char *cmd)
2324 config.configurator_params = wpa_s->dpp_configurator_params;
2325 return dpp_controller_start(wpa_s->dpp, &config);