diff options
author | evitayan <evitayan@google.com> | 2019-10-14 16:38:28 -0700 |
---|---|---|
committer | evitayan <evitayan@google.com> | 2019-10-17 18:29:36 -0700 |
commit | baed2e356dabf6b79a5321a8a6ba480dc577e782 (patch) | |
tree | 38fd172de05cfea62e423e6e4f6cc636a1ba827c | |
parent | 3a793e9334d27db22d3495a3e2f74817b3a5cd52 (diff) | |
download | ike-baed2e356dabf6b79a5321a8a6ba480dc577e782.tar.gz |
Implement Config Attribute for DHCPv4 server
Bug: 140644912
Test: atest FrameworksIkeTests(new tests added)
Change-Id: I63d76d2863382d3b992092cb7cae90fab8066f2e
-rw-r--r-- | src/java/com/android/ike/ikev2/message/IkeConfigPayload.java | 33 | ||||
-rw-r--r-- | tests/iketests/src/java/com/android/ike/ikev2/message/IkeConfigPayloadTest.java | 47 |
2 files changed, 78 insertions, 2 deletions
diff --git a/src/java/com/android/ike/ikev2/message/IkeConfigPayload.java b/src/java/com/android/ike/ikev2/message/IkeConfigPayload.java index 8a7c415e..3211920c 100644 --- a/src/java/com/android/ike/ikev2/message/IkeConfigPayload.java +++ b/src/java/com/android/ike/ikev2/message/IkeConfigPayload.java @@ -201,6 +201,9 @@ public final class IkeConfigPayload extends IkePayload { case CONFIG_ATTR_INTERNAL_IP4_DNS: configList.add(new ConfigAttributeIpv4Dns(value)); break; + case CONFIG_ATTR_INTERNAL_IP4_DHCP: + configList.add(new ConfigAttributeIpv4Dhcp(value)); + break; case CONFIG_ATTR_INTERNAL_IP6_ADDRESS: configList.add(new ConfigAttributeIpv6Address(value)); break; @@ -214,10 +217,13 @@ public final class IkeConfigPayload extends IkePayload { configList.add(new ConfigAttributeIpv6Subnet(value)); break; default: - // Ignore unrecognized attribute type. + IkeManager.getIkeLog() + .i( + "IkeConfigPayload", + "Unrecognized attribute type: " + attributeType); } - // TODO: Support DHCP4, App version and supported attribute list + // TODO: Support App version and supported attribute list } return configList; @@ -391,6 +397,29 @@ public final class IkeConfigPayload extends IkePayload { } } + /** This class represents Configuration Attribute for IPv4 DHCP server. */ + public static class ConfigAttributeIpv4Dhcp extends ConfigAttrIpv4AddressBase { + /** Construct an instance with specified DHCP server address for an outbound packet. */ + public ConfigAttributeIpv4Dhcp(Inet4Address ipv4Address) { + super(CONFIG_ATTR_INTERNAL_IP4_DHCP, ipv4Address); + } + + /** + * Construct an instance without a specified DHCP server address for an outbound packet. + * + * <p>It must be only used in a configuration request. + */ + public ConfigAttributeIpv4Dhcp() { + super(CONFIG_ATTR_INTERNAL_IP4_DHCP); + } + + /** Construct an instance with a decoded inbound packet. */ + @VisibleForTesting + ConfigAttributeIpv4Dhcp(byte[] value) throws InvalidSyntaxException { + super(CONFIG_ATTR_INTERNAL_IP4_DHCP, value); + } + } + /** * This class represents Configuration Attribute for IPv4 DNS. * diff --git a/tests/iketests/src/java/com/android/ike/ikev2/message/IkeConfigPayloadTest.java b/tests/iketests/src/java/com/android/ike/ikev2/message/IkeConfigPayloadTest.java index 78493247..e8a67d79 100644 --- a/tests/iketests/src/java/com/android/ike/ikev2/message/IkeConfigPayloadTest.java +++ b/tests/iketests/src/java/com/android/ike/ikev2/message/IkeConfigPayloadTest.java @@ -17,6 +17,7 @@ package com.android.ike.ikev2.message; import static com.android.ike.ikev2.message.IkeConfigPayload.CONFIG_ATTR_INTERNAL_IP4_ADDRESS; +import static com.android.ike.ikev2.message.IkeConfigPayload.CONFIG_ATTR_INTERNAL_IP4_DHCP; import static com.android.ike.ikev2.message.IkeConfigPayload.CONFIG_ATTR_INTERNAL_IP4_DNS; import static com.android.ike.ikev2.message.IkeConfigPayload.CONFIG_ATTR_INTERNAL_IP4_NETMASK; import static com.android.ike.ikev2.message.IkeConfigPayload.CONFIG_ATTR_INTERNAL_IP4_SUBNET; @@ -47,6 +48,7 @@ import com.android.ike.ikev2.message.IkeConfigPayload.ConfigAttrIpv4AddressBase; import com.android.ike.ikev2.message.IkeConfigPayload.ConfigAttrIpv6AddrRangeBase; import com.android.ike.ikev2.message.IkeConfigPayload.ConfigAttribute; import com.android.ike.ikev2.message.IkeConfigPayload.ConfigAttributeIpv4Address; +import com.android.ike.ikev2.message.IkeConfigPayload.ConfigAttributeIpv4Dhcp; import com.android.ike.ikev2.message.IkeConfigPayload.ConfigAttributeIpv4Dns; import com.android.ike.ikev2.message.IkeConfigPayload.ConfigAttributeIpv4Netmask; import com.android.ike.ikev2.message.IkeConfigPayload.ConfigAttributeIpv4Subnet; @@ -104,6 +106,13 @@ public final class IkeConfigPayloadTest { private static final byte[] IPV4_DNS_ATTRIBUTE_WITHOUT_VALUE = TestUtils.hexStringToByteArray("00030000"); + private static final Inet4Address IPV4_DHCP = + (Inet4Address) (InetAddressUtils.parseNumericAddress("192.0.2.200")); + private static final byte[] IPV4_DHCP_ATTRIBUTE_WITH_VALUE = + TestUtils.hexStringToByteArray("00060004c00002c8"); + private static final byte[] IPV4_DHCP_ATTRIBUTE_WITHOUT_VALUE = + TestUtils.hexStringToByteArray("00060000"); + private static final byte[] IPV4_SUBNET_ATTRIBUTE_VALUE = TestUtils.hexStringToByteArray("c0000264fffffff0"); private static final byte[] IPV4_SUBNET_ATTRIBUTE_WITH_VALUE = @@ -420,6 +429,44 @@ public final class IkeConfigPayloadTest { } @Test + public void testDecodeIpv4DhcpWithValue() throws Exception { + ConfigAttributeIpv4Dhcp attribute = new ConfigAttributeIpv4Dhcp(IPV4_DHCP.getAddress()); + + assertEquals(CONFIG_ATTR_INTERNAL_IP4_DHCP, attribute.attributeType); + assertEquals(IPV4_DHCP, attribute.address); + } + + @Test + public void testDecodeIpv4DhcpWithoutValue() throws Exception { + ConfigAttributeIpv4Dhcp attribute = new ConfigAttributeIpv4Dhcp(new byte[0]); + + assertEquals(CONFIG_ATTR_INTERNAL_IP4_DHCP, attribute.attributeType); + assertNull(attribute.address); + } + + @Test + public void testEncodeIpv4DhcpWithValue() throws Exception { + ConfigAttributeIpv4Dhcp attributeIp4Dhcp = new ConfigAttributeIpv4Dhcp(IPV4_DHCP); + + verifyEncodeIpv4AddresBaseAttribute( + attributeIp4Dhcp, + CONFIG_ATTR_INTERNAL_IP4_DHCP, + IPV4_DHCP_ATTRIBUTE_WITH_VALUE, + IPV4_DHCP); + } + + @Test + public void testEncodeIpv4DhcpWithoutValue() throws Exception { + ConfigAttributeIpv4Dhcp attribute = new ConfigAttributeIpv4Dhcp(); + + verifyEncodeIpv4AddresBaseAttribute( + attribute, + CONFIG_ATTR_INTERNAL_IP4_DHCP, + IPV4_DHCP_ATTRIBUTE_WITHOUT_VALUE, + null /*expectedAddress*/); + } + + @Test public void testDecodeIpv4SubnetWithValue() throws Exception { ConfigAttributeIpv4Subnet attributeIp4Subnet = new ConfigAttributeIpv4Subnet(IPV4_SUBNET_ATTRIBUTE_VALUE); |