|
@@ -7041,16 +7041,25 @@ static struct wpabuf * wpas_p2p_nfc_handover(int ndef, struct wpabuf *wsc,
|
|
|
}
|
|
|
|
|
|
|
|
|
-static int wpas_p2p_cli_freq(struct wpa_supplicant *wpa_s)
|
|
|
+static int wpas_p2p_cli_freq(struct wpa_supplicant *wpa_s,
|
|
|
+ struct wpa_ssid **ssid, u8 *go_dev_addr)
|
|
|
{
|
|
|
struct wpa_supplicant *iface;
|
|
|
|
|
|
+ if (go_dev_addr)
|
|
|
+ os_memset(go_dev_addr, 0, ETH_ALEN);
|
|
|
+ if (ssid)
|
|
|
+ *ssid = NULL;
|
|
|
for (iface = wpa_s->global->ifaces; iface; iface = iface->next) {
|
|
|
if (iface->wpa_state < WPA_ASSOCIATING ||
|
|
|
iface->current_ssid == NULL || iface->assoc_freq == 0 ||
|
|
|
!iface->current_ssid->p2p_group ||
|
|
|
iface->current_ssid->mode != WPAS_MODE_INFRA)
|
|
|
continue;
|
|
|
+ if (ssid)
|
|
|
+ *ssid = iface->current_ssid;
|
|
|
+ if (go_dev_addr)
|
|
|
+ os_memcpy(go_dev_addr, iface->go_dev_addr, ETH_ALEN);
|
|
|
return iface->assoc_freq;
|
|
|
}
|
|
|
return 0;
|
|
@@ -7061,7 +7070,9 @@ struct wpabuf * wpas_p2p_nfc_handover_req(struct wpa_supplicant *wpa_s,
|
|
|
int ndef)
|
|
|
{
|
|
|
struct wpabuf *wsc, *p2p;
|
|
|
- int cli_freq = wpas_p2p_cli_freq(wpa_s);
|
|
|
+ struct wpa_ssid *ssid;
|
|
|
+ u8 go_dev_addr[ETH_ALEN];
|
|
|
+ int cli_freq = wpas_p2p_cli_freq(wpa_s, &ssid, go_dev_addr);
|
|
|
|
|
|
if (wpa_s->global->p2p_disabled || wpa_s->global->p2p == NULL) {
|
|
|
wpa_printf(MSG_DEBUG, "P2P: P2P disabled - cannot build handover request");
|
|
@@ -7080,7 +7091,9 @@ struct wpabuf * wpas_p2p_nfc_handover_req(struct wpa_supplicant *wpa_s,
|
|
|
wpa_s->parent->wps, wpa_s->conf->wps_nfc_dh_pubkey);
|
|
|
} else
|
|
|
wsc = NULL;
|
|
|
- p2p = p2p_build_nfc_handover_req(wpa_s->global->p2p, cli_freq);
|
|
|
+ p2p = p2p_build_nfc_handover_req(wpa_s->global->p2p, cli_freq,
|
|
|
+ go_dev_addr, ssid ? ssid->ssid : NULL,
|
|
|
+ ssid ? ssid->ssid_len : 0);
|
|
|
|
|
|
return wpas_p2p_nfc_handover(ndef, wsc, p2p);
|
|
|
}
|
|
@@ -7090,7 +7103,9 @@ struct wpabuf * wpas_p2p_nfc_handover_sel(struct wpa_supplicant *wpa_s,
|
|
|
int ndef, int tag)
|
|
|
{
|
|
|
struct wpabuf *wsc, *p2p;
|
|
|
- int cli_freq = wpas_p2p_cli_freq(wpa_s);
|
|
|
+ struct wpa_ssid *ssid;
|
|
|
+ u8 go_dev_addr[ETH_ALEN];
|
|
|
+ int cli_freq = wpas_p2p_cli_freq(wpa_s, &ssid, go_dev_addr);
|
|
|
|
|
|
if (wpa_s->global->p2p_disabled || wpa_s->global->p2p == NULL)
|
|
|
return NULL;
|
|
@@ -7109,7 +7124,9 @@ struct wpabuf * wpas_p2p_nfc_handover_sel(struct wpa_supplicant *wpa_s,
|
|
|
tag ? wpa_s->conf->wps_nfc_dev_pw : NULL);
|
|
|
} else
|
|
|
wsc = NULL;
|
|
|
- p2p = p2p_build_nfc_handover_sel(wpa_s->global->p2p, cli_freq);
|
|
|
+ p2p = p2p_build_nfc_handover_sel(wpa_s->global->p2p, cli_freq,
|
|
|
+ go_dev_addr, ssid ? ssid->ssid : NULL,
|
|
|
+ ssid ? ssid->ssid_len : 0);
|
|
|
|
|
|
return wpas_p2p_nfc_handover(ndef, wsc, p2p);
|
|
|
}
|
|
@@ -7280,12 +7297,25 @@ static int wpas_p2p_nfc_connection_handover(struct wpa_supplicant *wpa_s,
|
|
|
}
|
|
|
|
|
|
if (params.next_step == PEER_CLIENT) {
|
|
|
- wpa_msg(wpa_s, MSG_INFO, P2P_EVENT_NFC_PEER_CLIENT "peer="
|
|
|
- MACSTR, MAC2STR(params.peer->p2p_device_addr));
|
|
|
+ if (!is_zero_ether_addr(params.go_dev_addr)) {
|
|
|
+ wpa_msg(wpa_s, MSG_INFO, P2P_EVENT_NFC_PEER_CLIENT
|
|
|
+ "peer=" MACSTR " freq=%d go_dev_addr=" MACSTR
|
|
|
+ " ssid=\"%s\"",
|
|
|
+ MAC2STR(params.peer->p2p_device_addr),
|
|
|
+ params.go_freq,
|
|
|
+ MAC2STR(params.go_dev_addr),
|
|
|
+ wpa_ssid_txt(params.go_ssid,
|
|
|
+ params.go_ssid_len));
|
|
|
+ } else {
|
|
|
+ wpa_msg(wpa_s, MSG_INFO, P2P_EVENT_NFC_PEER_CLIENT
|
|
|
+ "peer=" MACSTR " freq=%d",
|
|
|
+ MAC2STR(params.peer->p2p_device_addr),
|
|
|
+ params.go_freq);
|
|
|
+ }
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
- if (wpas_p2p_cli_freq(wpa_s)) {
|
|
|
+ if (wpas_p2p_cli_freq(wpa_s, NULL, NULL)) {
|
|
|
wpa_msg(wpa_s, MSG_INFO, P2P_EVENT_NFC_WHILE_CLIENT "peer="
|
|
|
MACSTR, MAC2STR(params.peer->p2p_device_addr));
|
|
|
return 0;
|