Add Honeycomb interface management tests (ipv4, ipv6, ethernet, routing)
[csit.git] / resources / traffic_scripts / icmpv6_echo_req_resp.py
index 24f4faa..c2cc4d2 100755 (executable)
@@ -19,7 +19,8 @@
 import sys
 import logging
 logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
-from resources.libraries.python.PacketVerifier import RxQueue, TxQueue
+from resources.libraries.python.PacketVerifier import RxQueue, TxQueue,\
+    checksum_equal
 from resources.libraries.python.TrafficScriptArg import TrafficScriptArg
 from scapy.layers.inet6 import IPv6, ICMPv6ND_NA, ICMPv6NDOptDstLLAddr
 from scapy.layers.inet6 import ICMPv6EchoRequest, ICMPv6EchoReply
@@ -73,13 +74,9 @@ def main():
     # receive ICMPv6 echo request on second TG interface
     ether = dst_rxq.recv(2, dst_sent_packets)
     if ether is None:
-        src_rxq._proc.terminate()
-        dst_rxq._proc.terminate()
         raise RuntimeError('ICMPv6 echo reply Rx timeout')
 
     if not ether.haslayer(IPv6):
-        src_rxq._proc.terminate()
-        dst_rxq._proc.terminate()
         raise RuntimeError('Unexpected packet with no IPv6 received {0}'.format(
             ether.__repr__()))
 
@@ -87,15 +84,11 @@ def main():
 
     # verify hop limit processing
     if ipv6.hlim != (hop_limit - hop_num):
-        src_rxq._proc.terminate()
-        dst_rxq._proc.terminate()
         raise RuntimeError(
             'Invalid hop limit {0} should be {1}'.format(ipv6.hlim,
                                                          hop_limit - hop_num))
 
     if not ipv6.haslayer(ICMPv6EchoRequest):
-        src_rxq._proc.terminate()
-        dst_rxq._proc.terminate()
         raise RuntimeError(
             'Unexpected packet with no IPv6 ICMP received {0}'.format(
                 ipv6.__repr__()))
@@ -104,19 +97,15 @@ def main():
 
     # check identifier and sequence number
     if icmpv6.id != echo_id or icmpv6.seq != echo_seq:
-        src_rxq._proc.terminate()
-        dst_rxq._proc.terminate()
         raise RuntimeError(
-            'Invalid ICMPv6 echo reply received ID {0} seq {1} should be ' +
+            'Invalid ICMPv6 echo reply received ID {0} seq {1} should be ' \
             'ID {2} seq {3}'.format(icmpv6.id, icmpv6.seq, echo_id, echo_seq))
 
     # verify checksum
     cksum = icmpv6.cksum
     del icmpv6.cksum
     tmp = ICMPv6EchoRequest(str(icmpv6))
-    if tmp.cksum != cksum:
-        src_rxq._proc.terminate()
-        dst_rxq._proc.terminate()
+    if not checksum_equal(tmp.cksum, cksum):
         raise RuntimeError(
             'Invalid checksum {0} should be {1}'.format(cksum, tmp.cksum))
 
@@ -130,13 +119,9 @@ def main():
     # receive ICMPv6 echo reply on first TG interface
     ether = src_rxq.recv(2, src_sent_packets)
     if ether is None:
-        src_rxq._proc.terminate()
-        dst_rxq._proc.terminate()
         raise RuntimeError('ICMPv6 echo reply Rx timeout')
 
     if not ether.haslayer(IPv6):
-        src_rxq._proc.terminate()
-        dst_rxq._proc.terminate()
         raise RuntimeError('Unexpected packet with no IPv6 received {0}'.format(
             ether.__repr__()))
 
@@ -144,15 +129,11 @@ def main():
 
     # verify hop limit processing
     if ipv6.hlim != (hop_limit - hop_num):
-        src_rxq._proc.terminate()
-        dst_rxq._proc.terminate()
         raise RuntimeError(
             'Invalid hop limit {0} should be {1}'.format(ipv6.hlim,
                                                          hop_limit - hop_num))
 
     if not ipv6.haslayer(ICMPv6EchoReply):
-        src_rxq._proc.terminate()
-        dst_rxq._proc.terminate()
         raise RuntimeError(
             'Unexpected packet with no IPv6 ICMP received {0}'.format(
                 ipv6.__repr__()))
@@ -161,24 +142,18 @@ def main():
 
     # check identifier and sequence number
     if icmpv6.id != echo_id or icmpv6.seq != echo_seq:
-        src_rxq._proc.terminate()
-        dst_rxq._proc.terminate()
         raise RuntimeError(
-            'Invalid ICMPv6 echo reply received ID {0} seq {1} should be ' +
+            'Invalid ICMPv6 echo reply received ID {0} seq {1} should be ' \
             'ID {2} seq {3}'.format(icmpv6.id, icmpv6.seq, echo_id, echo_seq))
 
     # verify checksum
     cksum = icmpv6.cksum
     del icmpv6.cksum
     tmp = ICMPv6EchoReply(str(icmpv6))
-    if tmp.cksum != cksum:
-        src_rxq._proc.terminate()
-        dst_rxq._proc.terminate()
+    if not checksum_equal(tmp.cksum, cksum):
         raise RuntimeError(
             'Invalid checksum {0} should be {1}'.format(cksum, tmp.cksum))
 
-    src_rxq._proc.terminate()
-    dst_rxq._proc.terminate()
     sys.exit(0)
 
 if __name__ == "__main__":