Add hidden utils and constants to NetworkStack
Test: atest FrameworksNetTests NetworkStackTests Bug: 112869080 Change-Id: I1a803f7954ab760294436226d6c1cffb934e98f9
This commit is contained in:
parent
e88516f13b
commit
3ba6c0d56d
@ -861,13 +861,17 @@ filegroup {
|
||||
"core/java/android/annotation/NonNull.java",
|
||||
"core/java/android/annotation/Nullable.java",
|
||||
"core/java/android/annotation/IntDef.java",
|
||||
"core/java/android/annotation/IntRange.java",
|
||||
"core/java/android/annotation/UnsupportedAppUsage.java",
|
||||
"core/java/android/net/DhcpResults.java",
|
||||
"core/java/android/util/LocalLog.java",
|
||||
"core/java/com/android/internal/annotations/VisibleForTesting.java",
|
||||
"core/java/com/android/internal/util/HexDump.java",
|
||||
"core/java/com/android/internal/util/IndentingPrintWriter.java",
|
||||
"core/java/com/android/internal/util/IState.java",
|
||||
"core/java/com/android/internal/util/MessageUtils.java",
|
||||
"core/java/com/android/internal/util/Preconditions.java",
|
||||
"core/java/com/android/internal/util/RingBufferIndices.java",
|
||||
"core/java/com/android/internal/util/State.java",
|
||||
"core/java/com/android/internal/util/StateMachine.java",
|
||||
"core/java/com/android/internal/util/WakeupMessage.java",
|
||||
|
@ -26,11 +26,6 @@ import static android.system.OsConstants.IPPROTO_ICMPV6;
|
||||
import static android.system.OsConstants.IPPROTO_UDP;
|
||||
import static android.system.OsConstants.SOCK_RAW;
|
||||
|
||||
import static com.android.internal.util.BitUtils.bytesToBEInt;
|
||||
import static com.android.internal.util.BitUtils.getUint16;
|
||||
import static com.android.internal.util.BitUtils.getUint32;
|
||||
import static com.android.internal.util.BitUtils.getUint8;
|
||||
import static com.android.internal.util.BitUtils.uint32;
|
||||
import static com.android.server.util.NetworkStackConstants.ICMPV6_ECHO_REQUEST_TYPE;
|
||||
import static com.android.server.util.NetworkStackConstants.ICMPV6_NEIGHBOR_ADVERTISEMENT;
|
||||
import static com.android.server.util.NetworkStackConstants.ICMPV6_ROUTER_ADVERTISEMENT;
|
||||
@ -1586,6 +1581,29 @@ public class ApfFilter {
|
||||
// TODO: move to android.net.NetworkUtils
|
||||
@VisibleForTesting
|
||||
public static int ipv4BroadcastAddress(byte[] addrBytes, int prefixLength) {
|
||||
return bytesToBEInt(addrBytes) | (int) (uint32(-1) >>> prefixLength);
|
||||
return bytesToBEInt(addrBytes) | (int) (Integer.toUnsignedLong(-1) >>> prefixLength);
|
||||
}
|
||||
|
||||
private static int uint8(byte b) {
|
||||
return b & 0xff;
|
||||
}
|
||||
|
||||
private static int getUint16(ByteBuffer buffer, int position) {
|
||||
return buffer.getShort(position) & 0xffff;
|
||||
}
|
||||
|
||||
private static long getUint32(ByteBuffer buffer, int position) {
|
||||
return Integer.toUnsignedLong(buffer.getInt(position));
|
||||
}
|
||||
|
||||
private static int getUint8(ByteBuffer buffer, int position) {
|
||||
return uint8(buffer.get(position));
|
||||
}
|
||||
|
||||
private static int bytesToBEInt(byte[] bytes) {
|
||||
return (uint8(bytes[0]) << 24)
|
||||
+ (uint8(bytes[1]) << 16)
|
||||
+ (uint8(bytes[2]) << 8)
|
||||
+ (uint8(bytes[3]));
|
||||
}
|
||||
}
|
||||
|
@ -40,6 +40,8 @@ import static android.system.OsConstants.SO_BROADCAST;
|
||||
import static android.system.OsConstants.SO_RCVBUF;
|
||||
import static android.system.OsConstants.SO_REUSEADDR;
|
||||
|
||||
import static com.android.server.util.NetworkStackConstants.IPV4_ADDR_ANY;
|
||||
|
||||
import android.content.Context;
|
||||
import android.net.DhcpResults;
|
||||
import android.net.NetworkUtils;
|
||||
@ -328,7 +330,7 @@ public class DhcpClient extends StateMachine {
|
||||
Os.setsockoptInt(mUdpSock, SOL_SOCKET, SO_REUSEADDR, 1);
|
||||
Os.setsockoptInt(mUdpSock, SOL_SOCKET, SO_BROADCAST, 1);
|
||||
Os.setsockoptInt(mUdpSock, SOL_SOCKET, SO_RCVBUF, 0);
|
||||
Os.bind(mUdpSock, Inet4Address.ANY, DhcpPacket.DHCP_CLIENT);
|
||||
Os.bind(mUdpSock, IPV4_ADDR_ANY, DhcpPacket.DHCP_CLIENT);
|
||||
} catch(SocketException|ErrnoException e) {
|
||||
Log.e(TAG, "Error creating UDP socket", e);
|
||||
return false;
|
||||
|
@ -22,6 +22,7 @@ import static android.net.shared.Inet4AddressUtils.inet4AddressToIntHTH;
|
||||
import static android.net.shared.Inet4AddressUtils.intToInet4AddressHTH;
|
||||
import static android.net.shared.Inet4AddressUtils.prefixLengthToV4NetmaskIntHTH;
|
||||
|
||||
import static com.android.server.util.NetworkStackConstants.IPV4_ADDR_ANY;
|
||||
import static com.android.server.util.NetworkStackConstants.IPV4_ADDR_BITS;
|
||||
|
||||
import static java.lang.Math.min;
|
||||
@ -201,7 +202,7 @@ class DhcpLeaseRepository {
|
||||
|
||||
private static boolean isIpAddrOutsidePrefix(@NonNull IpPrefix prefix,
|
||||
@Nullable Inet4Address addr) {
|
||||
return addr != null && !addr.equals(Inet4Address.ANY) && !prefix.contains(addr);
|
||||
return addr != null && !addr.equals(IPV4_ADDR_ANY) && !prefix.contains(addr);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
@ -1,5 +1,8 @@
|
||||
package android.net.dhcp;
|
||||
|
||||
import static com.android.server.util.NetworkStackConstants.IPV4_ADDR_ALL;
|
||||
import static com.android.server.util.NetworkStackConstants.IPV4_ADDR_ANY;
|
||||
|
||||
import android.annotation.Nullable;
|
||||
import android.net.DhcpResults;
|
||||
import android.net.LinkAddress;
|
||||
@ -43,8 +46,8 @@ public abstract class DhcpPacket {
|
||||
public static final int MINIMUM_LEASE = 60;
|
||||
public static final int INFINITE_LEASE = (int) 0xffffffff;
|
||||
|
||||
public static final Inet4Address INADDR_ANY = (Inet4Address) Inet4Address.ANY;
|
||||
public static final Inet4Address INADDR_BROADCAST = (Inet4Address) Inet4Address.ALL;
|
||||
public static final Inet4Address INADDR_ANY = IPV4_ADDR_ANY;
|
||||
public static final Inet4Address INADDR_BROADCAST = IPV4_ADDR_ALL;
|
||||
public static final byte[] ETHER_BROADCAST = new byte[] {
|
||||
(byte) 0xff, (byte) 0xff, (byte) 0xff,
|
||||
(byte) 0xff, (byte) 0xff, (byte) 0xff,
|
||||
@ -1212,9 +1215,9 @@ public abstract class DhcpPacket {
|
||||
*/
|
||||
public DhcpResults toDhcpResults() {
|
||||
Inet4Address ipAddress = mYourIp;
|
||||
if (ipAddress.equals(Inet4Address.ANY)) {
|
||||
if (ipAddress.equals(IPV4_ADDR_ANY)) {
|
||||
ipAddress = mClientIp;
|
||||
if (ipAddress.equals(Inet4Address.ANY)) {
|
||||
if (ipAddress.equals(IPV4_ADDR_ANY)) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
@ -33,6 +33,8 @@ import static android.system.OsConstants.SO_BROADCAST;
|
||||
import static android.system.OsConstants.SO_REUSEADDR;
|
||||
|
||||
import static com.android.server.util.NetworkStackConstants.INFINITE_LEASE;
|
||||
import static com.android.server.util.NetworkStackConstants.IPV4_ADDR_ALL;
|
||||
import static com.android.server.util.NetworkStackConstants.IPV4_ADDR_ANY;
|
||||
import static com.android.server.util.PermissionUtil.checkNetworkStackCallingPermission;
|
||||
|
||||
import static java.lang.Integer.toUnsignedLong;
|
||||
@ -434,7 +436,7 @@ public class DhcpServer extends IDhcpServer.Stub {
|
||||
if (!isEmpty(request.mRelayIp)) {
|
||||
return request.mRelayIp;
|
||||
} else if (broadcastFlag) {
|
||||
return (Inet4Address) Inet4Address.ALL;
|
||||
return IPV4_ADDR_ALL;
|
||||
} else if (!isEmpty(request.mClientIp)) {
|
||||
return request.mClientIp;
|
||||
} else {
|
||||
@ -517,7 +519,7 @@ public class DhcpServer extends IDhcpServer.Stub {
|
||||
request.mRelayIp, request.mClientMac, true /* broadcast */, message);
|
||||
|
||||
final Inet4Address dst = isEmpty(request.mRelayIp)
|
||||
? (Inet4Address) Inet4Address.ALL
|
||||
? IPV4_ADDR_ALL
|
||||
: request.mRelayIp;
|
||||
return transmitPacket(nakPacket, DhcpNakPacket.class.getSimpleName(), dst);
|
||||
}
|
||||
@ -598,7 +600,7 @@ public class DhcpServer extends IDhcpServer.Stub {
|
||||
}
|
||||
|
||||
private static boolean isEmpty(@Nullable Inet4Address address) {
|
||||
return address == null || Inet4Address.ANY.equals(address);
|
||||
return address == null || IPV4_ADDR_ANY.equals(address);
|
||||
}
|
||||
|
||||
private class PacketListener extends DhcpPacketListener {
|
||||
@ -632,7 +634,7 @@ public class DhcpServer extends IDhcpServer.Stub {
|
||||
SocketUtils.bindSocketToInterface(mSocket, mIfName);
|
||||
Os.setsockoptInt(mSocket, SOL_SOCKET, SO_REUSEADDR, 1);
|
||||
Os.setsockoptInt(mSocket, SOL_SOCKET, SO_BROADCAST, 1);
|
||||
Os.bind(mSocket, Inet4Address.ANY, DHCP_SERVER);
|
||||
Os.bind(mSocket, IPV4_ADDR_ANY, DHCP_SERVER);
|
||||
|
||||
return mSocket;
|
||||
} catch (IOException | ErrnoException e) {
|
||||
|
@ -36,8 +36,6 @@ import android.system.Os;
|
||||
import android.system.OsConstants;
|
||||
import android.util.Log;
|
||||
|
||||
import com.android.internal.util.BitUtils;
|
||||
|
||||
import libcore.io.IoUtils;
|
||||
|
||||
import java.io.FileDescriptor;
|
||||
@ -186,7 +184,7 @@ public class IpNeighborMonitor extends PacketReader {
|
||||
|
||||
final int srcPortId = nlMsg.getHeader().nlmsg_pid;
|
||||
if (srcPortId != 0) {
|
||||
mLog.e("non-kernel source portId: " + BitUtils.uint32(srcPortId));
|
||||
mLog.e("non-kernel source portId: " + Integer.toUnsignedLong(srcPortId));
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -31,15 +31,15 @@ import android.net.metrics.IpReachabilityEvent;
|
||||
import android.net.netlink.StructNdMsg;
|
||||
import android.net.util.InterfaceParams;
|
||||
import android.net.util.SharedLog;
|
||||
import android.os.ConditionVariable;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.os.PowerManager;
|
||||
import android.os.PowerManager.WakeLock;
|
||||
import android.os.SystemClock;
|
||||
import android.util.Log;
|
||||
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
import com.android.internal.util.DumpUtils;
|
||||
import com.android.internal.util.DumpUtils.Dump;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.net.Inet6Address;
|
||||
@ -215,15 +215,20 @@ public class IpReachabilityMonitor {
|
||||
}
|
||||
|
||||
public void dump(PrintWriter pw) {
|
||||
DumpUtils.dumpAsync(
|
||||
mIpNeighborMonitor.getHandler(),
|
||||
new Dump() {
|
||||
@Override
|
||||
public void dump(PrintWriter pw, String prefix) {
|
||||
pw.println(describeWatchList("\n"));
|
||||
}
|
||||
},
|
||||
pw, "", 1000);
|
||||
if (Looper.myLooper() == mIpNeighborMonitor.getHandler().getLooper()) {
|
||||
pw.println(describeWatchList("\n"));
|
||||
return;
|
||||
}
|
||||
|
||||
final ConditionVariable cv = new ConditionVariable(false);
|
||||
mIpNeighborMonitor.getHandler().post(() -> {
|
||||
pw.println(describeWatchList("\n"));
|
||||
cv.open();
|
||||
});
|
||||
|
||||
if (!cv.block(1000)) {
|
||||
pw.println("Timed out waiting for IpReachabilityMonitor dump");
|
||||
}
|
||||
}
|
||||
|
||||
private String describeWatchList() { return describeWatchList(" "); }
|
||||
|
@ -0,0 +1,30 @@
|
||||
/*
|
||||
* Copyright (C) 2019 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.net.util;
|
||||
|
||||
/**
|
||||
* Collection of utilities for the network stack.
|
||||
*/
|
||||
public class NetworkStackUtils {
|
||||
|
||||
/**
|
||||
* @return True if the array is null or 0-length.
|
||||
*/
|
||||
public static <T> boolean isEmpty(T[] array) {
|
||||
return array == null || array.length == 0;
|
||||
}
|
||||
}
|
@ -31,6 +31,7 @@ import static android.net.metrics.ValidationProbeEvent.DNS_FAILURE;
|
||||
import static android.net.metrics.ValidationProbeEvent.DNS_SUCCESS;
|
||||
import static android.net.metrics.ValidationProbeEvent.PROBE_FALLBACK;
|
||||
import static android.net.metrics.ValidationProbeEvent.PROBE_PRIVDNS;
|
||||
import static android.net.util.NetworkStackUtils.isEmpty;
|
||||
|
||||
import android.annotation.Nullable;
|
||||
import android.app.PendingIntent;
|
||||
@ -80,7 +81,6 @@ import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
import com.android.internal.util.ArrayUtils;
|
||||
import com.android.internal.util.RingBufferIndices;
|
||||
import com.android.internal.util.State;
|
||||
import com.android.internal.util.StateMachine;
|
||||
@ -1169,7 +1169,7 @@ public class NetworkMonitor extends StateMachine {
|
||||
}
|
||||
|
||||
private CaptivePortalProbeSpec nextFallbackSpec() {
|
||||
if (ArrayUtils.isEmpty(mCaptivePortalFallbackSpecs)) {
|
||||
if (isEmpty(mCaptivePortalFallbackSpecs)) {
|
||||
return null;
|
||||
}
|
||||
// Randomly change spec without memory. Also randomize the first attempt.
|
||||
|
@ -16,6 +16,10 @@
|
||||
|
||||
package com.android.server.util;
|
||||
|
||||
import static android.net.shared.Inet4AddressUtils.intToInet4AddressHTH;
|
||||
|
||||
import java.net.Inet4Address;
|
||||
|
||||
/**
|
||||
* Network constants used by the network stack.
|
||||
*/
|
||||
@ -79,6 +83,8 @@ public final class NetworkStackConstants {
|
||||
public static final int IPV4_SRC_ADDR_OFFSET = 12;
|
||||
public static final int IPV4_DST_ADDR_OFFSET = 16;
|
||||
public static final int IPV4_ADDR_LEN = 4;
|
||||
public static final Inet4Address IPV4_ADDR_ALL = intToInet4AddressHTH(0xffffffff);
|
||||
public static final Inet4Address IPV4_ADDR_ANY = intToInet4AddressHTH(0x0);
|
||||
|
||||
/**
|
||||
* IPv6 constants.
|
||||
|
@ -21,6 +21,8 @@ import static android.net.dhcp.DhcpLease.HOSTNAME_NONE;
|
||||
import static android.net.dhcp.DhcpLeaseRepository.CLIENTID_UNSPEC;
|
||||
import static android.net.dhcp.DhcpLeaseRepository.INETADDR_UNSPEC;
|
||||
|
||||
import static com.android.server.util.NetworkStackConstants.IPV4_ADDR_ANY;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertNotEquals;
|
||||
@ -55,7 +57,6 @@ import java.util.Set;
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
@SmallTest
|
||||
public class DhcpLeaseRepositoryTest {
|
||||
private static final Inet4Address INET4_ANY = (Inet4Address) Inet4Address.ANY;
|
||||
private static final Inet4Address TEST_DEF_ROUTER = parseAddr4("192.168.42.247");
|
||||
private static final Inet4Address TEST_SERVER_ADDR = parseAddr4("192.168.42.241");
|
||||
private static final Inet4Address TEST_RESERVED_ADDR = parseAddr4("192.168.42.243");
|
||||
@ -108,7 +109,7 @@ public class DhcpLeaseRepositoryTest {
|
||||
MacAddress newMac = MacAddress.fromBytes(hwAddrBytes);
|
||||
final String hostname = "host_" + i;
|
||||
final DhcpLease lease = mRepo.getOffer(CLIENTID_UNSPEC, newMac,
|
||||
INET4_ANY /* relayAddr */, INETADDR_UNSPEC /* reqAddr */, hostname);
|
||||
IPV4_ADDR_ANY /* relayAddr */, INETADDR_UNSPEC /* reqAddr */, hostname);
|
||||
|
||||
assertNotNull(lease);
|
||||
assertEquals(newMac, lease.getHwAddr());
|
||||
@ -130,7 +131,7 @@ public class DhcpLeaseRepositoryTest {
|
||||
|
||||
try {
|
||||
mRepo.getOffer(null, TEST_MAC_2,
|
||||
INET4_ANY /* relayAddr */, INETADDR_UNSPEC /* reqAddr */, HOSTNAME_NONE);
|
||||
IPV4_ADDR_ANY /* relayAddr */, INETADDR_UNSPEC /* reqAddr */, HOSTNAME_NONE);
|
||||
fail("Should be out of addresses");
|
||||
} catch (DhcpLeaseRepository.OutOfAddressesException e) {
|
||||
// Expected
|
||||
@ -181,11 +182,11 @@ public class DhcpLeaseRepositoryTest {
|
||||
public void testGetOffer_StableAddress() throws Exception {
|
||||
for (final MacAddress macAddr : new MacAddress[] { TEST_MAC_1, TEST_MAC_2, TEST_MAC_3 }) {
|
||||
final DhcpLease lease = mRepo.getOffer(CLIENTID_UNSPEC, macAddr,
|
||||
INET4_ANY /* relayAddr */, INETADDR_UNSPEC /* reqAddr */, HOSTNAME_NONE);
|
||||
IPV4_ADDR_ANY /* relayAddr */, INETADDR_UNSPEC /* reqAddr */, HOSTNAME_NONE);
|
||||
|
||||
// Same lease is offered twice
|
||||
final DhcpLease newLease = mRepo.getOffer(CLIENTID_UNSPEC, macAddr,
|
||||
INET4_ANY /* relayAddr */, INETADDR_UNSPEC /* reqAddr */, HOSTNAME_NONE);
|
||||
IPV4_ADDR_ANY /* relayAddr */, INETADDR_UNSPEC /* reqAddr */, HOSTNAME_NONE);
|
||||
assertEquals(lease, newLease);
|
||||
}
|
||||
}
|
||||
@ -196,7 +197,7 @@ public class DhcpLeaseRepositoryTest {
|
||||
mRepo.updateParams(newPrefix, TEST_EXCL_SET, TEST_LEASE_TIME_MS);
|
||||
|
||||
DhcpLease lease = mRepo.getOffer(CLIENTID_UNSPEC, TEST_MAC_1,
|
||||
INET4_ANY /* relayAddr */, INETADDR_UNSPEC /* reqAddr */, HOSTNAME_NONE);
|
||||
IPV4_ADDR_ANY /* relayAddr */, INETADDR_UNSPEC /* reqAddr */, HOSTNAME_NONE);
|
||||
assertTrue(newPrefix.contains(lease.getNetAddr()));
|
||||
}
|
||||
|
||||
@ -205,7 +206,7 @@ public class DhcpLeaseRepositoryTest {
|
||||
requestLeaseSelecting(TEST_MAC_1, TEST_INETADDR_1, TEST_HOSTNAME_1);
|
||||
|
||||
DhcpLease offer = mRepo.getOffer(CLIENTID_UNSPEC, TEST_MAC_1,
|
||||
INET4_ANY /* relayAddr */, INETADDR_UNSPEC /* reqAddr */, HOSTNAME_NONE);
|
||||
IPV4_ADDR_ANY /* relayAddr */, INETADDR_UNSPEC /* reqAddr */, HOSTNAME_NONE);
|
||||
assertEquals(TEST_INETADDR_1, offer.getNetAddr());
|
||||
assertEquals(TEST_HOSTNAME_1, offer.getHostname());
|
||||
}
|
||||
@ -213,12 +214,13 @@ public class DhcpLeaseRepositoryTest {
|
||||
@Test
|
||||
public void testGetOffer_ClientIdHasExistingLease() throws Exception {
|
||||
final byte[] clientId = new byte[] { 1, 2 };
|
||||
mRepo.requestLease(clientId, TEST_MAC_1, INET4_ANY /* clientAddr */,
|
||||
INET4_ANY /* relayAddr */, TEST_INETADDR_1 /* reqAddr */, false, TEST_HOSTNAME_1);
|
||||
mRepo.requestLease(clientId, TEST_MAC_1, IPV4_ADDR_ANY /* clientAddr */,
|
||||
IPV4_ADDR_ANY /* relayAddr */, TEST_INETADDR_1 /* reqAddr */, false,
|
||||
TEST_HOSTNAME_1);
|
||||
|
||||
// Different MAC, but same clientId
|
||||
DhcpLease offer = mRepo.getOffer(clientId, TEST_MAC_2,
|
||||
INET4_ANY /* relayAddr */, INETADDR_UNSPEC /* reqAddr */, HOSTNAME_NONE);
|
||||
IPV4_ADDR_ANY /* relayAddr */, INETADDR_UNSPEC /* reqAddr */, HOSTNAME_NONE);
|
||||
assertEquals(TEST_INETADDR_1, offer.getNetAddr());
|
||||
assertEquals(TEST_HOSTNAME_1, offer.getHostname());
|
||||
}
|
||||
@ -227,12 +229,13 @@ public class DhcpLeaseRepositoryTest {
|
||||
public void testGetOffer_DifferentClientId() throws Exception {
|
||||
final byte[] clientId1 = new byte[] { 1, 2 };
|
||||
final byte[] clientId2 = new byte[] { 3, 4 };
|
||||
mRepo.requestLease(clientId1, TEST_MAC_1, INET4_ANY /* clientAddr */,
|
||||
INET4_ANY /* relayAddr */, TEST_INETADDR_1 /* reqAddr */, false, TEST_HOSTNAME_1);
|
||||
mRepo.requestLease(clientId1, TEST_MAC_1, IPV4_ADDR_ANY /* clientAddr */,
|
||||
IPV4_ADDR_ANY /* relayAddr */, TEST_INETADDR_1 /* reqAddr */, false,
|
||||
TEST_HOSTNAME_1);
|
||||
|
||||
// Same MAC, different client ID
|
||||
DhcpLease offer = mRepo.getOffer(clientId2, TEST_MAC_1,
|
||||
INET4_ANY /* relayAddr */, INETADDR_UNSPEC /* reqAddr */, HOSTNAME_NONE);
|
||||
IPV4_ADDR_ANY /* relayAddr */, INETADDR_UNSPEC /* reqAddr */, HOSTNAME_NONE);
|
||||
// Obtains a different address
|
||||
assertNotEquals(TEST_INETADDR_1, offer.getNetAddr());
|
||||
assertEquals(HOSTNAME_NONE, offer.getHostname());
|
||||
@ -241,7 +244,7 @@ public class DhcpLeaseRepositoryTest {
|
||||
|
||||
@Test
|
||||
public void testGetOffer_RequestedAddress() throws Exception {
|
||||
DhcpLease offer = mRepo.getOffer(CLIENTID_UNSPEC, TEST_MAC_1, INET4_ANY /* relayAddr */,
|
||||
DhcpLease offer = mRepo.getOffer(CLIENTID_UNSPEC, TEST_MAC_1, IPV4_ADDR_ANY /* relayAddr */,
|
||||
TEST_INETADDR_1 /* reqAddr */, TEST_HOSTNAME_1);
|
||||
assertEquals(TEST_INETADDR_1, offer.getNetAddr());
|
||||
assertEquals(TEST_HOSTNAME_1, offer.getHostname());
|
||||
@ -250,14 +253,14 @@ public class DhcpLeaseRepositoryTest {
|
||||
@Test
|
||||
public void testGetOffer_RequestedAddressInUse() throws Exception {
|
||||
requestLeaseSelecting(TEST_MAC_1, TEST_INETADDR_1);
|
||||
DhcpLease offer = mRepo.getOffer(CLIENTID_UNSPEC, TEST_MAC_2, INET4_ANY /* relayAddr */,
|
||||
DhcpLease offer = mRepo.getOffer(CLIENTID_UNSPEC, TEST_MAC_2, IPV4_ADDR_ANY /* relayAddr */,
|
||||
TEST_INETADDR_1 /* reqAddr */, HOSTNAME_NONE);
|
||||
assertNotEquals(TEST_INETADDR_1, offer.getNetAddr());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetOffer_RequestedAddressReserved() throws Exception {
|
||||
DhcpLease offer = mRepo.getOffer(CLIENTID_UNSPEC, TEST_MAC_1, INET4_ANY /* relayAddr */,
|
||||
DhcpLease offer = mRepo.getOffer(CLIENTID_UNSPEC, TEST_MAC_1, IPV4_ADDR_ANY /* relayAddr */,
|
||||
TEST_RESERVED_ADDR /* reqAddr */, HOSTNAME_NONE);
|
||||
assertNotEquals(TEST_RESERVED_ADDR, offer.getNetAddr());
|
||||
}
|
||||
@ -265,7 +268,7 @@ public class DhcpLeaseRepositoryTest {
|
||||
@Test
|
||||
public void testGetOffer_RequestedAddressInvalid() throws Exception {
|
||||
final Inet4Address invalidAddr = parseAddr4("192.168.42.0");
|
||||
DhcpLease offer = mRepo.getOffer(CLIENTID_UNSPEC, TEST_MAC_1, INET4_ANY /* relayAddr */,
|
||||
DhcpLease offer = mRepo.getOffer(CLIENTID_UNSPEC, TEST_MAC_1, IPV4_ADDR_ANY /* relayAddr */,
|
||||
invalidAddr /* reqAddr */, HOSTNAME_NONE);
|
||||
assertNotEquals(invalidAddr, offer.getNetAddr());
|
||||
}
|
||||
@ -273,7 +276,7 @@ public class DhcpLeaseRepositoryTest {
|
||||
@Test
|
||||
public void testGetOffer_RequestedAddressOutsideSubnet() throws Exception {
|
||||
final Inet4Address invalidAddr = parseAddr4("192.168.254.2");
|
||||
DhcpLease offer = mRepo.getOffer(CLIENTID_UNSPEC, TEST_MAC_1, INET4_ANY /* relayAddr */,
|
||||
DhcpLease offer = mRepo.getOffer(CLIENTID_UNSPEC, TEST_MAC_1, IPV4_ADDR_ANY /* relayAddr */,
|
||||
invalidAddr /* reqAddr */, HOSTNAME_NONE);
|
||||
assertNotEquals(invalidAddr, offer.getNetAddr());
|
||||
}
|
||||
@ -322,7 +325,7 @@ public class DhcpLeaseRepositoryTest {
|
||||
|
||||
@Test(expected = DhcpLeaseRepository.InvalidSubnetException.class)
|
||||
public void testRequestLease_SelectingRelayInInvalidSubnet() throws Exception {
|
||||
mRepo.requestLease(CLIENTID_UNSPEC, TEST_MAC_1, INET4_ANY /* clientAddr */,
|
||||
mRepo.requestLease(CLIENTID_UNSPEC, TEST_MAC_1, IPV4_ADDR_ANY /* clientAddr */,
|
||||
parseAddr4("192.168.128.1") /* relayAddr */, TEST_INETADDR_1 /* reqAddr */,
|
||||
true /* sidSet */, HOSTNAME_NONE);
|
||||
}
|
||||
@ -419,14 +422,14 @@ public class DhcpLeaseRepositoryTest {
|
||||
public void testReleaseLease_StableOffer() throws Exception {
|
||||
for (MacAddress mac : new MacAddress[] { TEST_MAC_1, TEST_MAC_2, TEST_MAC_3 }) {
|
||||
final DhcpLease lease = mRepo.getOffer(CLIENTID_UNSPEC, mac,
|
||||
INET4_ANY /* relayAddr */, INETADDR_UNSPEC /* reqAddr */, HOSTNAME_NONE);
|
||||
IPV4_ADDR_ANY /* relayAddr */, INETADDR_UNSPEC /* reqAddr */, HOSTNAME_NONE);
|
||||
|
||||
requestLeaseSelecting(mac, lease.getNetAddr());
|
||||
mRepo.releaseLease(CLIENTID_UNSPEC, mac, lease.getNetAddr());
|
||||
|
||||
// Same lease is offered after it was released
|
||||
final DhcpLease newLease = mRepo.getOffer(CLIENTID_UNSPEC, mac,
|
||||
INET4_ANY /* relayAddr */, INETADDR_UNSPEC /* reqAddr */, HOSTNAME_NONE);
|
||||
IPV4_ADDR_ANY /* relayAddr */, INETADDR_UNSPEC /* reqAddr */, HOSTNAME_NONE);
|
||||
assertEquals(lease.getNetAddr(), newLease.getNetAddr());
|
||||
}
|
||||
}
|
||||
@ -434,13 +437,13 @@ public class DhcpLeaseRepositoryTest {
|
||||
@Test
|
||||
public void testMarkLeaseDeclined() throws Exception {
|
||||
final DhcpLease lease = mRepo.getOffer(CLIENTID_UNSPEC, TEST_MAC_1,
|
||||
INET4_ANY /* relayAddr */, INETADDR_UNSPEC /* reqAddr */, HOSTNAME_NONE);
|
||||
IPV4_ADDR_ANY /* relayAddr */, INETADDR_UNSPEC /* reqAddr */, HOSTNAME_NONE);
|
||||
|
||||
mRepo.markLeaseDeclined(lease.getNetAddr());
|
||||
|
||||
// Same lease is not offered again
|
||||
final DhcpLease newLease = mRepo.getOffer(CLIENTID_UNSPEC, TEST_MAC_1,
|
||||
INET4_ANY /* relayAddr */, INETADDR_UNSPEC /* reqAddr */, HOSTNAME_NONE);
|
||||
IPV4_ADDR_ANY /* relayAddr */, INETADDR_UNSPEC /* reqAddr */, HOSTNAME_NONE);
|
||||
assertNotEquals(lease.getNetAddr(), newLease.getNetAddr());
|
||||
}
|
||||
|
||||
@ -457,16 +460,16 @@ public class DhcpLeaseRepositoryTest {
|
||||
|
||||
// Last 2 addresses: addresses marked declined should be used
|
||||
final DhcpLease firstLease = mRepo.getOffer(CLIENTID_UNSPEC, TEST_MAC_1,
|
||||
INET4_ANY /* relayAddr */, INETADDR_UNSPEC /* reqAddr */, TEST_HOSTNAME_1);
|
||||
IPV4_ADDR_ANY /* relayAddr */, INETADDR_UNSPEC /* reqAddr */, TEST_HOSTNAME_1);
|
||||
requestLeaseSelecting(TEST_MAC_1, firstLease.getNetAddr());
|
||||
|
||||
final DhcpLease secondLease = mRepo.getOffer(CLIENTID_UNSPEC, TEST_MAC_2,
|
||||
INET4_ANY /* relayAddr */, INETADDR_UNSPEC /* reqAddr */, TEST_HOSTNAME_2);
|
||||
IPV4_ADDR_ANY /* relayAddr */, INETADDR_UNSPEC /* reqAddr */, TEST_HOSTNAME_2);
|
||||
requestLeaseSelecting(TEST_MAC_2, secondLease.getNetAddr());
|
||||
|
||||
// Now out of addresses
|
||||
try {
|
||||
mRepo.getOffer(CLIENTID_UNSPEC, TEST_MAC_3, INET4_ANY /* relayAddr */,
|
||||
mRepo.getOffer(CLIENTID_UNSPEC, TEST_MAC_3, IPV4_ADDR_ANY /* relayAddr */,
|
||||
INETADDR_UNSPEC /* reqAddr */, HOSTNAME_NONE);
|
||||
fail("Repository should be out of addresses and throw");
|
||||
} catch (DhcpLeaseRepository.OutOfAddressesException e) { /* expected */ }
|
||||
@ -480,7 +483,8 @@ public class DhcpLeaseRepositoryTest {
|
||||
private DhcpLease requestLease(@NonNull MacAddress macAddr, @NonNull Inet4Address clientAddr,
|
||||
@Nullable Inet4Address reqAddr, @Nullable String hostname, boolean sidSet)
|
||||
throws DhcpLeaseRepository.DhcpLeaseException {
|
||||
return mRepo.requestLease(CLIENTID_UNSPEC, macAddr, clientAddr, INET4_ANY /* relayAddr */,
|
||||
return mRepo.requestLease(CLIENTID_UNSPEC, macAddr, clientAddr,
|
||||
IPV4_ADDR_ANY /* relayAddr */,
|
||||
reqAddr, sidSet, hostname);
|
||||
}
|
||||
|
||||
@ -490,7 +494,7 @@ public class DhcpLeaseRepositoryTest {
|
||||
private DhcpLease requestLeaseSelecting(@NonNull MacAddress macAddr,
|
||||
@NonNull Inet4Address reqAddr, @Nullable String hostname)
|
||||
throws DhcpLeaseRepository.DhcpLeaseException {
|
||||
return requestLease(macAddr, INET4_ANY /* clientAddr */, reqAddr, hostname,
|
||||
return requestLease(macAddr, IPV4_ADDR_ANY /* clientAddr */, reqAddr, hostname,
|
||||
true /* sidSet */);
|
||||
}
|
||||
|
||||
@ -507,7 +511,7 @@ public class DhcpLeaseRepositoryTest {
|
||||
*/
|
||||
private DhcpLease requestLeaseInitReboot(@NonNull MacAddress macAddr,
|
||||
@NonNull Inet4Address reqAddr) throws DhcpLeaseRepository.DhcpLeaseException {
|
||||
return requestLease(macAddr, INET4_ANY /* clientAddr */, reqAddr, HOSTNAME_NONE,
|
||||
return requestLease(macAddr, IPV4_ADDR_ANY /* clientAddr */, reqAddr, HOSTNAME_NONE,
|
||||
false /* sidSet */);
|
||||
}
|
||||
|
||||
|
@ -78,9 +78,9 @@ public class DhcpPacketTest {
|
||||
SERVER_ADDR, PREFIX_LENGTH);
|
||||
private static final String HOSTNAME = "testhostname";
|
||||
private static final short MTU = 1500;
|
||||
// Use our own empty address instead of Inet4Address.ANY or INADDR_ANY to ensure that the code
|
||||
// Use our own empty address instead of IPV4_ADDR_ANY or INADDR_ANY to ensure that the code
|
||||
// doesn't use == instead of equals when comparing addresses.
|
||||
private static final Inet4Address ANY = (Inet4Address) v4Address("0.0.0.0");
|
||||
private static final Inet4Address ANY = v4Address("0.0.0.0");
|
||||
|
||||
private static final byte[] CLIENT_MAC = new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05 };
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user