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
# 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__()))
# 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__()))
# 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))
# 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__()))
# 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__()))
# 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__":