P2P: support p2p configuration for the dedicated P2P interface am: 0a229ee013
Original change: https://googleplex-android-review.googlesource.com/c/platform/external/wpa_supplicant_8/+/19235238
Change-Id: I808b444eb7afa4eb916cf55ac026cd2dac2b94cb
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/wpa_supplicant/aidl/supplicant.cpp b/wpa_supplicant/aidl/supplicant.cpp
index ee6f809..799790b 100644
--- a/wpa_supplicant/aidl/supplicant.cpp
+++ b/wpa_supplicant/aidl/supplicant.cpp
@@ -303,12 +303,38 @@
wpa_printf(MSG_DEBUG, "%s,NULL wpa_s for wlan0", __FUNCTION__);
return createStatus(SupplicantStatusCode::FAILURE_IFACE_UNKNOWN);
}
- if (wpas_p2p_add_p2pdev_interface(
- wpa_s, wpa_s->global->params.conf_p2p_dev) < 0) {
+
+ const u8 *if_addr = NULL;
+ char force_name[100] = {'\0'};
+ wpa_s->pending_interface_type = WPA_IF_P2P_DEVICE;
+ if (wpa_s->conf->p2p_device_random_mac_addr == 2 &&
+ !is_zero_ether_addr(wpa_s->conf->p2p_device_persistent_mac_addr))
+ if_addr = wpa_s->conf->p2p_device_persistent_mac_addr;
+
+ int ret = wpa_drv_if_add(wpa_s, WPA_IF_P2P_DEVICE, iface_params.ifname, if_addr, NULL,
+ force_name, wpa_s->pending_interface_addr, NULL);
+ if (ret < 0) {
+ wpa_printf(MSG_DEBUG, "P2P: Failed to create P2P Device interface");
+ return createStatus(SupplicantStatusCode::FAILURE_UNKNOWN);
+ }
+
+ os_strlcpy(wpa_s->pending_interface_name, iface_params.ifname,
+ sizeof(wpa_s->pending_interface_name));
+ iface_params.p2p_mgmt = 1;
+ iface_params.driver_param = wpa_s->conf->driver_param;
+ iface_params.ctrl_interface = NULL;
+
+ struct wpa_supplicant *p2pdev_wpa_s = wpa_supplicant_add_iface(
+ wpa_s->global, &iface_params, wpa_s);
+
+ if (!p2pdev_wpa_s) {
wpa_printf(MSG_INFO,
"Failed to enable P2P Device");
return createStatus(SupplicantStatusCode::FAILURE_UNKNOWN);
}
+ p2pdev_wpa_s->p2pdev = p2pdev_wpa_s;
+ wpa_s->pending_interface_name[0] = '\0';
+
return ndk::ScopedAStatus::ok();
}
@@ -321,6 +347,13 @@
if (name.empty()) {
return {nullptr, createStatus(SupplicantStatusCode::FAILURE_ARGS_INVALID)};
}
+ if (strncmp(name.c_str(), P2P_MGMT_DEVICE_PREFIX, strlen(P2P_MGMT_DEVICE_PREFIX)) == 0) {
+ struct wpa_supplicant* wpa_s = wpa_supplicant_get_iface(wpa_global_, name.c_str());
+ if (wpa_s) {
+ wpa_printf(MSG_DEBUG, "Remove existing p2p dev interface");
+ wpa_supplicant_remove_iface(wpa_global_, wpa_s, 0);
+ }
+ }
// Try to get the wpa_supplicant record for this iface, return
// the iface object with the appropriate status code if it exists.
ndk::ScopedAStatus status;