summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLorenzo Colitti <lorenzo@google.com>2022-08-03 15:54:23 +0900
committerSamip Garg <samgarg@google.com>2022-12-13 18:11:12 +0000
commitcfee0bbf71f7176181f4f653abea5c346a60fde6 (patch)
tree799cd95e915f619f14c686b98aa964babdabb87e
parent75d20a5fbeb4fa37ff5504d9301dbc6dd0d30af2 (diff)
downloadnet-cfee0bbf71f7176181f4f653abea5c346a60fde6.tar.gz
Randomize the prefix used by RouterAdvertisementResponder.
Currently RouterAdvertisementResponder always uses a prefix of 2001:db8::/64, even if there are multiple instances on different interfaces. Randomize the prefix instead. Test: TH Bug: 240323229 Bug: 235559605 Bug: 259849956 Change-Id: I585ca804845f4278187602a6c9816470dcea04f8 Merged-In: I585ca804845f4278187602a6c9816470dcea04f8 (cherry picked from commit 6ab502437e77fde3346f45376fc6212d2825b27b)
-rw-r--r--common/testutils/devicetests/com/android/testutils/RouterAdvertisementResponder.java33
1 files changed, 27 insertions, 6 deletions
diff --git a/common/testutils/devicetests/com/android/testutils/RouterAdvertisementResponder.java b/common/testutils/devicetests/com/android/testutils/RouterAdvertisementResponder.java
index 91c3f766..51df9351 100644
--- a/common/testutils/devicetests/com/android/testutils/RouterAdvertisementResponder.java
+++ b/common/testutils/devicetests/com/android/testutils/RouterAdvertisementResponder.java
@@ -31,7 +31,6 @@ import static com.android.net.module.util.NetworkStackConstants.PIO_FLAG_ON_LINK
import android.net.InetAddresses;
import android.net.IpPrefix;
-import android.net.LinkAddress;
import android.net.MacAddress;
import android.util.ArrayMap;
import android.util.Pair;
@@ -50,6 +49,8 @@ import java.io.IOException;
import java.net.Inet6Address;
import java.nio.ByteBuffer;
import java.util.Map;
+import java.util.Objects;
+import java.util.Random;
/**
* ND (RA & NA) responder class useful for tests that require a provisioned IPv6 interface.
@@ -57,16 +58,30 @@ import java.util.Map;
*/
public class RouterAdvertisementResponder extends PacketResponder {
private static final String TAG = "RouterAdvertisementResponder";
- private static final LinkAddress SLAAC_PREFIX = new LinkAddress("2001:db8::/64");
private static final Inet6Address DNS_SERVER =
(Inet6Address) InetAddresses.parseNumericAddress("2001:4860:4860::64");
private final TapPacketReader mPacketReader;
// Maps IPv6 address to MacAddress and isRouter boolean.
private final Map<Inet6Address, Pair<MacAddress, Boolean>> mNeighborMap = new ArrayMap<>();
+ private final IpPrefix mPrefix;
- public RouterAdvertisementResponder(TapPacketReader packetReader) {
+ public RouterAdvertisementResponder(TapPacketReader packetReader, IpPrefix prefix) {
super(packetReader, RouterAdvertisementResponder::isRsOrNs, TAG);
mPacketReader = packetReader;
+ mPrefix = Objects.requireNonNull(prefix);
+ }
+
+ public RouterAdvertisementResponder(TapPacketReader packetReader) {
+ this(packetReader, makeRandomPrefix());
+ }
+
+ private static IpPrefix makeRandomPrefix() {
+ final byte[] prefixBytes = new IpPrefix("2001:db8::/64").getAddress().getAddress();
+ final Random r = new Random();
+ for (int i = 4; i < 8; i++) {
+ prefixBytes[i] = (byte) r.nextInt();
+ }
+ return new IpPrefix(prefixBytes, 64);
}
/** Returns true if the packet is a router solicitation or neighbor solicitation message. */
@@ -103,11 +118,17 @@ public class RouterAdvertisementResponder extends PacketResponder {
mNeighborMap.put(ip, new Pair<>(mac, false));
}
+ /**
+ * @return the prefix that is announced in the Router Advertisements sent by this object.
+ */
+ public IpPrefix getPrefix() {
+ return mPrefix;
+ }
+
private ByteBuffer buildPrefixOption() {
return PrefixInformationOption.build(
- new IpPrefix(SLAAC_PREFIX.getAddress(), SLAAC_PREFIX.getPrefixLength()),
- (byte) (PIO_FLAG_ON_LINK | PIO_FLAG_AUTONOMOUS), 3600/*valid lifetime*/,
- 3600/*preferred lifetime*/);
+ mPrefix, (byte) (PIO_FLAG_ON_LINK | PIO_FLAG_AUTONOMOUS),
+ 3600 /* valid lifetime */, 3600 /* preferred lifetime */);
}
private ByteBuffer buildRdnssOption() {