diff --git a/wpa_supplicant/ctrl_iface.c b/wpa_supplicant/ctrl_iface.c index a30f67b07..c34c7a8f3 100644 --- a/wpa_supplicant/ctrl_iface.c +++ b/wpa_supplicant/ctrl_iface.c @@ -4680,6 +4680,11 @@ static int p2p_ctrl_set(struct wpa_supplicant *wpa_s, char *cmd) return wpas_p2p_nfc_tag_enabled(wpa_s, !!atoi(param)); #endif /* CONFIG_WPS_NFC */ + if (os_strcmp(cmd, "disable_ip_addr_req") == 0) { + wpa_s->p2p_disable_ip_addr_req = !!atoi(param); + return 0; + } + wpa_printf(MSG_DEBUG, "CTRL_IFACE: Unknown P2P_SET field value '%s'", cmd); @@ -5356,6 +5361,7 @@ static void wpa_supplicant_ctrl_iface_flush(struct wpa_supplicant *wpa_s) wpa_s->global->p2p_disabled = 0; wpa_s->global->p2p_per_sta_psk = 0; wpa_s->conf->num_sec_device_types = 0; + wpa_s->p2p_disable_ip_addr_req = 0; #endif /* CONFIG_P2P */ #ifdef CONFIG_WPS_TESTING diff --git a/wpa_supplicant/wpa_supplicant_i.h b/wpa_supplicant/wpa_supplicant_i.h index 6390ca280..267c22609 100644 --- a/wpa_supplicant/wpa_supplicant_i.h +++ b/wpa_supplicant/wpa_supplicant_i.h @@ -716,6 +716,7 @@ struct wpa_supplicant { int p2p_first_connection_timeout; unsigned int p2p_nfc_tag_enabled:1; unsigned int p2p_peer_oob_pk_hash_known:1; + unsigned int p2p_disable_ip_addr_req:1; int p2p_persistent_go_freq; int p2p_persistent_id; int p2p_go_intent; diff --git a/wpa_supplicant/wpas_glue.c b/wpa_supplicant/wpas_glue.c index 0dca0e629..e8a4b356e 100644 --- a/wpa_supplicant/wpas_glue.c +++ b/wpa_supplicant/wpas_glue.c @@ -949,7 +949,8 @@ void wpa_supplicant_rsn_supp_set_config(struct wpa_supplicant *wpa_s, conf.ssid_len = ssid->ssid_len; conf.wpa_ptk_rekey = ssid->wpa_ptk_rekey; #ifdef CONFIG_P2P - if (ssid->p2p_group && wpa_s->current_bss) { + if (ssid->p2p_group && wpa_s->current_bss && + !wpa_s->p2p_disable_ip_addr_req) { struct wpabuf *p2p; p2p = wpa_bss_get_vendor_ie_multi(wpa_s->current_bss, P2P_IE_VENDOR_TYPE);