Fix checksum comparison in traffic scripts
[csit.git] / resources / traffic_scripts / ipv4_sweep_ping.py
index 5005345..cd332d0 100755 (executable)
@@ -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
+    auto_pad, 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
@@ -83,18 +83,21 @@ def main():
 
         if icmpv4.id != echo_id or icmpv4.seq != echo_seq:
             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:
+        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]:
             raise RuntimeError(
                 'Received ICMP payload does not match sent payload')