summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJong Wook Kim <jongwook@google.com>2018-04-09 10:13:53 -0700
committerJong Wook Kim <jongwook@google.com>2018-04-24 15:42:54 -0700
commit28a6c752451084392a71b3c70d984ef9e066d4e2 (patch)
tree7e7b297485d9496f33631a55e1e20c4f8937cbc2
parent61b3c8fc8d4af0ed5283520dcd7b40723721d720 (diff)
Wifi Framework Connected MAC Randomization Metrics
Record metrics related to Connected MAC Randomization feature. 1) Update whether the feature is turned on/off in metrics. 2) Trigger StaEvent whenever the device is dynamically changing its MAC address. Also, change MAC randomization logging in WifiStateMachine. Bug: 73666905 Test: Unittest Test: Manual check Change-Id: I3a34d6adb877fa7c8738252363c4cc1921bb1d7e
-rw-r--r--service/java/com/android/server/wifi/WifiMetrics.java16
-rw-r--r--service/java/com/android/server/wifi/WifiStateMachine.java12
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiMetricsTest.java12
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiStateMachineTest.java24
4 files changed, 55 insertions, 9 deletions
diff --git a/service/java/com/android/server/wifi/WifiMetrics.java b/service/java/com/android/server/wifi/WifiMetrics.java
index 584e51043..5bb23b060 100644
--- a/service/java/com/android/server/wifi/WifiMetrics.java
+++ b/service/java/com/android/server/wifi/WifiMetrics.java
@@ -198,6 +198,8 @@ public class WifiMetrics {
/** Wifi Wake metrics */
private final WifiWakeMetrics mWifiWakeMetrics = new WifiWakeMetrics();
+ private boolean mIsMacRandomizationOn = false;
+
class RouterFingerPrint {
private WifiMetricsProto.RouterFingerPrint mRouterFingerPrintProto;
RouterFingerPrint() {
@@ -1707,6 +1709,13 @@ public class WifiMetrics {
}
}
+ /** Sets if Connected MAC Randomization feature is enabled */
+ public void setIsMacRandomizationOn(boolean enabled) {
+ synchronized (mLock) {
+ mIsMacRandomizationOn = enabled;
+ }
+ }
+
public static final String PROTO_DUMP_ARG = "wifiMetricsProto";
public static final String CLEAN_DUMP_ARG = "clean";
@@ -2050,6 +2059,8 @@ public class WifiMetrics {
mWifiPowerMetrics.dump(pw);
mWifiWakeMetrics.dump(pw);
+
+ pw.println("mWifiLogProto.isMacRandomizationOn=" + mIsMacRandomizationOn);
}
}
}
@@ -2341,6 +2352,7 @@ public class WifiMetrics {
mWifiLogProto.wpsMetrics = mWpsMetrics;
mWifiLogProto.wifiPowerStats = mWifiPowerMetrics.buildProto();
mWifiLogProto.wifiWakeStats = mWifiWakeMetrics.buildProto();
+ mWifiLogProto.isMacRandomizationOn = mIsMacRandomizationOn;
}
}
@@ -2532,6 +2544,7 @@ public class WifiMetrics {
case StaEvent.TYPE_NETWORK_AGENT_VALID_NETWORK:
case StaEvent.TYPE_FRAMEWORK_DISCONNECT:
case StaEvent.TYPE_SCORE_BREACH:
+ case StaEvent.TYPE_MAC_CHANGE:
break;
default:
Log.e(TAG, "Unknown StaEvent:" + type);
@@ -2724,6 +2737,9 @@ public class WifiMetrics {
case StaEvent.TYPE_SCORE_BREACH:
sb.append("SCORE_BREACH");
break;
+ case StaEvent.TYPE_MAC_CHANGE:
+ sb.append("MAC_CHANGE");
+ break;
default:
sb.append("UNKNOWN " + event.type + ":");
break;
diff --git a/service/java/com/android/server/wifi/WifiStateMachine.java b/service/java/com/android/server/wifi/WifiStateMachine.java
index 10b55b9d5..d478e971c 100644
--- a/service/java/com/android/server/wifi/WifiStateMachine.java
+++ b/service/java/com/android/server/wifi/WifiStateMachine.java
@@ -3267,15 +3267,14 @@ public class WifiStateMachine extends StateMachine {
if (!WifiConfiguration.isValidMacAddressForRandomization(newMac)) {
Log.wtf(TAG, "Config generated an invalid MAC address");
} else if (currentMac.equals(newMac)) {
- Log.i(TAG, "No changes in MAC address");
+ Log.d(TAG, "No changes in MAC address");
} else {
- Log.i(TAG, "ConnectedMacRandomization SSID(" + config.getPrintableSsid()
- + "). setMacAddress(" + newMac.toString() + ") from "
- + currentMac.toString());
+ mWifiMetrics.logStaEvent(StaEvent.TYPE_MAC_CHANGE, config);
boolean setMacSuccess =
mWifiNative.setMacAddress(mInterfaceName, newMac);
- Log.i(TAG, "ConnectedMacRandomization ...setMacAddress("
- + newMac.toString() + ") = " + setMacSuccess);
+ Log.d(TAG, "ConnectedMacRandomization SSID(" + config.getPrintableSsid()
+ + "). setMacAddress(" + newMac.toString() + ") from "
+ + currentMac.toString() + " = " + setMacSuccess);
}
}
@@ -3289,6 +3288,7 @@ public class WifiStateMachine extends StateMachine {
boolean macRandomizationEnabled = (macRandomizationFlag == 1);
mEnableConnectedMacRandomization.set(macRandomizationEnabled);
mWifiInfo.setEnableConnectedMacRandomization(macRandomizationEnabled);
+ mWifiMetrics.setIsMacRandomizationOn(macRandomizationEnabled);
Log.d(TAG, "EnableConnectedMacRandomization Setting changed to "
+ macRandomizationEnabled);
}
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiMetricsTest.java b/tests/wifitests/src/com/android/server/wifi/WifiMetricsTest.java
index 8212169dc..91f58c451 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiMetricsTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiMetricsTest.java
@@ -307,6 +307,7 @@ public class WifiMetricsTest {
private static final int NUM_SOFT_AP_ASSOCIATED_STATIONS = 3;
private static final int SOFT_AP_CHANNEL_FREQUENCY = 2437;
private static final int SOFT_AP_CHANNEL_BANDWIDTH = SoftApConnectedClientsEvent.BANDWIDTH_20;
+ private static final boolean IS_MAC_RANDOMIZATION_ON = true;
private ScanDetail buildMockScanDetail(boolean hidden, NetworkDetail.HSRelease hSRelease,
String capabilities) {
@@ -662,6 +663,7 @@ public class WifiMetricsTest {
}
mWifiMetrics.setWatchdogSuccessTimeDurationMs(NUM_WATCHDOG_SUCCESS_DURATION_MS);
+ mWifiMetrics.setIsMacRandomizationOn(IS_MAC_RANDOMIZATION_ON);
}
private void addSoftApEventsToMetrics() {
@@ -930,6 +932,7 @@ public class WifiMetricsTest {
assertEquals(NUM_WATCHDOG_SUCCESS_DURATION_MS,
mDecodedProto.watchdogTriggerToConnectionSuccessDurationMs);
+ assertEquals(IS_MAC_RANDOMIZATION_ON, mDecodedProto.isMacRandomizationOn);
}
/**
@@ -1299,7 +1302,7 @@ public class WifiMetricsTest {
private static final int ASSOC_TIMEOUT = 1;
private static final int LOCAL_GEN = 1;
private static final int AUTH_FAILURE_REASON = WifiManager.ERROR_AUTH_FAILURE_WRONG_PSWD;
- private static final int NUM_TEST_STA_EVENTS = 15;
+ private static final int NUM_TEST_STA_EVENTS = 16;
private static final String sSSID = "\"SomeTestSsid\"";
private static final WifiSsid sWifiSsid = WifiSsid.createFromAsciiEncoded(sSSID);
private static final String sBSSID = "01:02:03:04:05:06";
@@ -1348,7 +1351,8 @@ public class WifiMetricsTest {
{StaEvent.TYPE_CONNECT_NETWORK, 0, 1},
{StaEvent.TYPE_NETWORK_AGENT_VALID_NETWORK, 0, 0},
{StaEvent.TYPE_FRAMEWORK_DISCONNECT, StaEvent.DISCONNECT_API, 0},
- {StaEvent.TYPE_SCORE_BREACH, 0, 0}
+ {StaEvent.TYPE_SCORE_BREACH, 0, 0},
+ {StaEvent.TYPE_MAC_CHANGE, 0, 1}
};
// Values used to generate the StaEvent log calls from WifiMonitor
// <type>, <reason>, <status>, <local_gen>,
@@ -1383,7 +1387,9 @@ public class WifiMetricsTest {
{StaEvent.TYPE_FRAMEWORK_DISCONNECT, -1, -1, 0,
/**/ 0, 0, 0, 0}, /**/
{StaEvent.TYPE_SCORE_BREACH, -1, -1, 0,
- /**/ 0, 0, 0, 0} /**/
+ /**/ 0, 0, 0, 0}, /**/
+ {StaEvent.TYPE_MAC_CHANGE, -1, -1, 0,
+ /**/ 0, 0, 0, 1} /**/
};
/**
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiStateMachineTest.java b/tests/wifitests/src/com/android/server/wifi/WifiStateMachineTest.java
index 1907c56b7..93bf2d52d 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiStateMachineTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiStateMachineTest.java
@@ -91,6 +91,7 @@ import com.android.internal.util.StateMachine;
import com.android.server.wifi.hotspot2.NetworkDetail;
import com.android.server.wifi.hotspot2.PasspointManager;
import com.android.server.wifi.hotspot2.PasspointProvisioningTestUtil;
+import com.android.server.wifi.nano.WifiMetricsProto.StaEvent;
import com.android.server.wifi.p2p.WifiP2pServiceImpl;
import com.android.server.wifi.util.WifiPermissionsUtil;
import com.android.server.wifi.util.WifiPermissionsWrapper;
@@ -2312,6 +2313,8 @@ public class WifiStateMachineTest {
assertNotEquals(TEST_GLOBAL_MAC_ADDRESS, newMac);
verify(mWifiConfigManager).setNetworkRandomizedMacAddress(eq(0), eq(newMac));
verify(mWifiNative).setMacAddress(eq(WIFI_IFACE_NAME), eq(newMac));
+ verify(mWifiMetrics)
+ .logStaEvent(eq(StaEvent.TYPE_MAC_CHANGE), any(WifiConfiguration.class));
assertEquals(mWsm.getWifiInfo().getMacAddress(), newMac.toString());
}
@@ -2358,6 +2361,8 @@ public class WifiStateMachineTest {
verify(mWifiConfigManager, never())
.setNetworkRandomizedMacAddress(eq(0), any(MacAddress.class));
verify(mWifiNative, never()).setMacAddress(eq(WIFI_IFACE_NAME), any(MacAddress.class));
+ verify(mWifiMetrics, never())
+ .logStaEvent(eq(StaEvent.TYPE_MAC_CHANGE), any(WifiConfiguration.class));
assertEquals(mWsm.getWifiInfo().getMacAddress(), oldMac);
}
@@ -2391,6 +2396,25 @@ public class WifiStateMachineTest {
}
/**
+ * Verifies that turning on/off Connected MAC Randomization correctly updates metrics.
+ */
+ @Test
+ public void testUpdateConnectedMacRandomizationSettingMetrics() throws Exception {
+ // Called during setUp
+ verify(mWifiMetrics).setIsMacRandomizationOn(false);
+
+ when(mFrameworkFacade.getIntegerSetting(mContext,
+ Settings.Global.WIFI_CONNECTED_MAC_RANDOMIZATION_ENABLED, 0)).thenReturn(1);
+ mContentObserver.onChange(false);
+ verify(mWifiMetrics).setIsMacRandomizationOn(true);
+
+ when(mFrameworkFacade.getIntegerSetting(mContext,
+ Settings.Global.WIFI_CONNECTED_MAC_RANDOMIZATION_ENABLED, 0)).thenReturn(0);
+ mContentObserver.onChange(false);
+ verify(mWifiMetrics, times(2)).setIsMacRandomizationOn(false);
+ }
+
+ /**
* Verify that we do not crash on quick toggling wifi on/off
*/
@Test