Require MOBIKE for IkeSessionParams in VCN configs.

This CL updates VcnGatewayConnectionConfigs to require
IkeTunnelConnectionParams with MOBIKE enabled for the
IkeSessionParams. This is necessary for VCNs - without it,
they do not support IPsec mobility (one of the main features
of the VCN).

Bug: 187851560
Test: atest FrameworksVcnTests CtsVcnTestCases
Change-Id: I94db52a8c42d9fa4681fefb8f787f006933caa18
This commit is contained in:
Cody Kesting
2021-05-11 14:50:11 -07:00
parent c900ba3cd6
commit 92959d6774
4 changed files with 37 additions and 4 deletions

View File

@@ -15,6 +15,8 @@
*/
package android.net.vcn;
import static android.net.ipsec.ike.IkeSessionParams.IKE_OPTION_MOBIKE;
import static com.android.internal.annotations.VisibleForTesting.Visibility;
import android.annotation.IntDef;
@@ -433,6 +435,8 @@ public final class VcnGatewayConnectionConfig {
* distinguish between VcnGatewayConnectionConfigs configured on a single {@link
* VcnConfig}. This will be used as the identifier in VcnStatusCallback invocations.
* @param tunnelConnectionParams the IKE tunnel connection configuration
* @throws IllegalArgumentException if the provided IkeTunnelConnectionParams is not
* configured to support MOBIKE
* @see IkeTunnelConnectionParams
* @see VcnManager.VcnStatusCallback#onGatewayConnectionError
*/
@@ -441,6 +445,10 @@ public final class VcnGatewayConnectionConfig {
@NonNull IkeTunnelConnectionParams tunnelConnectionParams) {
Objects.requireNonNull(gatewayConnectionName, "gatewayConnectionName was null");
Objects.requireNonNull(tunnelConnectionParams, "tunnelConnectionParams was null");
if (!tunnelConnectionParams.getIkeSessionParams().hasIkeOption(IKE_OPTION_MOBIKE)) {
throw new IllegalArgumentException(
"MOBIKE must be configured for the provided IkeSessionParams");
}
mGatewayConnectionName = gatewayConnectionName;
mTunnelConnectionParams = tunnelConnectionParams;

View File

@@ -16,13 +16,17 @@
package android.net.vcn;
import static android.net.ipsec.ike.IkeSessionParams.IKE_OPTION_MOBIKE;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import android.net.NetworkCapabilities;
import android.net.ipsec.ike.IkeSessionParams;
import android.net.ipsec.ike.IkeTunnelConnectionParams;
import android.net.vcn.persistablebundleutils.IkeSessionParamsUtilsTest;
import android.net.vcn.persistablebundleutils.TunnelConnectionParamsUtilsTest;
import androidx.test.filters.SmallTest;
@@ -119,6 +123,21 @@ public class VcnGatewayConnectionConfigTest {
}
}
@Test
public void testBuilderRequiresMobikeEnabled() {
try {
final IkeSessionParams ikeParams =
IkeSessionParamsUtilsTest.createBuilderMinimum()
.removeIkeOption(IKE_OPTION_MOBIKE)
.build();
final IkeTunnelConnectionParams tunnelParams =
TunnelConnectionParamsUtilsTest.buildTestParams(ikeParams);
new VcnGatewayConnectionConfig.Builder(GATEWAY_CONNECTION_NAME_PREFIX, tunnelParams);
fail("Expected exception due to MOBIKE not enabled");
} catch (IllegalArgumentException e) {
}
}
@Test
public void testBuilderRequiresNonEmptyExposedCaps() {
try {

View File

@@ -52,8 +52,8 @@ import java.util.concurrent.TimeUnit;
@RunWith(AndroidJUnit4.class)
@SmallTest
public class IkeSessionParamsUtilsTest {
// Package private for use in EncryptedTunnelParamsUtilsTest
static IkeSessionParams.Builder createBuilderMinimum() {
// Public for use in VcnGatewayConnectionConfigTest, EncryptedTunnelParamsUtilsTest
public static IkeSessionParams.Builder createBuilderMinimum() {
final InetAddress serverAddress = InetAddresses.parseNumericAddress("192.0.2.100");
// TODO: b/185941731 Make sure all valid IKE_OPTIONS are added and validated.
@@ -63,6 +63,7 @@ public class IkeSessionParamsUtilsTest {
.setLocalIdentification(new IkeFqdnIdentification("client.test.android.net"))
.setRemoteIdentification(new IkeFqdnIdentification("server.test.android.net"))
.addIkeOption(IkeSessionParams.IKE_OPTION_FORCE_PORT_4500)
.addIkeOption(IkeSessionParams.IKE_OPTION_MOBIKE)
.setAuthPsk("psk".getBytes());
}

View File

@@ -18,6 +18,7 @@ package android.net.vcn.persistablebundleutils;
import static org.junit.Assert.assertEquals;
import android.net.ipsec.ike.IkeSessionParams;
import android.net.ipsec.ike.IkeTunnelConnectionParams;
import androidx.test.filters.SmallTest;
@@ -31,9 +32,13 @@ import org.junit.runner.RunWith;
public class TunnelConnectionParamsUtilsTest {
// Public for use in VcnGatewayConnectionConfigTest
public static IkeTunnelConnectionParams buildTestParams() {
return buildTestParams(IkeSessionParamsUtilsTest.createBuilderMinimum().build());
}
// Public for use in VcnGatewayConnectionConfigTest
public static IkeTunnelConnectionParams buildTestParams(IkeSessionParams params) {
return new IkeTunnelConnectionParams(
IkeSessionParamsUtilsTest.createBuilderMinimum().build(),
TunnelModeChildSessionParamsUtilsTest.createBuilderMinimum().build());
params, TunnelModeChildSessionParamsUtilsTest.createBuilderMinimum().build());
}
@Test