aboutsummaryrefslogtreecommitdiffstats
path: root/resources/traffic_scripts/send_ip_icmp.py
diff options
context:
space:
mode:
Diffstat (limited to 'resources/traffic_scripts/send_ip_icmp.py')
-rwxr-xr-xresources/traffic_scripts/send_ip_icmp.py33
1 files changed, 30 insertions, 3 deletions
diff --git a/resources/traffic_scripts/send_ip_icmp.py b/resources/traffic_scripts/send_ip_icmp.py
index 140c205d4e..b22b5d39a8 100755
--- a/resources/traffic_scripts/send_ip_icmp.py
+++ b/resources/traffic_scripts/send_ip_icmp.py
@@ -66,7 +66,8 @@ def main():
the other one. Dot1q or Dot1ad tagging of the ethernet frame can be set.
"""
args = TrafficScriptArg(['src_mac', 'dst_mac', 'src_ip', 'dst_ip'],
- ['encaps', 'vlan1', 'vlan2'])
+ ['encaps', 'vlan1', 'vlan2', 'encaps_rx',
+ 'vlan1_rx', 'vlan2_rx'])
src_mac = args.get_arg('src_mac')
dst_mac = args.get_arg('dst_mac')
@@ -76,6 +77,9 @@ def main():
encaps = args.get_arg('encaps')
vlan1 = args.get_arg('vlan1')
vlan2 = args.get_arg('vlan2')
+ encaps_rx = args.get_arg('encaps_rx')
+ vlan1_rx = args.get_arg('vlan1_rx')
+ vlan2_rx = args.get_arg('vlan2_rx')
tx_if = args.get_arg('tx_if')
rx_if = args.get_arg('rx_if')
@@ -136,12 +140,35 @@ def main():
if ether is None:
raise RuntimeError('ICMP echo Rx timeout')
+ if encaps_rx:
+ if encaps_rx == 'Dot1q':
+ if not vlan1_rx:
+ vlan1_rx = vlan1
+ if not ether.haslayer(Dot1Q):
+ raise RuntimeError('Not VLAN tagged Eth frame received:\n{0}'
+ .format(ether.__repr__()))
+ elif ether[Dot1Q].vlan != int(vlan1_rx):
+ raise RuntimeError('Ethernet frame with wrong VLAN tag ({}) '
+ 'received ({} expected):\n{}'.format(
+ ether[Dot1Q].vlan, vlan1_rx, ether.__repr__()))
+ elif encaps_rx == 'Dot1ad':
+ if not vlan1_rx:
+ vlan1_rx = vlan1
+ if not vlan2_rx:
+ vlan2_rx = vlan2
+ # TODO
+ raise RuntimeError('Encapsulation {0} not implemented yet.'
+ .format(encaps_rx))
+ else:
+ raise RuntimeError('Unsupported/unknown encapsulation expected: {0}'
+ .format(encaps_rx))
+
if not ether.haslayer(ip_format):
- raise RuntimeError('Not an IP packet received {0}'
+ raise RuntimeError('Not an IP packet received:\n{0}'
.format(ether.__repr__()))
if not ether.haslayer(icmp_format):
- raise RuntimeError('Not an ICMP packet received {0}'
+ raise RuntimeError('Not an ICMP packet received:\n{0}'
.format(ether.__repr__()))
sys.exit(0)