diff options
| author | 2016-04-14 17:30:59 +0900 | |
|---|---|---|
| committer | 2016-04-14 17:54:46 +0900 | |
| commit | 48f12f2ad6e59484f528978ce3627c16be3bf10d (patch) | |
| tree | a220eeed1c10c56c1be084a2caa9cd8d178e6f99 | |
| parent | 1feca76bd48008aa3421c8741cb147ecc1a6e912 (diff) | |
Also log IPv4 and IPv6 connectivity of any previous default network
Change-Id: I07595c0a131fea21914f524949cd64af87403b88
| -rw-r--r-- | core/java/android/net/metrics/ConnectivityServiceChangeEvent.java | 28 | ||||
| -rw-r--r-- | services/core/java/com/android/server/ConnectivityService.java | 27 |
2 files changed, 41 insertions, 14 deletions
diff --git a/core/java/android/net/metrics/ConnectivityServiceChangeEvent.java b/core/java/android/net/metrics/ConnectivityServiceChangeEvent.java index 731d5e673926..a491ffccad1f 100644 --- a/core/java/android/net/metrics/ConnectivityServiceChangeEvent.java +++ b/core/java/android/net/metrics/ConnectivityServiceChangeEvent.java @@ -27,28 +27,38 @@ public class ConnectivityServiceChangeEvent extends IpConnectivityEvent implemen // 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; + // The ID of the network that was the default before or NETID_UNSET if none. + private final int mPrevNetId; + // Whether the previous network had IPv4/IPv6 connectivity. + private final boolean mPrevIPv4; + private final boolean mPrevIPv6; - public ConnectivityServiceChangeEvent(int netId, int prevNetId, int[] transportTypes) { + public ConnectivityServiceChangeEvent(int netId, int[] transportTypes, + int prevNetId, boolean prevIPv4, boolean prevIPv6) { mNetId = netId; - mPrevNetId = prevNetId; mTransportTypes = transportTypes; + mPrevNetId = prevNetId; + mPrevIPv4 = prevIPv4; + mPrevIPv6 = prevIPv6; } public ConnectivityServiceChangeEvent(Parcel in) { mNetId = in.readInt(); - mPrevNetId = in.readInt(); mTransportTypes = in.createIntArray(); + mPrevNetId = in.readInt(); + mPrevIPv4 = (in.readByte() > 0); + mPrevIPv6 = (in.readByte() > 0); } public void writeToParcel(Parcel out, int flags) { out.writeInt(mNetId); - out.writeInt(mPrevNetId); out.writeIntArray(mTransportTypes); + out.writeInt(mPrevNetId); + out.writeByte(mPrevIPv4 ? (byte) 1 : (byte) 0); + out.writeByte(mPrevIPv6 ? (byte) 1 : (byte) 0); } public static final Parcelable.Creator<ConnectivityServiceChangeEvent> CREATOR @@ -62,8 +72,10 @@ public class ConnectivityServiceChangeEvent extends IpConnectivityEvent implemen } }; - public static void logEvent(int netId, int prevNetId, int[] transportTypes) { + public static void logEvent(int netId, int[] transportTypes, + int prevNetId, boolean prevIPv4, boolean prevIPv6) { IpConnectivityEvent.logEvent(IpConnectivityEvent.IPCE_CONSRV_DEFAULT_NET_CHANGE, - new ConnectivityServiceChangeEvent(netId, prevNetId, transportTypes)); + new ConnectivityServiceChangeEvent( + netId, transportTypes, prevNetId, prevIPv4, prevIPv6)); } }; diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index d8b3a97de378..e5fe03a06f62 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -2208,9 +2208,7 @@ public class ConnectivityService extends IConnectivityManager.Stub 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); + logConnectivityServiceChangeEvent(null, nai); } if (nai.created) { // Tell netd to clean up the configuration for this network @@ -4434,7 +4432,6 @@ public class ConnectivityService extends IConnectivityManager.Stub } 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); setupDataActivityTracking(newNetwork); try { @@ -4446,8 +4443,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()); + + logConnectivityServiceChangeEvent(newNetwork, prevNetwork); } // Handles a network appearing or improving its score. @@ -5068,4 +5065,22 @@ public class ConnectivityService extends IConnectivityManager.Stub NetworkAgentInfo nai, NetworkRequest defaultRequest) { return new NetworkMonitor(context, handler, nai, defaultRequest); } + + private static void logConnectivityServiceChangeEvent( + NetworkAgentInfo next, NetworkAgentInfo prev) { + final int newNetId = (next == null) ? NETID_UNSET : next.network.netId; + final int[] newTransportTypes = (next == null) + ? new int[0] + : next.networkCapabilities.getTransportTypes(); + + final int oldNetId = (prev == null) ? NETID_UNSET : prev.network.netId; + final boolean hadIPv4 = (prev != null) && + prev.linkProperties.hasIPv4Address() && + prev.linkProperties.hasIPv4DefaultRoute(); + final boolean hadIPv6 = (prev != null) && + prev.linkProperties.hasGlobalIPv6Address() && + prev.linkProperties.hasIPv6DefaultRoute(); + ConnectivityServiceChangeEvent.logEvent(newNetId, newTransportTypes, + oldNetId, hadIPv4, hadIPv6); + } } |