From a75872039401df8bdd14b060da27c0eb151e591a Mon Sep 17 00:00:00 2001 From: Remi NGUYEN VAN Date: Thu, 23 Aug 2018 18:01:46 +0900 Subject: [PATCH] Add varargs methods to build DhcpServingParams In common use-cases, only one gateway or DNS server may be set, so the added methods make it easier for clients to build the parameters. Bug: b/109584964 Test: runtest --no-hidden-api-checks frameworks-net Change-Id: Ib54bc60a54ad4ef0605baea62d87b9f14caf8aa7 --- .../android/net/dhcp/DhcpServingParams.java | 50 +++++++++++++++++++ .../net/dhcp/DhcpServingParamsTest.java | 5 +- 2 files changed, 52 insertions(+), 3 deletions(-) diff --git a/services/net/java/android/net/dhcp/DhcpServingParams.java b/services/net/java/android/net/dhcp/DhcpServingParams.java index ba9d116d0bd51..6d58bc63a5f23 100644 --- a/services/net/java/android/net/dhcp/DhcpServingParams.java +++ b/services/net/java/android/net/dhcp/DhcpServingParams.java @@ -28,6 +28,8 @@ import android.net.IpPrefix; import android.net.LinkAddress; import android.net.NetworkUtils; +import com.google.android.collect.Sets; + import java.net.Inet4Address; import java.util.Collections; import java.util.HashSet; @@ -154,6 +156,25 @@ public class DhcpServingParams { return this; } + /** + * Set the default routers to be advertised to DHCP clients. + * + *

Each router must be inside the served prefix. This may be an empty list of routers, + * but it must always be set explicitly before building the {@link DhcpServingParams}. + */ + public Builder setDefaultRouters(@NonNull Inet4Address... defaultRouters) { + return setDefaultRouters(Sets.newArraySet(defaultRouters)); + } + + /** + * Convenience method to build the parameters with no default router. + * + *

Equivalent to calling {@link #setDefaultRouters(Inet4Address...)} with no address. + */ + public Builder withNoDefaultRouter() { + return setDefaultRouters(); + } + /** * Set the DNS servers to be advertised to DHCP clients. * @@ -165,6 +186,25 @@ public class DhcpServingParams { return this; } + /** + * Set the DNS servers to be advertised to DHCP clients. + * + *

This may be an empty list of servers, but it must always be set explicitly before + * building the {@link DhcpServingParams}. + */ + public Builder setDnsServers(@NonNull Inet4Address... dnsServers) { + return setDnsServers(Sets.newArraySet(dnsServers)); + } + + /** + * Convenience method to build the parameters with no DNS server. + * + *

Equivalent to calling {@link #setDnsServers(Inet4Address...)} with no address. + */ + public Builder withNoDnsServer() { + return setDnsServers(); + } + /** * Set excluded addresses that the DHCP server is not allowed to assign to clients. * @@ -176,6 +216,16 @@ public class DhcpServingParams { return this; } + /** + * Set excluded addresses that the DHCP server is not allowed to assign to clients. + * + *

This parameter is optional. DNS servers and default routers are always excluded + * and do not need to be set here. + */ + public Builder setExcludedAddrs(@NonNull Inet4Address... excludedAddrs) { + return setExcludedAddrs(Sets.newArraySet(excludedAddrs)); + } + /** * Set the lease time for leases assigned by the DHCP server. * diff --git a/tests/net/java/android/net/dhcp/DhcpServingParamsTest.java b/tests/net/java/android/net/dhcp/DhcpServingParamsTest.java index dfa09a9f205c6..b6a4073a64da9 100644 --- a/tests/net/java/android/net/dhcp/DhcpServingParamsTest.java +++ b/tests/net/java/android/net/dhcp/DhcpServingParamsTest.java @@ -37,7 +37,6 @@ import org.junit.runner.RunWith; import java.net.Inet4Address; import java.util.Arrays; -import java.util.Collections; import java.util.HashSet; import java.util.Set; @@ -150,14 +149,14 @@ public class DhcpServingParamsTest { @Test(expected = InvalidParameterException.class) public void testBuild_PrefixTooSmall() throws InvalidParameterException { - mBuilder.setDefaultRouters(Collections.singleton(parseAddr("192.168.0.254"))) + mBuilder.setDefaultRouters(parseAddr("192.168.0.254")) .setServerAddr(new LinkAddress(TEST_SERVER_ADDR, 31)) .build(); } @Test(expected = InvalidParameterException.class) public void testBuild_RouterNotInPrefix() throws InvalidParameterException { - mBuilder.setDefaultRouters(Collections.singleton(parseAddr("192.168.254.254"))).build(); + mBuilder.setDefaultRouters(parseAddr("192.168.254.254")).build(); } private static void assertContains(@NonNull Set set, @NonNull Set subset) {