summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTairu Wang <tairuw@google.com>2024-02-20 00:12:14 +0000
committerPo-Chun Lee <pochunlee@google.com>2024-02-20 00:17:16 +0000
commit2bb7b2a4be3d5ab39fa8b162a28442da37c0691f (patch)
treef0cd4116d7aaad47b6c13cc880a7d97ff29b9a9c
parent834bb2d3c26f125e820c33c196ba5ea69999b85a (diff)
downloadIwlan-2bb7b2a4be3d5ab39fa8b162a28442da37c0691f.tar.gz
Clarify tunnel bring down reason for tunnel closure.
Add bring down reason for each utilization of closeTunnel() Api. Bug: 309866889 Test: atest IwlanTests (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:2851ad69e00923cb42f413a1186a804b985e021b) Merged-In: I8de66471b7e3dc7f2e92c7e3ab1cbe749162272b Change-Id: I8de66471b7e3dc7f2e92c7e3ab1cbe749162272b
-rw-r--r--src/com/google/android/iwlan/IwlanDataService.java17
-rw-r--r--src/com/google/android/iwlan/epdg/EpdgTunnelManager.java34
-rw-r--r--test/com/google/android/iwlan/IwlanDataServiceTest.java35
-rw-r--r--test/com/google/android/iwlan/epdg/EpdgTunnelManagerTest.java14
4 files changed, 65 insertions, 35 deletions
diff --git a/src/com/google/android/iwlan/IwlanDataService.java b/src/com/google/android/iwlan/IwlanDataService.java
index 0259f28..c1c8bc3 100644
--- a/src/com/google/android/iwlan/IwlanDataService.java
+++ b/src/com/google/android/iwlan/IwlanDataService.java
@@ -20,6 +20,11 @@ import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
import static android.net.ipsec.ike.ike3gpp.Ike3gppParams.PDU_SESSION_ID_UNSET;
+import static com.google.android.iwlan.epdg.EpdgTunnelManager.BRINGDOWN_REASON_DEACTIVATE_DATA_CALL;
+import static com.google.android.iwlan.epdg.EpdgTunnelManager.BRINGDOWN_REASON_IN_DEACTIVATING_STATE;
+import static com.google.android.iwlan.epdg.EpdgTunnelManager.BRINGDOWN_REASON_NETWORK_UPDATE_WHEN_TUNNEL_IN_BRINGUP;
+import static com.google.android.iwlan.epdg.EpdgTunnelManager.BRINGDOWN_REASON_SERVICE_OUT_OF_SYNC;
+
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
@@ -923,7 +928,8 @@ public class IwlanDataService extends DataService {
entry.getKey(),
true /* forceClose */,
getIwlanTunnelCallback(),
- getIwlanTunnelMetrics());
+ getIwlanTunnelMetrics(),
+ BRINGDOWN_REASON_IN_DEACTIVATING_STATE);
}
}
}
@@ -1047,7 +1053,8 @@ public class IwlanDataService extends DataService {
entry.getKey(),
true /* forceClose */,
getIwlanTunnelCallback(),
- getIwlanTunnelMetrics());
+ getIwlanTunnelMetrics(),
+ BRINGDOWN_REASON_NETWORK_UPDATE_WHEN_TUNNEL_IN_BRINGUP);
}
}
}
@@ -1651,7 +1658,8 @@ public class IwlanDataService extends DataService {
dataProfile.getApnSetting().getApnName(),
true /* forceClose */,
iwlanDataServiceProvider.getIwlanTunnelCallback(),
- iwlanDataServiceProvider.getIwlanTunnelMetrics());
+ iwlanDataServiceProvider.getIwlanTunnelMetrics(),
+ BRINGDOWN_REASON_SERVICE_OUT_OF_SYNC);
iwlanDataServiceProvider.deliverCallback(
IwlanDataServiceProvider.CALLBACK_TYPE_SETUP_DATACALL_COMPLETE,
5 /* DataServiceCallback
@@ -1922,7 +1930,8 @@ public class IwlanDataService extends DataService {
matchingApn,
isNetworkLost || isHandoverSuccessful, /* forceClose */
serviceProvider.getIwlanTunnelCallback(),
- serviceProvider.getIwlanTunnelMetrics());
+ serviceProvider.getIwlanTunnelMetrics(),
+ BRINGDOWN_REASON_DEACTIVATE_DATA_CALL);
}
private void resumePendingDeactivationIfExists(
diff --git a/src/com/google/android/iwlan/epdg/EpdgTunnelManager.java b/src/com/google/android/iwlan/epdg/EpdgTunnelManager.java
index 47f3fa3..c350525 100644
--- a/src/com/google/android/iwlan/epdg/EpdgTunnelManager.java
+++ b/src/com/google/android/iwlan/epdg/EpdgTunnelManager.java
@@ -237,11 +237,19 @@ public class EpdgTunnelManager {
public static final int BRINGDOWN_REASON_UNKNOWN = 0;
public static final int BRINGDOWN_REASON_DISABLE_N1_MODE = 1;
public static final int BRINGDOWN_REASON_ENABLE_N1_MODE = 2;
+ public static final int BRINGDOWN_REASON_SERVICE_OUT_OF_SYNC = 3;
+ public static final int BRINGDOWN_REASON_IN_DEACTIVATING_STATE = 4;
+ public static final int BRINGDOWN_REASON_NETWORK_UPDATE_WHEN_TUNNEL_IN_BRINGUP = 5;
+ public static final int BRINGDOWN_REASON_DEACTIVATE_DATA_CALL = 6;
@IntDef({
BRINGDOWN_REASON_UNKNOWN,
BRINGDOWN_REASON_DISABLE_N1_MODE,
BRINGDOWN_REASON_ENABLE_N1_MODE,
+ BRINGDOWN_REASON_SERVICE_OUT_OF_SYNC,
+ BRINGDOWN_REASON_IN_DEACTIVATING_STATE,
+ BRINGDOWN_REASON_NETWORK_UPDATE_WHEN_TUNNEL_IN_BRINGUP,
+ BRINGDOWN_REASON_DEACTIVATE_DATA_CALL,
})
public @interface TunnelBringDownReason {}
@@ -253,6 +261,14 @@ public class EpdgTunnelManager {
return "BRINGDOWN_REASON_DISABLE_N1_MODE";
case BRINGDOWN_REASON_ENABLE_N1_MODE:
return "BRINGDOWN_REASON_ENABLE_N1_MODE";
+ case BRINGDOWN_REASON_SERVICE_OUT_OF_SYNC:
+ return "BRINGDOWN_REASON_SERVICE_OUT_OF_SYNC";
+ case BRINGDOWN_REASON_IN_DEACTIVATING_STATE:
+ return "BRINGDOWN_REASON_IN_DEACTIVATING_STATE";
+ case BRINGDOWN_REASON_NETWORK_UPDATE_WHEN_TUNNEL_IN_BRINGUP:
+ return "BRINGDOWN_REASON_NETWORK_UPDATE_WHEN_TUNNEL_IN_BRINGUP";
+ case BRINGDOWN_REASON_DEACTIVATE_DATA_CALL:
+ return "BRINGDOWN_REASON_DEACTIVATE_DATA_CALL";
default:
return "Unknown(" + reason + ")";
}
@@ -693,24 +709,6 @@ public class EpdgTunnelManager {
* provided in {@link #bringUpTunnel}. If no tunnel was available, callback will be delivered
* using client-provided provided tunnelCallback and iwlanTunnelMetrics
*
- * @param apnName apn name
- * @param forceClose if true, results in local cleanup of tunnel
- * @param tunnelCallback Used if no current or pending IWLAN tunnel exists
- * @param iwlanTunnelMetrics Used to report metrics if no current or pending IWLAN tunnel exists
- */
- // TODO(b/309866889): Clarify tunnel bring down reason for tunnel closure.
- public void closeTunnel(
- @NonNull String apnName,
- boolean forceClose,
- @NonNull TunnelCallback tunnelCallback,
- @NonNull IwlanTunnelMetricsImpl iwlanTunnelMetrics) {
- closeTunnel(
- apnName, forceClose, tunnelCallback, iwlanTunnelMetrics, BRINGDOWN_REASON_UNKNOWN);
- }
-
- /**
- * Closes tunnel for an apn with reason.
- *
* @param apnName APN name
* @param forceClose if {@code true}, triggers a local cleanup of the tunnel; if {@code false},
* performs a normal closure procedure
diff --git a/test/com/google/android/iwlan/IwlanDataServiceTest.java b/test/com/google/android/iwlan/IwlanDataServiceTest.java
index bdbe4d9..bb53780 100644
--- a/test/com/google/android/iwlan/IwlanDataServiceTest.java
+++ b/test/com/google/android/iwlan/IwlanDataServiceTest.java
@@ -27,6 +27,9 @@ import static android.telephony.TelephonyManager.NETWORK_TYPE_BITMASK_NR;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession;
+import static com.google.android.iwlan.epdg.EpdgTunnelManager.BRINGDOWN_REASON_DEACTIVATE_DATA_CALL;
+import static com.google.android.iwlan.epdg.EpdgTunnelManager.BRINGDOWN_REASON_NETWORK_UPDATE_WHEN_TUNNEL_IN_BRINGUP;
+
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
@@ -458,7 +461,8 @@ public class IwlanDataServiceTest {
networkCallback.onLinkPropertiesChanged(mMockNetwork, newLinkProperties);
verify(mMockEpdgTunnelManager, times(1))
.updateNetwork(eq(mMockNetwork), eq(newLinkProperties));
- verify(mMockEpdgTunnelManager, never()).closeTunnel(any(), anyBoolean(), any(), any());
+ verify(mMockEpdgTunnelManager, never())
+ .closeTunnel(any(), anyBoolean(), any(), any(), anyInt());
}
@Test
@@ -867,7 +871,8 @@ public class IwlanDataServiceTest {
eq(TEST_APN_NAME),
eq(false),
any(IwlanTunnelCallback.class),
- any(IwlanTunnelMetricsImpl.class));
+ any(IwlanTunnelMetricsImpl.class),
+ eq(BRINGDOWN_REASON_DEACTIVATE_DATA_CALL));
/* Check callback result is RESULT_SUCCESS when onClosed() is called. */
mSpyIwlanDataServiceProvider
@@ -907,7 +912,8 @@ public class IwlanDataServiceTest {
eq(TEST_APN_NAME),
eq(true) /* forceClose */,
any(IwlanTunnelCallback.class),
- any(IwlanTunnelMetricsImpl.class));
+ any(IwlanTunnelMetricsImpl.class),
+ eq(BRINGDOWN_REASON_DEACTIVATE_DATA_CALL));
/* Check callback result is RESULT_SUCCESS when onClosed() is called. */
mSpyIwlanDataServiceProvider
@@ -952,7 +958,8 @@ public class IwlanDataServiceTest {
eq(TEST_APN_NAME),
anyBoolean(),
any(IwlanTunnelCallback.class),
- any(IwlanTunnelMetricsImpl.class));
+ any(IwlanTunnelMetricsImpl.class),
+ eq(BRINGDOWN_REASON_DEACTIVATE_DATA_CALL));
moveTimeForwardAndDispatch(50);
/* Check closeTunnel() is called. */
@@ -961,7 +968,8 @@ public class IwlanDataServiceTest {
eq(TEST_APN_NAME),
eq(true) /* forceClose */,
any(IwlanTunnelCallback.class),
- any(IwlanTunnelMetricsImpl.class));
+ any(IwlanTunnelMetricsImpl.class),
+ eq(BRINGDOWN_REASON_DEACTIVATE_DATA_CALL));
/* Check callback result is RESULT_SUCCESS when onClosed() is called. */
mSpyIwlanDataServiceProvider
@@ -1020,7 +1028,8 @@ public class IwlanDataServiceTest {
eq(TEST_APN_NAME),
anyBoolean(),
any(IwlanTunnelCallback.class),
- any(IwlanTunnelMetricsImpl.class));
+ any(IwlanTunnelMetricsImpl.class),
+ anyInt());
/* Check callback result is RESULT_SUCCESS when onClosed() is called. */
mSpyIwlanDataServiceProvider
@@ -1037,7 +1046,8 @@ public class IwlanDataServiceTest {
eq(TEST_APN_NAME),
anyBoolean(),
any(IwlanTunnelCallback.class),
- any(IwlanTunnelMetricsImpl.class));
+ any(IwlanTunnelMetricsImpl.class),
+ anyInt());
// No additional callbacks are involved.
verify(mMockDataServiceCallback, times(1)).onDeactivateDataCallComplete(anyInt());
@@ -1993,7 +2003,8 @@ public class IwlanDataServiceTest {
eq(TEST_APN_NAME),
anyBoolean(),
any(IwlanTunnelCallback.class),
- any(IwlanTunnelMetricsImpl.class));
+ any(IwlanTunnelMetricsImpl.class),
+ eq(BRINGDOWN_REASON_DEACTIVATE_DATA_CALL));
advanceCalendarByTimeMs(deactivationTime, calendar);
@@ -2044,7 +2055,13 @@ public class IwlanDataServiceTest {
Network newNetwork2 = createMockNetwork(mLinkProperties);
onSystemDefaultNetworkConnected(
newNetwork2, mLinkProperties, TRANSPORT_WIFI, DEFAULT_SUB_INDEX);
- verify(mMockEpdgTunnelManager, times(1)).closeTunnel(any(), anyBoolean(), any(), any());
+ verify(mMockEpdgTunnelManager, times(1))
+ .closeTunnel(
+ any(),
+ anyBoolean(),
+ any(),
+ any(),
+ eq(BRINGDOWN_REASON_NETWORK_UPDATE_WHEN_TUNNEL_IN_BRINGUP));
}
public static TunnelLinkProperties createTunnelLinkProperties() throws Exception {
diff --git a/test/com/google/android/iwlan/epdg/EpdgTunnelManagerTest.java b/test/com/google/android/iwlan/epdg/EpdgTunnelManagerTest.java
index b7004e7..1829047 100644
--- a/test/com/google/android/iwlan/epdg/EpdgTunnelManagerTest.java
+++ b/test/com/google/android/iwlan/epdg/EpdgTunnelManagerTest.java
@@ -16,6 +16,8 @@
package com.google.android.iwlan.epdg;
+import static com.google.android.iwlan.epdg.EpdgTunnelManager.BRINGDOWN_REASON_UNKNOWN;
+
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -553,7 +555,8 @@ public class EpdgTunnelManagerTest {
testApnName,
false /*forceClose*/,
mMockIwlanTunnelCallback,
- mMockIwlanTunnelMetrics);
+ mMockIwlanTunnelMetrics,
+ BRINGDOWN_REASON_UNKNOWN);
mTestLooper.dispatchAll();
verify(mEpdgTunnelManager).closePendingRequestsForApn(eq(testApnName));
@@ -582,7 +585,8 @@ public class EpdgTunnelManagerTest {
testApnName,
true /*forceClose*/,
mMockIwlanTunnelCallback,
- mMockIwlanTunnelMetrics);
+ mMockIwlanTunnelMetrics,
+ BRINGDOWN_REASON_UNKNOWN);
mTestLooper.dispatchAll();
verify(mMockIkeSession).kill();
@@ -606,7 +610,8 @@ public class EpdgTunnelManagerTest {
testApnName,
false /*forceClose*/,
mMockIwlanTunnelCallback,
- mMockIwlanTunnelMetrics);
+ mMockIwlanTunnelMetrics,
+ BRINGDOWN_REASON_UNKNOWN);
mTestLooper.dispatchAll();
verify(mMockIkeSession).close();
@@ -2091,7 +2096,8 @@ public class EpdgTunnelManagerTest {
TEST_APN_NAME,
false /*forceClose*/,
mMockIwlanTunnelCallback,
- mMockIwlanTunnelMetrics);
+ mMockIwlanTunnelMetrics,
+ BRINGDOWN_REASON_UNKNOWN);
mTestLooper.dispatchAll();
verify(mMockIwlanTunnelCallback, times(1))