Skip to content
Snippets Groups Projects
Commit 4980a520 authored by Yan Yan's avatar Yan Yan
Browse files

Re-evaluate network when IPsec loss exceeds the threshold

Bug: 329139898
Test: atest IpSecPacketLossDetectorTest (new tests)
Change-Id: Icc31fe7f1b76e7849c910b3cd1c300bcf4c1f3a3
parent ea4b420b
No related branches found
No related tags found
No related merge requests found
......@@ -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 */);
}
}
}
......
......@@ -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() {
......
......@@ -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
......
......@@ -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);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment