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

Commit a22e926b authored by Paul Hu's avatar Paul Hu
Browse files

Add logging for VPN connection events

Adds logging to VpnConnectivityMetrics to record VPN connection
events.

Example logs:
VpnConnectivityMetrics logs (most recent first):
      2025-09-15T10:17:50.663552 - Report VPN connection event:\
      DISCONNECTED, vpnType=2, vpnProfileType=8, \
      underlyingNetworkTypes=[1], vpnNetworkIpProtocol=1, \
      serverIpProtocol=1, allowedAlgorithms=1999, mtu=1327
      2025-09-15T10:17:44.504636 - Report VPN connection event:\
      CONNECTED, vpnType=2, vpnProfileType=8, \
      underlyingNetworkTypes=[1], vpnNetworkIpProtocol=1, \
      serverIpProtocol=1, allowedAlgorithms=1999, mtu=1327

Bug: 429288223
Test: adb shell dumpsys vpn_management
Test: atest FrameworksVpnTests
Flag: EXEMPT DEBUG
Change-Id: Ic8d1f6411ade28a36d64dd2925bbd24ec8e567f1
parent a36b3bd1
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -4725,6 +4725,11 @@ public class Vpn {
            pw.increaseIndent();
            mEventChanges.reverseDump(pw);
            pw.decreaseIndent();

            if (mVpnConnectivityMetrics != null) {
                pw.println();
                mVpnConnectivityMetrics.dump(pw);
            }
        }
    }

+22 −0
Original line number Diff line number Diff line
@@ -34,6 +34,8 @@ import android.net.LinkAddress;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.VpnManager;
import android.util.IndentingPrintWriter;
import android.util.LocalLog;
import android.util.Log;
import android.util.SparseArray;
import android.util.SparseIntArray;
@@ -56,6 +58,8 @@ import java.util.List;
 */
public class VpnConnectivityMetrics {
    private static final String TAG = VpnConnectivityMetrics.class.getSimpleName();
    private static final int MAX_LOG_RECORDS = 100;
    private final LocalLog mMetricLogs = new LocalLog(MAX_LOG_RECORDS);
    // Copied from corenetworking platform vpn enum
    @VisibleForTesting
    static final int VPN_TYPE_UNKNOWN = 0;
@@ -454,6 +458,14 @@ public class VpnConnectivityMetrics {

    private void validateAndReportVpnConnectionEvent(boolean connected) {
        validateAndCorrectMetrics();
        mMetricLogs.log("Report VPN connection event: " + (connected ? "CONNECTED" : "DISCONNECTED")
                + ", vpnType=" + mVpnType
                + ", vpnProfileType=" + mVpnProfileType
                + ", underlyingNetworkTypes=" + Arrays.toString(mUnderlyingNetworkTypes)
                + ", vpnNetworkIpProtocol=" + mVpnNetworkIpProtocol
                + ", serverIpProtocol=" + mServerIpProtocol
                + ", allowedAlgorithms=" + mAllowedAlgorithms
                + ", mtu=" + mMtu);
        mDependencies.statsWrite(
                mVpnType,
                mVpnNetworkIpProtocol,
@@ -501,4 +513,14 @@ public class VpnConnectivityMetrics {
        mMtu = 0;
        mUnderlyingNetworkTypes = new int[0];
    }

    /**
     * Dumps the local log buffer.
     */
    public void dump(IndentingPrintWriter pw) {
        pw.println("VpnConnectivityMetrics logs (most recent first):");
        pw.increaseIndent();
        mMetricLogs.reverseDump(pw);
        pw.decreaseIndent();
    }
}