aboutsummaryrefslogtreecommitdiffstats
path: root/resources/traffic_scripts/check_ra_packet.py
diff options
context:
space:
mode:
Diffstat (limited to 'resources/traffic_scripts/check_ra_packet.py')
-rwxr-xr-xresources/traffic_scripts/check_ra_packet.py18
1 files changed, 12 insertions, 6 deletions
diff --git a/resources/traffic_scripts/check_ra_packet.py b/resources/traffic_scripts/check_ra_packet.py
index d95ef2d2f5..231e07da11 100755
--- a/resources/traffic_scripts/check_ra_packet.py
+++ b/resources/traffic_scripts/check_ra_packet.py
@@ -49,13 +49,14 @@ def main():
part.
"""
- args = TrafficScriptArg(['src_mac'])
+ args = TrafficScriptArg(['src_mac', 'interval'])
rx_if = args.get_arg('rx_if')
src_mac = args.get_arg('src_mac')
+ interval = int(args.get_arg('interval'))
rxq = RxQueue(rx_if)
- ether = rxq.recv(8)
+ ether = rxq.recv(max(5, interval))
# Check whether received packet contains layer RA and check other values
if ether is None:
@@ -65,14 +66,19 @@ def main():
raise RuntimeError('Not an RA packet received {0}'
.format(ether.__repr__()))
- address = ipaddress.IPv6Address(unicode(ether['IPv6'].src))
+ src_address = ipaddress.IPv6Address(unicode(ether['IPv6'].src))
+ dst_address = ipaddress.IPv6Address(unicode(ether['IPv6'].dst))
link_local = ipaddress.IPv6Address(unicode(mac_to_ipv6_linklocal(src_mac)))
+ all_nodes_multicast = ipaddress.IPv6Address(u'ff02::1')
- if address != link_local:
+ if src_address != link_local:
raise RuntimeError(
'Source address ({0}) not matching link local address({1})'.format(
- address, link_local))
-
+ src_address, link_local))
+ if dst_address != all_nodes_multicast:
+ raise RuntimeError('Packet destination address ({0}) is not the all '
+ 'nodes multicast address ({1}).'.format(
+ dst_address, all_nodes_multicast))
if ether['IPv6'].hlim != 255:
raise RuntimeError('Hop limit not correct: {0}!=255'.format(
ether['IPv6'].hlim))