From 82a06a9335d39068007206ad4946ff0e83aa269d Mon Sep 17 00:00:00 2001 From: Neale Ranns Date: Thu, 8 Dec 2016 20:05:33 +0000 Subject: When waiting for an IPv6 response, filter non-ND packets Change-Id: Ia5f5e00db84022bb7ee89a1b9d036fffa734295a Signed-off-by: Neale Ranns --- test/vpp_pg_interface.py | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) (limited to 'test/vpp_pg_interface.py') diff --git a/test/vpp_pg_interface.py b/test/vpp_pg_interface.py index 012f5768..2ebcbb57 100644 --- a/test/vpp_pg_interface.py +++ b/test/vpp_pg_interface.py @@ -238,24 +238,29 @@ class VppPGInterface(VppInterface): pg_interface.enable_capture() self.test.pg_start() self.test.logger.info(self.test.vapi.cli("show trace")) - ndp_reply = pg_interface.get_capture() - if ndp_reply is None or len(ndp_reply) == 0: + replies = pg_interface.get_capture() + if replies is None or len(replies) == 0: self.test.logger.info( "No NDP received on port %s" % pg_interface.name) return - ndp_reply = ndp_reply[0] - # Make Dot1AD packet content recognizable to scapy - if ndp_reply.type == 0x88a8: - ndp_reply.type = 0x8100 - ndp_reply = Ether(str(ndp_reply)) - try: - ndp_na = ndp_reply[ICMPv6ND_NA] - opt = ndp_na[ICMPv6NDOptDstLLAddr] - self.test.logger.info("VPP %s MAC address is %s " % - (self.name, opt.lladdr)) - self._local_mac = opt.lladdr - except: - self.test.logger.error( - ppp("Unexpected response to NDP request:", ndp_reply)) + # Enabling IPv6 on an interface can generate more than the + # ND reply we are looking for (namely MLD). So loop through + # the replies to look for want we want. + for ndp_reply in replies: + # Make Dot1AD packet content recognizable to scapy + if ndp_reply.type == 0x88a8: + ndp_reply.type = 0x8100 + ndp_reply = Ether(str(ndp_reply)) + try: + ndp_na = ndp_reply[ICMPv6ND_NA] + opt = ndp_na[ICMPv6NDOptDstLLAddr] + self.test.logger.info("VPP %s MAC address is %s " % + (self.name, opt.lladdr)) + self._local_mac = opt.lladdr + except: + self.test.logger.info( + ppp("Unexpected response to NDP request:", ndp_reply)) + # if no packets above provided the local MAC, then this failed. + if not hasattr(self, '_local_mac'): raise -- cgit 1.2.3-korg