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

Commit 0396be7c authored by Yan Yan's avatar Yan Yan Committed by Automerger Merge Worker
Browse files

Merge "Re-evaluate network when IPsec loss exceeds the threshold" into main...

Merge "Re-evaluate network when IPsec loss exceeds the threshold" into main am: 44f56eb3 am: 1d2639f5

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/3008503



Change-Id: I8a775608dc902d1f60501c299356043419de84f4
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 9b5bdc96 1d2639f5
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -24,8 +24,10 @@ import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.net.IpSecTransformState;
import android.net.Network;
import android.net.vcn.Flags;
import android.net.vcn.VcnManager;
import android.os.Handler;
import android.os.HandlerExecutor;
@@ -71,6 +73,7 @@ public class IpSecPacketLossDetector extends NetworkMetricMonitor {

    @NonNull private final Handler mHandler;
    @NonNull private final PowerManager mPowerManager;
    @NonNull private final ConnectivityManager mConnectivityManager;
    @NonNull private final Object mCancellationToken = new Object();
    @NonNull private final PacketLossCalculator mPacketLossCalculator;

@@ -98,6 +101,8 @@ public class IpSecPacketLossDetector extends NetworkMetricMonitor {
        mHandler = new Handler(getVcnContext().getLooper());

        mPowerManager = getVcnContext().getContext().getSystemService(PowerManager.class);
        mConnectivityManager =
                getVcnContext().getContext().getSystemService(ConnectivityManager.class);

        mPacketLossCalculator = deps.getPacketLossCalculator();

@@ -313,6 +318,13 @@ public class IpSecPacketLossDetector extends NetworkMetricMonitor {
        } else {
            logInfo(logMsg);
            onValidationResultReceivedInternal(true /* isFailed */);

            if (Flags.validateNetworkOnIpsecLoss()) {
                // Trigger re-validation of the underlying network; if it fails, the VCN will
                // attempt to migrate away.
                mConnectivityManager.reportNetworkConnectivity(
                        getNetwork(), false /* hasConnectivity */);
            }
        }
    }

+5 −0
Original line number Diff line number Diff line
@@ -203,6 +203,11 @@ public abstract class NetworkMetricMonitor implements AutoCloseable {
        return mVcnContext;
    }

    @NonNull
    public Network getNetwork() {
        return mNetwork;
    }

    // Override methods for AutoCloseable. Subclasses MUST call super when overriding this method
    @Override
    public void close() {
+1 −0
Original line number Diff line number Diff line
@@ -333,6 +333,7 @@ public class IpSecPacketLossDetectorTest extends NetworkEvaluationTestBase {
    public void testHandleLossRate_validationFail() throws Exception {
        checkHandleLossRate(
                22, true /* isLastStateExpectedToUpdate */, true /* isCallbackExpected */);
        verify(mConnectivityManager).reportNetworkConnectivity(mNetwork, false);
    }

    @Test
+15 −0
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.IpSecConfig;
import android.net.IpSecTransform;
import android.net.LinkProperties;
@@ -33,12 +34,14 @@ import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.TelephonyNetworkSpecifier;
import android.net.vcn.FeatureFlags;
import android.net.vcn.Flags;
import android.os.Handler;
import android.os.IPowerManager;
import android.os.IThermalService;
import android.os.ParcelUuid;
import android.os.PowerManager;
import android.os.test.TestLooper;
import android.platform.test.flag.junit.SetFlagsRule;
import android.telephony.TelephonyManager;

import com.android.server.vcn.TelephonySubscriptionTracker.TelephonySubscriptionSnapshot;
@@ -46,6 +49,7 @@ import com.android.server.vcn.VcnContext;
import com.android.server.vcn.VcnNetworkProvider;

import org.junit.Before;
import org.junit.Rule;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

@@ -53,6 +57,8 @@ import java.util.Set;
import java.util.UUID;

public abstract class NetworkEvaluationTestBase {
    @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();

    protected static final String SSID = "TestWifi";
    protected static final String SSID_OTHER = "TestWifiOther";
    protected static final String PLMN_ID = "123456";
@@ -103,6 +109,7 @@ public abstract class NetworkEvaluationTestBase {
    @Mock protected FeatureFlags mFeatureFlags;
    @Mock protected android.net.platform.flags.FeatureFlags mCoreNetFeatureFlags;
    @Mock protected TelephonySubscriptionSnapshot mSubscriptionSnapshot;
    @Mock protected ConnectivityManager mConnectivityManager;
    @Mock protected TelephonyManager mTelephonyManager;
    @Mock protected IPowerManager mPowerManagerService;

@@ -114,6 +121,8 @@ public abstract class NetworkEvaluationTestBase {
    public void setUp() throws Exception {
        MockitoAnnotations.initMocks(this);

        mSetFlagsRule.enableFlags(Flags.FLAG_VALIDATE_NETWORK_ON_IPSEC_LOSS);

        when(mNetwork.getNetId()).thenReturn(-1);

        mTestLooper = new TestLooper();
@@ -129,6 +138,12 @@ public abstract class NetworkEvaluationTestBase {
        doReturn(true).when(mVcnContext).isFlagNetworkMetricMonitorEnabled();
        doReturn(true).when(mVcnContext).isFlagIpSecTransformStateEnabled();

        setupSystemService(
                mContext,
                mConnectivityManager,
                Context.CONNECTIVITY_SERVICE,
                ConnectivityManager.class);

        setupSystemService(
                mContext, mTelephonyManager, Context.TELEPHONY_SERVICE, TelephonyManager.class);
        when(mTelephonyManager.createForSubscriptionId(SUB_ID)).thenReturn(mTelephonyManager);