diff options
author | Jan Gelety <jgelety@cisco.com> | 2017-09-08 11:38:38 +0200 |
---|---|---|
committer | Tibor Frank <tifrank@cisco.com> | 2017-09-18 12:05:49 +0000 |
commit | 2a848f49308868dfe6fa3a9cb78bd085f8c16f40 (patch) | |
tree | 180c45ea5db2cc095c65d3b698a3e05a6ee819fe /resources/traffic_scripts/send_icmp_check_headers.py | |
parent | 6928a6be42016a6c5edade6369041670fe544f39 (diff) |
Ignore unexpected ICMPv6 Neighbor Discovery - Neighbor Solicitation packets
We need to adapt all functional traffic scripts related to functional
IPv6 tests to ingore receiving of unexpected ICMPv6ND_NS
(ICMPv6 Neighbor Discovery - Neighbor Solicitation) packets that are
sent automatically and we cannot avoid to receive them.
The reason is to prevent false negative test results in case of csit
functional tests that could block creation of new operational branch
(csit weekly jobs), usage of new vpp builds (csit semiweekly jobs)
and merging patches - csit as well as vpp.
Change-Id: I43c90e7c766762fa769a81661338759a11b401a1
Signed-off-by: Jan Gelety <jgelety@cisco.com>
Diffstat (limited to 'resources/traffic_scripts/send_icmp_check_headers.py')
-rwxr-xr-x | resources/traffic_scripts/send_icmp_check_headers.py | 45 |
1 files changed, 26 insertions, 19 deletions
diff --git a/resources/traffic_scripts/send_icmp_check_headers.py b/resources/traffic_scripts/send_icmp_check_headers.py index c9e3a35df4..2193164b61 100755 --- a/resources/traffic_scripts/send_icmp_check_headers.py +++ b/resources/traffic_scripts/send_icmp_check_headers.py @@ -22,8 +22,7 @@ import sys import ipaddress from robot.api import logger from scapy.layers.inet import ICMP, IP -from scapy.layers.inet6 import ICMPv6EchoRequest -from scapy.layers.inet6 import IPv6 +from scapy.layers.inet6 import IPv6, ICMPv6EchoRequest, ICMPv6ND_NS from scapy.layers.l2 import Ether, Dot1Q from resources.libraries.python.PacketVerifier import RxQueue, TxQueue @@ -94,28 +93,36 @@ def main(): sent_packets.append(pkt_raw) txq.send(pkt_raw) - if tx_if == rx_if: - ether = rxq.recv(2, ignore=sent_packets) - else: - ether = rxq.recv(2) - if ether is None: - raise RuntimeError("ICMP echo Rx timeout") + while True: + if tx_if == rx_if: + ether = rxq.recv(2, ignore=sent_packets) + else: + ether = rxq.recv(2) + if ether is None: + raise RuntimeError('ICMP echo Rx timeout') + + if ether.haslayer(ICMPv6ND_NS): + # read another packet in the queue if the current one is ICMPv6ND_NS + continue + else: + # otherwise process the current packet + break if rx_dst_mac == ether[Ether].dst and rx_src_mac == ether[Ether].src: logger.trace("MAC matched") else: - raise RuntimeError( - "Matching packet unsuccessful: {0}".format(ether.__repr__())) + raise RuntimeError("Matching packet unsuccessful: {0}". + format(ether.__repr__())) if encaps_rx == 'Dot1q': if ether[Dot1Q].vlan == int(vlan_rx): logger.trace("VLAN matched") else: raise RuntimeError('Ethernet frame with wrong VLAN tag ({}-' - 'received, {}-expected):\n{}' - .format(ether[Dot1Q].vlan, vlan_rx, - ether.__repr__())) + 'received, {}-expected):\n{}'. + format(ether[Dot1Q].vlan, vlan_rx, + ether.__repr__())) ip = ether[Dot1Q].payload elif encaps_rx == 'Dot1ad': raise NotImplementedError() @@ -123,21 +130,21 @@ def main(): ip = ether.payload if not isinstance(ip, ip_format): - raise RuntimeError( - "Not an IP packet received {0}".format(ip.__repr__())) + raise RuntimeError("Not an IP packet received {0}". + format(ip.__repr__())) # Compare data from packets if src_ip == ip.src: logger.trace("Src IP matched") else: - raise RuntimeError("Matching Src IP unsuccessful: {} != {}" - .format(src_ip, ip.src)) + raise RuntimeError("Matching Src IP unsuccessful: {} != {}". + format(src_ip, ip.src)) if dst_ip == ip.dst: logger.trace("Dst IP matched") else: - raise RuntimeError("Matching Dst IP unsuccessful: {} != {}" - .format(dst_ip, ip.dst)) + raise RuntimeError("Matching Dst IP unsuccessful: {} != {}". + format(dst_ip, ip.dst)) sys.exit(0) |