Retrieve p2p dev address from config store when bootup completed
Bug: 260966589
Test: atest WifiP2pServiceImplTest
Test: manually verified it from log when disabling p2p mac randomization
Change-Id: I9f883ed1e317be68f414744c518d050a2d6aed54
diff --git a/service/java/com/android/server/wifi/WifiSettingsConfigStore.java b/service/java/com/android/server/wifi/WifiSettingsConfigStore.java
index 75e5557..1b7e5b3 100644
--- a/service/java/com/android/server/wifi/WifiSettingsConfigStore.java
+++ b/service/java/com/android/server/wifi/WifiSettingsConfigStore.java
@@ -84,6 +84,12 @@
new Key<>("wifi_p2p_device_name", null);
/**
+ * The Wi-Fi peer-to-peer device mac address
+ */
+ public static final Key<String> WIFI_P2P_DEVICE_ADDRESS =
+ new Key<>("wifi_p2p_device_address", null);
+
+ /**
* Whether Wifi scoring is enabled or not.
*/
public static final Key<Boolean> WIFI_SCORING_ENABLED =
diff --git a/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java b/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java
index 7d8f754..f7be88c 100644
--- a/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java
+++ b/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java
@@ -21,6 +21,7 @@
import static com.android.net.module.util.Inet4AddressUtils.inet4AddressToIntHTL;
import static com.android.net.module.util.Inet4AddressUtils.netmaskToPrefixLength;
+import static com.android.server.wifi.WifiSettingsConfigStore.WIFI_P2P_DEVICE_ADDRESS;
import static com.android.server.wifi.WifiSettingsConfigStore.WIFI_P2P_DEVICE_NAME;
import static com.android.server.wifi.WifiSettingsConfigStore.WIFI_P2P_PENDING_FACTORY_RESET;
import static com.android.server.wifi.WifiSettingsConfigStore.WIFI_VERBOSE_LOGGING_ENABLED;
@@ -690,6 +691,14 @@
if (mTetheringManager == null) {
Log.wtf(TAG, "Tethering manager is null when WifiP2pServiceImp handles boot completed");
}
+ String deviceAddress = mSettingsConfigStore.get(WIFI_P2P_DEVICE_ADDRESS);
+ if (!mWifiGlobals.isP2pMacRandomizationSupported() && !TextUtils.isEmpty(deviceAddress)) {
+ mThisDevice.deviceAddress = deviceAddress;
+ }
+ String deviceName = mSettingsConfigStore.get(WIFI_P2P_DEVICE_NAME);
+ if (!TextUtils.isEmpty(deviceName)) {
+ mThisDevice.deviceName = deviceName;
+ }
}
private void updateVerboseLoggingEnabled() {
@@ -5916,6 +5925,9 @@
mWifiNative.setConfigMethods("virtual_push_button physical_display keypad");
mThisDevice.deviceAddress = mWifiNative.p2pGetDeviceAddress();
+ if (!mWifiGlobals.isP2pMacRandomizationSupported()) {
+ mSettingsConfigStore.put(WIFI_P2P_DEVICE_ADDRESS, mThisDevice.deviceAddress);
+ }
updateThisDevice(WifiP2pDevice.AVAILABLE);
mWifiNative.p2pFlush();
mWifiNative.p2pServiceFlush();
diff --git a/service/tests/wifitests/src/com/android/server/wifi/p2p/WifiP2pServiceImplTest.java b/service/tests/wifitests/src/com/android/server/wifi/p2p/WifiP2pServiceImplTest.java
index e7ce468..9a7a3a3 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/p2p/WifiP2pServiceImplTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/p2p/WifiP2pServiceImplTest.java
@@ -23,6 +23,7 @@
import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession;
import static com.android.net.module.util.Inet4AddressUtils.inet4AddressToIntHTL;
+import static com.android.server.wifi.WifiSettingsConfigStore.WIFI_P2P_DEVICE_ADDRESS;
import static com.android.server.wifi.WifiSettingsConfigStore.WIFI_P2P_DEVICE_NAME;
import static com.android.server.wifi.WifiSettingsConfigStore.WIFI_P2P_PENDING_FACTORY_RESET;
import static com.android.server.wifi.WifiSettingsConfigStore.WIFI_VERBOSE_LOGGING_ENABLED;
@@ -1301,6 +1302,8 @@
when(mContext.getOpPackageName()).thenReturn("android");
when(mContext.getAttributionTag()).thenReturn("feature");
when(mWifiManager.getConnectionInfo()).thenReturn(mWifiInfo);
+ when(mWifiGlobals.isP2pMacRandomizationSupported()).thenReturn(false);
+ when(mWifiSettingsConfigStore.get(eq(WIFI_P2P_DEVICE_ADDRESS))).thenReturn(thisDeviceMac);
when(mWifiSettingsConfigStore.get(eq(WIFI_P2P_DEVICE_NAME))).thenReturn(thisDeviceName);
when(mWifiSettingsConfigStore.get(eq(WIFI_P2P_PENDING_FACTORY_RESET))).thenReturn(false);
when(mHandlerThread.getLooper()).thenReturn(mLooper.getLooper());
@@ -3632,8 +3635,8 @@
verify(mClientHandler).sendMessage(mMessageCaptor.capture());
assertEquals(WifiP2pManager.RESPONSE_DEVICE_INFO, mMessageCaptor.getValue().what);
WifiP2pDevice wifiP2pDevice = (WifiP2pDevice) mMessageCaptor.getValue().obj;
- assertEquals("", wifiP2pDevice.deviceAddress);
- assertEquals("", wifiP2pDevice.deviceName);
+ assertEquals(ANONYMIZED_DEVICE_ADDRESS, wifiP2pDevice.deviceAddress);
+ assertEquals(thisDeviceName, wifiP2pDevice.deviceName);
}
/**
@@ -4469,6 +4472,7 @@
*/
@Test
public void testSetDeviceNameFailureWithNameExceedMaximumLength() throws Exception {
+ when(mWifiGlobals.isP2pMacRandomizationSupported()).thenReturn(true);
// Move to enabled state
forceP2pEnabled(mClient1);
mTestThisDevice.status = mTestThisDevice.AVAILABLE;
@@ -4492,8 +4496,8 @@
* longer than the maximum length.
*/
@Test
- public void testSetDeviceNameFailureWithMultilingualNameExceedMaximumLength()
- throws Exception {
+ public void testSetDeviceNameFailureWithMultilingualNameExceedMaximumLength() throws Exception {
+ when(mWifiGlobals.isP2pMacRandomizationSupported()).thenReturn(true);
// Move to enabled state
forceP2pEnabled(mClient1);
mTestThisDevice.status = mTestThisDevice.AVAILABLE;
@@ -4518,6 +4522,7 @@
*/
@Test
public void testSetDeviceNameFailureWithEmptyName() throws Exception {
+ when(mWifiGlobals.isP2pMacRandomizationSupported()).thenReturn(true);
// Move to enabled state
forceP2pEnabled(mClient1);
mTestThisDevice.status = mTestThisDevice.AVAILABLE;
@@ -4632,6 +4637,21 @@
assertEquals(WifiP2pManager.ERROR, message.arg1);
}
+ @Test
+ public void testRestoreDeviceNameAndMacWhenMacRandomizationNotSupported() throws Exception {
+ simulateWifiStateChange(true);
+ simulateInitChannel(mClient1);
+ sendSimpleMsg(mClientMessenger, WifiP2pManager.REQUEST_DEVICE_INFO);
+
+ verify(mWifiNative, never()).setupInterface(any(), any(), any());
+ verify(mClientHandler).sendMessage(mMessageCaptor.capture());
+ assertEquals(WifiP2pManager.RESPONSE_DEVICE_INFO, mMessageCaptor.getValue().what);
+ WifiP2pDevice wifiP2pDevice = (WifiP2pDevice) mMessageCaptor.getValue().obj;
+ //maybeEraseOwnDeviceAddress
+ assertEquals(ANONYMIZED_DEVICE_ADDRESS, wifiP2pDevice.deviceAddress);
+ assertEquals(thisDeviceName, wifiP2pDevice.deviceName);
+ }
+
/**
* Verify the caller sends WifiP2pManager.SET_WFD_INFO with wfd enabled.
*/
@@ -6948,6 +6968,8 @@
} else {
// Device status is UNAVAILABLE
mTestThisDevice = new WifiP2pDevice();
+ mTestThisDevice.deviceName = thisDeviceName;
+ mTestThisDevice.deviceAddress = thisDeviceMac;
checkSendThisDeviceChangedBroadcast();
sendSimpleMsg(mClientMessenger, WifiP2pManager.REQUEST_DEVICE_INFO);
verify(mClientHandler, times(2)).sendMessage(mMessageCaptor.capture());