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:
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))