diff --git a/src/p2p/p2p_i.h b/src/p2p/p2p_i.h index a1042d230..f4b24058b 100644 --- a/src/p2p/p2p_i.h +++ b/src/p2p/p2p_i.h @@ -53,6 +53,9 @@ struct p2p_device { * from Beacon/Probe Response), the interface address is stored here. * p2p_device_addr must still be set in such a case to the unique * identifier for the P2P Device. + * + * This field is also used during P2PS PD to store the intended GO + * address of the peer. */ u8 interface_addr[ETH_ALEN]; diff --git a/src/p2p/p2p_pd.c b/src/p2p/p2p_pd.c index 134223198..5366d8db7 100644 --- a/src/p2p/p2p_pd.c +++ b/src/p2p/p2p_pd.c @@ -821,6 +821,10 @@ out: dev->wps_prov_info = 0; break; } + + if (msg.intended_addr) + os_memcpy(dev->interface_addr, + msg.intended_addr, ETH_ALEN); } } p2p_parse_free(&msg); @@ -1120,6 +1124,8 @@ void p2p_process_prov_disc_resp(struct p2p_data *p2p, const u8 *sa, /* Store the provisioning info */ dev->wps_prov_info = msg.wps_config_methods; + if (msg.intended_addr) + os_memcpy(dev->interface_addr, msg.intended_addr, ETH_ALEN); p2p_parse_free(&msg); success = 1;