diff --git a/tests/integration/src/android/net/Dhcp6PdTest.kt b/tests/integration/src/android/net/Dhcp6PdTest.kt index 594984ceb7..cd1b340753 100644 --- a/tests/integration/src/android/net/Dhcp6PdTest.kt +++ b/tests/integration/src/android/net/Dhcp6PdTest.kt @@ -29,6 +29,7 @@ import android.platform.test.annotations.AppModeFull import android.provider.DeviceConfig.NAMESPACE_CONNECTIVITY import androidx.test.platform.app.InstrumentationRegistry import com.android.net.module.util.dhcp6.Dhcp6Packet +import com.android.net.module.util.dhcp6.Dhcp6RebindPacket import com.android.net.module.util.dhcp6.Dhcp6SolicitPacket import com.android.testutils.AutoCloseTestInterfaceRule import com.android.testutils.DevSdkIgnoreRule @@ -195,6 +196,38 @@ class Dhcp6PdTest { networkCallback.expect() } + @Test + fun testProvisioning_triggeredByMultiplePrefixesWithPflag() { + ndResponder.addRouterEntry(ROUTER_MAC, ROUTER_V6, RA_WITH_PFLAG) + val (srcAddr, solicit) = expectDhcp6Packet() + + run { + val ether = EtherPkt(src = ROUTER_MAC, dst = localMac) + val ipv6 = Ip6Pkt(src = ROUTER_V6, dst = srcAddr) + val udp = UdpPkt(sport = 547, dport = 546) + val dhcp6 = Dhcp6Pkt(type = "REPLY", transId = solicit.transactionId) + .addRapidCommitOption() + .addClientIdentifierOption(solicit.clientDuid) + .addServerIdentifierOption(byteArrayOf(1, 2, 3, 4, 5, 6)) + val dhcp6_pd = Dhcp6IaPdOpt(iaid = solicit.iaid) + .addIaPrefixOption(prefix = "2001:db8:1234::/64") + val pkt = ether / ipv6 / udp / dhcp6 / dhcp6_pd + iface.sendPacket(pkt) + } + + networkCallback.expect() + + run { + val ether = EtherPkt(src = "f4:34:f0:64:52:fe", dst = "33:33:00:00:00:01") + val ipv6 = Ip6Pkt(src = "fe80::12", dst = "ff02::1") + val ra = RaPkt(lft = 360, retransTimer = 360) + .addPioOption(prefix = "2002:db8:1::/64", flags = "LAP") + iface.sendPacket(ether / ipv6 / ra) + } + + expectDhcp6Packet() + } + @Test fun testProvisioning_withTwoPrefixes() { val ra = RaPkt()