Snap for 8618744 from 23ff4d4549779628a4c1eb8a7f5002a18cadde8d to mainline-adbd-release
Change-Id: I10eb7632f336b739691b8e32a93f3f2e66de8af8
diff --git a/assets/defaultiwlanerrorconfig.json b/assets/defaultiwlanerrorconfig.json
index 07b980d..eae1ae2 100644
--- a/assets/defaultiwlanerrorconfig.json
+++ b/assets/defaultiwlanerrorconfig.json
@@ -72,6 +72,12 @@
"ErrorDetails": ["IO_EXCEPTION"],
"RetryArray": ["0", "0", "0", "60+r15", "120", "-1"],
"UnthrottlingEvents": ["APM_ENABLE_EVENT", "APM_DISABLE_EVENT", "WIFI_DISABLE_EVENT", "WIFI_AP_CHANGED_EVENT"]
+ },
+ {
+ "ErrorType": "IKE_PROTOCOL_ERROR_TYPE",
+ "ErrorDetails": ["24"],
+ "RetryArray": ["10", "20", "40", "80", "160"],
+ "UnthrottlingEvents": ["APM_ENABLE_EVENT", "WIFI_DISABLE_EVENT", "WIFI_CALLING_DISABLE_EVENT"]
}
]
}
diff --git a/src/com/google/android/iwlan/ErrorPolicyManager.java b/src/com/google/android/iwlan/ErrorPolicyManager.java
index 76083fb..59fad64 100644
--- a/src/com/google/android/iwlan/ErrorPolicyManager.java
+++ b/src/com/google/android/iwlan/ErrorPolicyManager.java
@@ -304,6 +304,8 @@
ret = DataFailCause.IWLAN_IKEV2_MSG_TIMEOUT;
} else if (error.getErrorType() == IwlanError.SIM_NOT_READY_EXCEPTION) {
ret = DataFailCause.IWLAN_PDN_CONNECTION_REJECTION;
+ } else if (error.getErrorType() == IwlanError.NETWORK_FAILURE) {
+ ret = DataFailCause.NETWORK_FAILURE;
} else if (error.getErrorType() == IwlanError.IKE_PROTOCOL_EXCEPTION) {
Exception exception = error.getException();
if (exception != null && exception instanceof IkeProtocolException) {
diff --git a/src/com/google/android/iwlan/IwlanError.java b/src/com/google/android/iwlan/IwlanError.java
index 4580750..f621a7a 100644
--- a/src/com/google/android/iwlan/IwlanError.java
+++ b/src/com/google/android/iwlan/IwlanError.java
@@ -41,9 +41,10 @@
public static final int EPDG_SELECTOR_SERVER_SELECTION_FAILED = 4;
public static final int TUNNEL_TRANSFORM_FAILED = 5;
public static final int SIM_NOT_READY_EXCEPTION = 6;
+ public static final int NETWORK_FAILURE = 7;
// Catch all exception
- public static final int UNKNOWN_EXCEPTION = 7; // catch all
+ public static final int UNKNOWN_EXCEPTION = 8; // catch all
@IntDef({
NO_ERROR,
@@ -53,6 +54,7 @@
EPDG_SELECTOR_SERVER_SELECTION_FAILED,
TUNNEL_TRANSFORM_FAILED,
SIM_NOT_READY_EXCEPTION,
+ NETWORK_FAILURE,
UNKNOWN_EXCEPTION
})
@interface IwlanErrorType {};
@@ -69,6 +71,7 @@
"IWLAN_EPDG_SELECTOR_SERVER_SELECTION_FAILED");
put(TUNNEL_TRANSFORM_FAILED, "IWLAN_TUNNEL_TRANSFORM_FAILED");
put(SIM_NOT_READY_EXCEPTION, "IWLAN_SIM_NOT_READY_EXCEPTION");
+ put(NETWORK_FAILURE, "IWLAN_NETWORK_FAILURE");
put(UNKNOWN_EXCEPTION, "IWLAN_UNKNOWN_EXCEPTION");
}
};
@@ -198,6 +201,9 @@
case "SIM_NOT_READY_EXCEPTION":
ret = IwlanError.SIM_NOT_READY_EXCEPTION;
break;
+ case "NETWORK_FAILURE":
+ ret = IwlanError.NETWORK_FAILURE;
+ break;
}
return ret;
}
diff --git a/src/com/google/android/iwlan/epdg/EpdgTunnelManager.java b/src/com/google/android/iwlan/epdg/EpdgTunnelManager.java
index 19b4ce7..1c824b7 100644
--- a/src/com/google/android/iwlan/epdg/EpdgTunnelManager.java
+++ b/src/com/google/android/iwlan/epdg/EpdgTunnelManager.java
@@ -387,6 +387,12 @@
return sb.toString();
}
+ public boolean hasTunnelOpened() {
+ return mInternalAddrList != null
+ && !mInternalAddrList.isEmpty() /* The child session is opened */
+ && mIface != null; /* The tunnel interface is bring up */
+ }
+
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
@@ -1387,7 +1393,13 @@
if (sessionClosedData.mIwlanError.getErrorType() != IwlanError.NO_ERROR) {
iwlanError = sessionClosedData.mIwlanError;
} else {
- iwlanError = tunnelConfig.getError();
+ // If IKE session setup failed without error cause, Iwlan reports
+ // NETWORK_FAILURE instead of NO_ERROR
+ if (!tunnelConfig.hasTunnelOpened()) {
+ iwlanError = new IwlanError(IwlanError.NETWORK_FAILURE);
+ } else {
+ iwlanError = tunnelConfig.getError();
+ }
}
IpSecManager.IpSecTunnelInterface iface = tunnelConfig.getIface();
diff --git a/test/com/google/android/iwlan/ErrorPolicyManagerTest.java b/test/com/google/android/iwlan/ErrorPolicyManagerTest.java
index 718a875..3bc624b 100644
--- a/test/com/google/android/iwlan/ErrorPolicyManagerTest.java
+++ b/test/com/google/android/iwlan/ErrorPolicyManagerTest.java
@@ -191,7 +191,7 @@
}
@Test
- public void testInvalidCarrierConfig() throws Exception {
+ public void testDefaultPolicyFallback() throws Exception {
String apn = "ims";
String config =
"[{"
@@ -217,17 +217,21 @@
sleep(1000);
- // IKE_PROTOCOL_ERROR_TYPE(24) and retryArray = 5, 10, 15 as it will fallback due to failed
- // parsing
+ // Fallback to default Iwlan error policy for IKE_PROTOCOL_ERROR_TYPE(24) because of failed
+ // parsing (or lack of explicit carrier-defined policy).
IwlanError iwlanError = buildIwlanIkeAuthFailedError();
long time = mErrorPolicyManager.reportIwlanError(apn, iwlanError);
- assertEquals(5, time);
- time = mErrorPolicyManager.reportIwlanError(apn, iwlanError);
assertEquals(10, time);
time = mErrorPolicyManager.reportIwlanError(apn, iwlanError);
- assertEquals(10, time);
+ assertEquals(20, time);
time = mErrorPolicyManager.reportIwlanError(apn, iwlanError);
- assertEquals(10, time);
+ assertEquals(40, time);
+ time = mErrorPolicyManager.reportIwlanError(apn, iwlanError);
+ assertEquals(80, time);
+ time = mErrorPolicyManager.reportIwlanError(apn, iwlanError);
+ assertEquals(160, time);
+ time = mErrorPolicyManager.reportIwlanError(apn, iwlanError);
+ assertEquals(86400, time);
}
@Test
diff --git a/test/com/google/android/iwlan/epdg/EpdgTunnelManagerTest.java b/test/com/google/android/iwlan/epdg/EpdgTunnelManagerTest.java
index 3a045b1..5960e00 100644
--- a/test/com/google/android/iwlan/epdg/EpdgTunnelManagerTest.java
+++ b/test/com/google/android/iwlan/epdg/EpdgTunnelManagerTest.java
@@ -991,7 +991,7 @@
@Test
public void testHandleOnClosedWithEpdgAddressSelected_True() throws Exception {
String testApnName = "www.xyz.com";
- IwlanError error = new IwlanError(IwlanError.NO_ERROR);
+ IwlanError error = new IwlanError(IwlanError.NETWORK_FAILURE);
doReturn(0L).when(mEpdgTunnelManager).reportIwlanError(eq(testApnName), eq(error));
mEpdgTunnelManager.putApnNameToTunnelConfig(
@@ -1010,7 +1010,7 @@
@Test
public void testHandleOnClosedWithEpdgAddressSelected_False() throws Exception {
String testApnName = "www.xyz.com";
- IwlanError error = new IwlanError(IwlanError.NO_ERROR);
+ IwlanError error = new IwlanError(IwlanError.NETWORK_FAILURE);
doReturn(0L).when(mEpdgTunnelManager).reportIwlanError(eq(testApnName), eq(error));