Add pypcap python requirement
[csit.git] / resources / traffic_scripts / ipv4_sweep_ping.py
index f7ce5cd..e258d45 100755 (executable)
 
 """Traffic script for IPv4 sweep ping."""
 
-import sys
 import logging
 import os
+import sys
+
 logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
-from resources.libraries.python.PacketVerifier import RxQueue, TxQueue,\
-    auto_pad, create_gratuitous_arp_request
+from resources.libraries.python.PacketVerifier import RxQueue, TxQueue, \
+    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
@@ -54,11 +55,11 @@ 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]))
+    for echo_seq in range(start_size, end_size + 1, step):
+        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)
 
@@ -83,26 +84,29 @@ 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))
 
         if 'Raw' in icmpv4:
             load = icmpv4['Raw'].load
         else:
-            load = []
+            load = ""
         if load != data[0:echo_seq]:
             raise RuntimeError(
                 'Received ICMP payload does not match sent payload')
 
+        sent_packets.remove(pkt_send)
+
     sys.exit(0)
 
+
 if __name__ == "__main__":
     main()