diff options
| -rw-r--r-- | core/java/android/net/metrics/ConnectivityServiceChangeEvent.java | 20 | ||||
| -rw-r--r-- | services/core/java/com/android/server/ConnectivityService.java | 14 |
2 files changed, 27 insertions, 7 deletions
diff --git a/core/java/android/net/metrics/ConnectivityServiceChangeEvent.java b/core/java/android/net/metrics/ConnectivityServiceChangeEvent.java index c6fcb2d5c713..731d5e673926 100644 --- a/core/java/android/net/metrics/ConnectivityServiceChangeEvent.java +++ b/core/java/android/net/metrics/ConnectivityServiceChangeEvent.java @@ -25,18 +25,30 @@ import android.os.Parcelable; 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 class ConnectivityServiceChangeEvent extends IpConnectivityEvent implemen } }; - 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 2ccc3fe80edf..d8b3a97de378 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -2206,6 +2206,12 @@ public class ConnectivityService extends IConnectivityManager.Stub } 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 @@ public class ConnectivityService extends IConnectivityManager.Stub 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 @@ public class ConnectivityService extends IConnectivityManager.Stub 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 @@ public class ConnectivityService extends IConnectivityManager.Stub } 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 |