aboutsummaryrefslogtreecommitdiffstats
path: root/resources
diff options
context:
space:
mode:
Diffstat (limited to 'resources')
-rw-r--r--resources/libraries/robot/l2_traffic.robot34
-rwxr-xr-xresources/traffic_scripts/send_ip_icmp.py33
2 files changed, 56 insertions, 11 deletions
diff --git a/resources/libraries/robot/l2_traffic.robot b/resources/libraries/robot/l2_traffic.robot
index 2d149c612e..b2653165d6 100644
--- a/resources/libraries/robot/l2_traffic.robot
+++ b/resources/libraries/robot/l2_traffic.robot
@@ -33,6 +33,10 @@
| | ... | - encaps - Encapsulation: Dot1q or Dot1ad (Optional). Type: string
| | ... | - vlan1 - VLAN (outer) tag (Optional). Type: integer
| | ... | - vlan2 - VLAN inner tag (Optional). Type: integer
+| | ... | - encaps_rx - Expected encapsulation on RX side: Dot1q or Dot1ad
+| | ... | (Optional). Type: string
+| | ... | - vlan1_rx - VLAN (outer) tag on RX side (Optional). Type: integer
+| | ... | - vlan2_rx - VLAN inner tag on RX side (Optional). Type: integer
| | ...
| | ... | *Return:*
| | ...
@@ -48,23 +52,37 @@
| | ... | \| ${tg_to_dut2} \| encaps=Dot1q \| vlan1=100 \|
| | ... | \| Send and receive ICMP Packet \| ${nodes['TG']} \| ${tg_to_dut1} \
| | ... | \| ${tg_to_dut2} \| encaps=Dot1ad \| vlan1=110 \| vlan2=220 \|
+| | ... | \| Send and receive ICMP Packet \| ${nodes['TG']} \| ${tg_to_dut1} \
+| | ... | \| ${tg_to_dut2} \| encaps=Dot1q \| vlan1=110 \| encaps_rx=Dot1q \|
+| | ... | \| Send and receive ICMP Packet \| ${nodes['TG']} \| ${tg_to_dut1} \
+| | ... | \| ${tg_to_dut2} \| encaps=Dot1q \| vlan1=110 \| encaps_rx=Dot1q \
+| | ... | \| vlan1_rx=120 \|
| | ...
| | [Arguments] | ${tg_node} | ${src_int} | ${dst_int}
| | ... | ${src_ip}=192.168.100.1 | ${dst_ip}=192.168.100.2 | ${encaps}=${EMPTY}
-| | ... | ${vlan1}=${EMPTY} | ${vlan2}=${EMPTY}
+| | ... | ${vlan1}=${EMPTY} | ${vlan2}=${EMPTY} | ${encaps_rx}=${EMPTY}
+| | ... | ${vlan1_rx}=${EMPTY} | ${vlan2_rx}=${EMPTY}
| | ${src_mac}= | Get Interface Mac | ${tg_node} | ${src_int}
| | ${dst_mac}= | Get Interface Mac | ${tg_node} | ${dst_int}
| | ${src_int_name}= | Get interface name | ${tg_node} | ${src_int}
| | ${dst_int_name}= | Get interface name | ${tg_node} | ${dst_int}
| | ${args}= | Traffic Script Gen Arg | ${dst_int_name} | ${src_int_name}
| | ... | ${src_mac} | ${dst_mac} | ${src_ip} | ${dst_ip}
-| | ${args1}= | Run Keyword Unless | '${encaps}' == '${EMPTY}' | Catenate
-| | ... | --encaps ${encaps} | --vlan1 ${vlan1}
-| | ${args2}= | Run Keyword Unless | '${vlan2}' == '${EMPTY}' | Set Variable
-| | ... | --vlan2 ${vlan2}
-| | ${args}= | Run Keyword If | '${args1}' == 'None' | Set Variable | ${args}
-| | ... | ELSE IF | '${args2}' == 'None' | Catenate | ${args} | ${args1}
-| | ... | ELSE | Catenate | ${args} | ${args1} | ${args2}
+| | ${args}= | Run Keyword If | '${encaps}' == '${EMPTY}'
+| | | ... | Set Variable | ${args}
+| | ... | ELSE | Catenate | ${args} | --encaps ${encaps} | --vlan1 ${vlan1}
+| | ${args}= | Run Keyword If | '${vlan2}' == '${EMPTY}'
+| | | ... | Set Variable | ${args}
+| | ... | ELSE | Catenate | ${args} | --vlan2 ${vlan2}
+| | ${args}= | Run Keyword If | '${encaps_rx}' == '${EMPTY}'
+| | | ... | Set Variable | ${args}
+| | ... | ELSE | Catenate | ${args} | --encaps_rx ${encaps_rx}
+| | ${args}= | Run Keyword If | '${vlan1_rx}' == '${EMPTY}'
+| | | ... | Set Variable | ${args}
+| | ... | ELSE | Catenate | ${args} | --vlan1_rx ${vlan1_rx}
+| | ${args}= | Run Keyword If | '${vlan2_rx}' == '${EMPTY}'
+| | | ... | Set Variable | ${args}
+| | ... | ELSE | Catenate | ${args} | --vlan2_rx ${vlan2_rx}
| | Run Traffic Script On Node | send_ip_icmp.py | ${tg_node} | ${args}
| Send and receive ICMP Packet should fail
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)