Make change and version bump to aml_ips_341611000 for mainline module file: apex/apex_manifest.json
Snap for 11397440 from 3329f5e77117b00497b62e01cd45aa4f0e2e2248 to mainline-ipsec-release

Change-Id: I9b6ee5dfc219409baae9aa71805bda3a54817dff
diff --git a/apex/apex_manifest.json b/apex/apex_manifest.json
index fcbea7f..c575c51 100644
--- a/apex/apex_manifest.json
+++ b/apex/apex_manifest.json
@@ -3,5 +3,5 @@
 
     // Placeholder module version to be replaced during build.
     // Do not change!
-    "version": 341610000
+    "version": 341611000
 }
diff --git a/tests/iketests/src/java/com/android/internal/net/ipsec/ike/keepalive/IkeNattKeepaliveTest.java b/tests/iketests/src/java/com/android/internal/net/ipsec/ike/keepalive/IkeNattKeepaliveTest.java
index fd8a5b1..4915bd2 100644
--- a/tests/iketests/src/java/com/android/internal/net/ipsec/ike/keepalive/IkeNattKeepaliveTest.java
+++ b/tests/iketests/src/java/com/android/internal/net/ipsec/ike/keepalive/IkeNattKeepaliveTest.java
@@ -457,4 +457,44 @@
         hardwareKeepaliveCbOne.onStopped(mMockHardwareKeepaliveOne);
         verifyHardwareKeepaliveStarted(mHardwareKeepaliveTwo, newKeepaliveConfigTwo);
     }
+
+    @Test
+    public void testSwitchToHardwareKeepalive_duringNetworkError() throws Exception {
+        final KeepaliveConfig newKeepaliveConfigOne =
+                createCopyWithNewUnderlyingNetwork(mKeepaliveConfig);
+        final KeepaliveConfig newKeepaliveConfigTwo =
+                createCopyWithNewUnderlyingNetwork(mKeepaliveConfig);
+
+        // First round of restart
+        final HardwareKeepaliveImpl.HardwareKeepaliveCallback hardwareKeepaliveCb =
+                verifyHardwareKeepaliveImplAndGetCb();
+        restartFromHardwareKeepalive(
+                newKeepaliveConfigOne,
+                mMockHardwareKeepalive,
+                mMockHardwareKeepaliveOne,
+                mMockSoftwareKeepaliveOne);
+
+        hardwareKeepaliveCb.onStopped(mMockHardwareKeepalive);
+        verify(mMockSoftwareKeepaliveOne).stop();
+        verifyHardwareKeepaliveStarted(mMockHardwareKeepaliveOne, newKeepaliveConfigOne);
+
+        // Second round of restart
+        final HardwareKeepaliveImpl.HardwareKeepaliveCallback hardwareKeepaliveCbOne =
+                verifyHardwareKeepaliveImplAndGetCb();
+        restartFromHardwareKeepalive(
+                newKeepaliveConfigTwo,
+                mMockHardwareKeepaliveOne,
+                mHardwareKeepaliveTwo,
+                mMockSoftwareKeepaliveTwo);
+
+        // If stop keepalive, such as when the Ike Session is terminated,
+        mIkeNattKeepalive.stop();
+        // no need to start hardware keepalive anymore.
+        verifyHardwareKeepaliveNeverStarted(mHardwareKeepaliveTwo);
+
+        // Since IkeNattKeepalive is stopped,
+        hardwareKeepaliveCbOne.onStopped(mMockHardwareKeepaliveOne);
+        // no need to start hardware keepalive anymore.
+        verifyHardwareKeepaliveNeverStarted(mHardwareKeepaliveTwo);
+    }
 }