Merge changes Ia71865a9,I40b6de54 into nyc-dev
* changes:
Log an event whenever we lose the default network.
Record the transport types for connectivity events.
diff --git a/core/java/android/net/metrics/ConnectivityServiceChangeEvent.java b/core/java/android/net/metrics/ConnectivityServiceChangeEvent.java
index c6fcb2d..731d5e6 100644
--- a/core/java/android/net/metrics/ConnectivityServiceChangeEvent.java
+++ b/core/java/android/net/metrics/ConnectivityServiceChangeEvent.java
@@ -25,18 +25,30 @@
public class ConnectivityServiceChangeEvent extends IpConnectivityEvent implements Parcelable {
public static final String TAG = "ConnectivityServiceChangeEvent";
- private int mNetId;
+ // The ID of the network that has become the new default or NETID_UNSET if none.
+ private final int mNetId;
+ // The ID of the network that was the default before or NETID_UNSET if none.
+ private final int mPrevNetId;
+ // The list of transport types of the new default network, for example TRANSPORT_WIFI, as
+ // defined in NetworkCapabilities.java.
+ private final int[] mTransportTypes;
- public ConnectivityServiceChangeEvent(int netId) {
+ public ConnectivityServiceChangeEvent(int netId, int prevNetId, int[] transportTypes) {
mNetId = netId;
+ mPrevNetId = prevNetId;
+ mTransportTypes = transportTypes;
}
public ConnectivityServiceChangeEvent(Parcel in) {
mNetId = in.readInt();
+ mPrevNetId = in.readInt();
+ mTransportTypes = in.createIntArray();
}
public void writeToParcel(Parcel out, int flags) {
out.writeInt(mNetId);
+ out.writeInt(mPrevNetId);
+ out.writeIntArray(mTransportTypes);
}
public static final Parcelable.Creator<ConnectivityServiceChangeEvent> CREATOR
@@ -50,8 +62,8 @@
}
};
- public static void logEvent(int netId) {
+ public static void logEvent(int netId, int prevNetId, int[] transportTypes) {
IpConnectivityEvent.logEvent(IpConnectivityEvent.IPCE_CONSRV_DEFAULT_NET_CHANGE,
- new ConnectivityServiceChangeEvent(netId));
+ new ConnectivityServiceChangeEvent(netId, prevNetId, transportTypes));
}
};
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index 2ccc3fe..d8b3a97 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -2206,6 +2206,12 @@
}
mLegacyTypeTracker.remove(nai, wasDefault);
rematchAllNetworksAndRequests(null, 0);
+ if (wasDefault && getDefaultNetwork() == null) {
+ // Log that we lost the default network and there is no replacement.
+ final int[] transportTypes = new int[0];
+ ConnectivityServiceChangeEvent.logEvent(NETID_UNSET, nai.network.netId,
+ transportTypes);
+ }
if (nai.created) {
// Tell netd to clean up the configuration for this network
// (routing rules, DNS, etc).
@@ -4427,9 +4433,9 @@
teardownUnneededNetwork(oldNetwork);
}
- private void makeDefault(NetworkAgentInfo newNetwork) {
+ private void makeDefault(NetworkAgentInfo newNetwork, NetworkAgentInfo prevNetwork) {
+ int prevNetId = (prevNetwork == null) ? NETID_UNSET : prevNetwork.network.netId;
if (DBG) log("Switching to new default network: " + newNetwork);
- ConnectivityServiceChangeEvent.logEvent(newNetwork.network.netId);
setupDataActivityTracking(newNetwork);
try {
mNetd.setDefaultNetId(newNetwork.network.netId);
@@ -4440,6 +4446,8 @@
handleApplyDefaultProxy(newNetwork.linkProperties.getHttpProxy());
updateTcpBufferSizes(newNetwork);
setDefaultDnsSystemProperties(newNetwork.linkProperties.getDnsServers());
+ ConnectivityServiceChangeEvent.logEvent(newNetwork.network.netId, prevNetId,
+ newNetwork.networkCapabilities.getTransportTypes());
}
// Handles a network appearing or improving its score.
@@ -4590,7 +4598,7 @@
}
if (isNewDefault) {
// Notify system services that this network is up.
- makeDefault(newNetwork);
+ makeDefault(newNetwork, oldDefaultNetwork);
synchronized (ConnectivityService.this) {
// have a new default network, release the transition wakelock in
// a second if it's held. The second pause is to allow apps