aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorevitayan <evitayan@google.com>2019-10-14 16:38:28 -0700
committerevitayan <evitayan@google.com>2019-10-17 18:29:36 -0700
commitbaed2e356dabf6b79a5321a8a6ba480dc577e782 (patch)
tree38fd172de05cfea62e423e6e4f6cc636a1ba827c
parent3a793e9334d27db22d3495a3e2f74817b3a5cd52 (diff)
downloadike-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.java33
-rw-r--r--tests/iketests/src/java/com/android/ike/ikev2/message/IkeConfigPayloadTest.java47
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);