X-Git-Url: https://gerrit.fd.io/r/gitweb?p=csit.git;a=blobdiff_plain;f=resources%2Ftraffic_scripts%2Fipv4_sweep_ping.py;h=7f6759724c2ea5d7c3bf017d459de2e3a19cc27f;hp=4b82a9b03e5bf2fde3dc73068c6d099453050e1d;hb=a060d519d0a89574f5e75d4e8d4c142fa5687555;hpb=b92a827b1c7f48da4214e992e5503ebe1c182416 diff --git a/resources/traffic_scripts/ipv4_sweep_ping.py b/resources/traffic_scripts/ipv4_sweep_ping.py index 4b82a9b03e..7f6759724c 100755 --- a/resources/traffic_scripts/ipv4_sweep_ping.py +++ b/resources/traffic_scripts/ipv4_sweep_ping.py @@ -20,7 +20,7 @@ import logging import os logging.getLogger("scapy.runtime").setLevel(logging.ERROR) from resources.libraries.python.PacketVerifier import RxQueue, TxQueue,\ - auto_pad, create_gratuitous_arp_request + create_gratuitous_arp_request, checksum_equal from resources.libraries.python.TrafficScriptArg import TrafficScriptArg from scapy.layers.inet import IP, ICMP from scapy.all import Ether, Raw @@ -55,21 +55,19 @@ def main(): # send ICMP echo request with incremented data length and receive ICMP # echo reply for echo_seq in range(start_size, end_size+1, step): - pkt_send = auto_pad(Ether(src=src_mac, dst=dst_mac) / - IP(src=src_ip, dst=dst_ip) / - ICMP(id=echo_id, seq=echo_seq) / - Raw(load=data[0:echo_seq])) + pkt_send = (Ether(src=src_mac, dst=dst_mac) / + IP(src=src_ip, dst=dst_ip) / + ICMP(id=echo_id, seq=echo_seq) / + Raw(load=data[0:echo_seq])) sent_packets.append(pkt_send) txq.send(pkt_send) ether = rxq.recv(ignore=sent_packets) if ether is None: - rxq._proc.terminate() raise RuntimeError( 'ICMP echo reply seq {0} Rx timeout'.format(echo_seq)) if not ether.haslayer(IP): - rxq._proc.terminate() raise RuntimeError( 'Unexpected packet with no IPv4 received {0}'.format( ether.__repr__())) @@ -77,7 +75,6 @@ def main(): ipv4 = ether['IP'] if not ipv4.haslayer(ICMP): - rxq._proc.terminate() raise RuntimeError( 'Unexpected packet with no ICMP received {0}'.format( ipv4.__repr__())) @@ -85,27 +82,26 @@ def main(): icmpv4 = ipv4['ICMP'] if icmpv4.id != echo_id or icmpv4.seq != echo_seq: - rxq._proc.terminate() raise RuntimeError( - 'Invalid ICMP echo reply received ID {0} seq {1} should be ' + + 'Invalid ICMP echo reply received ID {0} seq {1} should be ' \ 'ID {2} seq {3}, {0}'.format(icmpv4.id, icmpv4.seq, echo_id, echo_seq)) chksum = icmpv4.chksum del icmpv4.chksum tmp = ICMP(str(icmpv4)) - if tmp.chksum != chksum: - rxq._proc.terminate() + if not checksum_equal(tmp.chksum, chksum): raise RuntimeError( 'Invalid checksum {0} should be {1}'.format(chksum, tmp.chksum)) - recv_payload_len = ipv4.len - 20 - 8 - load = tmp['Raw'].load[0:recv_payload_len] + + if 'Raw' in icmpv4: + load = icmpv4['Raw'].load + else: + load = "" if load != data[0:echo_seq]: - rxq._proc.terminate() raise RuntimeError( 'Received ICMP payload does not match sent payload') - rxq._proc.terminate() sys.exit(0) if __name__ == "__main__":