Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 48f12f2a authored by Erik Kline's avatar Erik Kline
Browse files

Also log IPv4 and IPv6 connectivity of any previous default network

Change-Id: I07595c0a131fea21914f524949cd64af87403b88
parent 1feca76b
Loading
Loading
Loading
Loading
+20 −8
Original line number Diff line number Diff line
@@ -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));
    }
};
+21 −6
Original line number Diff line number Diff line
@@ -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);
    }
}