diff options
author | Lorenzo Colitti <lorenzo@google.com> | 2023-01-16 04:00:28 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2023-01-16 04:00:28 +0000 |
commit | c06cd3d82cca984e28baefa233d8f93073b0d745 (patch) | |
tree | 799cd95e915f619f14c686b98aa964babdabb87e | |
parent | a9a38e626266d5367f85b38c043a8945b580334f (diff) | |
parent | d75d02b14e5f88896c4ba2ac8fcd1dbd1cc0cb0f (diff) | |
download | net-c06cd3d82cca984e28baefa233d8f93073b0d745.tar.gz |
Randomize the prefix used by RouterAdvertisementResponder. am: cfee0bbf71 am: d75d02b14eandroid-13.0.0_r82android-13.0.0_r81android-13.0.0_r80android-13.0.0_r74android-13.0.0_r73android-13.0.0_r72android-13.0.0_r66android-13.0.0_r65android-13.0.0_r64android-13.0.0_r60android-13.0.0_r59android-13.0.0_r58android13-qpr3-c-s8-releaseandroid13-qpr3-c-s7-releaseandroid13-qpr3-c-s6-releaseandroid13-qpr3-c-s5-releaseandroid13-qpr3-c-s4-releaseandroid13-qpr3-c-s3-releaseandroid13-qpr3-c-s2-releaseandroid13-qpr3-c-s12-releaseandroid13-qpr3-c-s11-releaseandroid13-qpr3-c-s10-releaseandroid13-qpr3-c-s1-release
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/libs/net/+/20576425
Change-Id: I0d3acfc737917bcc8c41bfbc4463c6d512e5d861
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r-- | common/testutils/devicetests/com/android/testutils/RouterAdvertisementResponder.java | 33 |
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() { |