summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYan Yan <evitayan@google.com>2024-03-22 00:04:36 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2024-03-22 00:04:36 +0000
commit44f56eb3c863e25f164cb4bd9d8638b758f261f1 (patch)
treecaf52df25832ecbcfeb6a33f7b3ec61434d4bd94
parentffe63966ee48b35a567e483983a2f73a42e5c253 (diff)
parent4980a5209ce241c694f53dc712861674dcdae86b (diff)
downloadbase-44f56eb3c863e25f164cb4bd9d8638b758f261f1.tar.gz
Merge "Re-evaluate network when IPsec loss exceeds the threshold" into main
-rw-r--r--services/core/java/com/android/server/vcn/routeselection/IpSecPacketLossDetector.java12
-rw-r--r--services/core/java/com/android/server/vcn/routeselection/NetworkMetricMonitor.java5
-rw-r--r--tests/vcn/java/com/android/server/vcn/routeselection/IpSecPacketLossDetectorTest.java1
-rw-r--r--tests/vcn/java/com/android/server/vcn/routeselection/NetworkEvaluationTestBase.java15
4 files changed, 33 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/vcn/routeselection/IpSecPacketLossDetector.java b/services/core/java/com/android/server/vcn/routeselection/IpSecPacketLossDetector.java
index a25d67ab66af..f3d7dd19ecc2 100644
--- a/services/core/java/com/android/server/vcn/routeselection/IpSecPacketLossDetector.java
+++ b/services/core/java/com/android/server/vcn/routeselection/IpSecPacketLossDetector.java
@@ -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 */);
+ }
}
}
diff --git a/services/core/java/com/android/server/vcn/routeselection/NetworkMetricMonitor.java b/services/core/java/com/android/server/vcn/routeselection/NetworkMetricMonitor.java
index 1704aa117a2b..4bacf3b8abe5 100644
--- a/services/core/java/com/android/server/vcn/routeselection/NetworkMetricMonitor.java
+++ b/services/core/java/com/android/server/vcn/routeselection/NetworkMetricMonitor.java
@@ -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() {
diff --git a/tests/vcn/java/com/android/server/vcn/routeselection/IpSecPacketLossDetectorTest.java b/tests/vcn/java/com/android/server/vcn/routeselection/IpSecPacketLossDetectorTest.java
index 1d7be2f4f039..5107943c3528 100644
--- a/tests/vcn/java/com/android/server/vcn/routeselection/IpSecPacketLossDetectorTest.java
+++ b/tests/vcn/java/com/android/server/vcn/routeselection/IpSecPacketLossDetectorTest.java
@@ -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
diff --git a/tests/vcn/java/com/android/server/vcn/routeselection/NetworkEvaluationTestBase.java b/tests/vcn/java/com/android/server/vcn/routeselection/NetworkEvaluationTestBase.java
index 381c57496878..444208edc473 100644
--- a/tests/vcn/java/com/android/server/vcn/routeselection/NetworkEvaluationTestBase.java
+++ b/tests/vcn/java/com/android/server/vcn/routeselection/NetworkEvaluationTestBase.java
@@ -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();
@@ -130,6 +139,12 @@ public abstract class NetworkEvaluationTestBase {
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);
when(mTelephonyManager.getNetworkOperator()).thenReturn(PLMN_ID);