diff options
author | Xiao Ma <xiaom@google.com> | 2020-04-09 01:55:06 +0000 |
---|---|---|
committer | Xiao Ma <xiaom@google.com> | 2020-04-16 05:20:13 +0000 |
commit | cc394973d41f881b9bf6254d75a8eb0614c7b747 (patch) | |
tree | 28acdd31c6546d1c1cb1d23136f72d955e209c32 | |
parent | 9aef7f0ee06f4715e5e447303752f33656689d91 (diff) |
Add a new field changePrefixOnDecline in DhcpServingParamsParcel.
A new boolean flag (changePrefixOnDecline) to be added in
the DhcpServingParamsParcel, indicating whether or not the DHCP
server should request a new prefix (e.g. a different subnet
prefix) from IpServer when receiving DHCPDECLINE message.
Bug: 130741856
Test: atest NetworkStackTests NetworkStackNextTests
Merged-In: I8cb0f844ef98a5f17d4e07e1812a1abf73aa4c07
Change-Id: I8cb0f844ef98a5f17d4e07e1812a1abf73aa4c07
4 files changed, 33 insertions, 5 deletions
diff --git a/common/networkstackclient/aidl_api/networkstack-aidl-interfaces/current/android/net/dhcp/DhcpServingParamsParcel.aidl b/common/networkstackclient/aidl_api/networkstack-aidl-interfaces/current/android/net/dhcp/DhcpServingParamsParcel.aidl index eb780a2..657b83c 100644 --- a/common/networkstackclient/aidl_api/networkstack-aidl-interfaces/current/android/net/dhcp/DhcpServingParamsParcel.aidl +++ b/common/networkstackclient/aidl_api/networkstack-aidl-interfaces/current/android/net/dhcp/DhcpServingParamsParcel.aidl @@ -26,4 +26,5 @@ parcelable DhcpServingParamsParcel { int linkMtu; boolean metered; int clientAddr; + boolean changePrefixOnDecline; } diff --git a/common/networkstackclient/src/android/net/dhcp/DhcpServingParamsParcel.aidl b/common/networkstackclient/src/android/net/dhcp/DhcpServingParamsParcel.aidl index 5e19374..1ba0195 100644 --- a/common/networkstackclient/src/android/net/dhcp/DhcpServingParamsParcel.aidl +++ b/common/networkstackclient/src/android/net/dhcp/DhcpServingParamsParcel.aidl @@ -27,5 +27,5 @@ parcelable DhcpServingParamsParcel { int linkMtu; boolean metered; int clientAddr; + boolean changePrefixOnDecline; } - diff --git a/src/android/net/dhcp/DhcpServingParams.java b/src/android/net/dhcp/DhcpServingParams.java index 63f847d..c52cae9 100644 --- a/src/android/net/dhcp/DhcpServingParams.java +++ b/src/android/net/dhcp/DhcpServingParams.java @@ -91,6 +91,13 @@ public class DhcpServingParams { public final Inet4Address clientAddr; /** + * Indicates whether the DHCP server should request a new prefix from IpServer when receiving + * DHCPDECLINE message in certain particular link (e.g. there is only one downstream USB + * tethering client). If it's false, process DHCPDECLINE message as RFC2131#4.3.3 suggests. + */ + public final boolean changePrefixOnDecline; + + /** * Checked exception thrown when some parameters used to build {@link DhcpServingParams} are * missing or invalid. */ @@ -103,7 +110,8 @@ public class DhcpServingParams { private DhcpServingParams(@NonNull LinkAddress serverAddr, @NonNull Set<Inet4Address> defaultRouters, @NonNull Set<Inet4Address> dnsServers, @NonNull Set<Inet4Address> excludedAddrs, - long dhcpLeaseTimeSecs, int linkMtu, boolean metered, Inet4Address clientAddr) { + long dhcpLeaseTimeSecs, int linkMtu, boolean metered, Inet4Address clientAddr, + boolean changePrefixOnDecline) { this.serverAddr = serverAddr; this.defaultRouters = defaultRouters; this.dnsServers = dnsServers; @@ -112,6 +120,7 @@ public class DhcpServingParams { this.linkMtu = linkMtu; this.metered = metered; this.clientAddr = clientAddr; + this.changePrefixOnDecline = changePrefixOnDecline; } /** @@ -140,6 +149,7 @@ public class DhcpServingParams { .setLinkMtu(parcel.linkMtu) .setMetered(parcel.metered) .setClientAddr(clientAddr) + .setChangePrefixOnDecline(parcel.changePrefixOnDecline) .build(); } @@ -195,6 +205,7 @@ public class DhcpServingParams { private int mLinkMtu = MTU_UNSET; private boolean mMetered; private Inet4Address mClientAddr; + private boolean mChangePrefixOnDecline; /** * Set the server address and served prefix for the DHCP server. @@ -329,6 +340,17 @@ public class DhcpServingParams { } /** + * Set whether the DHCP server should request a new prefix from IpServer when receiving + * DHCPDECLINE message in certain particular link. + * + * <p>If not set, the default value is false. + */ + public Builder setChangePrefixOnDecline(boolean changePrefixOnDecline) { + this.mChangePrefixOnDecline = changePrefixOnDecline; + return this; + } + + /** * Create a new {@link DhcpServingParams} instance based on parameters set in the builder. * * <p>This method has no side-effects. If it does not throw, a valid @@ -382,7 +404,7 @@ public class DhcpServingParams { Collections.unmodifiableSet(new HashSet<>(mDefaultRouters)), Collections.unmodifiableSet(new HashSet<>(mDnsServers)), Collections.unmodifiableSet(excl), - mDhcpLeaseTimeSecs, mLinkMtu, mMetered, mClientAddr); + mDhcpLeaseTimeSecs, mLinkMtu, mMetered, mClientAddr, mChangePrefixOnDecline); } } diff --git a/tests/unit/src/android/net/dhcp/DhcpServingParamsTest.java b/tests/unit/src/android/net/dhcp/DhcpServingParamsTest.java index 9948fe3..5962696 100644 --- a/tests/unit/src/android/net/dhcp/DhcpServingParamsTest.java +++ b/tests/unit/src/android/net/dhcp/DhcpServingParamsTest.java @@ -63,6 +63,7 @@ public class DhcpServingParamsTest { private static final Set<Inet4Address> TEST_EXCLUDED_ADDRS = new HashSet<>( Arrays.asList(parseAddr("192.168.0.200"), parseAddr("192.168.0.201"))); private static final boolean TEST_METERED = true; + private static final boolean TEST_CHANGE_PREFIX_ON_DECLINE = true; @Before public void setUp() { @@ -74,7 +75,8 @@ public class DhcpServingParamsTest { .setLinkMtu(TEST_MTU) .setExcludedAddrs(TEST_EXCLUDED_ADDRS) .setMetered(TEST_METERED) - .setClientAddr(TEST_CLIENT_ADDR); + .setClientAddr(TEST_CLIENT_ADDR) + .setChangePrefixOnDecline(TEST_CHANGE_PREFIX_ON_DECLINE); } @Test @@ -101,6 +103,7 @@ public class DhcpServingParamsTest { assertEquals(TEST_LINKADDR, params.serverAddr); assertEquals(TEST_MTU, params.linkMtu); assertEquals(TEST_METERED, params.metered); + assertEquals(TEST_CHANGE_PREFIX_ON_DECLINE, params.changePrefixOnDecline); assertContains(params.excludedAddrs, TEST_EXCLUDED_ADDRS); assertContains(params.excludedAddrs, TEST_DEFAULT_ROUTERS); @@ -182,6 +185,7 @@ public class DhcpServingParamsTest { parcel.excludedAddrs = toIntArray(TEST_EXCLUDED_ADDRS); parcel.metered = TEST_METERED; parcel.clientAddr = inet4AddressToIntHTH(TEST_CLIENT_ADDR); + parcel.changePrefixOnDecline = TEST_CHANGE_PREFIX_ON_DECLINE; final DhcpServingParams parceled = DhcpServingParams.fromParcelableObject(parcel); assertEquals(params.defaultRouters, parceled.defaultRouters); @@ -192,8 +196,9 @@ public class DhcpServingParamsTest { assertEquals(params.excludedAddrs, parceled.excludedAddrs); assertEquals(params.metered, parceled.metered); assertEquals(params.clientAddr, parceled.clientAddr); + assertEquals(params.changePrefixOnDecline, parceled.changePrefixOnDecline); - MiscAssertsKt.assertFieldCountEquals(9, DhcpServingParamsParcel.class); + MiscAssertsKt.assertFieldCountEquals(10, DhcpServingParamsParcel.class); } @Test(expected = InvalidParameterException.class) |