summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xnet/test/srcaddr_selection_test.py17
1 files changed, 15 insertions, 2 deletions
diff --git a/net/test/srcaddr_selection_test.py b/net/test/srcaddr_selection_test.py
index d200017..8c327c3 100755
--- a/net/test/srcaddr_selection_test.py
+++ b/net/test/srcaddr_selection_test.py
@@ -139,7 +139,19 @@ class IPv6SourceAddressSelectionTest(multinetwork_base.MultiNetworkBaseTest):
if not self.AddressIsTentative(address):
return
time.sleep(0.1)
- raise AssertionError("%s did not complete DAD after 2 seconds")
+ raise AssertionError(f"{address} did not complete DAD after 2 seconds")
+
+ def WaitForDadFailure(self, address):
+ # Address should be either deleted or set IFA_F_DADFAILED flag after DAD failure
+ for _ in range(20):
+ try:
+ ifa_msg = self.iproute.GetAddress(address)[0]
+ except OSError:
+ return
+ if ifa_msg.flags & iproute.IFA_F_DADFAILED:
+ return
+ time.sleep(0.1)
+ raise AssertionError(f"{address} did not complete DAD failure after 2 seconds")
class MultiInterfaceSourceAddressSelectionTest(IPv6SourceAddressSelectionTest):
@@ -286,6 +298,7 @@ class DadFailureTest(MultiInterfaceSourceAddressSelectionTest):
self.SetUseOptimistic(self.test_ifname, 1)
# Send a RA to start SLAAC and subsequent DAD.
self.SendRA(self.test_netid, retranstimer=RETRANS_TIMER)
+ time.sleep(0.1) # Give the kernel time to notice our RA
# Prove optimism and usability.
self.assertAddressHasExpectedAttributes(
self.test_ip, self.test_ifindex, iproute.IFA_F_OPTIMISTIC)
@@ -300,7 +313,7 @@ class DadFailureTest(MultiInterfaceSourceAddressSelectionTest):
scapy.ICMPv6ND_NA(tgt=self.test_ip, R=0, S=0, O=1) /
scapy.ICMPv6NDOptDstLLAddr(lladdr=conflict_macaddr))
self.ReceiveEtherPacketOn(self.test_netid, dad_defense)
- self.WaitForDad(self.test_lladdr)
+ self.WaitForDadFailure(self.test_ip)
# The address should have failed DAD, and therefore no longer be usable.
self.assertAddressNotUsable(self.test_ip, self.test_netid)