From 14a71b74b414df7616ccb5ada3d50ecb90d96bae Mon Sep 17 00:00:00 2001 From: Peter Mikus Date: Fri, 21 Feb 2020 22:09:02 +0000 Subject: Improve pf layer + Merge single/double link + Introduce _pf{n}[0] variables so we can access physical function same way as virtual function + Cleanup code by moving complex logic to python + Prepare code for multiple vf functions Signed-off-by: Peter Mikus Change-Id: Ic2e74a38bfa146441357de8f0916aeb638941c49 --- resources/libraries/python/Constants.py | 11 +- resources/libraries/python/NodePath.py | 83 ++- resources/libraries/python/autogen/Regenerator.py | 12 +- resources/libraries/robot/crypto/ipsec.robot | 66 +- resources/libraries/robot/dpdk/default.robot | 13 +- resources/libraries/robot/features/acl.robot | 27 +- resources/libraries/robot/features/gbp.robot | 11 +- resources/libraries/robot/features/policer.robot | 16 +- resources/libraries/robot/ip/ip4.robot | 171 +++--- resources/libraries/robot/ip/ip6.robot | 113 ++-- resources/libraries/robot/ip/nat.robot | 32 +- .../libraries/robot/l2/l2_bridge_domain.robot | 340 ++++++----- resources/libraries/robot/l2/l2_patch.robot | 6 +- resources/libraries/robot/l2/l2_xconnect.robot | 200 +++---- resources/libraries/robot/lb/load_balancer.robot | 109 ++-- resources/libraries/robot/overlay/lisp.robot | 257 +++++++- resources/libraries/robot/overlay/srv6.robot | 61 +- .../performance/performance_configuration.robot | 215 ------- resources/libraries/robot/shared/container.robot | 52 +- resources/libraries/robot/shared/default.robot | 100 +--- resources/libraries/robot/shared/interfaces.robot | 666 ++++++++++++--------- resources/libraries/robot/shared/suite_setup.robot | 261 +++----- .../libraries/robot/shared/suite_teardown.robot | 2 +- resources/libraries/robot/shared/test_setup.robot | 1 + .../libraries/robot/shared/testing_path.robot | 380 ------------ resources/libraries/robot/shared/vm.robot | 6 +- resources/libraries/robot/wrk/wrk_utils.robot | 6 +- 27 files changed, 1446 insertions(+), 1771 deletions(-) delete mode 100644 resources/libraries/robot/performance/performance_configuration.robot delete mode 100644 resources/libraries/robot/shared/testing_path.robot (limited to 'resources/libraries') diff --git a/resources/libraries/python/Constants.py b/resources/libraries/python/Constants.py index 46993b27ac..0203dc0244 100644 --- a/resources/libraries/python/Constants.py +++ b/resources/libraries/python/Constants.py @@ -330,12 +330,11 @@ class Constants: prefix for prefix in NIC_DRIVER_TO_SUITE_PREFIX.values() if prefix ] - # Additional step for perf needs to know driver type. - # Contains part of suite setup line, matching both single and double link. - NIC_DRIVER_TO_SETUP_ARG = { - u"vfio-pci": u"le link | performance", - u"avf": u"le link | performance_avf", - u"rdma-core": u"le link | performance_rdma", + # Number of virtual functions of physical nic. + NIC_DRIVER_TO_VFS = { + u"vfio-pci": u"nic_vfs}= | 0", + u"avf": u"nic_vfs}= | 1", + u"rdma-core": u"nic_vfs}= | 0", } # TODO CSIT-1481: Crypto HW should be read from topology file instead. diff --git a/resources/libraries/python/NodePath.py b/resources/libraries/python/NodePath.py index 6f08be491b..04e8e5ef3c 100644 --- a/resources/libraries/python/NodePath.py +++ b/resources/libraries/python/NodePath.py @@ -13,7 +13,7 @@ """Path utilities library for nodes in the topology.""" -from resources.libraries.python.topology import Topology +from resources.libraries.python.topology import Topology, NodeType class NodePath: @@ -71,16 +71,18 @@ class NodePath: self._nodes_filter.append(filter_list) self._nodes.append(node) - def append_nodes(self, *nodes): + def append_nodes(self, *nodes, filter_list=None): """Append nodes to the path. :param nodes: Nodes to append to the path. + :param filter_list: Filter criteria list. :type nodes: dict + :type filter_list: list of strings .. note:: Node order does matter. """ for node in nodes: - self.append_node(node) + self.append_node(node, filter_list=filter_list) def clear_path(self): """Clear path.""" @@ -204,3 +206,78 @@ class NodePath: if not self._path: raise RuntimeError(u"No path for topology") return self._path[-2] + + def compute_circular_topology(self, nodes, filter_list=None, nic_pfs=1): + """Return computed circular path. + + :param nodes: Nodes to append to the path. + :param filter_list: Filter criteria list. + :param nic_pfs: Number of PF of NIC. + :type nodes: dict + :type filter_list: list of strings + :type path_count: int + :returns: Topology information dictionary. + :rtype: dict + """ + t_dict = dict() + duts = [key for key in nodes if u"DUT" in key] + t_dict[u"duts"] = duts + t_dict[u"duts_count"] = len(duts) + t_dict[u"int"] = u"pf" + + for idx in range(0, nic_pfs // 2): + self.append_node(nodes[u"TG"]) + for dut in duts: + self.append_node(nodes[dut], filter_list=filter_list) + self.append_node(nodes[u"TG"]) + self.compute_path(always_same_link=False) + + n_idx = 0 + t_idx = 1 + d_idx = 0 + while True: + interface, node = self.next_interface() + if not interface: + break + if node[u"type"] == u"TG": + n_pfx = f"TG" + p_pfx = f"pf{t_idx}" + i_pfx = f"if{t_idx}" + n_idx = 0 + t_idx = t_idx + 1 + else: + n_pfx = f"DUT{n_idx // 2 + 1}" + p_pfx = f"pf{d_idx % 2 + t_idx - 1}" + i_pfx = f"if{d_idx % 2 + t_idx - 1}" + n_idx = n_idx + 1 + d_idx = d_idx + 1 + + t_dict[f"{n_pfx}"] = node + t_dict[f"{n_pfx}_{p_pfx}"] = [interface] + t_dict[f"{n_pfx}_{p_pfx}_mac"] = \ + [Topology.get_interface_mac(node, interface)] + t_dict[f"{n_pfx}_{p_pfx}_vlan"] = \ + [Topology.get_interface_vlan(node, interface)] + t_dict[f"{n_pfx}_{p_pfx}_pci"] = \ + [Topology.get_interface_pci_addr(node, interface)] + t_dict[f"{n_pfx}_{p_pfx}_ip4_addr"] = \ + [Topology.get_interface_ip4(node, interface)] + t_dict[f"{n_pfx}_{p_pfx}_ip4_prefix"] = \ + [Topology.get_interface_ip4_prefix_length(node, interface)] + if f"{n_pfx}_pf_pci" not in t_dict: + t_dict[f"{n_pfx}_pf_pci"] = [] + t_dict[f"{n_pfx}_pf_pci"].append( + Topology.get_interface_pci_addr(node, interface)) + # Backward compatibility below + t_dict[f"{n_pfx.lower()}_{i_pfx}"] = interface + t_dict[f"{n_pfx.lower()}_{i_pfx}_mac"] = \ + Topology.get_interface_mac(node, interface) + t_dict[f"{n_pfx.lower()}_{i_pfx}_pci"] = \ + Topology.get_interface_pci_addr(node, interface) + t_dict[f"{n_pfx.lower()}_{i_pfx}_ip4_addr"] = \ + Topology.get_interface_ip4(node, interface) + t_dict[f"{n_pfx.lower()}_{i_pfx}_ip4_prefix"] = \ + Topology.get_interface_ip4_prefix_length(node, interface) + + self.clear_path() + return t_dict diff --git a/resources/libraries/python/autogen/Regenerator.py b/resources/libraries/python/autogen/Regenerator.py index 6d6f3f157f..c6038588e6 100644 --- a/resources/libraries/python/autogen/Regenerator.py +++ b/resources/libraries/python/autogen/Regenerator.py @@ -273,9 +273,9 @@ def write_default_files(in_filename, in_prolog, kwargs_list): u"Driver plugin should appear once.", in_filename ) out_prolog = replace_defensively( - out_prolog, Constants.NIC_DRIVER_TO_SETUP_ARG[u"vfio-pci"], - Constants.NIC_DRIVER_TO_SETUP_ARG[driver], 1, - u"Perf setup argument should appear once.", in_filename + out_prolog, Constants.NIC_DRIVER_TO_VFS[u"vfio-pci"], + Constants.NIC_DRIVER_TO_VFS[driver], 1, + u"NIC VFs argument should appear once.", in_filename ) iface, suite_id, suite_tag = get_iface_and_suite_ids( out_filename @@ -357,9 +357,9 @@ def write_reconf_files(in_filename, in_prolog, kwargs_list): u"Driver plugin should appear once.", in_filename ) out_prolog = replace_defensively( - out_prolog, Constants.NIC_DRIVER_TO_SETUP_ARG[u"vfio-pci"], - Constants.NIC_DRIVER_TO_SETUP_ARG[driver], 1, - u"Perf setup argument should appear once.", in_filename + out_prolog, Constants.NIC_DRIVER_TO_VFS[u"vfio-pci"], + Constants.NIC_DRIVER_TO_VFS[driver], 1, + u"NIC VFs argument should appear once.", in_filename ) iface, suite_id, suite_tag = get_iface_and_suite_ids(out_filename) out_prolog = replace_defensively( diff --git a/resources/libraries/robot/crypto/ipsec.robot b/resources/libraries/robot/crypto/ipsec.robot index 20529dc2e2..f48e4c4573 100644 --- a/resources/libraries/robot/crypto/ipsec.robot +++ b/resources/libraries/robot/crypto/ipsec.robot @@ -1,4 +1,4 @@ -# Copyright (c) 2019 Cisco and/or its affiliates. +# Copyright (c) 2020 Cisco and/or its affiliates. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at: @@ -46,16 +46,6 @@ | | Set Test Variable | ${encr_key} | | Set Test Variable | ${auth_key} -| Configure path for IPSec test -| | [Documentation] | Setup path for IPsec testing TG<-->DUT1. -| | -| | ... | *Example:* -| | ... | \| Configure path for IPSec test \| -| | -| | Set Interface State | ${dut1} | ${dut1_if1} | up -| | Set Interface State | ${dut1} | ${dut1_if2} | up -| | Vpp Node Interfaces Ready Wait | ${dut1} - | Configure topology for IPv4 IPsec testing | | [Documentation] | Setup topology for IPv4 IPsec testing. | | @@ -68,18 +58,18 @@ | | ... | *Example:* | | ... | \| Configure topology for IPv4 IPsec testing \| | | -| | Configure path for IPSec test +| | Set interfaces in path up | | VPP Interface Set IP Address -| | ... | ${dut1} | ${dut1_if1} | ${dut_if1_ip4} | ${ip4_plen} +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${dut_if1_ip4} | ${ip4_plen} | | VPP Interface Set IP Address -| | ... | ${dut1} | ${dut1_if2} | ${dut_if2_ip4} | ${ip4_plen} +| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${dut_if2_ip4} | ${ip4_plen} | | VPP Add IP Neighbor -| | ... | ${dut1} | ${dut1_if1} | ${tg_if1_ip4} | ${tg_if1_mac} +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${tg_if1_ip4} | ${TG_pf1_mac}[0] | | VPP Add IP Neighbor -| | ... | ${dut1} | ${dut1_if2} | ${tg_if2_ip4} | ${tg_if2_mac} +| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${tg_if2_ip4} | ${TG_pf2_mac}[0] | | Vpp Route Add | | ... | ${dut1} | ${tg_host_ip4} | ${ip4_plen} | gateway=${tg_if1_ip4} -| | ... | interface=${dut1_if1} +| | ... | interface=${DUT1_${int}1}[0] | | Set Test Variable | ${dut_tun_ip} | ${dut_if1_ip4} | | Set Test Variable | ${tg_tun_ip} | ${tg_if1_ip4} | | Set Test Variable | ${tg_src_ip} | ${tg_host_ip4} @@ -97,19 +87,19 @@ | | ... | *Example:* | | ... | \| Configure topology for IPv6 IPsec testing \| | | -| | Configure path for IPSec test +| | Set interfaces in path up | | VPP Interface Set IP Address -| | ... | ${dut1} | ${dut1_if1} | ${dut_if1_ip6} | ${ip6_plen} +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${dut_if1_ip6} | ${ip6_plen} | | VPP Interface Set IP Address -| | ... | ${dut1} | ${dut1_if2} | ${dut_if2_ip6} | ${ip6_plen} +| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${dut_if2_ip6} | ${ip6_plen} | | VPP Add IP Neighbor -| | ... | ${dut1} | ${dut1_if1} | ${tg_if1_ip6} | ${tg_if1_mac} +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${tg_if1_ip6} | ${TG_pf1_mac}[0] | | VPP Add IP Neighbor -| | ... | ${dut1} | ${dut1_if2} | ${tg_if2_ip6} | ${tg_if2_mac} +| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${tg_if2_ip6} | ${TG_pf2_mac}[0] | | Vpp All RA Suppress Link Layer | ${nodes} | | Vpp Route Add | | ... | ${dut1} | ${tg_host_ip6} | ${ip6_plen_rt} | gateway=${tg_if1_ip6} -| | ... | interface=${dut1_if1} +| | ... | interface=${DUT1_${int}1}[0] | | Set Test Variable | ${dut_tun_ip} | ${dut_if1_ip6} | | Set Test Variable | ${tg_tun_ip} | ${tg_if1_ip6} | | Set Test Variable | ${tg_src_ip} | ${tg_host_ip6} @@ -187,16 +177,18 @@ | | ... | address. | | | | Set interfaces in path up -| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1} -| | ... | ${dut1_if1_ip4} | 24 -| | VPP Interface Set IP Address | ${dut2} | ${dut2_if2} -| | ... | ${dut2_if2_ip4} | 24 -| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | ${tg_if1_ip4} | ${tg_if1_mac} -| | VPP Add IP Neighbor | ${dut2} | ${dut2_if2} | ${tg_if2_ip4} | ${tg_if2_mac} +| | VPP Interface Set IP Address +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${dut1_if1_ip4} | 24 +| | VPP Interface Set IP Address +| | ... | ${dut2} | ${DUT2_${int}2}[0] | ${dut2_if2_ip4} | 24 +| | VPP Add IP Neighbor +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${tg_if1_ip4} | ${TG_pf1_mac}[0] +| | VPP Add IP Neighbor +| | ... | ${dut2} | ${DUT2_${int}2}[0] | ${tg_if2_ip4} | ${TG_pf2_mac}[0] | | Vpp Route Add | ${dut1} | ${laddr_ip4} | 8 | gateway=${tg_if1_ip4} -| | ... | interface=${dut1_if1} +| | ... | interface=${DUT1_${int}1}[0] | | Vpp Route Add | ${dut2} | ${raddr_ip4} | 8 | gateway=${tg_if2_ip4} -| | ... | interface=${dut2_if2} +| | ... | interface=${DUT2_${int}2}[0] | Initialize IPSec in 3-node circular container topology | | [Documentation] @@ -208,8 +200,10 @@ | | ... | address. | | | | Set interfaces in path up on DUT | DUT1 -| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1} -| | ... | ${dut1_if1_ip4} | 24 -| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | ${tg_if1_ip4} | ${tg_if1_mac} -| | Vpp Route Add | ${dut1} | ${laddr_ip4} | 8 | gateway=${tg_if1_ip4} -| | ... | interface=${dut1_if1} +| | VPP Interface Set IP Address +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${dut1_if1_ip4} | 24 +| | VPP Add IP Neighbor +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${tg_if1_ip4} | ${TG_pf1}[0] +| | Vpp Route Add +| | ... | ${dut1} | ${laddr_ip4} | 8 | gateway=${tg_if1_ip4} +| | ... | interface=${DUT1_${int}1}[0] diff --git a/resources/libraries/robot/dpdk/default.robot b/resources/libraries/robot/dpdk/default.robot index cd5318c77a..021f73d8c3 100644 --- a/resources/libraries/robot/dpdk/default.robot +++ b/resources/libraries/robot/dpdk/default.robot @@ -37,10 +37,9 @@ | | ${cpu_count_int} | Convert to Integer | ${phy_cores} | | ${thr_count_int} | Convert to Integer | ${phy_cores} | | ${dp_cores}= | Evaluate | ${cpu_count_int}+1 -| | ${duts}= | Get Matches | ${nodes} | DUT* | | FOR | ${dut} | IN | @{duts} | | | ${numa}= | Get interfaces numa node | ${nodes['${dut}']} -| | | ... | ${${dut}_if1} | ${${dut}_if2} +| | | ... | ${${dut}_pf1}[0] | ${${dut}_pf2}[0] | | | ${smt_used}= | Is SMT enabled | ${nodes['${dut}']['cpuinfo']} | | | ${cpus}= | Cpu Range Per Node Str | ${nodes['${dut}']} | ${numa} | | | ... | skip_cnt=${1} | cpu_cnt=${dp_cores} | smt_used=${smt_used} @@ -79,10 +78,9 @@ | | ${cpu_count_int} | Convert to Integer | ${phy_cores} | | ${thr_count_int} | Convert to Integer | ${phy_cores} | | ${dp_cores}= | Evaluate | ${cpu_count_int}+1 -| | ${duts}= | Get Matches | ${nodes} | DUT* | | FOR | ${dut} | IN | @{duts} | | | ${numa}= | Get interfaces numa node | ${nodes['${dut}']} -| | | ... | ${${dut}_if1} | ${${dut}_if2} +| | | ... | ${${dut}_pf1}[0] | ${${dut}_pf2}[0] | | | ${smt_used}= | Is SMT enabled | ${nodes['${dut}']['cpuinfo']} | | | ${cpus}= | Cpu List Per Node Str | ${nodes['${dut}']} | ${numa} | | | ... | skip_cnt=${1} | cpu_cnt=${cpu_count_int} | smt_used=${smt_used} @@ -95,9 +93,10 @@ | | | ${rxq_count_int}= | Run keyword if | ${rxq_count_int} == 0 | | | ... | Set variable | ${1} | | | ... | ELSE | Set variable | ${rxq_count_int} -| | | Start the l3fwd test | ${nodes} | ${nodes['${dut}']} | ${${dut}_if1} -| | | ... | ${${dut}_if2} | ${thr_count_int} | ${cpus} | ${rxq_count_int} -| | | ... | ${jumbo_frames} +| | | Start the l3fwd test +| | | ... | ${nodes} | ${nodes['${dut}']} +| | | ... | ${${dut}_pf1}[0] | ${${dut}_pf2}[0] +| | | ... | ${thr_count_int} | ${cpus} | ${rxq_count_int} | ${jumbo_frames} | | | Run keyword if | ${thr_count_int} > 1 | | | ... | Set Tags | MTHREAD | ELSE | Set Tags | STHREAD | | | Set Tags | ${thr_count_int}T${cpu_count_int}C diff --git a/resources/libraries/robot/features/acl.robot b/resources/libraries/robot/features/acl.robot index ae613e1812..8621562b22 100644 --- a/resources/libraries/robot/features/acl.robot +++ b/resources/libraries/robot/features/acl.robot @@ -1,4 +1,4 @@ -# Copyright (c) 2019 Cisco and/or its affiliates. +# Copyright (c) 2020 Cisco and/or its affiliates. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at: @@ -259,40 +259,41 @@ | | ... | Set Variable | ${dut2} | | ... | ELSE | Set Variable | ${dut1} | | ${dut_if2}= | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | Set Variable | ${dut2_if2} -| | ... | ELSE | Set Variable | ${dut1_if2} +| | ... | Set Variable | ${DUT2_${int}2}[0] +| | ... | ELSE | Set Variable | ${DUT1_${int}2}[0] | | | | Set interfaces in path up | | | | FOR | ${number} | IN RANGE | 2 | ${ip_nr}+2 | | | VPP Add IP Neighbor -| | | ... | ${dut1} | ${dut1_if1} | 10.10.10.${number} | ${tg_if1_mac} +| | | ... | ${dut1} | ${DUT1_${int}1}[0] | 10.10.10.${number} | ${TG_pf1_mac}[0] | | | VPP Add IP Neighbor -| | | ... | ${dut} | ${dut_if2} | 20.20.20.${number} | ${tg_if2_mac} +| | | ... | ${dut} | ${dut_if2} | 20.20.20.${number} | ${TG_pf2_mac}[0] | | END | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | VPP Add IP Neighbor -| | ... | ${dut1} | ${dut1_if2} | 1.1.1.2 | ${dut2_if1_mac} +| | ... | ${dut1} | ${DUT1_${int}2}[0] | 1.1.1.2 | ${DUT2_${int}1_mac}[0] | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | VPP Add IP Neighbor -| | ... | ${dut2} | ${dut2_if1} | 1.1.1.1 | ${dut1_if2_mac} +| | ... | ${dut2} | ${DUT2_${int}1}[0] | 1.1.1.1 | ${DUT1_${int}2_mac}[0] | | | | VPP Interface Set IP Address -| | ... | ${dut1} | ${dut1_if1} | 10.10.10.1 | 24 +| | ... | ${dut1} | ${DUT1_${int}1}[0] | 10.10.10.1 | 24 | | VPP Interface Set IP Address | | ... | ${dut} | ${dut_if2} | 20.20.20.1 | 24 | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | VPP Interface Set IP Address -| | ... | ${dut1} | ${dut1_if2} | 1.1.1.1 | 30 +| | ... | ${dut1} | ${DUT1_${int}2}[0] | 1.1.1.1 | 30 | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | VPP Interface Set IP Address -| | ... | ${dut2} | ${dut2_if1} | 1.1.1.2 | 30 +| | ... | ${dut2} | ${DUT2_${int}1}[0] | 1.1.1.2 | 30 | | | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | Vpp Route Add | ${dut1} | 20.20.20.0 | 24 | gateway=1.1.1.2 -| | ... | interface=${dut1_if2} +| | ... | interface=${DUT1_${int}2}[0] | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | Vpp Route Add | ${dut2} | 10.10.10.0 | 24 | gateway=1.1.1.1 -| | ... | interface=${dut2_if1} +| | ... | interface=${DUT2_${int}1}[0] | | -| | Configure IPv4 ACLs | ${dut1} | ${dut1_if1} | ${dut1_if2} +| | Configure IPv4 ACLs +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${DUT1_${int}2}[0] diff --git a/resources/libraries/robot/features/gbp.robot b/resources/libraries/robot/features/gbp.robot index 57ddf6dd1a..fc1c9faba4 100644 --- a/resources/libraries/robot/features/gbp.robot +++ b/resources/libraries/robot/features/gbp.robot @@ -1,4 +1,4 @@ -# Copyright (c) 2019 Cisco and/or its affiliates. +# Copyright (c) 2020 Cisco and/or its affiliates. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at: @@ -31,7 +31,6 @@ | | | | [Arguments] | ${dut} | ${count}=${1} | | -| | ${dut_str}= | Convert To Lowercase | ${dut} | | FOR | ${id} | IN RANGE | 1 | ${count} + 1 | | | ${hexa_id}= | Convert To Hex | ${id} | length=2 | lowercase=yes | | | ${dut_lo}= | VPP Create Loopback | ${nodes['${dut}']} @@ -57,11 +56,11 @@ | | | GBP Ext Itf Add Del | | | ... | ${nodes['${dut}']} | ${dut_lo} | bd_id=${id} | rd_id=${id} | | | GBP Endpoint Add -| | | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_${id}_1} | 1.1.1.100 -| | | ... | ${tg_if1_mac} | ${100} +| | | ... | ${nodes['${dut}']} | ${${dut}_${int}1_${id}}[0] +| | | ... | 1.1.1.100 | ${TG_pf1_mac}[0] | ${100} | | | GBP Endpoint Add -| | | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_${id}_2} | 1.1.1.200 -| | | ... | ${tg_if2_mac} | ${100} +| | | ... | ${nodes['${dut}']} | ${${dut}_${int}2_${id}}[0] +| | | ... | 1.1.1.200 | ${TG_pf2_mac}[0] | ${100} | | | VPP Route Add | | | ... | ${nodes['${dut}']} | 10.10.10.0 | 24 | gateway=1.1.1.100 | | | ... | interface=${dut_lo} | vrf=${1} diff --git a/resources/libraries/robot/features/policer.robot b/resources/libraries/robot/features/policer.robot index bbabdd7632..a9394d6c9f 100644 --- a/resources/libraries/robot/features/policer.robot +++ b/resources/libraries/robot/features/policer.robot @@ -1,4 +1,4 @@ -# Copyright (c) 2019 Cisco and/or its affiliates. +# Copyright (c) 2020 Cisco and/or its affiliates. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at: @@ -33,7 +33,8 @@ | | Vpp Configures Classify Session L3 | ${dut1} | permit | ${table_idx} | | ... | ${skip_n} | ${match_n} | ip4 | dst | 20.20.20.2 | | ... | hit_next_index=${policer_index} | opaque_index=${pre_color} -| | Policer Classify Set Interface | ${dut1} | ${dut1_if1} +| | Policer Classify Set Interface +| | ... | ${dut1} | ${DUT1_${int}1}[0] | | ... | ip4_table_index=${table_idx} | | | | ${dut2_status} | ${value}= | Run Keyword And Ignore Error @@ -42,8 +43,8 @@ | | ... | Set Variable | ${dut2} | | ... | ELSE | Set Variable | ${dut1} | | ${dut_if2}= | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | Set Variable | ${dut2_if2} -| | ... | ELSE | Set Variable | ${dut1_if2} +| | ... | Set Variable | ${DUT2_${int}2}[0] +| | ... | ELSE | Set Variable | ${DUT1_${int}2}[0] | | | | ${policer_index}= | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | Policer Set Configuration | ${dut} | policer2 | ${cir} @@ -75,7 +76,7 @@ | | Vpp Configures Classify Session L3 | ${dut1} | permit | ${table_idx} | | ... | ${skip_n} | ${match_n} | ip6 | dst | 2001:2::2 | | ... | hit_next_index=${policer_index} | opaque_index=${pre_color} -| | Policer Classify Set Interface | ${dut1} | ${dut1_if1} +| | Policer Classify Set Interface | ${dut1} | ${DUT1_${int}1}[0] | | ... | ip6_table_index=${table_idx} | | | | ${dut2_status} | ${value}= | Run Keyword And Ignore Error @@ -84,8 +85,8 @@ | | ... | Set Variable | ${dut2} | | ... | ELSE | Set Variable | ${dut1} | | ${dut_if2}= | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | Set Variable | ${dut2_if2} -| | ... | ELSE | Set Variable | ${dut1_if2} +| | ... | Set Variable | ${DUT2_${int}2}[0] +| | ... | ELSE | Set Variable | ${DUT1_${int}2}[0] | | | | ${policer_index}= | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | Policer Set Configuration | ${dut} | policer2 | ${cir} @@ -115,7 +116,6 @@ | | | | [Arguments] | ${nodes} | | -| | ${duts}= | Get Matches | ${nodes} | DUT* | | FOR | ${dut} | IN | @{duts} | | | Show Classify Tables Verbose | ${nodes['${dut}']} | | END diff --git a/resources/libraries/robot/ip/ip4.robot b/resources/libraries/robot/ip/ip4.robot index 961c0b3c43..192a136b79 100644 --- a/resources/libraries/robot/ip/ip4.robot +++ b/resources/libraries/robot/ip/ip4.robot @@ -1,4 +1,4 @@ -# Copyright (c) 2019 Cisco and/or its affiliates. +# Copyright (c) 2020 Cisco and/or its affiliates. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at: @@ -45,53 +45,55 @@ | | | | Set interfaces in path up | | -| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 10.10.10.2 | ${tg_if1_mac} +| | VPP Add IP Neighbor +| | ... | ${dut1} | ${DUT1_${int}1}[0] | 10.10.10.2 | ${TG_pf1_mac}[0] | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | VPP Add IP Neighbor -| | ... | ${dut1} | ${dut1_if2} | 1.1.1.2 | ${dut2_if1_mac} +| | ... | ${dut1} | ${DUT1_${int}2}[0] | 1.1.1.2 | ${DUT2_${int}1_mac}[0] | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | VPP Add IP Neighbor -| | ... | ${dut2} | ${dut2_if1} | 1.1.1.1 | ${dut1_if2_mac} +| | ... | ${dut2} | ${DUT2_${int}1_mac}[0] | 1.1.1.1 | ${DUT1_${int}2_mac}[0] | | ${dut}= | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | Set Variable | ${dut2} | | ... | ELSE | Set Variable | ${dut1} | | ${dut_if2}= | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | Set Variable | ${dut2_if2} -| | ... | ELSE | Set Variable | ${dut1_if2} -| | VPP Add IP Neighbor | ${dut} | ${dut_if2} | 20.20.20.2 | ${tg_if2_mac} +| | ... | Set Variable | ${DUT2_${int}2}[0] +| | ... | ELSE | Set Variable | ${DUT1_${int}2}[0] +| | VPP Add IP Neighbor +| | ... | ${dut} | ${dut_if2} | 20.20.20.2 | ${TG_pf2_mac}[0] | | -| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1} +| | VPP Interface Set IP Address | ${dut1} | ${DUT1_${int}1}[0] | | ... | 10.10.10.1 | 24 | | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | VPP Interface Set IP Address | ${dut1} | ${dut1_if2} +| | ... | VPP Interface Set IP Address | ${dut1} | ${DUT1_${int}2}[0] | | ... | 1.1.1.1 | 30 | | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | VPP Interface Set IP Address | ${dut2} | ${dut2_if1} +| | ... | VPP Interface Set IP Address | ${dut2} | ${DUT2_${int}1}[0] | | ... | 1.1.1.2 | 30 | | VPP Interface Set IP Address | ${dut} | ${dut_if2} | | ... | 20.20.20.1 | 24 | | | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | Vpp Route Add | ${dut1} | 20.20.20.0 | 24 | gateway=1.1.1.2 -| | ... | interface=${dut1_if2} +| | ... | interface=${DUT1_${int}2}[0] | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | Vpp Route Add | ${dut2} | 10.10.10.0 | 24 | gateway=1.1.1.1 -| | ... | interface=${dut2_if1} +| | ... | interface=${DUT2_${int}1}[0] | | | | Run Keyword Unless | '${remote_host1_ip}' == '${NONE}' | | ... | Vpp Route Add | ${dut1} | ${remote_host1_ip} | 32 -| | ... | gateway=10.10.10.2 | interface=${dut1_if1} +| | ... | gateway=10.10.10.2 | interface=${DUT1_${int}1}[0] | | Run Keyword Unless | '${remote_host2_ip}' == '${NONE}' | | ... | Vpp Route Add | ${dut} | ${remote_host2_ip} | 32 | | ... | gateway=20.20.20.2 | interface=${dut_if2} | | Run Keyword Unless | '${remote_host1_ip}' == '${NONE}' | | ... | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | Vpp Route Add | ${dut1} | ${remote_host1_ip} | 32 -| | ... | gateway=1.1.1.2 | interface=${dut1_if2} +| | ... | gateway=1.1.1.2 | interface=${DUT1_${int}2}[0] | | Run Keyword Unless | '${remote_host2_ip}' == '${NONE}' | | ... | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | Vpp Route Add | ${dut2} | ${remote_host2_ip} | 32 -| | ... | gateway=1.1.1.1 | interface=${dut2_if1} +| | ... | gateway=1.1.1.1 | interface=${DUT2_${int}1}[0] | Initialize IPv4 forwarding with scaling in circular topology | | [Documentation] @@ -116,36 +118,39 @@ | | | | Set interfaces in path up | | -| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 1.1.1.1 | ${tg_if1_mac} +| | VPP Add IP Neighbor +| | ... | ${dut1} | ${DUT1_${int}1}[0] | 1.1.1.1 | ${TG_pf1_mac}[0] | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | VPP Add IP Neighbor -| | ... | ${dut1} | ${dut1_if2} | 2.2.2.2 | ${dut2_if1_mac} +| | ... | ${dut1} | ${DUT1_${int}2}[0] | 2.2.2.2 | ${DUT2_${int}1}[0] | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | VPP Add IP Neighbor -| | ... | ${dut2} | ${dut2_if1} | 2.2.2.1 | ${dut1_if2_mac} +| | ... | ${dut2} | ${DUT2_${int}1}[0] | 2.2.2.1 | ${DUT1_${int}2_mac}[0] | | ${dut}= | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | Set Variable | ${dut2} | | ... | ELSE | Set Variable | ${dut1} | | ${dut_if2}= | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | Set Variable | ${dut2_if2} -| | ... | ELSE | Set Variable | ${dut1_if2} -| | VPP Add IP Neighbor | ${dut} | ${dut_if2} | 3.3.3.1 | ${tg_if2_mac} -| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1} | 1.1.1.2 | 30 +| | ... | Set Variable | ${DUT2_${int}2}[0] +| | ... | ELSE | Set Variable | ${DUT1_${int}2}[0] +| | VPP Add IP Neighbor +| | ... | ${dut} | ${dut_if2} | 3.3.3.1 | ${TG_pf2_mac}[0] +| | VPP Interface Set IP Address +| | ... | ${dut1} | ${DUT1_${int}1}[0] | 1.1.1.2 | 30 | | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | VPP Interface Set IP Address | ${dut1} | ${dut1_if2} | 2.2.2.1 +| | ... | VPP Interface Set IP Address | ${dut1} | ${DUT1_${int}2}[0] | 2.2.2.1 | | ... | 30 | | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | VPP Interface Set IP Address | ${dut2} | ${dut2_if1} | 2.2.2.2 +| | ... | VPP Interface Set IP Address | ${dut2} | ${DUT2_${int}1}[0] | 2.2.2.2 | | ... | 30 | | VPP Interface Set IP Address | ${dut} | ${dut_if2} | 3.3.3.2 | 30 | | Vpp Route Add | ${dut1} | 10.0.0.0 | 32 | gateway=1.1.1.1 -| | ... | interface=${dut1_if1} | count=${count} +| | ... | interface=${DUT1_${int}1}[0] | count=${count} | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | Vpp Route Add | ${dut1} | 20.0.0.0 | 32 | gateway=2.2.2.2 -| | ... | interface=${dut1_if2} | count=${count} +| | ... | interface=${DUT1_${int}2}[0] | count=${count} | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | Vpp Route Add | ${dut2} | 10.0.0.0 | 32 | gateway=2.2.2.1 -| | ... | interface=${dut2_if1} | count=${count} +| | ... | interface=${DUT2_${int}1}[0] | count=${count} | | Vpp Route Add | ${dut} | 20.0.0.0 | 32 | gateway=3.3.3.1 | | ... | interface=${dut_if2} | count=${count} @@ -206,21 +211,22 @@ | | ... | ${ip_base_if1}.${ip_base_if1}.${ip_base_if1} | | Vpp Route Add | ${nodes['${dut}']} | ${tg_if1_net} | 24 | | ... | vrf=${fib_table_1} | gateway=${ip_net_if1}.1 -| | ... | interface=${${dut}_if1} | multipath=${TRUE} -| | Assign Interface To Fib Table | ${nodes['${dut}']} | ${${dut}_if1} +| | ... | interface=${${dut}_${int}1}[0] | multipath=${TRUE} +| | Assign Interface To Fib Table | ${nodes['${dut}']} | ${${dut}_${int}1}[0] | | ... | ${fib_table_1} -| | VPP Interface Set IP Address | ${nodes['${dut}']} | ${${dut}_if1} +| | VPP Interface Set IP Address | ${nodes['${dut}']} | ${${dut}_${int}1}[0] | | ... | ${ip_net_if1}.2 | 30 | | ${prev_node}= | Run Keyword If | ${dut_index} == ${0} | | ... | Set Variable | TG | | ... | ELSE | Get From List | ${duts} | ${dut_index-${1}} | | ${prev_if}= | Run Keyword If | ${dut_index} == ${0} -| | ... | Set Variable | if1 -| | ... | ELSE | Set Variable | if2 +| | ... | Set Variable | pf1 +| | ... | ELSE | Set Variable | ${int}2 | | ${prev_if_mac}= | Get Interface MAC | ${nodes['${prev_node}']} -| | ... | ${${prev_node}_${prev_if}} +| | ... | ${${prev_node}_${prev_if}}[0] | | VPP Add IP Neighbor -| | ... | ${nodes['${dut}']} | ${${dut}_if1} | ${ip_net_if1}.1 | ${prev_if_mac} +| | ... | ${nodes['${dut}']} | ${${dut}_${int}1}[0] | ${ip_net_if1}.1 +| | ... | ${prev_if_mac} | | | | ${fib_table_2}= | Evaluate | ${fib_table_1} + ${count} | | Add Fib Table | ${nodes['${dut}']} | ${fib_table_2} @@ -229,21 +235,22 @@ | | ... | ${ip_base_if2}.${ip_base_if2}.${ip_base_if2} | | Vpp Route Add | ${nodes['${dut}']} | ${tg_if2_net} | 24 | | ... | vrf=${fib_table_2} | gateway=${ip_net_if2}.2 -| | ... | interface=${${dut}_if2} | multipath=${TRUE} -| | Assign Interface To Fib Table | ${nodes['${dut}']} | ${${dut}_if2} +| | ... | interface=${${dut}_${int}2}[0] | multipath=${TRUE} +| | Assign Interface To Fib Table | ${nodes['${dut}']} | ${${dut}_${int}2}[0] | | ... | ${fib_table_2} -| | VPP Interface Set IP Address | ${nodes['${dut}']} | ${${dut}_if2} +| | VPP Interface Set IP Address | ${nodes['${dut}']} | ${${dut}_${int}2}[0] | | ... | ${ip_net_if2}.1 | 30 | | ${next_node}= | Run Keyword If | ${dut_index} == ${last_dut_index} | | ... | Set Variable | TG | | ... | ELSE | Get From List | ${duts} | ${dut_index+${1}} | | ${next_if}= | Run Keyword If | ${dut_index} == ${last_dut_index} -| | ... | Set Variable | if2 -| | ... | ELSE | Set Variable | if1 +| | ... | Set Variable | pf2 +| | ... | ELSE | Set Variable | ${int}1 | | ${next_if_mac}= | Get Interface MAC | ${nodes['${next_node}']} -| | ... | ${${next_node}_${next_if}} +| | ... | ${${next_node}_${next_if}}[0] | | VPP Add IP Neighbor -| | ... | ${nodes['${dut}']} | ${${dut}_if2} | ${ip_net_if2}.2 | ${next_if_mac} +| | ... | ${nodes['${dut}']} | ${${dut}_${int}2}[0] | ${ip_net_if2}.2 +| | ... | ${next_if_mac} | | | | ${fib_table_1}= | Evaluate | ${fib_table_1} - ${1} | | ${ip_base_start}= | Set Variable | ${31} @@ -327,18 +334,22 @@ | | ${fib_table_2}= | Evaluate | ${fib_table_1}+${nf_nodes} | | Add Fib Table | ${dut1} | ${fib_table_1} | | Add Fib Table | ${dut1} | ${fib_table_2} -| | Assign Interface To Fib Table | ${dut1} | ${dut1_if1} | ${fib_table_1} -| | Assign Interface To Fib Table | ${dut1} | ${dut1_if2} | ${fib_table_2} +| | Assign Interface To Fib Table +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${fib_table_1} +| | Assign Interface To Fib Table +| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${fib_table_2} | | VPP Interface Set IP Address -| | ... | ${dut1} | ${dut1_if1} | 100.0.0.1 | 30 +| | ... | ${dut1} | ${DUT1_${int}1}[0] | 100.0.0.1 | 30 | | VPP Interface Set IP Address -| | ... | ${dut1} | ${dut1_if2} | 200.0.0.1 | 30 -| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 100.0.0.2 | ${tg_if1_mac} -| | VPP Add IP Neighbor | ${dut1} | ${dut1_if2} | 200.0.0.2 | ${tg_if2_mac} +| | ... | ${dut1} | ${DUT1_${int}2}[0] | 200.0.0.1 | 30 +| | VPP Add IP Neighbor +| | ... | ${dut1} | ${DUT1_${int}1}[0] | 100.0.0.2 | ${TG_pf1_mac}[0] +| | VPP Add IP Neighbor +| | ... | ${dut1} | ${DUT1_${int}2}[0] | 200.0.0.2 | ${TG_pf2_mac}[0] | | Vpp Route Add | ${dut1} | 10.0.0.0 | 8 | gateway=100.0.0.2 -| | ... | interface=${dut1_if1} | vrf=${fib_table_1} +| | ... | interface=${DUT1_${int}1}[0] | vrf=${fib_table_1} | | Vpp Route Add | ${dut1} | 20.0.0.0 | 8 | gateway=200.0.0.2 -| | ... | interface=${dut1_if2} | vrf=${fib_table_2} +| | ... | interface=${DUT1_${int}2}[0] | vrf=${fib_table_2} | | FOR | ${number} | IN RANGE | 1 | ${nf_nodes}+1 | | | ${fib_table_1}= | Evaluate | ${100}+${number} | | | ${fib_table_2}= | Evaluate | ${fib_table_1}+${1} @@ -410,28 +421,34 @@ | | Add Fib Table | ${dut1} | ${fib_table_2} | | Add Fib Table | ${dut2} | ${fib_table_1} | | Add Fib Table | ${dut2} | ${fib_table_2} -| | Assign Interface To Fib Table | ${dut1} | ${dut1_if1} | ${fib_table_1} -| | Assign Interface To Fib Table | ${dut1} | ${dut1_if2} | ${fib_table_2} -| | Assign Interface To Fib Table | ${dut2} | ${dut2_if1} | ${fib_table_1} -| | Assign Interface To Fib Table | ${dut2} | ${dut2_if2} | ${fib_table_2} +| | Assign Interface To Fib Table +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${fib_table_1} +| | Assign Interface To Fib Table +| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${fib_table_2} +| | Assign Interface To Fib Table +| | ... | ${dut2} | ${DUT2_${int}1}[0] | ${fib_table_1} +| | Assign Interface To Fib Table +| | ... | ${dut2} | ${DUT2_${int}2}[0] | ${fib_table_2} | | VPP Interface Set IP Address -| | ... | ${dut1} | ${dut1_if1} | 100.0.0.1 | 30 +| | ... | ${dut1} | ${DUT1_${int}1}[0] | 100.0.0.1 | 30 | | VPP Interface Set IP Address -| | ... | ${dut1} | ${dut1_if2} | 150.0.0.1 | 30 +| | ... | ${dut1} | ${DUT1_${int}2}[0] | 150.0.0.1 | 30 | | VPP Interface Set IP Address -| | ... | ${dut2} | ${dut2_if1} | 150.0.0.2 | 30 +| | ... | ${dut2} | ${DUT2_${int}1}[0] | 150.0.0.2 | 30 | | VPP Interface Set IP Address -| | ... | ${dut2} | ${dut2_if2} | 200.0.0.1 | 30 -| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 100.0.0.2 | ${tg_if1_mac} -| | VPP Add IP Neighbor | ${dut2} | ${dut2_if2} | 200.0.0.2 | ${tg_if2_mac} +| | ... | ${dut2} | ${DUT2_${int}2}[0] | 200.0.0.1 | 30 +| | VPP Add IP Neighbor +| | ... | ${dut1} | ${DUT1_${int}1}[0] | 100.0.0.2 | ${TG_pf1_mac}[0] +| | VPP Add IP Neighbor +| | ... | ${dut2} | ${DUT2_${int}2}[0] | 200.0.0.2 | ${TG_pf2_mac}[0] | | Vpp Route Add | ${dut1} | 10.0.0.0 | 8 | gateway=100.0.0.2 -| | ... | interface=${dut1_if1} | vrf=${fib_table_1} +| | ... | interface=${DUT1_${int}1}[0] | vrf=${fib_table_1} | | Vpp Route Add | ${dut1} | 20.0.0.0 | 8 | gateway=150.0.0.2 -| | ... | interface=${dut1_if2} | vrf=${fib_table_2} +| | ... | interface=${DUT1_${int}2}[0] | vrf=${fib_table_2} | | Vpp Route Add | ${dut2} | 10.0.0.0 | 8 | gateway=150.0.0.1 -| | ... | interface=${dut2_if1} | vrf=${fib_table_1} +| | ... | interface=${DUT2_${int}1}[0] | vrf=${fib_table_1} | | Vpp Route Add | ${dut2} | 20.0.0.0 | 8 | gateway=200.0.0.2 -| | ... | interface=${dut2_if2} | vrf=${fib_table_2} +| | ... | interface=${DUT2_${int}2}[0] | vrf=${fib_table_2} | | FOR | ${number} | IN RANGE | 1 | ${nf_nodes}+1 | | | ${fib_table_1}= | Evaluate | ${100}+${number} | | | ${fib_table_2}= | Evaluate | ${fib_table_1}+${1} @@ -543,39 +560,45 @@ | | | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | Initialize VLAN dot1q sub-interfaces in circular topology -| | ... | ${dut1} | ${dut1_if2} | ${dut2} | ${dut2_if1} | ${subid} +| | ... | ${dut1} | ${DUT1_${int}2}[0] +| | ... | ${dut2} | ${DUT2_${int}1}[0] | SUB_ID=${subid} | | ... | ELSE | Initialize VLAN dot1q sub-interfaces in circular topology -| | ... | ${dut1} | ${dut1_if2} | SUB_ID=${subid} +| | ... | ${dut1} | ${DUT1_${int}2}[0] | SUB_ID=${subid} | | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | Configure L2 tag rewrite method on interfaces | ${dut1} -| | ... | ${subif_index_1} | ${dut2} | ${subif_index_2} | ${tag_rewrite} +| | ... | Configure L2 tag rewrite method on interfaces +| | ... | ${dut1} | ${subif_index_1} +| | ... | ${dut2} | ${subif_index_2} | TAG_REWRITE_METHOD=${tag_rewrite} | | ... | ELSE | Configure L2 tag rewrite method on interfaces | | ... | ${dut1} | ${subif_index_1} | TAG_REWRITE_METHOD=${tag_rewrite} | | -| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 1.1.1.1 | ${tg_if1_mac} +| | VPP Add IP Neighbor +| | ... | ${dut1} | ${DUT1_${int}1}[0] | 1.1.1.1 | ${TG_pf1_mac}[0] | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | VPP Add IP Neighbor -| | ... | ${dut1} | ${subif_index_1} | 2.2.2.2 | ${dut2_if1_mac} +| | ... | ${dut1} | ${subif_index_1} | 2.2.2.2 | ${DUT2_${int}1_mac}[0] | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | VPP Add IP Neighbor -| | ... | ${dut2} | ${subif_index_2} | 2.2.2.1 | ${dut1_if2_mac} +| | ... | ${dut2} | ${subif_index_2} | 2.2.2.1 | ${DUT1_${int}2_mac}[0] | | ${dut}= | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | Set Variable | ${dut2} | | ... | ELSE | Set Variable | ${dut1} | | ${dut_if2}= | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | Set Variable | ${dut2_if2} | | ... | ELSE | Set Variable | ${subif_index_1} -| | VPP Add IP Neighbor | ${dut} | ${dut_if2} | 3.3.3.1 | ${tg_if2_mac} -| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1} | 1.1.1.2 | 30 +| | VPP Add IP Neighbor +| | ... | ${dut} | ${dut_if2} | 3.3.3.1 | ${TG_pf2_mac}[0] +| | VPP Interface Set IP Address +| | ... | ${dut1} | ${DUT1_${int}1}[0] | 1.1.1.2 | 30 | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | VPP Interface Set IP Address | ${dut1} | ${subif_index_1} | | ... | 2.2.2.1 | 30 | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | VPP Interface Set IP Address | ${dut2} | ${subif_index_2} | | ... | 2.2.2.2 | 30 -| | VPP Interface Set IP Address | ${dut} | ${dut_if2} | 3.3.3.2 | 30 +| | VPP Interface Set IP Address +| | ... | ${dut} | ${dut_if2} | 3.3.3.2 | 30 | | Vpp Route Add | ${dut1} | ${tg_if1_net} | 30 | gateway=1.1.1.1 -| | ... | interface=${dut1_if1} +| | ... | interface=${DUT1_${int}1}[0] | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | Vpp Route Add | ${dut1} | ${tg_if2_net} | 30 | gateway=2.2.2.2 | | ... | interface=${subif_index_1} diff --git a/resources/libraries/robot/ip/ip6.robot b/resources/libraries/robot/ip/ip6.robot index 715a5dd353..848e08d038 100644 --- a/resources/libraries/robot/ip/ip6.robot +++ b/resources/libraries/robot/ip/ip6.robot @@ -1,4 +1,4 @@ -# Copyright (c) 2019 Cisco and/or its affiliates. +# Copyright (c) 2020 Cisco and/or its affiliates. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at: @@ -47,51 +47,57 @@ | | | | Set interfaces in path up | | -| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 2001:1::2 | ${tg_if1_mac} +| | VPP Add IP Neighbor +| | ... | ${dut1} | ${DUT1_${int}1}[0] | 2001:1::2 | ${TG_pf1_mac}[0] | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | VPP Add IP Neighbor -| | ... | ${dut1} | ${dut1_if2} | 2001:3::1 | ${dut2_if1_mac} +| | ... | ${dut1} | ${DUT1_${int}2}[0] | 2001:3::1 | ${DUT2_${int}1_mac}[0] | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | VPP Add IP Neighbor -| | ... | ${dut2} | ${dut2_if1} | 2001:3::2 | ${dut1_if2_mac} +| | ... | ${dut2} | ${DUT2_${int}1}[0] | 2001:3::2 | ${DUT1_${int}2_mac}[0] | | ${dut}= | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | Set Variable | ${dut2} | | ... | ELSE | Set Variable | ${dut1} | | ${dut_if2}= | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | Set Variable | ${dut2_if2} -| | ... | ELSE | Set Variable | ${dut1_if2} -| | VPP Add IP Neighbor | ${dut} | ${dut_if2} | 2001:2::2 | ${tg_if2_mac} +| | ... | Set Variable | ${DUT2_${int}2}[0] +| | ... | ELSE | Set Variable | ${DUT1_${int}2}[0] +| | VPP Add IP Neighbor +| | ... | ${dut} | ${dut_if2} | 2001:2::2 | ${TG_pf2_mac}[0] | | -| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1} | 2001:1::1 | 64 +| | VPP Interface Set IP Address +| | ... | ${dut1} | ${DUT1_${int}1}[0] | 2001:1::1 | 64 | | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | VPP Interface Set IP Address | ${dut1} | ${dut1_if2} | 2001:3::1 | 64 +| | ... | VPP Interface Set IP Address +| | ... | ${dut1} | ${DUT1_${int}2}[0] | 2001:3::1 | 64 | | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | VPP Interface Set IP Address | ${dut2} | ${dut2_if1} | 2001:3::2 | 64 -| | VPP Interface Set IP Address | ${dut} | ${dut_if2} | 2001:2::1 | 64 +| | ... | VPP Interface Set IP Address +| | ... | ${dut2} | ${DUT2_${int}1}[0] | 2001:3::2 | 64 +| | VPP Interface Set IP Address +| | ... | ${dut} | ${dut_if2} | 2001:2::1 | 64 | | | | Vpp All Ra Suppress Link Layer | ${nodes} | | | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | Vpp Route Add | ${dut1} | 2001:2::0 | 64 | gateway=2001:3::2 -| | ... | interface=${dut1_if2} +| | ... | interface=${DUT1_${int}2}[0] | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | Vpp Route Add | ${dut2} | 2001:1::0 | 64 | gateway=2001:3::1 -| | ... | interface=${dut2_if1} +| | ... | interface=${DUT2_${int}1}[0] | | | | Run Keyword Unless | '${remote_host1_ip}' == '${NONE}' | | ... | Vpp Route Add | ${dut1} | ${remote_host1_ip} | 128 -| | ... | gateway=2001:1::2 | interface=${dut1_if1} +| | ... | gateway=2001:1::2 | interface=${DUT1_${int}1}[0] | | Run Keyword Unless | '${remote_host2_ip}' == '${NONE}' | | ... | Vpp Route Add | ${dut} | ${remote_host2_ip} | 128 | | ... | gateway=2001:2::2 | interface=${dut_if2} | | Run Keyword Unless | '${remote_host1_ip}' == '${NONE}' | | ... | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | Vpp Route Add | ${dut1} | ${remote_host1_ip} | 128 -| | ... | gateway=2001:3::2 | interface=${dut1_if2} +| | ... | gateway=2001:3::2 | interface=${DUT1_${int}2}[0] | | Run Keyword Unless | '${remote_host2_ip}' == '${NONE}' | | ... | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | Vpp Route Add | ${dut2} | ${remote_host2_ip} | 128 -| | ... | gateway=2001:3::1 | interface=${dut2_if1} +| | ... | gateway=2001:3::1 | interface=${DUT2_${int}1}[0] | Initialize IPv6 forwarding with scaling in circular topology | | [Documentation] @@ -118,37 +124,41 @@ | | | | ${prefix}= | Set Variable | 64 | | ${host_prefix}= | Set Variable | 128 -| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1} | 2001:3::1 | ${prefix} +| | VPP Interface Set IP Address +| | ... | ${dut1} | ${DUT1_${int}1}[0] | 2001:3::1 | ${prefix} | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | VPP Interface Set IP Address -| | ... | ${dut1} | ${dut1_if2} | 2001:4::1 | ${prefix} +| | ... | ${dut1} | ${DUT1_${int}2}[0] | 2001:4::1 | ${prefix} | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | VPP Interface Set IP Address -| | ... | ${dut2} | ${dut2_if1} | 2001:4::2 | ${prefix} +| | ... | ${dut2} | ${DUT2_${int}1}[0] | 2001:4::2 | ${prefix} | | ${dut}= | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | Set Variable | ${dut2} | | ... | ELSE | Set Variable | ${dut1} | | ${dut_if2}= | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | Set Variable | ${dut2_if2} -| | ... | ELSE | Set Variable | ${dut1_if2} -| | VPP Interface Set IP Address | ${dut} | ${dut_if2} | 2001:5::1 | ${prefix} +| | ... | Set Variable | ${DUT2_${int}2}[0] +| | ... | ELSE | Set Variable | ${DUT1_${int}2}[0] +| | VPP Interface Set IP Address +| | ... | ${dut} | ${dut_if2} | 2001:5::1 | ${prefix} | | Vpp All Ra Suppress Link Layer | ${nodes} -| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 2001:3::2 | ${tg_if1_mac} +| | VPP Add IP Neighbor +| | ... | ${dut1} | ${DUT1_${int}1}[0] | 2001:3::2 | ${TG_pf1_mac}[0] | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | VPP Add Ip Neighbor -| | ... | ${dut1} | ${dut1_if2} | 2001:4::2 | ${dut2_if1_mac} +| | ... | ${dut1} | ${DUT1_${int}2}[0] | 2001:4::2 | ${DUT2_${int}1_mac}[0] | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | VPP Add Ip Neighbor -| | ... | ${dut2} | ${dut2_if1} | 2001:4::1 | ${dut1_if2_mac} -| | VPP Add IP Neighbor | ${dut} | ${dut_if2} | 2001:5::2 | ${tg_if2_mac} +| | ... | ${dut2} | ${DUT2_${int}1}[0] | 2001:4::1 | ${DUT1_${int}2_mac}[0] +| | VPP Add IP Neighbor +| | ... | ${dut} | ${dut_if2} | 2001:5::2 | ${TG_pf2_mac}[0] | | Vpp Route Add | ${dut1} | 2001:1::0 | ${host_prefix} | gateway=2001:3::2 -| | ... | interface=${dut1_if1} | count=${count} +| | ... | interface=${DUT1_${int}1}[0] | count=${count} | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | Vpp Route Add | ${dut1} | 2001:2::0 | ${host_prefix} -| | ... | gateway=2001:4::2 | interface=${dut1_if2} | count=${count} +| | ... | gateway=2001:4::2 | interface=${DUT1_${int}2}[0] | count=${count} | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | Vpp Route Add | ${dut2} | 2001:1::0 | ${host_prefix} -| | ... | gateway=2001:4::1 | interface=${dut2_if1} | count=${count} +| | ... | gateway=2001:4::1 | interface=${DUT2_${int}1}[0] | count=${count} | | Vpp Route Add | ${dut} | 2001:2::0 | ${host_prefix} | gateway=2001:5::2 | | ... | interface=${dut_if2} | count=${count} @@ -185,16 +195,22 @@ | | ${fib_table_2}= | Evaluate | ${fib_table_1}+${nf_nodes} | | Add Fib Table | ${dut1} | ${fib_table_1} | ipv6=${True} | | Add Fib Table | ${dut1} | ${fib_table_2} | ipv6=${True} -| | Assign Interface To Fib Table | ${dut1} | ${dut1_if1} | ${fib_table_1} +| | Assign Interface To Fib Table +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${fib_table_1} | | ... | ipv6=${True} -| | Assign Interface To Fib Table | ${dut1} | ${dut1_if2} | ${fib_table_2} +| | Assign Interface To Fib Table +| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${fib_table_2} | | ... | ipv6=${True} -| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1} | 2001:100::1 +| | VPP Interface Set IP Address +| | ... | ${dut1} | ${DUT1_${int}1}[0] | 2001:100::1 | | ... | ${prefix} -| | VPP Interface Set IP Address | ${dut1} | ${dut1_if2} | 2001:200::1 +| | VPP Interface Set IP Address +| | ... | ${dut1} | ${DUT1_${int}2}[0] | 2001:200::1 | | ... | ${prefix} -| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 2001:100::2 | ${tg_if1_mac} -| | VPP Add IP Neighbor | ${dut1} | ${dut1_if2} | 2001:200::2 | ${tg_if2_mac} +| | VPP Add IP Neighbor +| | ... | ${dut1} | ${DUT1_${int}1}[0] | 2001:100::2 | ${TG_pf1_mac}[0] +| | VPP Add IP Neighbor +| | ... | ${dut1} | ${DUT1_${int}2}[0] | 2001:200::2 | ${TG_pf2_mac}[0] | | Vpp Route Add | ${dut1} | 2001:1::0 | 64 | gateway=2001:100::2 | | ... | interface=${dut1_if1} | vrf=${fib_table_1} | | Vpp Route Add | ${dut1} | 2001:2::0 | 64 | gateway=2001:200::2 @@ -263,32 +279,37 @@ | | | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | Initialize VLAN dot1q sub-interfaces in circular topology -| | ... | ${dut1} | ${dut1_if2} | ${dut2} | ${dut2_if1} | ${subid} +| | ... | ${dut1} | ${DUT1_${int}2}[0] +| | ... | ${dut2} | ${DUT2_${int}1}[0] | SUB_ID=${subid} | | ... | ELSE | Initialize VLAN dot1q sub-interfaces in circular topology -| | ... | ${dut1} | ${dut1_if2} | SUB_ID=${subid} +| | ... | ${dut1} | ${DUT1_${int}2}[0] | SUB_ID=${subid} | | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | Configure L2 tag rewrite method on interfaces | ${dut1} -| | ... | ${subif_index_1} | ${dut2} | ${subif_index_2} | ${tag_rewrite} +| | ... | Configure L2 tag rewrite method on interfaces +| | ... | ${dut1} | ${subif_index_1} +| | ... | ${dut2} | ${subif_index_2} | TAG_REWRITE_METHOD=${tag_rewrite} | | ... | ELSE | Configure L2 tag rewrite method on interfaces | | ... | ${dut1} | ${subif_index_1} | TAG_REWRITE_METHOD=${tag_rewrite} | | | | ${prefix}= | Set Variable | 64 | | ${host_prefix}= | Set Variable | 64 -| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 2002:1::1 | ${tg_if1_mac} +| | VPP Add IP Neighbor +| | ... | ${dut1} | ${DUT1_${int}1}[0] | 2002:1::1 | ${TG_pf1_mac}[0] | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | VPP Add Ip Neighbor -| | ... | ${dut1} | ${subif_index_1} | 2002:2::2 | ${dut2_if1_mac} +| | ... | ${dut1} | ${subif_index_1} | 2002:2::2 | ${DUT2_${int}1_mac}[0] | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | VPP Add Ip Neighbor -| | ... | ${dut2} | ${subif_index_2} | 2002:2::1 | ${dut1_if2_mac} +| | ... | ${dut2} | ${subif_index_2} | 2002:2::1 | ${DUT1_${int}2_mac}[0] | | ${dut}= | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | Set Variable | ${dut2} | | ... | ELSE | Set Variable | ${dut1} | | ${dut_if2}= | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | Set Variable | ${dut2_if2} +| | ... | Set Variable | ${DUT2_${int}2}[0] | | ... | ELSE | Set Variable | ${subif_index_1} -| | VPP Add IP Neighbor | ${dut} | ${dut_if2} | 2002:3::1 | ${tg_if2_mac} -| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1} | 2002:1::2 | ${prefix} +| | VPP Add IP Neighbor +| | ... | ${dut} | ${dut_if2} | 2002:3::1 | ${TG_pf2_mac}[0] +| | VPP Interface Set IP Address +| | ... | ${dut1} | ${DUT1_${int}2}[0] | 2002:1::2 | ${prefix} | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | VPP Interface Set IP Address | ${dut1} | ${subif_index_1} | 2002:2::1 | | ... | ${prefix} @@ -298,7 +319,7 @@ | | VPP Interface Set IP Address | ${dut} | ${dut_if2} | 2002:3::2 | ${prefix} | | Vpp All Ra Suppress Link Layer | ${nodes} | | Vpp Route Add | ${dut1} | ${tg_if1_net} | ${host_prefix} -| | ... | gateway=2002:1::1 | interface=${dut1_if1} +| | ... | gateway=2002:1::1 | interface=${DUT1_${int}1}[0] | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | Vpp Route Add | ${dut1} | ${tg_if2_net} | ${host_prefix} | | ... | gateway=2002:2::2 | interface=${subif_index_1} diff --git a/resources/libraries/robot/ip/nat.robot b/resources/libraries/robot/ip/nat.robot index bb44fa1a18..076a0a20b8 100644 --- a/resources/libraries/robot/ip/nat.robot +++ b/resources/libraries/robot/ip/nat.robot @@ -1,4 +1,4 @@ -# Copyright (c) 2019 Cisco and/or its affiliates. +# Copyright (c) 2020 Cisco and/or its affiliates. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at: @@ -85,43 +85,45 @@ | | | | Set interfaces in path up | | -| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1} | 10.0.0.1 | 20 +| | VPP Interface Set IP Address | ${dut1} | ${DUT1_${int}1}[0] | 10.0.0.1 | 20 | | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | VPP Interface Set IP Address | ${dut1} | ${dut1_if2} +| | ... | VPP Interface Set IP Address | ${dut1} | ${DUT1_${int}2}[0] | | ... | 11.0.0.1 | 20 | | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | VPP Interface Set IP Address | ${dut2} | ${dut2_if1} +| | ... | VPP Interface Set IP Address | ${dut2} | ${DUT2_${int}1}[0] | | ... | 11.0.0.2 | 20 | | ${dut}= | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | Set Variable | ${dut2} | | ... | ELSE | Set Variable | ${dut1} | | ${dut_if2}= | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | Set Variable | ${dut2_if2} -| | ... | ELSE | Set Variable | ${dut1_if2} +| | ... | Set Variable | ${DUT2_${int}1}[0] +| | ... | ELSE | Set Variable | ${DUT1_${int}2}[0] | | VPP Interface Set IP Address | ${dut} | ${dut_if2} | 12.0.0.1 | 20 | | -| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 10.0.0.2 | ${tg_if1_mac} +| | VPP Add IP Neighbor +| | ... | ${dut1} | ${DUT1_${int}1}[0] | 10.0.0.2 | ${TG_pf1_mac}[0] | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | VPP Add IP Neighbor -| | ... | ${dut1} | ${dut1_if2} | 11.0.0.2 | ${dut2_if1_mac} +| | ... | ${dut1} | ${DUT1_${int}2}[0] | 11.0.0.2 | ${DUT2_${int}1_mac}[0] | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | VPP Add IP Neighbor -| | ... | ${dut2} | ${dut2_if1} | 11.0.0.1 | ${dut1_if2_mac} -| | VPP Add IP Neighbor | ${dut} | ${dut_if2} | 12.0.0.2 | ${tg_if2_mac} +| | ... | ${dut2} | ${DUT2_${int}1}[0] | 11.0.0.1 | ${DUT1_${int}2_mac}[0] +| | VPP Add IP Neighbor +| | ... | ${dut} | ${dut_if2} | 12.0.0.2 | ${TG_pf2_mac}[0] | | | | Vpp Route Add | ${dut1} | 20.0.0.0 | 18 | gateway=10.0.0.2 -| | ... | interface=${dut1_if1} +| | ... | interface=${DUT1_${int}1}[0] | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | Vpp Route Add | ${dut1} | 12.0.0.2 | 32 | gateway=11.0.0.2 -| | ... | interface=${dut1_if2} +| | ... | interface=${DUT1_${int}2}[0] | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | Vpp Route Add | ${dut2} | 12.0.0.0 | 24 | gateway=12.0.0.2 -| | ... | interface=${dut2_if2} +| | ... | interface=${DUT2_${int}2}[0] | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | Vpp Route Add | ${dut2} | 200.0.0.0 | 30 | gateway=11.0.0.1 -| | ... | interface=${dut2_if1} +| | ... | interface=${DUT2_${int}1}[0] | | | | Configure inside and outside interfaces -| | ... | ${dut1} | ${dut1_if1} | ${dut1_if2} +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${DUT1_${int}2}[0] | | Configure deterministic mode for NAT44 | | ... | ${dut1} | 20.0.0.0 | 18 | 200.0.0.0 | 30 diff --git a/resources/libraries/robot/l2/l2_bridge_domain.robot b/resources/libraries/robot/l2/l2_bridge_domain.robot index 7ca190e5d0..bb533e3e05 100644 --- a/resources/libraries/robot/l2/l2_bridge_domain.robot +++ b/resources/libraries/robot/l2/l2_bridge_domain.robot @@ -26,33 +26,13 @@ | | | VPP Get Bridge Domain Data | ${nodes['${dut}']} | | END -| Create bridge domain -| | [Documentation] -| | ... | Create bridge domain on given VPP node with defined learning status. -| | -| | ... | *Arguments:* -| | ... | - ${dut_node} - DUT node. Type: dictionary -| | ... | - ${bd_id} - Bridge domain ID. Type: integer -| | ... | - ${learn} - Enable/disable MAC learn. Type: boolean, \ -| | ... | default value: ${TRUE} -| | -| | ... | *Example:* -| | -| | ... | \| Create bridge domain \| ${nodes['DUT1']} \| 2 \| -| | ... | \| Create bridge domain \| ${nodes['DUT1']} \| 5 \ -| | ... | \| learn=${FALSE} \| -| | -| | [Arguments] | ${dut_node} | ${bd_id} | ${learn}=${TRUE} -| | -| | Create L2 BD | ${dut_node} | ${bd_id} | learn=${learn} - | Add interface to bridge domain | | [Documentation] | | ... | Set given interface admin state to up and add this | | ... | interface to required L2 bridge domain on defined VPP node. | | | | ... | *Arguments:* -| | ... | - ${dut_node} - DUT node. Type: dictionary +| | ... | - ${dut} - DUT node. Type: dictionary | | ... | - ${dut_if} - DUT node interface name. Type: string | | ... | - ${bd_id} - Bridge domain ID. Type: integer | | ... | - ${shg} - Split-horizon group ID. Type: integer, default value: 0 @@ -62,10 +42,10 @@ | | ... | \| Add interface to bridge domain \| ${nodes['DUT2']} \ | | ... | \| GigabitEthernet0/8/0 \| 3 \| | | -| | [Arguments] | ${dut_node} | ${dut_if} | ${bd_id} | ${shg}=0 +| | [Arguments] | ${dut} | ${dut_if} | ${bd_id} | ${shg}=0 | | -| | Set Interface State | ${dut_node} | ${dut_if} | up -| | Add Interface To L2 BD | ${dut_node} | ${dut_if} | ${bd_id} | ${shg} +| | Set Interface State | ${dut} | ${dut_if} | up +| | Add Interface To L2 BD | ${dut} | ${dut_if} | ${bd_id} | ${shg} | Initialize L2 bridge domain on node | | [Documentation] @@ -84,11 +64,10 @@ | | [Arguments] | ${dut} | ${count}=${1} | | | | FOR | ${id} | IN RANGE | 1 | ${count} + 1 -| | | ${dut_str}= | Convert To Lowercase | ${dut} | | | Add Interface To L2 BD -| | | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_${id}_1} | ${id} +| | | ... | ${nodes['${dut}']} | ${${dut}_${int}1_${id}}[0] | ${id} | | | Add Interface To L2 BD -| | | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_${id}_2} | ${id} +| | | ... | ${nodes['${dut}']} | ${${dut}_${int}2_${id}}[0] | ${id} | | END | Initialize L2 bridge domain @@ -136,12 +115,11 @@ | | | | ${bd_id1}= | Evaluate | ${nf_nodes} * (${nf_chain} - 1) + ${nf_chain} | | ${bd_id2}= | Evaluate | ${nf_nodes} * ${nf_chain} + ${nf_chain} -| | ${dut_str}= | Convert To Lowercase | ${dut} | | Add interface to bridge domain -| | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_${nf_chain}_1} +| | ... | ${nodes['${dut}']} | ${${dut}_${int}1_${nf_chain}}[0] | | ... | ${bd_id1} | | Add interface to bridge domain -| | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_${nf_chain}_2} +| | ... | ${nodes['${dut}']} | ${${dut}_${int}2_${nf_chain}}[0] | | ... | ${bd_id2} | | FOR | ${nf_node} | IN RANGE | 1 | ${nf_nodes} + 1 | | | ${qemu_id}= | Evaluate | (${nf_chain} - ${1}) * ${nf_nodes} + ${nf_node} @@ -215,20 +193,28 @@ | | ... | interfaces. | | | | Set interfaces in path up -| | VPP Interface Set IP Address | ${dut1} | ${dut1_if2} | 172.16.0.1 -| | ... | 24 -| | VPP Interface Set IP Address | ${dut2} | ${dut2_if1} | 172.16.0.2 -| | ... | 24 -| | VPP Add IP Neighbor | ${dut1} | ${dut1_if2} | 172.16.0.2 | ${dut2_if1_mac} -| | VPP Add IP Neighbor | ${dut2} | ${dut2_if1} | 172.16.0.1 | ${dut1_if2_mac} -| | ${dut1s_vxlan}= | Create VXLAN interface | ${dut1} | 24 -| | ... | 172.16.0.1 | 172.16.0.2 -| | ${dut2s_vxlan}= | Create VXLAN interface | ${dut2} | 24 -| | ... | 172.16.0.2 | 172.16.0.1 -| | VPP Add L2 Bridge Domain | ${dut1} | ${1} | ${dut1_if1} | ${dut1s_vxlan} -| | Set Interface State | ${dut1} | ${dut1s_vxlan} | up -| | VPP Add L2 Bridge Domain | ${dut2} | ${1} | ${dut2_if2} | ${dut2s_vxlan} -| | Set Interface State | ${dut2} | ${dut2s_vxlan} | up +| | VPP Interface Set IP Address +| | ... | ${dut1} | ${DUT1_${int}2}[0] | 172.16.0.1 | 24 +| | VPP Interface Set IP Address +| | ... | ${dut2} | ${DUT2_${int}1}[0] | 172.16.0.2 | 24 +| | VPP Add IP Neighbor +| | ... | ${dut1} | ${DUT1_${int}2}[0] | 172.16.0.2 +| | ... | ${DUT2_${int}1_mac}[0] +| | VPP Add IP Neighbor +| | ... | ${dut2} | ${DUT2_${int}1}[0] | 172.16.0.1 +| | ... | ${DUT1_${int}2_mac}[0] +| | ${dut1s_vxlan}= | Create VXLAN interface +| | ... | ${dut1} | 24 | 172.16.0.1 | 172.16.0.2 +| | ${dut2s_vxlan}= | Create VXLAN interface +| | ... | ${dut2} | 24 | 172.16.0.2 | 172.16.0.1 +| | VPP Add L2 Bridge Domain +| | ... | ${dut1} | ${1} | ${DUT1_${int}1}[0] | ${dut1s_vxlan} +| | Set Interface State +| | ... | ${dut1} | ${dut1s_vxlan} | up +| | VPP Add L2 Bridge Domain +| | ... | ${dut2} | ${1} | ${DUT2_${int}2}[0] | ${dut2s_vxlan} +| | Set Interface State +| | ... | ${dut2} | ${dut2s_vxlan} | up | Initialize L2 bridge domain with VLAN and VXLANoIPv4 in 3-node circular topology | | [Documentation] @@ -257,17 +243,29 @@ | | ${dut1_ip_start}= | Set Variable | 172.16.0.1 | | ${dut2_ip_start}= | Set Variable | 172.16.0.2 | | -| | Vpp create multiple VXLAN IPv4 tunnels | node=${dut1} -| | ... | node_vxlan_if=${dut1_if2} | node_vlan_if=${dut1_if1} -| | ... | op_node=${dut2} | op_node_if=${dut2_if1} | n_tunnels=${vxlan_count} -| | ... | vni_start=${vni_start} | src_ip_start=${dut1_ip_start} -| | ... | dst_ip_start=${dut2_ip_start} | ip_step=${ip_step} +| | Vpp create multiple VXLAN IPv4 tunnels +| | ... | node=${dut1} +| | ... | node_vxlan_if=${DUT1_${int}2}[0] +| | ... | node_vlan_if=${DUT1_${int}1}[0] +| | ... | op_node=${dut2} +| | ... | op_node_if=${DUT2_${int}1}[0] +| | ... | n_tunnels=${vxlan_count} +| | ... | vni_start=${vni_start} +| | ... | src_ip_start=${dut1_ip_start} +| | ... | dst_ip_start=${dut2_ip_start} +| | ... | ip_step=${ip_step} | | ... | bd_id_start=${bd_id_start} -| | Vpp create multiple VXLAN IPv4 tunnels | node=${dut2} -| | ... | node_vxlan_if=${dut2_if1} | node_vlan_if=${dut2_if2} -| | ... | op_node=${dut1} | op_node_if=${dut1_if2} | n_tunnels=${vxlan_count} -| | ... | vni_start=${vni_start} | src_ip_start=${dut2_ip_start} -| | ... | dst_ip_start=${dut1_ip_start} | ip_step=${ip_step} +| | Vpp create multiple VXLAN IPv4 tunnels +| | ... | node=${dut2} +| | ... | node_vxlan_if=${DUT2_${int}1}[0] +| | ... | node_vlan_if=${DUT2_${int}2}[0] +| | ... | op_node=${dut1} +| | ... | op_node_if=${DUT1_${int}2}[0] +| | ... | n_tunnels=${vxlan_count} +| | ... | vni_start=${vni_start} +| | ... | src_ip_start=${dut2_ip_start} +| | ... | dst_ip_start=${dut1_ip_start} +| | ... | ip_step=${ip_step} | | ... | bd_id_start=${bd_id_start} | Initialize L2 bridge domains with Vhost-User and VXLANoIPv4 in 3-node circular topology @@ -291,27 +289,35 @@ | | | | [Arguments] | ${bd_id1} | ${bd_id2} | | -| | VPP Interface Set IP Address | ${dut1} | ${dut1_if2} | 172.16.0.1 -| | ... | 24 -| | VPP Interface Set IP Address | ${dut2} | ${dut2_if1} | 172.16.0.2 -| | ... | 24 +| | VPP Interface Set IP Address +| | ... | ${dut1} | ${DUT1_${int}2}[0] | 172.16.0.1 | 24 +| | VPP Interface Set IP Address +| | ... | ${dut2} | ${DUT2_${int}1}[0] | 172.16.0.2 | 24 | | Set interfaces in path up -| | ${dut1s_vxlan}= | Create VXLAN interface | ${dut1} | 24 -| | ... | 172.16.0.1 | 172.16.0.2 -| | ${dut2s_vxlan}= | Create VXLAN interface | ${dut2} | 24 -| | ... | 172.16.0.2 | 172.16.0.1 +| | ${dut1s_vxlan}= | Create VXLAN interface +| | ... | ${dut1} | 24 | 172.16.0.1 | 172.16.0.2 +| | ${dut2s_vxlan}= | Create VXLAN interface +| | ... | ${dut2} | 24 | 172.16.0.2 | 172.16.0.1 | | Configure vhost interfaces | ${dut1} | | ... | /var/run/vpp/sock-1-${bd_id1} | /var/run/vpp/sock-1-${bd_id2} -| | Add interface to bridge domain | ${dut1} | ${dut1_if1} | ${bd_id1} -| | Add interface to bridge domain | ${dut1} | ${vhost_if1} | ${bd_id1} -| | Add interface to bridge domain | ${dut1} | ${vhost_if2} | ${bd_id2} -| | Add interface to bridge domain | ${dut1} | ${dut1s_vxlan} | ${bd_id2} +| | Add interface to bridge domain +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${bd_id1} +| | Add interface to bridge domain +| | ... | ${dut1} | ${vhost_if1} | ${bd_id1} +| | Add interface to bridge domain +| | ... | ${dut1} | ${vhost_if2} | ${bd_id2} +| | Add interface to bridge domain +| | ... | ${dut1} | ${dut1s_vxlan} | ${bd_id2} | | Configure vhost interfaces | ${dut2} | | ... | /var/run/vpp/sock-1-${bd_id1} | /var/run/vpp/sock-1-${bd_id2} -| | Add interface to bridge domain | ${dut2} | ${dut2s_vxlan} | ${bd_id1} -| | Add interface to bridge domain | ${dut2} | ${vhost_if1} | ${bd_id1} -| | Add interface to bridge domain | ${dut2} | ${vhost_if2} | ${bd_id2} -| | Add interface to bridge domain | ${dut2} | ${dut2_if2} | ${bd_id2} +| | Add interface to bridge domain +| | ... | ${dut2} | ${dut2s_vxlan} | ${bd_id1} +| | Add interface to bridge domain +| | ... | ${dut2} | ${vhost_if1} | ${bd_id1} +| | Add interface to bridge domain +| | ... | ${dut2} | ${vhost_if2} | ${bd_id2} +| | Add interface to bridge domain +| | ... | ${dut2} | ${DUT2_${int}2}[0] | ${bd_id2} | Initialize L2 bridge domains with VLAN dot1q sub-interfaces in circular topology | | [Documentation] @@ -347,23 +353,26 @@ | | | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | Initialize VLAN dot1q sub-interfaces in circular topology -| | ... | ${dut1} | ${dut1_if2} | ${dut2} | ${dut2_if1} | ${subid} +| | ... | ${dut1} | ${DUT1_${int}2}[0] +| | ... | ${dut2} | ${DUT2_${int}1}[0] | SUB_ID=${subid} | | ... | ELSE | Initialize VLAN dot1q sub-interfaces in circular topology -| | ... | ${dut1} | ${dut1_if2} | SUB_ID=${subid} +| | ... | ${dut1} | ${DUT1_${int}2}[0] | SUB_ID=${subid} | | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | Configure L2 tag rewrite method on interfaces | ${dut1} -| | ... | ${subif_index_1} | ${dut2} | ${subif_index_2} | ${tag_rewrite} +| | ... | Configure L2 tag rewrite method on interfaces +| | ... | ${dut1} | ${subif_index_1} +| | ... | ${dut2} | ${subif_index_2} | TAG_REWRITE_METHOD=${tag_rewrite} | | ... | ELSE | Configure L2 tag rewrite method on interfaces | | ... | ${dut1} | ${subif_index_1} | TAG_REWRITE_METHOD=${tag_rewrite} -| | -| | Add interface to bridge domain | ${dut1} | ${dut1_if1} | ${bd_id1} -| | Add interface to bridge domain | ${dut1} | ${subif_index_1} | ${bd_id1} +| | Add interface to bridge domain +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${bd_id1} +| | Add interface to bridge domain +| | ... | ${dut1} | ${subif_index_1} | ${bd_id1} | | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | Add interface to bridge domain | ${dut2} | ${subif_index_2} -| | ... | ${bd_id2} +| | ... | Add interface to bridge domain +| | ... | ${dut2} | ${subif_index_2} | ${bd_id2} | | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | Add interface to bridge domain | ${dut2} | ${dut2_if2} -| | ... | ${bd_id2} +| | ... | Add interface to bridge domain +| | ... | ${dut2} | ${DUT2_${int}2}[0] | ${bd_id2} | Initialize L2 bridge domains with Vhost-User and VLAN in circular topology | | [Documentation] @@ -393,21 +402,26 @@ | | | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | Initialize VLAN dot1q sub-interfaces in circular topology -| | ... | ${dut1} | ${dut1_if2} | ${dut2} | ${dut2_if1} | ${subid} +| | ... | ${dut1} | ${DUT1_${int}2}[0] +| | ... | ${dut2} | ${DUT2_${int}1}[0] | SUB_ID=${subid} | | ... | ELSE | Initialize VLAN dot1q sub-interfaces in circular topology -| | ... | ${dut1} | ${dut1_if2} | SUB_ID=${subid} +| | ... | ${dut1} | ${DUT1_${int}2}[0] | SUB_ID=${subid} | | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | Configure L2 tag rewrite method on interfaces | ${dut1} -| | ... | ${subif_index_1} | ${dut2} | ${subif_index_2} | ${tag_rewrite} +| | ... | Configure L2 tag rewrite method on interfaces +| | ... | ${dut1} | ${subif_index_1} +| | ... | ${dut2} | ${subif_index_2} | TAG_REWRITE_METHOD=${tag_rewrite} | | ... | ELSE | Configure L2 tag rewrite method on interfaces | | ... | ${dut1} | ${subif_index_1} | TAG_REWRITE_METHOD=${tag_rewrite} -| | | | Configure vhost interfaces | ${dut1} | | ... | /var/run/vpp/sock-1-${bd_id1} | /var/run/vpp/sock-1-${bd_id2} -| | Add interface to bridge domain | ${dut1} | ${dut1_if1} | ${bd_id1} -| | Add interface to bridge domain | ${dut1} | ${vhost_if1} | ${bd_id1} -| | Add interface to bridge domain | ${dut1} | ${vhost_if2} | ${bd_id2} -| | Add interface to bridge domain | ${dut1} | ${subif_index_1} | ${bd_id2} +| | Add interface to bridge domain +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${bd_id1} +| | Add interface to bridge domain +| | ... | ${dut1} | ${vhost_if1} | ${bd_id1} +| | Add interface to bridge domain +| | ... | ${dut1} | ${vhost_if2} | ${bd_id2} +| | Add interface to bridge domain +| | ... | ${dut1} | ${subif_index_1} | ${bd_id2} | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | Configure vhost interfaces | ${dut2} | | ... | /var/run/vpp/sock-1-${bd_id1} | /var/run/vpp/sock-1-${bd_id2} @@ -419,7 +433,8 @@ | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | Add interface to bridge domain | ${dut2} | ${vhost_if2} | ${bd_id2} | | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | Add interface to bridge domain | ${dut2} | ${dut2_if2} | ${bd_id2} +| | ... | Add interface to bridge domain | ${dut2} | ${DUT2_${int}2}[0] +| | ... | ${bd_id2} | Initialize L2 bridge domains with Vhost-User and VLAN with VPP link bonding in a 3-node circular topology | | [Documentation] @@ -450,55 +465,53 @@ | | ... | ${bond_mode} | ${lb_mode} | | | | Set interfaces in path up -| | ${dut1_eth_bond_if1}= | VPP Create Bond Interface | ${dut1} | ${bond_mode} -| | ... | ${lb_mode} +| | ${dut1_eth_bond_if1}= | VPP Create Bond Interface +| | ... | ${dut1} | ${bond_mode} | ${lb_mode} | | Set Interface State | ${dut1} | ${dut1_eth_bond_if1} | up | | VPP Set interface MTU | ${dut1} | ${dut1_eth_bond_if1} -| | ${if2_status} | ${value}= | Run Keyword And Ignore Error -| | ... | Variable Should Exist | ${dut1_if2} -| | Run Keyword If | '${if2_status}' == 'PASS' -| | ... | VPP Enslave Physical Interface | ${dut1} | ${dut1_if2} -| | ... | ${dut1_eth_bond_if1} -| | ... | ELSE -| | ... | VPP Enslave Physical Interface | ${dut1} | ${dut1_if2_1} -| | ... | ${dut1_eth_bond_if1} -| | Run Keyword Unless | '${if2_status}' == 'PASS' -| | ... | VPP Enslave Physical Interface | ${dut1} | ${dut1_if2_2} -| | ... | ${dut1_eth_bond_if1} -| | ${dut2_eth_bond_if1}= | VPP Create Bond Interface | ${dut2} | ${bond_mode} -| | ... | ${lb_mode} +| | FOR | ${pf} | IN RANGE | 1 | ${nic_pfs} + 1 +| | | ${_even}= | Evaluate | ${pf} % 2 +| | | Run Keyword Unless | ${even} +| | | ... | VPP Enslave Physical Interface +| | | ... | ${dut1} | ${DUT1_${int}${pf}}[0] | ${dut1_eth_bond_if1} +| | END +| | ${dut2_eth_bond_if1}= | VPP Create Bond Interface +| | ... | ${dut2} | ${bond_mode} | ${lb_mode} | | Set Interface State | ${dut2} | ${dut2_eth_bond_if1} | up | | VPP Set interface MTU | ${dut2} | ${dut2_eth_bond_if1} -| | ${if1_status} | ${value}= | Run Keyword And Ignore Error -| | ... | Variable Should Exist | ${dut2_if1} -| | Run Keyword If | '${if1_status}' == 'PASS' -| | ... | VPP Enslave Physical Interface | ${dut2} | ${dut2_if1} -| | ... | ${dut2_eth_bond_if1} -| | ... | ELSE -| | ... | VPP Enslave Physical Interface | ${dut2} | ${dut2_if1_1} -| | ... | ${dut2_eth_bond_if1} -| | Run Keyword Unless | '${if2_status}' == 'PASS' -| | ... | VPP Enslave Physical Interface | ${dut2} | ${dut2_if1_2} -| | ... | ${dut2_eth_bond_if1} +| | FOR | ${pf} | IN RANGE | 1 | ${nic_pfs} + 1 +| | | ${_even}= | Evaluate | ${pf} % 2 +| | | Run Keyword If | ${even} +| | | ... | VPP Enslave Physical Interface +| | | ... | ${dut2} | ${DUT2_${int}${pf}}[0] | ${dut2_eth_bond_if1} +| | END | | VPP Show Bond Data On All Nodes | ${nodes} | verbose=${TRUE} | | Initialize VLAN dot1q sub-interfaces in circular topology -| | ... | ${dut1} | ${dut1_eth_bond_if1} | ${dut2} | ${dut2_eth_bond_if1} -| | ... | ${subid} +| | ... | ${dut1} | ${dut1_eth_bond_if1} +| | ... | ${dut2} | ${dut2_eth_bond_if1} | ${subid} | | Configure L2 tag rewrite method on interfaces -| | ... | ${dut1} | ${subif_index_1} | ${dut2} | ${subif_index_2} -| | ... | ${tag_rewrite} +| | ... | ${dut1} | ${subif_index_1} +| | ... | ${dut2} | ${subif_index_2} | ${tag_rewrite} | | Configure vhost interfaces | ${dut1} | | ... | /var/run/vpp/sock-1-${bd_id1} | /var/run/vpp/sock-1-${bd_id2} -| | Add interface to bridge domain | ${dut1} | ${dut1_if1} | ${bd_id1} -| | Add interface to bridge domain | ${dut1} | ${vhost_if1} | ${bd_id1} -| | Add interface to bridge domain | ${dut1} | ${vhost_if2} | ${bd_id2} -| | Add interface to bridge domain | ${dut1} | ${subif_index_1} | ${bd_id2} +| | Add interface to bridge domain +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${bd_id1} +| | Add interface to bridge domain +| | ... | ${dut1} | ${vhost_if1} | ${bd_id1} +| | Add interface to bridge domain +| | ... | ${dut1} | ${vhost_if2} | ${bd_id2} +| | Add interface to bridge domain +| | ... | ${dut1} | ${subif_index_1} | ${bd_id2} | | Configure vhost interfaces | ${dut2} | | ... | /var/run/vpp/sock-1-${bd_id1} | /var/run/vpp/sock-1-${bd_id2} -| | Add interface to bridge domain | ${dut2} | ${subif_index_2} | ${bd_id1} -| | Add interface to bridge domain | ${dut2} | ${vhost_if1} | ${bd_id1} -| | Add interface to bridge domain | ${dut2} | ${vhost_if2} | ${bd_id2} -| | Add interface to bridge domain | ${dut2} | ${dut2_if2} | ${bd_id2} +| | Add interface to bridge domain +| | ... | ${dut2} | ${subif_index_2} | ${bd_id1} +| | Add interface to bridge domain +| | ... | ${dut2} | ${vhost_if1} | ${bd_id1} +| | Add interface to bridge domain +| | ... | ${dut2} | ${vhost_if2} | ${bd_id2} +| | Add interface to bridge domain +| | ... | ${dut2} | ${DUT2_${int}2}[0] | ${bd_id2} | Initialize L2 Bridge Domain with memif pairs on DUT node | | [Documentation] @@ -530,12 +543,11 @@ | | ... | ELSE | Set Variable | ${1} | | ${bd_id1}= | Evaluate | ${nf_nodes} * (${nf_chain} - 1) + ${nf_chain} | | ${bd_id2}= | Evaluate | ${nf_nodes} * ${nf_chain} + ${nf_chain} -| | ${dut_str}= | Convert To Lowercase | ${dut} | | Add interface to bridge domain -| | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_${nf_chain}_1} +| | ... | ${nodes['${dut}']} | ${${dut}_${int}1_${nf_chain}}[0] | | ... | ${bd_id1} | | Add interface to bridge domain -| | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_${nf_chain}_2} +| | ... | ${nodes['${dut}']} | ${${dut}_${int}2_${nf_chain}}[0] | | ... | ${bd_id2} | | FOR | ${nf_node} | IN RANGE | 1 | ${nf_nodes}+1 | | | ${nf_id}= | Evaluate | (${nf_chain} - ${1}) * ${nf_nodes} + ${nf_node} @@ -629,12 +641,11 @@ | | ${bd_id1}= | Evaluate | ${nf_nodes} * (${nf_chain} - 1) + ${nf_chain} | | ${bd_id2}= | Evaluate | ${nf_nodes} * ${nf_chain} + ${nf_chain} | | FOR | ${dut} | IN | @{duts} -| | | ${dut_str}= | Convert To Lowercase | ${dut} | | | Add interface to bridge domain -| | | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_${nf_chain}_1} +| | | ... | ${nodes['${dut}']} | ${${dut}_${int}1_${nf_chain}}[0] | | | ... | ${bd_id1} | | | Add interface to bridge domain -| | | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_${nf_chain}_2} +| | | ... | ${nodes['${dut}']} | ${${dut}_${int}2_${nf_chain}}[0] | | | ... | ${bd_id2} | | | ${nf_id_frst}= | Evaluate | (${nf_chain}-${1}) * ${nf_nodes} + ${1} | | | ${nf_id_last}= | Evaluate | (${nf_chain}-${1}) * ${nf_nodes} + ${nf_nodes} @@ -712,12 +723,14 @@ | | | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | Initialize VLAN dot1q sub-interfaces in circular topology -| | ... | ${dut1} | ${dut1_if2} | ${dut2} | ${dut2_if1} | ${subid} +| | ... | ${dut1} | ${DUT1_${int}2}[0] +| | ... | ${dut2} | ${DUT2_${int}1}[0] | SUB_ID=${subid} | | ... | ELSE | Initialize VLAN dot1q sub-interfaces in circular topology -| | ... | ${dut1} | ${dut1_if2} | SUB_ID=${subid} +| | ... | ${dut1} | ${DUT1_${int}2}[0] | SUB_ID=${subid} | | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | Configure L2 tag rewrite method on interfaces | ${dut1} -| | ... | ${subif_index_1} | ${dut2} | ${subif_index_2} | ${tag_rewrite} +| | ... | Configure L2 tag rewrite method on interfaces +| | ... | ${dut1} | ${subif_index_1} +| | ... | ${dut2} | ${subif_index_2} | TAG_REWRITE_METHOD=${tag_rewrite} | | ... | ELSE | Configure L2 tag rewrite method on interfaces | | ... | ${dut1} | ${subif_index_1} | TAG_REWRITE_METHOD=${tag_rewrite} | | @@ -729,10 +742,14 @@ | | Set up memif interfaces on DUT node | ${dut1} | ${sock1} | ${sock2} | | ... | ${number} | ${memif_if1_name} | ${memif_if2_name} | ${rxq_count_int} | | ... | ${rxq_count_int} -| | Add interface to bridge domain | ${dut1} | ${dut1_if1} | ${bd_id1} -| | Add interface to bridge domain | ${dut1} | ${${memif_if1_name}} | ${bd_id1} -| | Add interface to bridge domain | ${dut1} | ${${memif_if2_name}} | ${bd_id2} -| | Add interface to bridge domain | ${dut1} | ${subif_index_1} | ${bd_id2} +| | Add interface to bridge domain +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${bd_id1} +| | Add interface to bridge domain +| | ... | ${dut1} | ${${memif_if1_name}} | ${bd_id1} +| | Add interface to bridge domain +| | ... | ${dut1} | ${${memif_if2_name}} | ${bd_id2} +| | Add interface to bridge domain +| | ... | ${dut1} | ${subif_index_1} | ${bd_id2} | | ${sock1}= | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | Set Variable | memif-DUT2_CNF | | ${sock2}= | Run Keyword If | '${dut2_status}' == 'PASS' @@ -746,16 +763,17 @@ | | ... | ${number} | ${memif_if1_name} | ${memif_if2_name} | ${rxq_count_int} | | ... | ${rxq_count_int} | | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | Add interface to bridge domain | ${dut2} | ${subif_index_2} -| | ... | ${bd_id1} +| | ... | Add interface to bridge domain +| | ... | ${dut2} | ${subif_index_2} | ${bd_id1} | | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | Add interface to bridge domain | ${dut2} | ${${memif_if1_name}} -| | ... | ${bd_id1} +| | ... | Add interface to bridge domain +| | ... | ${dut2} | ${${memif_if1_name}} | ${bd_id1} | | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | Add interface to bridge domain | ${dut2} | ${${memif_if2_name}} -| | ... | ${bd_id2} +| | ... | Add interface to bridge domain +| | ... | ${dut2} | ${${memif_if2_name}} | ${bd_id2} | | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | Add interface to bridge domain | ${dut2} | ${dut2_if2} | ${bd_id2} +| | ... | Add interface to bridge domain +| | ... | ${dut2} | ${DUT2_${int}2}[0] | ${bd_id2} | | | | Show Memif on all DUTs | ${nodes} | | VPP round robin RX placement on all DUTs | ${nodes} | prefix=memif @@ -787,8 +805,8 @@ | | | Set up single memif interface on DUT node | ${nodes['${dut}']} | ${sock} | | | ... | mid=${number} | sid=${sid} | memif_if=${dut}-memif-${number}-if1 | | | ... | rxq=${rxq_count_int} | txq=${rxq_count_int} -| | | Add interface to bridge domain | ${nodes['${dut}']} | ${${dut}_if1} -| | | ... | ${number} +| | | Add interface to bridge domain +| | | ... | ${nodes['${dut}']} | ${${dut}_${int}1}[]0 | ${number} | | | Add interface to bridge domain | ${nodes['${dut}']} | | | ... | ${${dut}-memif-${number}-if1} | ${number} | | END @@ -803,9 +821,12 @@ | | ... | DUT1 interfaces. | | | | Set interfaces in path up -| | VPP Add L2 Bridge Domain | ${dut1} | ${1} | ${dut1_if1} | ${dut1_if2} -| | Configure L2XC | ${dut2} | ${dut2_if1} | ${dut2_if2} -| | Configure MACIP ACLs | ${dut1} | ${dut1_if1} | ${dut1_if2} +| | VPP Add L2 Bridge Domain +| | ... | ${dut1} | ${1} | ${DUT1_${int}1}[0] | ${DUT1_${int}2}[0] +| | Configure L2XC +| | ... | ${dut2} | ${DUT2_${int}1}[0] | ${DUT2_${int}2}[0] +| | Configure MACIP ACLs +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${DUT1_${int}2}[0] | Initialize L2 bridge domain with IPv4 ACLs on DUT1 in 3-node circular topology | | [Documentation] @@ -815,6 +836,9 @@ | | ... | interfaces. | | | | Set interfaces in path up -| | VPP Add L2 Bridge Domain | ${dut1} | ${1} | ${dut1_if1} | ${dut1_if2} -| | Configure L2XC | ${dut2} | ${dut2_if1} | ${dut2_if2} -| | Configure IPv4 ACLs | ${dut1} | ${dut1_if1} | ${dut1_if2} +| | VPP Add L2 Bridge Domain +| | ... | ${dut1} | ${1} | ${DUT1_${int}1}[0] | ${DUT1_${int}2}[0] +| | Configure L2XC +| | ... | ${dut2} | ${DUT2_${int}1}[0] | ${DUT2_${int}2}[0] +| | Configure IPv4 ACLs +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${DUT1_${int}2}[0] diff --git a/resources/libraries/robot/l2/l2_patch.robot b/resources/libraries/robot/l2/l2_patch.robot index 7d4a527fe3..b1a53ef4e3 100644 --- a/resources/libraries/robot/l2/l2_patch.robot +++ b/resources/libraries/robot/l2/l2_patch.robot @@ -1,4 +1,4 @@ -# Copyright (c) 2018 Cisco and/or its affiliates. +# Copyright (c) 2020 Cisco and/or its affiliates. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at: @@ -21,8 +21,8 @@ | | ... | Setup L2 patch topology by cross connecting two interfaces on | | ... | each DUT. Interfaces are brought up. | | -| | Set interfaces in path up | | FOR | ${dut} | IN | @{duts} | | | VPP Setup Bidirectional L2 patch -| | | ... | ${nodes['${dut}']} | ${${dut}_if1} | ${${dut}_if2} +| | | ... | ${nodes['${dut}']} | ${${dut}_${int}1}[0] | ${${dut}_${int}2}[0] | | END +| | Set interfaces in path up diff --git a/resources/libraries/robot/l2/l2_xconnect.robot b/resources/libraries/robot/l2/l2_xconnect.robot index efe148c400..ea4d6afcef 100644 --- a/resources/libraries/robot/l2/l2_xconnect.robot +++ b/resources/libraries/robot/l2/l2_xconnect.robot @@ -17,11 +17,23 @@ *** Keywords *** | Configure L2XC -| | [Documentation] | Setup Bidirectional Cross Connect on DUTs -| | [Arguments] | ${node} | ${if1} | ${if2} | -| | Set Interface State | ${node} | ${if1} | up -| | Set Interface State | ${node} | ${if2} | up -| | Vpp Setup Bidirectional Cross Connect | ${node} | ${if1} | ${if2} +| | [Documentation] +| | ... | Setup Bidirectional Cross Connect on DUTs +| | +| | ... | *Arguments:* +| | ... | - dut - DUT node. Type: string +| | ... | - if1 - First interface. Type: string +| | ... | - if2 - Second interface. Type: string +| | +| | ... | *Example:* +| | +| | ... | \| Initialize L2 cross connect on node \| DUT1 \| 1 \| +| | +| | [Arguments] | ${dut} | ${if1} | ${if2} +| | +| | Set Interface State | ${dut} | ${if1} | up +| | Set Interface State | ${dut} | ${if2} | up +| | Vpp Setup Bidirectional Cross Connect | ${dut} | ${if1} | ${if2} | Initialize L2 cross connect on node | | [Documentation] @@ -39,10 +51,8 @@ | | [Arguments] | ${dut} | ${count}=${1} | | | | FOR | ${id} | IN RANGE | 1 | ${count} + 1 -| | | ${dut_str}= | Convert To Lowercase | ${dut} | | | VPP Setup Bidirectional Cross Connect | ${nodes['${dut}']} -| | | ... | ${${dut_str}_${prev_layer}_${id}_1} -| | | ... | ${${dut_str}_${prev_layer}_${id}_2} +| | | ... | ${${dut}_${int}1_${id}}[0] | ${${dut}_${int}2_${id}}[0] | | END | Initialize L2 cross connect @@ -63,23 +73,6 @@ | | | Initialize L2 cross connect on node | ${dut} | count=${count} | | END -| Initialize L2 xconnect in 2-node circular topology -| | [Documentation] -| | ... | Setup L2 xconnect topology by cross connecting two interfaces on -| | ... | each DUT. Interfaces are brought up. -| | -| | Set interfaces in path up -| | VPP Setup Bidirectional Cross Connect | ${dut1} | ${dut1_if1} | ${dut1_if2} - -| Initialize L2 xconnect in 3-node circular topology -| | [Documentation] -| | ... | Setup L2 xconnect topology by cross connecting two interfaces on -| | ... | each DUT. Interfaces are brought up. -| | ... | -| | Set interfaces in path up -| | VPP Setup Bidirectional Cross Connect | ${dut1} | ${dut1_if1} | ${dut1_if2} -| | VPP Setup Bidirectional Cross Connect | ${dut2} | ${dut2_if1} | ${dut2_if2} - | Initialize L2 xconnect with VXLANoIPv4 in 3-node circular topology | | [Documentation] | | ... | Setup L2 xconnect topology with VXLANoIPv4 by cross connecting @@ -89,16 +82,22 @@ | | ... | interfaces. | | | | Set interfaces in path up -| | VPP Interface Set IP Address | ${dut1} | ${dut1_if2} | 172.16.0.1 | 24 -| | VPP Interface Set IP Address | ${dut2} | ${dut2_if1} | 172.16.0.2 | 24 -| | VPP Add IP Neighbor | ${dut1} | ${dut1_if2} | 172.16.0.2 | ${dut2_if1_mac} -| | VPP Add IP Neighbor | ${dut2} | ${dut2_if1} | 172.16.0.1 | ${dut1_if2_mac} -| | ${dut1s_vxlan}= | Create VXLAN interface | ${dut1} | 24 -| | ... | 172.16.0.1 | 172.16.0.2 -| | Configure L2XC | ${dut1} | ${dut1_if1} | ${dut1s_vxlan} -| | ${dut2s_vxlan}= | Create VXLAN interface | ${dut2} | 24 -| | ... | 172.16.0.2 | 172.16.0.1 -| | Configure L2XC | ${dut2} | ${dut2_if2} | ${dut2s_vxlan} +| | VPP Interface Set IP Address +| | ... | ${dut1} | ${DUT1_${int}2}[0] | 172.16.0.1 | 24 +| | VPP Interface Set IP Address +| | ... | ${dut2} | ${DUT2_${int}1}[0] | 172.16.0.2 | 24 +| | VPP Add IP Neighbor +| | ... | ${dut1} | ${DUT1_${int}2}[0] | 172.16.0.2 | ${DUT2_${int}1_mac}[0] +| | VPP Add IP Neighbor +| | ... | ${dut2} | ${DUT2_${int}1}[0] | 172.16.0.1 | ${DUT1_${int}2_mac}[0] +| | ${dut1s_vxlan}= | Create VXLAN interface +| | ... | ${dut1} | 24 | 172.16.0.1 | 172.16.0.2 +| | Configure L2XC +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${dut1s_vxlan} +| | ${dut2s_vxlan}= | Create VXLAN interface +| | ... | ${dut2} | 24 | 172.16.0.2 | 172.16.0.1 +| | Configure L2XC +| | ... | ${dut2} | ${DUT2_${int}2}[0] | ${dut2s_vxlan} | Initialize L2 xconnect with Vhost-User on node | | [Documentation] @@ -128,12 +127,14 @@ | | | Configure vhost interfaces | ${nodes['${dut}']} | | | ... | ${sock1} | ${sock2} | ${dut}-vhost-${number}-if1 | | | ... | ${dut}-vhost-${number}-if2 -| | | ${dut_xconnect_if1}= | Set Variable If | ${number}==1 | ${${dut}_if1} +| | | ${dut_xconnect_if1}= | Set Variable If | ${number}==1 +| | | ... | ${${dut}_${int}1}[0] | | | ... | ${${dut}-vhost-${prev_index}-if2} | | | Configure L2XC | ${nodes['${dut}']} | ${dut_xconnect_if1} | | | ... | ${${dut}-vhost-${number}-if1} | | | Run Keyword If | ${number}==${nf_nodes} | Configure L2XC -| | | ... | ${nodes['${dut}']} | ${${dut}-vhost-${number}-if2} | ${${dut}_if2} +| | | ... | ${nodes['${dut}']} | ${${dut}-vhost-${number}-if2} +| | | ... | ${${dut}_${int}2}[0] | | END | Initialize L2 xconnect with Vhost-User @@ -180,27 +181,29 @@ | | | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | Initialize VLAN dot1q sub-interfaces in circular topology -| | ... | ${dut1} | ${dut1_if2} | ${dut2} | ${dut2_if1} | ${subid} +| | ... | ${dut1} | ${DUT1_${int}2}[0] +| | ... | ${dut2} | ${DUT2_${int}1}[0] | SUB_ID=${subid} | | ... | ELSE | Initialize VLAN dot1q sub-interfaces in circular topology -| | ... | ${dut1} | ${dut1_if2} | SUB_ID=${subid} +| | ... | ${dut1} | ${DUT1_${int}2}[0] | SUB_ID=${subid} | | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | Configure L2 tag rewrite method on interfaces | ${dut1} -| | ... | ${subif_index_1} | ${dut2} | ${subif_index_2} | ${tag_rewrite} +| | ... | Configure L2 tag rewrite method on interfaces +| | ... | ${dut1} | ${subif_index_1} +| | ... | ${dut2} | ${subif_index_2} | TAG_REWRITE_METHOD=${tag_rewrite} | | ... | ELSE | Configure L2 tag rewrite method on interfaces | | ... | ${dut1} | ${subif_index_1} | TAG_REWRITE_METHOD=${tag_rewrite} -| | | | Configure vhost interfaces | | ... | ${dut1} | /run/vpp/sock-1-1 | /run/vpp/sock-1-2 -| | Configure L2XC | ${dut1} | ${dut1_if1} | ${vhost_if1} -| | Configure L2XC | ${dut1} | ${subif_index_1} | ${vhost_if2} -| | +| | Configure L2XC +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${vhost_if1} +| | Configure L2XC +| | ... | ${dut1} | ${subif_index_1} | ${vhost_if2} | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | Configure vhost interfaces | | ... | ${dut2} | /run/vpp/sock-1-1 | /run/vpp/sock-1-2 | | Run Keyword If | '${dut2_status}' == 'PASS' | | ... | Configure L2XC | ${dut2} | ${subif_index_2} | ${vhost_if1} | | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | Configure L2XC | ${dut2} | ${dut2_if2} | ${vhost_if2} +| | ... | Configure L2XC | ${dut2} | ${DUT2_${int}2}[0] | ${vhost_if2} | Initialize L2 xconnect with Vhost-User and VLAN with VPP link bonding in 3-node circular topology | | [Documentation] @@ -225,51 +228,45 @@ | | [Arguments] | ${subid} | ${tag_rewrite} | ${bond_mode} | ${lb_mode} | | | | Set interfaces in path up -| | ${dut1_eth_bond_if1}= | VPP Create Bond Interface | ${dut1} | ${bond_mode} -| | ... | ${lb_mode} +| | ${dut1_eth_bond_if1}= | VPP Create Bond Interface +| | ... | ${dut1} | ${bond_mode} | ${lb_mode} | | Set Interface State | ${dut1} | ${dut1_eth_bond_if1} | up | | VPP Set interface MTU | ${dut1} | ${dut1_eth_bond_if1} -| | ${if2_status} | ${value}= | Run Keyword And Ignore Error -| | ... | Variable Should Exist | ${dut1_if2} -| | Run Keyword If | '${if2_status}' == 'PASS' -| | ... | VPP Enslave Physical Interface | ${dut1} | ${dut1_if2} -| | ... | ${dut1_eth_bond_if1} -| | ... | ELSE -| | ... | VPP Enslave Physical Interface | ${dut1} | ${dut1_if2_1} -| | ... | ${dut1_eth_bond_if1} -| | Run Keyword Unless | '${if2_status}' == 'PASS' -| | ... | VPP Enslave Physical Interface | ${dut1} | ${dut1_if2_2} -| | ... | ${dut1_eth_bond_if1} -| | ${dut2_eth_bond_if1}= | VPP Create Bond Interface | ${dut2} | ${bond_mode} -| | ... | ${lb_mode} +| | FOR | ${pf} | IN RANGE | 1 | ${nic_pfs} + 1 +| | | ${_even}= | Evaluate | ${pf} % 2 +| | | Run Keyword Unless | ${even} +| | | ... | VPP Enslave Physical Interface +| | | ... | ${dut1} | ${DUT1_${int}${pf}}[0] | ${dut1_eth_bond_if1} +| | END +| | ${dut2_eth_bond_if1}= | VPP Create Bond Interface +| | ... | ${dut2} | ${bond_mode} | ${lb_mode} | | Set Interface State | ${dut2} | ${dut2_eth_bond_if1} | up -| | VPP Set interface MTU | ${dut1} | ${dut1_eth_bond_if1} -| | ${if1_status} | ${value}= | Run Keyword And Ignore Error -| | ... | Variable Should Exist | ${dut2_if1} -| | Run Keyword If | '${if1_status}' == 'PASS' -| | ... | VPP Enslave Physical Interface | ${dut2} | ${dut2_if1} -| | ... | ${dut2_eth_bond_if1} -| | ... | ELSE -| | ... | VPP Enslave Physical Interface | ${dut2} | ${dut2_if1_1} -| | ... | ${dut2_eth_bond_if1} -| | Run Keyword Unless | '${if2_status}' == 'PASS' -| | ... | VPP Enslave Physical Interface | ${dut2} | ${dut2_if1_2} -| | ... | ${dut2_eth_bond_if1} +| | VPP Set interface MTU | ${dut2} | ${dut2_eth_bond_if1} +| | FOR | ${pf} | IN RANGE | 1 | ${nic_pfs} + 1 +| | | ${_even}= | Evaluate | ${pf} % 2 +| | | Run Keyword If | ${even} +| | | ... | VPP Enslave Physical Interface +| | | ... | ${dut2} | ${DUT2_${int}${pf}}[0] | ${dut2_eth_bond_if1} +| | END | | VPP Show Bond Data On All Nodes | ${nodes} | verbose=${TRUE} | | Initialize VLAN dot1q sub-interfaces in circular topology -| | ... | ${dut1} | ${dut1_eth_bond_if1} | ${dut2} | ${dut2_eth_bond_if1} -| | ... | ${subid} +| | ... | ${dut1} | ${dut1_eth_bond_if1} +| | ... | ${dut2} | ${dut2_eth_bond_if1} | ${subid} | | Configure L2 tag rewrite method on interfaces -| | ... | ${dut1} | ${subif_index_1} | ${dut2} | ${subif_index_2} -| | ... | ${tag_rewrite} +| | ... | ${dut1} | ${subif_index_1} +| | ... | ${dut2} | ${subif_index_2} | ${tag_rewrite} | | Configure vhost interfaces | | ... | ${dut1} | /run/vpp/sock-1-1 | /run/vpp/sock-1-2 -| | Configure L2XC | ${dut1} | ${dut1_if1} | ${vhost_if1} -| | Configure L2XC | ${dut1} | ${subif_index_1} | ${vhost_if2} +| | Configure L2XC +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${vhost_if1} +| | Configure L2XC +| | ... | ${dut1} | ${subif_index_1} | ${vhost_if2} | | Configure vhost interfaces | | ... | ${dut2} | /run/vpp/sock-1-1 | /run/vpp/sock-1-2 -| | Configure L2XC | ${dut2} | ${subif_index_2} | ${vhost_if1} -| | Configure L2XC | ${dut2} | ${dut2_if2} | ${vhost_if2} +| | Configure L2XC +| | ... | ${dut2} | ${subif_index_2} | ${vhost_if1} +| | Configure L2XC +| | ... | ${dut2} | ${DUT2_${int}2}[0] | ${vhost_if2} | Initialize L2 xconnect with memif pairs on DUT node | | [Documentation] @@ -302,12 +299,13 @@ | | | Set up memif interfaces on DUT node | ${nodes['${dut}']} | | | ... | ${sock1} | ${sock2} | ${number} | ${dut}-memif-${number}-if1 | | | ... | ${dut}-memif-${number}-if2 | ${rxq_count_int} | ${rxq_count_int} -| | | ${xconnect_if1}= | Set Variable If | ${number}==1 | ${${dut}_if1} -| | | ... | ${${dut}-memif-${prev_index}-if2} +| | | ${xconnect_if1}= | Set Variable If | ${number}==1 +| | | ... | ${${dut}_${int}1}[0] | ${${dut}-memif-${prev_index}-if2} | | | Configure L2XC | ${nodes['${dut}']} | ${xconnect_if1} | | | ... | ${${dut}-memif-${number}-if1} | | | Run Keyword If | ${number}==${count} | Configure L2XC -| | | ... | ${nodes['${dut}']} | ${${dut}-memif-${number}-if2} | ${${dut}_if2} +| | | ... | ${nodes['${dut}']} | ${${dut}-memif-${number}-if2} +| | | ... | ${${dut}_${int}2}[0] | | END | Initialize L2 xconnect with memif pairs @@ -331,37 +329,3 @@ | | Set interfaces in path up | | Show Memif on all DUTs | ${nodes} | | VPP round robin RX placement on all DUTs | ${nodes} | prefix=memif - -| Initialize L2 xconnect for single memif -| | [Documentation] -| | ... | Create single Memif interface on all defined VPP nodes. Cross -| | ... | connect Memif interface with one physical interface. -| | -| | ... | *Arguments:* -| | ... | - number - Memif ID. Type: integer -| | -| | ... | *Note:* -| | ... | Socket paths for Memif are defined in following format: -| | ... | - /tmp/memif-DUT1_CNF\${number}-\${sid} -| | -| | ... | KW uses test variable ${rxq_count_int} set by KW Add worker threads -| | ... | and rxqueues to all DUTs -| | -| | ... | *Example:* -| | -| | ... | \| Initialize L2 xconnect for single memif \| 1 \| -| | -| | [Arguments] | ${number}=${1} -| | -| | FOR | ${dut} | IN | @{duts} -| | | ${sock}= | Set Variable | memif-${dut}_CNF -| | | ${sid}= | Evaluate | (${number} * ${2}) - ${1} -| | | Set up single memif interface on DUT node | ${nodes['${dut}']} | ${sock} -| | | ... | mid=${number} | sid=${sid} | memif_if=${dut}-memif-${number}-if1 -| | | ... | rxq=${rxq_count_int} | txq=${rxq_count_int} -| | | Configure L2XC | ${nodes['${dut}']} | ${${dut}_if1} -| | | ... | ${${dut}-memif-${number}-if1} -| | END -| | Set single interfaces in path up -| | Show Memif on all DUTs | ${nodes} -| | VPP round robin RX placement on all DUTs | ${nodes} | prefix=memif diff --git a/resources/libraries/robot/lb/load_balancer.robot b/resources/libraries/robot/lb/load_balancer.robot index a254acd0f8..4c358a47ba 100644 --- a/resources/libraries/robot/lb/load_balancer.robot +++ b/resources/libraries/robot/lb/load_balancer.robot @@ -1,4 +1,4 @@ -# Copyright (c) 2019 Intel and/or its affiliates. +# Copyright (c) 2020 Intel and/or its affiliates. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at: @@ -37,22 +37,24 @@ | | | | ${fib_table}= | Set Variable | ${0} | | Add Fib Table | ${dut1} | ${fib_table} -| | Assign Interface To Fib Table | ${dut1} | ${dut1_if1} | ${fib_table} -| | Assign Interface To Fib Table | ${dut1} | ${dut1_if2} | ${fib_table} -| | -| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1} -| | ... | 192.168.50.72 | 24 -| | VPP Interface Set IP Address | ${dut1} | ${dut1_if2} -| | ... | 192.168.60.73 | 24 -| | -| | Add Ip Neighbors | ${dut1} | ${dut1_if2} | 192.168.60 | ${tg_if2_mac} -| | -| | Vpp Route Add | ${dut1} | 192.168.60.0 | 24 | interface=${dut1_if2} -| | -| | Vpp Lb Conf | ${dut1} | ip4_src_addr=192.168.60.73 | buckets_per_core=${128} -| | Vpp Lb Add Del Vip | ${dut1} | vip_addr=90.1.2.1 | encap=${0} -| | ... | new_len=${1024} -| | Add Lb As Addresses | ${dut1} | 90.1.2.1 | 192.168.60 +| | Assign Interface To Fib Table +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${fib_table} +| | Assign Interface To Fib Table +| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${fib_table} +| | VPP Interface Set IP Address +| | ... | ${dut1} | ${DUT1_${int}1}[0] | 192.168.50.72 | 24 +| | VPP Interface Set IP Address +| | ... | ${dut1} | ${DUT1_${int}2}[0] | 192.168.60.73 | 24 +| | Add Ip Neighbors +| | ... | ${dut1} | ${DUT1_${int}2}[0] | 192.168.60 | ${TG_pf2_mac}[0] +| | Vpp Route Add +| | ... | ${dut1} | 192.168.60.0 | 24 | interface=${DUT1_${int}2}[0] +| | Vpp Lb Conf +| | ... | ${dut1} | ip4_src_addr=192.168.60.73 | buckets_per_core=${128} +| | Vpp Lb Add Del Vip +| | ... | ${dut1} | vip_addr=90.1.2.1 | encap=${0} | new_len=${1024} +| | Add Lb As Addresses +| | ... | ${dut1} | 90.1.2.1 | 192.168.60 | Initialize loadbalancer l3dsr | | [Documentation] @@ -65,22 +67,24 @@ | | | | ${fib_table}= | Set Variable | ${0} | | Add Fib Table | ${dut1} | ${fib_table} -| | Assign Interface To Fib Table | ${dut1} | ${dut1_if1} | ${fib_table} -| | Assign Interface To Fib Table | ${dut1} | ${dut1_if2} | ${fib_table} -| | -| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1} -| | ... | 192.168.50.72 | 24 -| | VPP Interface Set IP Address | ${dut1} | ${dut1_if2} -| | ... | 192.168.60.73 | 24 -| | -| | Add Ip Neighbors | ${dut1} | ${dut1_if2} | 192.168.60 | ${tg_if2_mac} -| | -| | Vpp Route Add | ${dut1} | 192.168.60.0 | 24 | interface=${dut1_if2} -| | -| | Vpp Lb Conf | ${dut1} | ip4_src_addr=192.168.60.73 | buckets_per_core=${128} -| | Vpp Lb Add Del Vip | ${dut1} | vip_addr=90.1.2.1 | encap=${2} | dscp=${7} -| | ... | new_len=${1024} -| | Add Lb As Addresses | ${dut1} | 90.1.2.1 | 192.168.60 +| | Assign Interface To Fib Table +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${fib_table} +| | Assign Interface To Fib Table +| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${fib_table} +| | VPP Interface Set IP Address +| | ... | ${dut1} | ${DUT1_${int}1}[0] | 192.168.50.72 | 24 +| | VPP Interface Set IP Address +| | ... | ${dut1} | ${DUT1_${int}2}[0] | 192.168.60.73 | 24 +| | Add Ip Neighbors +| | ... | ${dut1} | ${DUT1_${int}2}[0] | 192.168.60 | ${TG_pf2_mac}[0] +| | Vpp Route Add +| | ... | ${dut1} | 192.168.60.0 | 24 | interface=${DUT1_${int}2}[0] +| | Vpp Lb Conf +| | ... | ${dut1} | ip4_src_addr=192.168.60.73 | buckets_per_core=${128} +| | Vpp Lb Add Del Vip +| | ... | ${dut1} | vip_addr=90.1.2.1 | encap=${2} | dscp=${7} | new_len=${1024} +| | Add Lb As Addresses +| | ... | ${dut1} | 90.1.2.1 | 192.168.60 | Initialize loadbalancer nat4 | | [Documentation] @@ -93,26 +97,31 @@ | | | | ${fib_table}= | Set Variable | ${0} | | Add Fib Table | ${dut1} | ${fib_table} -| | Assign Interface To Fib Table | ${dut1} | ${dut1_if1} | ${fib_table} -| | Assign Interface To Fib Table | ${dut1} | ${dut1_if2} | ${fib_table} -| | -| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1} -| | ... | 192.168.50.72 | 24 -| | VPP Interface Set IP Address | ${dut1} | ${dut1_if2} -| | ... | 192.168.60.73 | 24 -| | -| | Add Ip Neighbors | ${dut1} | ${dut1_if1} | 192.168.50 | ${tg_if1_mac} -| | Add Ip Neighbors | ${dut1} | ${dut1_if2} | 192.168.60 | ${tg_if2_mac} -| | -| | Vpp Route Add | ${dut1} | 192.168.50.0 | 24 | interface=${dut1_if1} -| | Vpp Route Add | ${dut1} | 192.168.60.0 | 24 | interface=${dut1_if2} -| | -| | Vpp Lb Conf | ${dut1} | ip4_src_addr=192.168.60.73 | buckets_per_core=${128} -| | Vpp Lb Add Del Vip | ${dut1} | vip_addr=90.1.2.1 | encap=${3} +| | Assign Interface To Fib Table +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${fib_table} +| | Assign Interface To Fib Table +| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${fib_table} +| | VPP Interface Set IP Address +| | ... | ${dut1} | ${DUT1_${int}1}[0] | 192.168.50.72 | 24 +| | VPP Interface Set IP Address +| | ... | ${dut1} | ${DUT1_${int}2}[0] | 192.168.60.73 | 24 +| | Add Ip Neighbors +| | ... | ${dut1} | ${DUT1_${int}1}[0] | 192.168.50 | ${TG_pf1_mac}[0] +| | Add Ip Neighbors +| | ... | ${dut1} | ${DUT1_${int}2}[0] | 192.168.60 | ${TG_pf2_mac}[0] +| | Vpp Route Add +| | ... | ${dut1} | 192.168.50.0 | 24 | interface=${DUT1_${int}1}[0] +| | Vpp Route Add +| | ... | ${dut1} | 192.168.60.0 | 24 | interface=${DUT1_${int}2}[0] +| | Vpp Lb Conf +| | ... | ${dut1} | ip4_src_addr=192.168.60.73 | buckets_per_core=${128} +| | Vpp Lb Add Del Vip +| | ... | ${dut1} | vip_addr=90.1.2.1 | encap=${3} | | ... | protocol=${17} | port=${20000} | target_port=${3307} | new_len=${1024} | | Add Lb As Addresses | | ... | ${dut1} | 90.1.2.1 | 192.168.60 | protocol=${17} | port=${20000} -| | Vpp Lb Add Del Intf Nat4 | ${dut1} | interface=${dut1_if2} +| | Vpp Lb Add Del Intf Nat4 +| | ... | ${dut1} | interface=${DUT1_${int}2}[0] | Add Ip Neighbors | | [Documentation] | Add IP neighbors to physical interface on DUT. diff --git a/resources/libraries/robot/overlay/lisp.robot b/resources/libraries/robot/overlay/lisp.robot index f9da0be399..16d04767e9 100644 --- a/resources/libraries/robot/overlay/lisp.robot +++ b/resources/libraries/robot/overlay/lisp.robot @@ -1,4 +1,4 @@ -# Copyright (c) 2019 Cisco and/or its affiliates. +# Copyright (c) 2020 Cisco and/or its affiliates. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at: @@ -29,15 +29,15 @@ | | | | Set interfaces in path up | | VPP Interface Set IP Address -| | ... | ${dut1} | ${dut1_if1} | ${dut_if1_ip4} | ${ip4_plen} +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${dut_if1_ip4} | ${ip4_plen} | | VPP Interface Set IP Address -| | ... | ${dut1} | ${dut1_if2} | ${dut_if2_ip4} | ${ip4_plen} +| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${dut_if2_ip4} | ${ip4_plen} | | VPP Add IP Neighbor -| | ... | ${dut1} | ${dut1_if1} | ${src_ip4} | ${tg_if1_mac} +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${src_ip4} | ${TG_pf1_mac}[0] | | VPP Add IP Neighbor -| | ... | ${dut1} | ${dut1_if2} | ${dst_ip4} | ${tg_if2_mac} +| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${dst_ip4} | ${TG_pf2_mac}[0] | | VPP Add IP Neighbor -| | ... | ${dut1} | ${dut1_if2} | ${tg_if2_ip4} | ${tg_if2_mac} +| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${tg_if2_ip4} | ${TG_pf2_mac}[0] | Configure topology for IPv6 LISP testing | | [Documentation] | Setup topology fo IPv6 LISP testing. @@ -47,15 +47,15 @@ | | | | Set interfaces in path up | | VPP Interface Set IP Address -| | ... | ${dut1} | ${dut1_if1} | ${dut_if1_ip6} | ${ip6_plen} +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${dut_if1_ip6} | ${ip6_plen} | | VPP Interface Set IP Address -| | ... | ${dut1} | ${dut1_if2} | ${dut_if2_ip6} | ${ip6_plen} +| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${dut_if2_ip6} | ${ip6_plen} | | VPP Add IP Neighbor -| | ... | ${dut1} | ${dut1_if1} | ${src_ip6} | ${tg_if1_mac} +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${src_ip6} | ${TG_pf1_mac}[0] | | VPP Add IP Neighbor -| | ... | ${dut1} | ${dut1_if2} | ${dst_ip6} | ${tg_if2_mac} +| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${dst_ip6} | ${TG_pf2_mac}[0] | | VPP Add IP Neighbor -| | ... | ${dut1} | ${dut1_if2} | ${tg_if2_ip6} | ${tg_if2_mac} +| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${tg_if2_ip6} | ${TG_pf2_mac}[0] | Configure LISP in 2-node circular topology | | [Documentation] | Configure LISP topology in 2-node circular topology. @@ -124,15 +124,15 @@ | | | | Set interfaces in path up | | VPP Interface Set IP Address -| | ... | ${dut1} | ${dut1_if1} | ${dut_if1_ip6} | ${ip6_plen} +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${dut_if1_ip6} | ${ip6_plen} | | VPP Interface Set IP Address -| | ... | ${dut1} | ${dut1_if2} | ${dut_if2_ip4} | ${ip4_plen} +| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${dut_if2_ip4} | ${ip4_plen} | | VPP Add IP Neighbor -| | ... | ${dut1} | ${dut1_if1} | ${src_ip6} | ${tg_if1_mac} +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${src_ip6} | ${TG_pf1_mac}[0] | | VPP Add IP Neighbor -| | ... | ${dut1} | ${dut1_if2} | ${dst_ip6} | ${tg_if2_mac} +| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${dst_ip6} | ${TG_pf2_mac}[0] | | VPP Add IP Neighbor -| | ... | ${dut1} | ${dut1_if2} | ${tg_if2_ip4} | ${tg_if2_mac} +| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${tg_if2_ip4} | ${TG_pf2_mac}[0] | Configure topology for IPv4 LISPoIP6 testing | | [Documentation] | Setup topology fo IPv4 LISPoIPV6 testing. @@ -142,12 +142,227 @@ | | | | Set interfaces in path up | | VPP Interface Set IP Address -| | ... | ${dut1} | ${dut1_if1} | ${dut_if1_ip4} | ${ip4_plen} +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${dut_if1_ip4} | ${ip4_plen} | | VPP Interface Set IP Address -| | ... | ${dut1} | ${dut1_if2} | ${dut_if2_ip6} | ${ip6_plen} +| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${dut_if2_ip6} | ${ip6_plen} | | VPP Add IP Neighbor -| | ... | ${dut1} | ${dut1_if1} | ${src_ip4} | ${tg_if1_mac} +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${src_ip4} | ${TG_pf1_mac}[0] | | VPP Add IP Neighbor -| | ... | ${dut1} | ${dut1_if2} | ${dst_ip4} | ${tg_if2_mac} +| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${dst_ip4} | ${TG_pf2_mac}[0] | | VPP Add IP Neighbor -| | ... | ${dut1} | ${dut1_if2} | ${tg_if2_ip6} | ${tg_if2_mac} +| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${tg_if2_ip6} | ${TG_pf2_mac}[0] + +| Initialize LISP IPv4 forwarding in 3-node circular topology +| | [Documentation] | Custom setup of IPv4 addresses on all DUT nodes and TG \ +| | ... | Don`t set route. +| | +| | ... | *Arguments:* +| | ... | - dut1_dut2_address - Ip address from DUT1 to DUT2. Type: string +| | ... | - dut1_tg_address - Ip address from DUT1 to tg. Type: string +| | ... | - dut2_dut1_address - Ip address from DUT2 to DUT1. Type: string +| | ... | - dut1_tg_address - Ip address from DUT1 to tg. Type: string +| | ... | - duts_prefix - ip prefix. Type: int +| | +| | ... | *Return:* +| | ... | - No value returned +| | +| | ... | *Example:* +| | ... | \| Initialize LISP IPv4 forwarding in 3-node circular topology \ +| | ... | \| ${dut1_dut2_address} \| ${dut1_tg_address} \ +| | ... | \| ${dut2_dut1_address} \| ${dut2_tg_address} \| ${duts_prefix} \| +| | +| | [Arguments] | ${dut1_dut2_address} | ${dut1_tg_address} +| | ... | ${dut2_dut1_address} | ${dut2_tg_address} | ${duts_prefix} +| | +| | Set interfaces in path up +| | VPP Add IP Neighbor +| | ... | ${dut1} | ${DUT1_${int}1}[0] | 10.10.10.2 | ${TG_pf1_mac}[0] +| | VPP Add IP Neighbor +| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${dut2_dut1_address} +| | ... | ${DUT2_${int}1_mac}[0] +| | VPP Add IP Neighbor +| | ... | ${dut2} | ${DUT2_${int}1}[0] | ${dut1_dut2_address} +| | ... | ${DUT1_${int}2_mac}[0] +| | VPP Add IP Neighbor +| | ... | ${dut2} | ${DUT2_${int}2}[0] | 20.20.20.2 | ${TG_pf2_mac}[0] +| | VPP Interface Set IP Address +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${dut1_tg_address} | ${duts_prefix} +| | VPP Interface Set IP Address +| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${dut1_dut2_address} | ${duts_prefix} +| | VPP Interface Set IP Address +| | ... | ${dut2} | ${DUT2_${int}1}[0] | ${dut2_dut1_address} | ${duts_prefix} +| | VPP Interface Set IP Address +| | ... | ${dut2} | ${DUT2_${int}2}[0] | ${dut2_tg_address} | ${duts_prefix} + +| Initialize LISP GPE IPv4 over IPsec in 3-node circular topology +| | [Documentation] | Setup Lisp GPE IPv4 forwarding over IPsec. +| | +| | ... | *Arguments:* +| | ... | - encr_alg - Encryption algorithm. Type: string +| | ... | - auth_alg - Authentication algorithm. Type: string +| | +| | ... | *Return:* +| | ... | - No value returned +| | +| | ... | *Example:* +| | ... | \| Initialize LISP GPE IPv4 over IPsec in 3-node circular topology\ +| | ... | \| ${encr_alg} \| ${auth_alg} +| | +| | [Arguments] | ${encr_alg} | ${auth_alg} +| | +| | Generate keys for IPSec | ${encr_alg} | ${auth_alg} +| | Initialize LISP IPv4 forwarding in 3-node circular topology +| | ... | ${dut1_to_dut2_ip4} | ${dut1_to_tg_ip4} | ${dut2_to_dut1_ip4} +| | ... | ${dut2_to_tg_ip4} | ${prefix4} +| | Configure LISP GPE topology in 3-node circular topology +| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${NONE} +| | ... | ${dut2} | ${DUT2_${int}1}[0] | ${NONE} +| | ... | ${duts_locator_set} | ${dut1_ip4_eid} | ${dut2_ip4_eid} +| | ... | ${dut1_ip4_static_adjacency} | ${dut2_ip4_static_adjacency} +| | Configure manual keyed connection for IPSec +| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${encr_alg} | ${encr_key} +| | ... | ${auth_alg} | ${auth_key} | ${dut1_spi} | ${dut2_spi} +| | ... | ${dut1_to_dut2_ip4} | ${dut2_to_dut1_ip4} +| | Configure manual keyed connection for IPSec +| | ... | ${dut2} | ${DUT2_${int}1}[0] | ${encr_alg} | ${encr_key} +| | ... | ${auth_alg} | ${auth_key} | ${dut2_spi} | ${dut1_spi} +| | ... | ${dut2_to_dut1_ip4} | ${dut1_to_dut2_ip4} + +| Initialize LISP IPv6 forwarding in 3-node circular topology +| | [Documentation] | Custom setup of IPv6 topology on all DUT nodes \ +| | ... | Don`t set route. +| | +| | ... | *Arguments:* +| | ... | - dut1_dut2_address - Ip address from DUT1 to DUT2. Type: string +| | ... | - dut1_tg_address - Ip address from DUT1 to tg. Type: string +| | ... | - dut2_dut1_address - Ip address from DUT2 to DUT1. Type: string +| | ... | - dut1_tg_address - Ip address from DUT1 to tg. Type: string +| | ... | - duts_prefix - ip prefix. Type: int +| | +| | ... | *Return:* +| | ... | - No value returned +| | +| | ... | *Example:* +| | ... | \| Initialize LISP IPv6 forwarding in 3-node circular topology \ +| | ... | \| ${dut1_dut2_address} \| ${dut1_tg_address} \ +| | ... | \| ${dut2_dut1_address} \| ${dut2_tg_address} \| ${duts_prefix} \| +| | +| | [Arguments] | ${dut1_dut2_address} | ${dut1_tg_address} +| | ... | ${dut2_dut1_address} | ${dut2_tg_address} | ${prefix} +| | +| | Set interfaces in path up +| | VPP Interface Set IP Address +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${dut1_tg_address} | ${prefix} +| | VPP Interface Set IP Address +| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${dut1_dut2_address} | ${prefix} +| | VPP Interface Set IP Address +| | ... | ${dut2} | ${DUT2_${int}1}[0] | ${dut2_dut1_address} | ${prefix} +| | VPP Interface Set IP Address +| | ... | ${dut2} | ${DUT2_${int}2}[0] | ${dut2_tg_address} | ${prefix} +| | Vpp All Ra Suppress Link Layer | ${nodes} +| | VPP Add IP Neighbor +| | ... | ${dut1} | ${DUT1_${int}1}[0] | 2001:1::2 | ${TG_pf1_mac}[0] +| | VPP Add IP Neighbor +| | ... | ${dut2} | ${DUT2_${int}1}[0] | 2001:2::2 | ${TG_pf2_mac}[0] +| | VPP Add IP Neighbor +| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${dut2_dut1_address} +| | ... | ${DUT2_${int}1_mac}[0] +| | VPP Add IP Neighbor +| | ... | ${dut2} | ${DUT2_${int}1}[0] | ${dut1_dut2_address} +| | ... | ${DUT1_${int}2_mac}[0] + +| Initialize LISP IPv4 over IPv6 forwarding in 3-node circular topology +| | [Documentation] | Custom setup of IPv4 over IPv6 topology on all DUT nodes \ +| | ... | Don`t set route. +| | +| | ... | *Arguments:* +| | ... | - dut1_dut2_ip6_address - IPv6 address from DUT1 to DUT2. +| | ... | Type: string +| | ... | - dut1_tg_ip4_address - IPv4 address from DUT1 to tg. Type: string +| | ... | - dut2_dut1_ip6_address - IPv6 address from DUT2 to DUT1. +| | ... | Type: string +| | ... | - dut1_tg_ip4_address - IPv4 address from DUT1 to tg. Type: string +| | ... | - prefix4 - IPv4 prefix. Type: int +| | ... | - prefix6 - IPv6 prefix. Type: int +| | +| | ... | *Return:* +| | ... | - No value returned +| | +| | ... | *Example:* +| | ... | \| Lisp IPv4 over IPv6 forwarding initialized in a 3-node circular \ +| | ... | topology \| ${dut1_dut2_ip6_address} \| ${dut1_tg_ip4_address} \ +| | ... | \| ${dut2_dut1_ip6_address} \| ${dut2_tg_ip4_address} \ +| | ... | \| ${prefix4} \| ${prefix6} \| +| | +| | [Arguments] | ${dut1_dut2_ip6_address} | ${dut1_tg_ip4_address} +| | ... | ${dut2_dut1_ip6_address} | ${dut2_tg_ip4_address} +| | ... | ${prefix4} | ${prefix6} +| | +| | Set interfaces in path up +| | VPP Interface Set IP Address +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${dut1_tg_ip4_address} | ${prefix4} +| | VPP Interface Set IP Address +| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${dut1_dut2_ip6_address} | ${prefix6} +| | VPP Interface Set IP Address +| | ... | ${dut2} | ${DUT2_${int}1}[0] | ${dut2_dut1_ip6_address} | ${prefix6} +| | VPP Interface Set IP Address +| | ... | ${dut2} | ${DUT2_${int}2}[0] | ${dut2_tg_ip4_address} | ${prefix4} +| | Vpp All Ra Suppress Link Layer | ${nodes} +| | VPP Add IP Neighbor +| | ... | ${dut1} | ${DUT1_${int}1}[0] | 10.10.10.2 | ${TG_pf1_mac}[0] +| | VPP Add IP Neighbor +| | ... | ${dut2} | ${DUT2_${int}2}[0] | 20.20.20.2 | ${TG_pf2_mac}[0] +| | VPP Add IP Neighbor +| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${dut2_dut1_ip6_address} +| | ... | ${DUT2_${int}1_mac}[0] +| | VPP Add IP Neighbor +| | ... | ${dut2} | ${DUT2_${int}1}[0] | ${dut1_dut2_ip6_address} +| | ... | ${DUT1_${int}2_mac}[0] + +| Initialize LISP IPv6 over IPv4 forwarding in 3-node circular topology +| | [Documentation] | Custom setup of IPv4 over IPv6 topology on all DUT nodes \ +| | ... | Don`t set route. +| | +| | ... | *Arguments:* +| | ... | - dut1_dut2_ip4_address - IPv4 address from DUT1 to DUT2. +| | ... | Type: string +| | ... | - dut1_tg_ip6_address - IPv6 address from DUT1 to tg. Type: string +| | ... | - dut2_dut1_ip4_address - IPv4 address from DUT2 to DUT1. +| | ... | Type: string +| | ... | - dut1_tg_ip6_address - IPv6 address from DUT1 to tg. Type: string +| | ... | - prefix4 - IPv4 prefix. Type: int +| | ... | - prefix6 - IPv6 prefix. Type: int +| | +| | ... | *Return:* +| | ... | - No value returned +| | +| | ... | *Example:* +| | ... | \| Lisp IPv6 over IPv4 forwarding initialized in a 3-node circular \ +| | ... | topology \| ${dut1_dut2_ip4_address} \| ${dut1_tg_ip6_address} \ +| | ... | \| ${dut2_dut1_ip4_address} \| ${dut2_tg_ip6_address} \ +| | ... | \| ${prefix6} \| ${prefix4} \| +| | +| | [Arguments] | ${dut1_dut2_ip4_address} | ${dut1_tg_ip6_address} +| | ... | ${dut2_dut1_ip4_address} | ${dut2_tg_ip6_address} +| | ... | ${prefix6} | ${prefix4} +| | +| | Set interfaces in path up +| | VPP Interface Set IP Address +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${dut1_tg_ip6_address} | ${prefix6} +| | VPP Interface Set IP Address +| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${dut1_dut2_ip4_address} | ${prefix4} +| | VPP Interface Set IP Address +| | ... | ${dut2} | ${DUT2_${int}1}[0] | ${dut2_dut1_ip4_address} | ${prefix4} +| | VPP Interface Set IP Address +| | ... | ${dut2} | ${DUT2_${int}2}[0] | ${dut2_tg_ip6_address} | ${prefix6} +| | Vpp All Ra Suppress Link Layer | ${nodes} +| | VPP Add IP Neighbor +| | ... | ${dut1} | ${DUT1_${int}1}[0] | 2001:1::2 | ${TG_pf1_mac}[0] +| | VPP Add IP Neighbor +| | ... | ${dut2} | ${DUT2_${int}2}[0] | 2001:2::2 | ${TG_pf2_mac}[0] +| | VPP Add IP Neighbor +| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${dut2_dut1_ip4_address} +| | ... | ${DUT2_${int}1_mac}[0] +| | VPP Add IP Neighbor +| | ... | ${dut2} | ${DUT2_${int}1}[0] | ${dut1_dut2_ip4_address} +| | ... | ${DUT1_${int}2_mac}[0] diff --git a/resources/libraries/robot/overlay/srv6.robot b/resources/libraries/robot/overlay/srv6.robot index 8ac0343f9a..6c73ad4bdf 100644 --- a/resources/libraries/robot/overlay/srv6.robot +++ b/resources/libraries/robot/overlay/srv6.robot @@ -1,4 +1,4 @@ -# Copyright (c) 2018 Cisco and/or its affiliates. +# Copyright (c) 2020 Cisco and/or its affiliates. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at: @@ -189,7 +189,6 @@ | | | | [Arguments] | ${nodes} | | -| | ${duts}= | Get Matches | ${nodes} | DUT* | | FOR | ${dut} | IN | @{duts} | | | Show SR Policies | ${nodes['${dut}']} | | END @@ -206,7 +205,6 @@ | | | | [Arguments] | ${nodes} | | -| | ${duts}= | Get Matches | ${nodes} | DUT* | | FOR | ${dut} | IN | @{duts} | | | Show SR Steering Policies | ${nodes['${dut}']} | | END @@ -223,7 +221,6 @@ | | | | [Arguments] | ${nodes} | | -| | ${duts}= | Get Matches | ${nodes} | DUT* | | FOR | ${dut} | IN | @{duts} | | | Show SR LocalSIDs | ${nodes['${dut}']} | | END @@ -237,25 +234,29 @@ | | ... | on both DUT nodes. | | | | VPP Interface Set IP Address -| | ... | ${dut1} | ${dut1_if1} | ${dut1_if1_ip6} | ${prefix} +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${dut1_if1_ip6} | ${prefix} | | VPP Interface Set IP Address -| | ... | ${dut1} | ${dut1_if2} | ${dut1_if2_ip6} | ${prefix} +| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${dut1_if2_ip6} | ${prefix} | | VPP Interface Set IP Address -| | ... | ${dut2} | ${dut2_if1} | ${dut2_if1_ip6} | ${prefix} +| | ... | ${dut2} | ${DUT2_${int}1}[0] | ${dut2_if1_ip6} | ${prefix} | | VPP Interface Set IP Address -| | ... | ${dut2} | ${dut2_if2} | ${dut2_if2_ip6} | ${prefix} +| | ... | ${dut2} | ${DUT2_${int}2}[0] | ${dut2_if2_ip6} | ${prefix} | | Vpp All Ra Suppress Link Layer | ${nodes} | | FOR | ${number} | IN RANGE | 2 | ${dst_addr_nr}+2 | | | ${hexa_nr}= | Convert To Hex | ${number} | | | VPP Add IP Neighbor | ${dut1} -| | | ... | ${dut1_if1} | ${tg_if1_ip6_subnet}${hexa_nr} | ${tg_if1_mac} +| | | ... | ${DUT1_${int}1}[0] | ${tg_if1_ip6_subnet}${hexa_nr} +| | | ... | ${TG_pf1_mac}[0] | | | VPP Add IP Neighbor | ${dut2} -| | | ... | ${dut2_if2} | ${tg_if2_ip6_subnet}${hexa_nr} | ${tg_if2_mac} +| | | ... | ${DUT2_${int}2}[0] | ${tg_if2_ip6_subnet}${hexa_nr} +| | | ... | ${TG_pf2_mac}[0] | | END | | VPP Add IP Neighbor -| | ... | ${dut1} | ${dut1_if2} | ${dut2_if1_ip6} | ${dut2_if1_mac} +| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${dut2_if1_ip6} +| | ... | ${DUT2_${int}1_mac}[0] | | VPP Add IP Neighbor -| | ... | ${dut2} | ${dut2_if1} | ${dut1_if2_ip6} | ${dut1_if2_mac} +| | ... | ${dut2} | ${DUT2_${int}1}[0] | ${dut1_if2_ip6} +| | ... | ${DUT1_${int}2_mac}[0] | | ${sid1}= | Set Variable If | | ... | "${n}" == "1" | ${dut2_sid1} | | ... | "${n}" == "2" | ${dut2_sid1_1} @@ -263,9 +264,9 @@ | | ... | "${n}" == "1" | ${dut1_sid2} | | ... | "${n}" == "2" | ${dut1_sid2_1} | | Vpp Route Add | ${dut1} | ${sid1} | ${sid_prefix} | gateway=${dut2_if1_ip6} -| | ... | interface=${dut1_if2} +| | ... | interface=${DUT1_${int}2}[0] | | Vpp Route Add | ${dut2} | ${sid2} | ${sid_prefix} | gateway=${dut1_if2_ip6} -| | ... | interface=${dut2_if1} +| | ... | interface=${DUT2_${int}1}[0] # Configure SRv6 for direction0 | | Set SR Encaps Source Address on DUT | ${dut1} | ${dut1_sid1} | | @{sid_list_dir0}= | Run Keyword If | "${n}" == "1" @@ -278,15 +279,15 @@ | | ... | ip_addr=${tg_if2_ip6_subnet} | prefix=${sid_prefix} | | Run Keyword If | "${n}" == "1" | | ... | Configure SR LocalSID on DUT | ${dut2} | ${dut2_sid1} | end.dx6 -| | ... | interface=${dut2_if2} | next_hop=${tg_if2_ip6_subnet}2 +| | ... | interface=${DUT2_${int}2}[0] | next_hop=${tg_if2_ip6_subnet}2 | | Run Keyword If | "${n}" == "2" | | ... | Configure SR LocalSID on DUT | ${dut2} | ${dut2_sid1_1} | end | | Run Keyword If | "${n}" == "2" and "${prepos}" != "without" | | ... | Configure SR LocalSID on DUT | ${dut2} | ${dut2_sid1_2} | end.dx6 -| | ... | interface=${dut2_if2} | next_hop=${tg_if2_ip6_subnet}2 +| | ... | interface=${DUT2_${int}2}[0] | next_hop=${tg_if2_ip6_subnet}2 | | Run Keyword If | "${n}" == "2" and "${prepos}" == "without" | | ... | Vpp Route Add | ${dut2} | ${dut2_sid1_2} | ${sid_prefix} -| | ... | gateway=${tg_if2_ip6_subnet}2 | interface=${dut2_if2} +| | ... | gateway=${tg_if2_ip6_subnet}2 | interface=${DUT2_${int}2}[0] # Configure SRv6 for direction1 | | Set SR Encaps Source Address on DUT | ${dut2} | ${dut2_sid2} | | @{sid_list_dir1}= | Run Keyword If | "${n}" == "1" @@ -299,15 +300,15 @@ | | ... | ip_addr=${tg_if1_ip6_subnet} | prefix=${sid_prefix} | | Run Keyword If | "${n}" == "1" | | ... | Configure SR LocalSID on DUT | ${dut1} | ${dut1_sid2} | end.dx6 -| | ... | interface=${dut1_if1} | next_hop=${tg_if1_ip6_subnet}2 +| | ... | interface=${DUT1_${int}1}[0] | next_hop=${tg_if1_ip6_subnet}2 | | Run Keyword If | "${n}" == "2" | | ... | Configure SR LocalSID on DUT | ${dut1} | ${dut1_sid2_1} | end | | Run Keyword If | "${n}" == "2" and "${prepos}" != "without" | | ... | Configure SR LocalSID on DUT | ${dut1} | ${dut1_sid2_2} | end.dx6 -| | ... | interface=${dut1_if1} | next_hop=${tg_if1_ip6_subnet}2 +| | ... | interface=${DUT1_${int}1}[0] | next_hop=${tg_if1_ip6_subnet}2 | | Run Keyword If | "${n}" == "2" and "${prepos}" == "without" | | ... | Vpp Route Add | ${dut1} | ${dut1_sid2_2} | ${sid_prefix} -| | ... | gateway=${tg_if1_ip6_subnet}2 | interface=${dut1_if1} +| | ... | gateway=${tg_if1_ip6_subnet}2 | interface=${DUT1_${int}1}[0] | | Set interfaces in path up | Initialize IPv6 forwarding over SRv6 with endpoint to SR-unaware Service Function via '${behavior}' behaviour in 3-node circular topology @@ -339,30 +340,34 @@ | | | Show Memif | ${nodes['${dut}']} | | END | | VPP Interface Set IP Address -| | ... | ${dut1} | ${dut1_if1} | ${dut1_if1_ip6} | ${prefix} +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${dut1_if1_ip6} | ${prefix} | | VPP Interface Set IP Address -| | ... | ${dut1} | ${dut1_if2} | ${dut1_if2_ip6} | ${prefix} +| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${dut1_if2_ip6} | ${prefix} | | VPP Interface Set IP Address | ${dut1} | ${dut1-memif-1-if1} | | ... | ${dut1-memif-1-if1_ip6} | ${mem_prefix} | | VPP Interface Set IP Address | ${dut1} | ${dut1-memif-1-if2} | | ... | ${dut1-memif-1-if2_ip6} | ${mem_prefix} | | VPP Interface Set IP Address -| | ... | ${dut2} | ${dut2_if1} | ${dut2_if1_ip6} | ${prefix} +| | ... | ${dut2} | ${DUT2_${int}1}[0] | ${dut2_if1_ip6} | ${prefix} | | VPP Interface Set IP Address -| | ... | ${dut2} | ${dut2_if2} | ${dut2_if2_ip6} | ${prefix} +| | ... | ${dut2} | ${DUT2_${int}2}[0] | ${dut2_if2_ip6} | ${prefix} | | VPP Interface Set IP Address | ${dut2} | ${dut2-memif-1-if1} | | ... | ${dut2-memif-1-if1_ip6} | ${mem_prefix} | | VPP Interface Set IP Address | ${dut2} | ${dut2-memif-1-if2} | | ... | ${dut2-memif-1-if2_ip6} | ${mem_prefix} | | Vpp All Ra Suppress Link Layer | ${nodes} | | VPP Add IP Neighbor -| | ... | ${dut1} | ${dut1_if2} | ${dut2_if1_ip6} | ${dut2_if1_mac} +| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${dut2_if1_ip6} +| | ... | ${DUT2_${int}1_mac}[0] | | VPP Add IP Neighbor -| | ... | ${dut2} | ${dut2_if1} | ${dut1_if2_ip6} | ${dut1_if2_mac} +| | ... | ${dut2} | ${DUT2_${int}1}[0] | ${dut1_if2_ip6} +| | ... | ${DUT1_${int}2_mac}[0] | | VPP Add IP Neighbor -| | ... | ${dut1} | ${dut1_if1} | ${tg_if1_ip6_subnet}2 | ${tg_if1_mac} +| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${tg_if1_ip6_subnet}2 +| | ... | ${TG_pf1_mac}[0] | | VPP Add IP Neighbor -| | ... | ${dut2} | ${dut2_if2} | ${tg_if2_ip6_subnet}2 | ${tg_if2_mac} +| | ... | ${dut2} | ${DUT2_${int}2}[0] | ${tg_if2_ip6_subnet}2 +| | ... | ${TG_pf2_mac}[0] | | ${dut1-memif-1-if2_mac}= | Get Interface MAC | ${dut1} | memif2 | | ${dut2-memif-1-if2_mac}= | Get Interface MAC | ${dut2} | memif2 | | VPP Add IP Neighbor | ${dut1} diff --git a/resources/libraries/robot/performance/performance_configuration.robot b/resources/libraries/robot/performance/performance_configuration.robot deleted file mode 100644 index 13acce1524..0000000000 --- a/resources/libraries/robot/performance/performance_configuration.robot +++ /dev/null @@ -1,215 +0,0 @@ -# Copyright (c) 2019 Cisco and/or its affiliates. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at: -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -*** Settings *** -| Documentation | Performance suite keywords - configuration - -*** Keywords *** -| Initialize LISP IPv4 forwarding in 3-node circular topology -| | [Documentation] | Custom setup of IPv4 addresses on all DUT nodes and TG \ -| | ... | Don`t set route. -| | -| | ... | *Arguments:* -| | ... | - dut1_dut2_address - Ip address from DUT1 to DUT2. Type: string -| | ... | - dut1_tg_address - Ip address from DUT1 to tg. Type: string -| | ... | - dut2_dut1_address - Ip address from DUT2 to DUT1. Type: string -| | ... | - dut1_tg_address - Ip address from DUT1 to tg. Type: string -| | ... | - duts_prefix - ip prefix. Type: int -| | -| | ... | *Return:* -| | ... | - No value returned -| | -| | ... | *Example:* -| | ... | \| Initialize LISP IPv4 forwarding in 3-node circular topology \ -| | ... | \| ${dut1_dut2_address} \| ${dut1_tg_address} \ -| | ... | \| ${dut2_dut1_address} \| ${dut2_tg_address} \| ${duts_prefix} \| -| | -| | [Arguments] | ${dut1_dut2_address} | ${dut1_tg_address} -| | ... | ${dut2_dut1_address} | ${dut2_tg_address} | ${duts_prefix} -| | -| | Set interfaces in path up -| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 10.10.10.2 | ${tg_if1_mac} -| | VPP Add IP Neighbor -| | ... | ${dut1} | ${dut1_if2} | ${dut2_dut1_address} | ${dut2_if1_mac} -| | VPP Add IP Neighbor -| | ... | ${dut2} | ${dut2_if1} | ${dut1_dut2_address} | ${dut1_if2_mac} -| | VPP Add IP Neighbor | ${dut2} | ${dut2_if2} | 20.20.20.2 | ${tg_if2_mac} -| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1} -| | ... | ${dut1_tg_address} | ${duts_prefix} -| | VPP Interface Set IP Address | ${dut1} | ${dut1_if2} -| | ... | ${dut1_dut2_address} | ${duts_prefix} -| | VPP Interface Set IP Address | ${dut2} | ${dut2_if1} -| | ... | ${dut2_dut1_address} | ${duts_prefix} -| | VPP Interface Set IP Address | ${dut2} | ${dut2_if2} -| | ... | ${dut2_tg_address} | ${duts_prefix} - -| Initialize LISP GPE IPv4 over IPsec in 3-node circular topology -| | [Documentation] | Setup Lisp GPE IPv4 forwarding over IPsec. -| | -| | ... | *Arguments:* -| | ... | - encr_alg - Encryption algorithm. Type: string -| | ... | - auth_alg - Authentication algorithm. Type: string -| | -| | ... | *Return:* -| | ... | - No value returned -| | -| | ... | *Example:* -| | ... | \| Initialize LISP GPE IPv4 over IPsec in 3-node circular topology\ -| | ... | \| ${encr_alg} \| ${auth_alg} -| | -| | [Arguments] | ${encr_alg} | ${auth_alg} -| | -| | Generate keys for IPSec | ${encr_alg} | ${auth_alg} -| | Initialize LISP IPv4 forwarding in 3-node circular topology -| | ... | ${dut1_to_dut2_ip4} | ${dut1_to_tg_ip4} | ${dut2_to_dut1_ip4} -| | ... | ${dut2_to_tg_ip4} | ${prefix4} -| | Configure LISP GPE topology in 3-node circular topology -| | ... | ${dut1} | ${dut1_if2} | ${NONE} -| | ... | ${dut2} | ${dut2_if1} | ${NONE} -| | ... | ${duts_locator_set} | ${dut1_ip4_eid} | ${dut2_ip4_eid} -| | ... | ${dut1_ip4_static_adjacency} | ${dut2_ip4_static_adjacency} -| | Configure manual keyed connection for IPSec -| | ... | ${dut1} | ${dut1_if2} | ${encr_alg} | ${encr_key} -| | ... | ${auth_alg} | ${auth_key} | ${dut1_spi} | ${dut2_spi} -| | ... | ${dut1_to_dut2_ip4} | ${dut2_to_dut1_ip4} -| | Configure manual keyed connection for IPSec -| | ... | ${dut2} | ${dut2_if1} | ${encr_alg} | ${encr_key} -| | ... | ${auth_alg} | ${auth_key} | ${dut2_spi} | ${dut1_spi} -| | ... | ${dut2_to_dut1_ip4} | ${dut1_to_dut2_ip4} - -| Initialize LISP IPv6 forwarding in 3-node circular topology -| | [Documentation] | Custom setup of IPv6 topology on all DUT nodes \ -| | ... | Don`t set route. -| | -| | ... | *Arguments:* -| | ... | - dut1_dut2_address - Ip address from DUT1 to DUT2. Type: string -| | ... | - dut1_tg_address - Ip address from DUT1 to tg. Type: string -| | ... | - dut2_dut1_address - Ip address from DUT2 to DUT1. Type: string -| | ... | - dut1_tg_address - Ip address from DUT1 to tg. Type: string -| | ... | - duts_prefix - ip prefix. Type: int -| | -| | ... | *Return:* -| | ... | - No value returned -| | -| | ... | *Example:* -| | ... | \| Initialize LISP IPv6 forwarding in 3-node circular topology \ -| | ... | \| ${dut1_dut2_address} \| ${dut1_tg_address} \ -| | ... | \| ${dut2_dut1_address} \| ${dut2_tg_address} \| ${duts_prefix} \| -| | -| | [Arguments] | ${dut1_dut2_address} | ${dut1_tg_address} -| | ... | ${dut2_dut1_address} | ${dut2_tg_address} | ${prefix} -| | -| | Set interfaces in path up -| | VPP Interface Set IP Address -| | ... | ${dut1} | ${dut1_if1} | ${dut1_tg_address} | ${prefix} -| | VPP Interface Set IP Address -| | ... | ${dut1} | ${dut1_if2} | ${dut1_dut2_address} | ${prefix} -| | VPP Interface Set IP Address -| | ... | ${dut2} | ${dut2_if1} | ${dut2_dut1_address} | ${prefix} -| | VPP Interface Set IP Address -| | ... | ${dut2} | ${dut2_if2} | ${dut2_tg_address} | ${prefix} -| | Vpp All Ra Suppress Link Layer | ${nodes} -| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 2001:1::2 | ${tg_if1_mac} -| | VPP Add IP Neighbor | ${dut2} | ${dut2_if2} | 2001:2::2 | ${tg_if2_mac} -| | VPP Add IP Neighbor -| | ... | ${dut1} | ${dut1_if2} | ${dut2_dut1_address} | ${dut2_if1_mac} -| | VPP Add IP Neighbor -| | ... | ${dut2} | ${dut2_if1} | ${dut1_dut2_address} | ${dut1_if2_mac} - -| Initialize LISP IPv4 over IPv6 forwarding in 3-node circular topology -| | [Documentation] | Custom setup of IPv4 over IPv6 topology on all DUT nodes \ -| | ... | Don`t set route. -| | -| | ... | *Arguments:* -| | ... | - dut1_dut2_ip6_address - IPv6 address from DUT1 to DUT2. -| | ... | Type: string -| | ... | - dut1_tg_ip4_address - IPv4 address from DUT1 to tg. Type: string -| | ... | - dut2_dut1_ip6_address - IPv6 address from DUT2 to DUT1. -| | ... | Type: string -| | ... | - dut1_tg_ip4_address - IPv4 address from DUT1 to tg. Type: string -| | ... | - prefix4 - IPv4 prefix. Type: int -| | ... | - prefix6 - IPv6 prefix. Type: int -| | -| | ... | *Return:* -| | ... | - No value returned -| | -| | ... | *Example:* -| | ... | \| Lisp IPv4 over IPv6 forwarding initialized in a 3-node circular \ -| | ... | topology \| ${dut1_dut2_ip6_address} \| ${dut1_tg_ip4_address} \ -| | ... | \| ${dut2_dut1_ip6_address} \| ${dut2_tg_ip4_address} \ -| | ... | \| ${prefix4} \| ${prefix6} \| -| | -| | [Arguments] | ${dut1_dut2_ip6_address} | ${dut1_tg_ip4_address} -| | ... | ${dut2_dut1_ip6_address} | ${dut2_tg_ip4_address} -| | ... | ${prefix4} | ${prefix6} -| | -| | Set interfaces in path up -| | VPP Interface Set IP Address | ${dut1} | ${dut1_if1} -| | ... | ${dut1_tg_ip4_address} | ${prefix4} -| | VPP Interface Set IP Address -| | ... | ${dut1} | ${dut1_if2} | ${dut1_dut2_ip6_address} | ${prefix6} -| | VPP Interface Set IP Address -| | ... | ${dut2} | ${dut2_if1} | ${dut2_dut1_ip6_address} | ${prefix6} -| | VPP Interface Set IP Address | ${dut2} | ${dut2_if2} -| | ... | ${dut2_tg_ip4_address} | ${prefix4} -| | Vpp All Ra Suppress Link Layer | ${nodes} -| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 10.10.10.2 | ${tg_if1_mac} -| | VPP Add IP Neighbor | ${dut2} | ${dut2_if2} | 20.20.20.2 | ${tg_if2_mac} -| | VPP Add IP Neighbor -| | ... | ${dut1} | ${dut1_if2} | ${dut2_dut1_ip6_address} | ${dut2_if1_mac} -| | VPP Add IP Neighbor -| | ... | ${dut2} | ${dut2_if1} | ${dut1_dut2_ip6_address} | ${dut1_if2_mac} - -| Initialize LISP IPv6 over IPv4 forwarding in 3-node circular topology -| | [Documentation] | Custom setup of IPv4 over IPv6 topology on all DUT nodes \ -| | ... | Don`t set route. -| | -| | ... | *Arguments:* -| | ... | - dut1_dut2_ip4_address - IPv4 address from DUT1 to DUT2. -| | ... | Type: string -| | ... | - dut1_tg_ip6_address - IPv6 address from DUT1 to tg. Type: string -| | ... | - dut2_dut1_ip4_address - IPv4 address from DUT2 to DUT1. -| | ... | Type: string -| | ... | - dut1_tg_ip6_address - IPv6 address from DUT1 to tg. Type: string -| | ... | - prefix4 - IPv4 prefix. Type: int -| | ... | - prefix6 - IPv6 prefix. Type: int -| | -| | ... | *Return:* -| | ... | - No value returned -| | -| | ... | *Example:* -| | ... | \| Lisp IPv6 over IPv4 forwarding initialized in a 3-node circular \ -| | ... | topology \| ${dut1_dut2_ip4_address} \| ${dut1_tg_ip6_address} \ -| | ... | \| ${dut2_dut1_ip4_address} \| ${dut2_tg_ip6_address} \ -| | ... | \| ${prefix6} \| ${prefix4} \| -| | -| | [Arguments] | ${dut1_dut2_ip4_address} | ${dut1_tg_ip6_address} -| | ... | ${dut2_dut1_ip4_address} | ${dut2_tg_ip6_address} -| | ... | ${prefix6} | ${prefix4} -| | -| | Set interfaces in path up -| | VPP Interface Set IP Address -| | ... | ${dut1} | ${dut1_if1} | ${dut1_tg_ip6_address} | ${prefix6} -| | VPP Interface Set IP Address -| | ... | ${dut1} | ${dut1_if2} | ${dut1_dut2_ip4_address} | ${prefix4} -| | VPP Interface Set IP Address -| | ... | ${dut2} | ${dut2_if1} | ${dut2_dut1_ip4_address} | ${prefix4} -| | VPP Interface Set IP Address -| | ... | ${dut2} | ${dut2_if2} | ${dut2_tg_ip6_address} | ${prefix6} -| | Vpp All Ra Suppress Link Layer | ${nodes} -| | VPP Add IP Neighbor | ${dut1} | ${dut1_if1} | 2001:1::2 | ${tg_if1_mac} -| | VPP Add IP Neighbor | ${dut2} | ${dut2_if2} | 2001:2::2 | ${tg_if2_mac} -| | VPP Add IP Neighbor -| | ... | ${dut1} | ${dut1_if2} | ${dut2_dut1_ip4_address} | ${dut2_if1_mac} -| | VPP Add IP Neighbor -| | ... | ${dut2} | ${dut2_if1} | ${dut1_dut2_ip4_address} | ${dut1_if2_mac} diff --git a/resources/libraries/robot/shared/container.robot b/resources/libraries/robot/shared/container.robot index dbe2ae73a4..b2b3d01a4e 100644 --- a/resources/libraries/robot/shared/container.robot +++ b/resources/libraries/robot/shared/container.robot @@ -1,4 +1,4 @@ -# Copyright (c) 2019 Cisco and/or its affiliates. +# Copyright (c) 2020 Cisco and/or its affiliates. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at: @@ -209,26 +209,40 @@ | | ${dut1_if2} = | Get Variable Value | \${dut1_if2} | ${None} | | ${dut2_if2} = | Get Variable Value | \${dut2_if2} | ${None} | | Run Keyword If | '${container_chain_topology}' == 'chain_ip4' -| | ... | ${group}.Configure VPP In All Containers | ${container_chain_topology} -| | ... | tg_if1_mac=${tg_if1_mac} | tg_if2_mac=${tg_if2_mac} +| | ... | ${group}.Configure VPP In All Containers +| | ... | ${container_chain_topology} +| | ... | tg_if1_mac=${TG_pf1_mac} +| | ... | tg_if2_mac=${TG_pf2_mac} | | ... | nodes=${nf_nodes} | | ... | ELSE IF | '${container_chain_topology}' == 'chain_ipsec' -| | ... | ${group}.Configure VPP In All Containers | ${container_chain_topology} -| | ... | tg_if1_ip4=${tg_if1_ip4} | tg_if1_mac=${tg_if1_mac} -| | ... | tg_if2_ip4=${tg_if2_ip4} | tg_if2_mac=${tg_if2_mac} -| | ... | dut1_if1_ip4=${dut1_if1_ip4} | dut1_if2_ip4=${dut1_if2_ip4} -| | ... | dut2_if1_ip4=${dut2_if1_ip4} | dut2_if2_ip4=${dut2_if2_ip4} -| | ... | raddr_ip4=${raddr_ip4} | laddr_ip4=${laddr_ip4} -| | ... | nodes=${nodes} | nf_nodes=${nf_nodes} +| | ... | ${group}.Configure VPP In All Containers +| | ... | ${container_chain_topology} +| | ... | tg_if1_ip4=${tg_if1_ip4} +| | ... | tg_if1_mac=${TG_pf1_mac}[0] +| | ... | tg_if2_ip4=${tg_if2_ip4} +| | ... | tg_if2_mac=${TG_pf2_mac}[0] +| | ... | dut1_if1_ip4=${dut1_if1_ip4} +| | ... | dut1_if2_ip4=${dut1_if2_ip4} +| | ... | dut2_if1_ip4=${dut2_if1_ip4} +| | ... | dut2_if2_ip4=${dut2_if2_ip4} +| | ... | raddr_ip4=${raddr_ip4} +| | ... | laddr_ip4=${laddr_ip4} +| | ... | nodes=${nodes} +| | ... | nf_nodes=${nf_nodes} | | ... | ELSE IF | '${container_chain_topology}' == 'pipeline_ip4' -| | ... | ${group}.Configure VPP In All Containers | ${container_chain_topology} -| | ... | tg_if1_mac=${tg_if1_mac} | tg_if2_mac=${tg_if2_mac} +| | ... | ${group}.Configure VPP In All Containers +| | ... | ${container_chain_topology} +| | ... | tg_if1_mac=${TG_pf1_mac}[0] +| | ... | tg_if2_mac=${TG_pf2_mac}[0] | | ... | nodes=${nf_nodes} | | ... | ELSE IF | '${container_chain_topology}' == 'cross_horiz' -| | ... | ${group}.Configure VPP In All Containers | ${container_chain_topology} -| | ... | dut1_if=${dut1_if2} | dut2_if=${dut2_if2} +| | ... | ${group}.Configure VPP In All Containers +| | ... | ${container_chain_topology} +| | ... | dut1_if=${DUT1_${int}2}[0] +| | ... | dut2_if=${DUT2_${int}2}[0] | | ... | ELSE -| | ... | ${group}.Configure VPP In All Containers | ${container_chain_topology} +| | ... | ${group}.Configure VPP In All Containers +| | ... | ${container_chain_topology} | Stop all '${group}' containers | | [Documentation] | Stop all container(s) in specific container group on all @@ -324,11 +338,11 @@ | | ... | ELSE | Set variable | ${rxq_count_int} | | VSWITCH.Configure VPP in all containers | chain_vswitch | | ... | rxq=${rxq_count_int} | n_instances=${n_instances} | node=${dut} -| | ... | dut1_if1=${dut1_if1} | dut1_if2=${dut1_if2} -| | ... | dut2_if1=${dut2_if1} | dut2_if2=${dut2_if2} +| | ... | dut1_if1=${DUT1_${int}1}[0] | dut1_if2=${DUT1_${int}2}[0] +| | ... | dut2_if1=${DUT2_${int}1}[0] | dut2_if2=${DUT2_${int}2}[0] | | ... | dut2_if2_ip4=${dut2_if2_ip4} -| | ... | tg_if1_ip4=${tg_if1_ip4} | tg_if1_mac=${tg_if1_mac} -| | ... | tg_if2_ip4=${tg_if2_ip4} | tg_if2_mac=${tg_if2_mac} +| | ... | tg_if1_ip4=${tg_if1_ip4} | tg_if1_mac=${TG_pf1_mac}[0] +| | ... | tg_if2_ip4=${tgi_f2_ip4} | tg_if2_mac=${TG_pf2_mac}[0] | | ... | nodes=${nodes} | | Start VPP in all '${container_group}' containers diff --git a/resources/libraries/robot/shared/default.robot b/resources/libraries/robot/shared/default.robot index 64365f352b..0a3efc285a 100644 --- a/resources/libraries/robot/shared/default.robot +++ b/resources/libraries/robot/shared/default.robot @@ -58,7 +58,6 @@ | Resource | resources/libraries/robot/overlay/lisp.robot | Resource | resources/libraries/robot/overlay/lispgpe.robot | Resource | resources/libraries/robot/overlay/lisp_api.robot -| Resource | resources/libraries/robot/performance/performance_configuration.robot | Resource | resources/libraries/robot/performance/performance_limits.robot | Resource | resources/libraries/robot/performance/performance_utils.robot | Resource | resources/libraries/robot/shared/interfaces.robot @@ -68,7 +67,6 @@ | Resource | resources/libraries/robot/shared/suite_setup.robot | Resource | resources/libraries/robot/shared/test_teardown.robot | Resource | resources/libraries/robot/shared/test_setup.robot -| Resource | resources/libraries/robot/shared/testing_path.robot | Resource | resources/libraries/robot/shared/traffic.robot | Resource | resources/libraries/robot/shared/vm.robot @@ -188,18 +186,8 @@ | | ${rxd_count_int}= | Set variable | ${rxd} | | ${txd_count_int}= | Set variable | ${txd} | | FOR | ${dut} | IN | @{duts} -| | | ${if1_status} | ${value}= | Run Keyword And Ignore Error -| | | ... | Variable Should Exist | ${${dut}_if1} -| | | @{if_list}= | Run Keyword If | '${if1_status}' == 'PASS' -| | | ... | Create List | ${${dut}_if1} -| | | ... | ELSE | Create List | ${${dut}_if1_1} | ${${dut}_if1_2} -| | | ${if2_status} | ${value}= | Run Keyword And Ignore Error -| | | ... | Variable Should Exist | ${${dut}_if2} -| | | Run Keyword If | '${if2_status}' == 'PASS' -| | | ... | Append To List | ${if_list} | ${${dut}_if2} -| | | ... | ELSE -| | | ... | Append To List | ${if_list} | ${${dut}_if2_1} | ${${dut}_if2_2} -| | | ${numa}= | Get interfaces numa node | ${nodes['${dut}']} | @{if_list} +| | | ${numa}= | Get interfaces numa node +| | | ... | ${nodes['${dut}']} | @{${dut}_pf_pci} | | | ${smt_used}= | Is SMT enabled | ${nodes['${dut}']['cpuinfo']} | | | ${skip_cnt}= | Set variable | ${CPU_CNT_SYSTEM} | | | ${cpu_main}= | Cpu list per node str | ${nodes['${dut}']} | ${numa} @@ -239,80 +227,23 @@ | | Set Test Variable | ${rxd_count_int} | | Set Test Variable | ${txd_count_int} -| Add DPDK pci devices to all DUTs -| | [Documentation] -| | ... | Add PCI devices to VPP configuration file. -| | -| | FOR | ${dut} | IN | @{duts} -| | | ${if1_status} | ${value}= | Run Keyword And Ignore Error -| | | ... | Variable Should Exist | ${${dut}_if1} -| | | ${if1_pci}= | Run Keyword If | '${if1_status}' == 'PASS' -| | | ... | Get Interface PCI Addr | ${nodes['${dut}']} | ${${dut}_if1} -| | | ${if1_1_pci}= | Run Keyword Unless | '${if1_status}' == 'PASS' -| | | ... | Get Interface PCI Addr | ${nodes['${dut}']} | ${${dut}_if1_1} -| | | ${if1_2_pci}= | Run Keyword Unless | '${if1_status}' == 'PASS' -| | | ... | Get Interface PCI Addr | ${nodes['${dut}']} | ${${dut}_if1_2} -| | | ${if2_status} | ${value}= | Run Keyword And Ignore Error -| | | ... | Variable Should Exist | ${${dut}_if2} -| | | ${if2_pci}= | Run Keyword If | '${if2_status}' == 'PASS' -| | | ... | Get Interface PCI Addr | ${nodes['${dut}']} | ${${dut}_if2} -| | | ${if2_1_pci}= | Run Keyword Unless | '${if2_status}' == 'PASS' -| | | ... | Get Interface PCI Addr | ${nodes['${dut}']} | ${${dut}_if2_1} -| | | ${if2_2_pci}= | Run Keyword Unless | '${if2_status}' == 'PASS' -| | | ... | Get Interface PCI Addr | ${nodes['${dut}']} | ${${dut}_if2_2} -| | | @{pci_devs}= | Run Keyword If | '${if1_status}' == 'PASS' -| | | ... | Create List | ${if1_pci} -| | | ... | ELSE -| | | ... | Create List | ${if1_1_pci} | ${if1_2_pci} -| | | Run Keyword If | '${if2_status}' == 'PASS' -| | | ... | Append To List | ${pci_devs} | ${if2_pci} -| | | ... | ELSE -| | | ... | Append To List | ${pci_devs} | ${if2_1_pci} | ${if2_2_pci} -| | | Run keyword | ${dut}.Add DPDK Dev | @{pci_devs} -| | | Run Keyword If | '${if1_status}' == 'PASS' -| | | ... | Set Test Variable | ${${dut}_if1_pci} | ${if1_pci} -| | | Run Keyword Unless | '${if1_status}' == 'PASS' -| | | ... | Set Test Variable | ${${dut}_if1_1_pci} | ${if1_1_pci} -| | | Run Keyword Unless | '${if1_status}' == 'PASS' -| | | ... | Set Test Variable | ${${dut}_if1_2_pci} | ${if1_2_pci} -| | | Run Keyword If | '${if2_status}' == 'PASS' -| | | ... | Set Test Variable | ${${dut}_if2_pci} | ${if2_pci} -| | | Run Keyword Unless | '${if2_status}' == 'PASS' -| | | ... | Set Test Variable | ${${dut}_if2_1_pci} | ${if2_1_pci} -| | | Run Keyword Unless | '${if2_status}' == 'PASS' -| | | ... | Set Test Variable | ${${dut}_if2_2_pci} | ${if2_2_pci} -| | END - -| Add DPDK no PCI to all DUTs -| | [Documentation] | Add DPDK no-pci to VPP startup configuration to all DUTs. -| | -| | FOR | ${dut} | IN | @{duts} -| | | Run keyword | ${dut}.Add DPDK no PCI -| | END - -| Add VLAN strip offload switch off between DUTs in 3-node single link topology +| Add DPDK VLAN strip offload switch off between DUTs | | [Documentation] | | ... | Add VLAN Strip Offload switch off on PCI devices between DUTs to VPP | | ... | configuration file. | | -| | Run keyword | DUT1.Add DPDK Dev Parameter | ${dut1_if2_pci} -| | ... | vlan-strip-offload | off -| | Run keyword | DUT2.Add DPDK Dev Parameter | ${dut2_if1_pci} -| | ... | vlan-strip-offload | off - -| Add VLAN strip offload switch off between DUTs in 3-node double link topology -| | [Documentation] -| | ... | Add VLAN Strip Offload switch off on PCI devices between DUTs to VPP -| | ... | configuration file -| | -| | Run keyword | DUT1.Add DPDK Dev Parameter | ${dut1_if2_1_pci} -| | ... | vlan-strip-offload | off -| | Run keyword | DUT1.Add DPDK Dev Parameter | ${dut1_if2_2_pci} -| | ... | vlan-strip-offload | off -| | Run keyword | DUT2.Add DPDK Dev Parameter | ${dut2_if1_1_pci} -| | ... | vlan-strip-offload | off -| | Run keyword | DUT2.Add DPDK Dev Parameter | ${dut2_if1_2_pci} -| | ... | vlan-strip-offload | off +| | FOR | ${pf} | IN RANGE | 1 | ${nic_pfs} + 1 +| | | ${_even}= | Evaluate | ${pf} % 2 +| | | Run Keyword Unless | ${even} +| | | ... | DUT1.Add DPDK Dev Parameter | ${DUT1_${int}${pf}_pci}[0] +| | | ... | vlan-strip-offload | off +| | END +| | FOR | ${pf} | IN RANGE | 1 | ${nic_pfs} + 1 +| | | ${_even}= | Evaluate | ${pf} % 2 +| | | Run Keyword If | ${even} +| | | ... | DUT2.Add DPDK Dev Parameter | ${DUT2_${int}${pf}_pci}[0] +| | | ... | vlan-strip-offload | off +| | END | Add NAT to all DUTs | | [Documentation] | Add NAT configuration to all DUTs. @@ -374,7 +305,6 @@ | | | | ${setup_vpp_pids}= | Get VPP PIDs | ${nodes} | | ${keys}= | Get Dictionary Keys | ${setup_vpp_pids} -| | ${duts}= | Get Matches | ${nodes} | DUT* | | FOR | ${key} | IN | @{keys} | | | ${pid}= | Get From Dictionary | ${setup_vpp_pids} | ${key} | | | Run Keyword If | $pid is None | FAIL | No VPP PID found on node ${key} diff --git a/resources/libraries/robot/shared/interfaces.robot b/resources/libraries/robot/shared/interfaces.robot index 18bb0d3568..f1dc89d300 100644 --- a/resources/libraries/robot/shared/interfaces.robot +++ b/resources/libraries/robot/shared/interfaces.robot @@ -19,147 +19,79 @@ | ${dpdk_no_tx_checksum_offload}= | ${True} *** Keywords *** -| Set interfaces in path up +| Set single interfaces in path up | | [Documentation] -| | ... | *Set UP state on VPP interfaces in path on all DUT nodes and set -| | ... | maximal MTU.* -| | -| | FOR | ${dut} | IN | @{duts} -| | | Set interfaces in path up on DUT | ${dut} -| | END -| | All VPP Interfaces Ready Wait | ${nodes} | retries=${300} - -| Set interfaces in path up on DUT -| | [Documentation] -| | ... | *Set UP state on VPP interfaces in path on specified DUT node and -| | ... | set maximal MTU.* +| | ... | *Set UP state on single physical VPP interfaces in path on all DUT +| | ... | nodes and set maximal MTU.* | | | | ... | *Arguments:* -| | ... | - dut - DUT node on which to set the interfaces up. -| | ... | Type: string +| | ... | - pf - NIC physical function (physical port). +| | ... | Type: integer | | | | ... | *Example:* | | -| | ... | \| Set interfaces in path up on DUT \| DUT1 \| +| | ... | \| Set single interfaces in path \| 1 \| | | -| | [Arguments] | ${dut} -# TODO: Rework KW to set all interfaces in path UP and set MTU (including -# software interfaces. Run KW at the start phase of VPP setup to split -# from other "functional" configuration. This will allow modularity of this -# library -| | ${if1_status} | ${value}= | Run Keyword And Ignore Error -| | ... | Variable Should Exist | ${${dut}_if1} -| | Run Keyword If | '${if1_status}' == 'PASS' -| | ... | Set Interface State | ${nodes['${dut}']} | ${${dut}_if1} | up -| | ... | ELSE -| | ... | Set Interface State | ${nodes['${dut}']} | ${${dut}_if1_1} | up -| | Run Keyword Unless | '${if1_status}' == 'PASS' -| | ... | Set Interface State | ${nodes['${dut}']} | ${${dut}_if1_2} | up -| | ${if2_status} | ${value}= | Run Keyword And Ignore Error -| | ... | Variable Should Exist | ${${dut}_if2} -| | Run Keyword If | '${if2_status}' == 'PASS' -| | ... | Set Interface State | ${nodes['${dut}']} | ${${dut}_if2} | up -| | ... | ELSE -| | ... | Set Interface State | ${nodes['${dut}']} | ${${dut}_if2_1} | up -| | Run Keyword Unless | '${if2_status}' == 'PASS' -| | ... | Set Interface State | ${nodes['${dut}']} | ${${dut}_if2_2} | up -| | ${if1_status} | ${value}= | Run Keyword And Ignore Error -| | ... | Variable Should Exist | ${${dut}_if1} -| | Run Keyword If | '${if1_status}' == 'PASS' -| | ... | VPP Set Interface MTU | ${nodes['${dut}']} | ${${dut}_if1} -| | ... | ELSE -| | ... | VPP Set Interface MTU | ${nodes['${dut}']} | ${${dut}_if1_1} -| | Run Keyword Unless | '${if1_status}' == 'PASS' -| | ... | VPP Set Interface MTU | ${nodes['${dut}']} | ${${dut}_if1_2} -| | ${if2_status} | ${value}= | Run Keyword And Ignore Error -| | ... | Variable Should Exist | ${${dut}_if2} -| | Run Keyword If | '${if2_status}' == 'PASS' -| | ... | VPP Set Interface MTU | ${nodes['${dut}']} | ${${dut}_if2} -| | ... | ELSE -| | ... | VPP Set Interface MTU | ${nodes['${dut}']} | ${${dut}_if2_1} -| | Run Keyword Unless | '${if2_status}' == 'PASS' -| | ... | VPP Set Interface MTU | ${nodes['${dut}']} | ${${dut}_if2_2} +| | [Arguments] | ${pf}=${1} +| | +| | FOR | ${dut} | IN | @{duts} +| | | Set interfaces in path up on node on PF | ${dut} | ${pf} +| | END +| | All VPP Interfaces Ready Wait | ${nodes} | retries=${60} -| Set single interfaces in path up +| Set interfaces in path up | | [Documentation] -| | ... | *Set UP state on single VPP interfaces in path on all DUT nodes and set +| | ... | *Set UP state on VPP interfaces in path on all DUT nodes and set | | ... | maximal MTU.* | | -# TODO: Rework KW to set all interfaces in path UP and set MTU (including -# software interfaces. Run KW at the start phase of VPP setup to split -# from other "functional" configuration. This will allow modularity of this -# library | | FOR | ${dut} | IN | @{duts} -| | | ${if1_status} | ${value}= | Run Keyword And Ignore Error -| | | ... | Variable Should Exist | ${${dut}_if1} -| | | Run Keyword If | '${if1_status}' == 'PASS' -| | | ... | Set Interface State | ${nodes['${dut}']} | ${${dut}_if1} | up -| | | ... | ELSE -| | | ... | Set Interface State | ${nodes['${dut}']} | ${${dut}_if1_1} | up -| | | Run Keyword Unless | '${if1_status}' == 'PASS' -| | | ... | Set Interface State | ${nodes['${dut}']} | ${${dut}_if1_2} | up +| | | Set interfaces in path up on node | ${dut} | | END -| | FOR | ${dut} | IN | @{duts} -| | | ${if1_status} | ${value}= | Run Keyword And Ignore Error -| | | ... | Variable Should Exist | ${${dut}_if1} -| | | Run Keyword If | '${if1_status}' == 'PASS' -| | | ... | VPP Set Interface MTU | ${nodes['${dut}']} | ${${dut}_if1} -| | | ... | ELSE -| | | ... | VPP Set Interface MTU | ${nodes['${dut}']} | ${${dut}_if1_1} -| | | Run Keyword Unless | '${if1_status}' == 'PASS' -| | | ... | VPP Set Interface MTU | ${nodes['${dut}']} | ${${dut}_if1_2} -| | END -| | All VPP Interfaces Ready Wait | ${nodes} +| | All VPP Interfaces Ready Wait | ${nodes} | retries=${60} -| Get Vhost dump -| | [Documentation] | Get vhost-user dump. -| | -| | ... | *Arguments:* -| | ... | - node - DUT node data. Type: dictionary -| | -| | [Arguments] | ${dut_node} -| | -| | [Return] | ${vhost_dump} -| | -| | ${vhost_dump}= | Vhost User Dump | ${dut_node} - -| Initialize layer interface on node +| Set interfaces in path up on node | | [Documentation] -| | ... | Baseline interfaces variables to be created. +| | ... | *Set UP state on VPP interfaces in path on specified DUT node and +| | ... | set maximal MTU.* | | | | ... | *Arguments:* -| | ... | - dut - DUT node. Type: string -| | ... | - count - Number of baseline interface variables. Type: integer +| | ... | - dut - DUT node on which to set the interfaces up. +| | ... | Type: string | | | | ... | *Example:* | | -| | ... | \| Initialize layer interface on node \| DUT1 \| 1 \| +| | ... | \| Set interfaces in path up on node \| DUT1 \| | | -| | [Arguments] | ${dut} | ${count}=${1} +| | [Arguments] | ${dut} | | -| | ${dut_str}= | Convert To Lowercase | ${dut} -| | FOR | ${id} | IN RANGE | 1 | ${count} + 1 -| | | Set Test Variable | ${${dut_str}_if_${id}_1} | ${${dut_str}_if1} -| | | Set Test Variable | ${${dut_str}_if_${id}_2} | ${${dut_str}_if2} +| | FOR | ${pf} | IN RANGE | 1 | ${nic_pfs} + 1 +| | | Set interfaces in path up on node on PF | ${dut} | ${pf} | | END -| Initialize layer interface +| Set interfaces in path up on node on PF | | [Documentation] -| | ... | Physical interfaces variables to be created on all DUTs. +| | ... | *Set UP state on VPP interfaces in path on specified DUT node and +| | ... | set maximal MTU.* | | | | ... | *Arguments:* -| | ... | - count - Number of untagged interfaces variables. Type: integer +| | ... | - dut - DUT node on which to set the interfaces up. +| | ... | Type: string +| | ... | - pf - NIC physical function (physical port). +| | ... | Type: integer | | | | ... | *Example:* | | -| | ... | \| Initialize layer interface \| 1 \| +| | ... | \| Set interfaces in path up on node on PF \| DUT1 \| 1 \| | | -| | [Arguments] | ${count}=${1} +| | [Arguments] | ${dut} | ${pf} | | -| | FOR | ${dut} | IN | @{duts} -| | | Initialize layer interface on node | ${dut} | count=${count} +| | ${_chains} | ${value}= | Run Keyword And Ignore Error +| | ... | Variable Should Exist | @{${dut}_${int}${pf}_1} +| | ${_id}= | Set Variable If | '${_chains}' == 'PASS' | _1 | ${EMPTY} +| | FOR | ${if} | IN | @{${dut}_${int}${pf}${_id}} +| | | Set Interface State | ${nodes['${dut}']} | ${if} | up +| | | VPP Set Interface MTU | ${nodes['${dut}']} | ${if} | | END -| | Set Test Variable | ${prev_layer} | if | Pre-initialize layer driver | | [Documentation] @@ -182,8 +114,8 @@ | | ... | Pre-initialize vfio-pci driver by adding related sections to startup | | ... | config on all DUTs. | | -| | Add DPDK pci devices to all DUTs | | FOR | ${dut} | IN | @{duts} +| | | Run keyword | ${dut}.Add DPDK Dev | @{${dut}_pf_pci} | | | Run Keyword If | ${dpdk_no_tx_checksum_offload} | | | ... | ${dut}.Add DPDK No Tx Checksum Offload | | | Run Keyword | ${dut}.Add DPDK Log Level | debug @@ -198,6 +130,10 @@ | | | Run Keyword If | '${crypto_type}' != '${None}' | | | ... | ${dut}.Add DPDK Cryptodev | ${thr_count_int} | | END +| | ${_vlan_strip} | ${value}= | Run Keyword And Ignore Error +| | ... | Variable Should Exist | ${vlan_strip_off} +| | Run keyword If | '${_vlan_strip}' == 'PASS' and ${duts_count} == 2 +| | ... | Add DPDK VLAN strip offload switch off between DUTs | Pre-initialize layer avf on all DUTs | | [Documentation] @@ -213,7 +149,7 @@ | Initialize layer driver | | [Documentation] -| | ... | Initialize driver based interfaces on each DUT. Interfaces are +| | ... | Initialize driver based interfaces on all DUT. Interfaces are | | ... | brought up. | | | | ... | *Arguments:* @@ -227,91 +163,205 @@ | | [Arguments] | ${driver} | | | | FOR | ${dut} | IN | @{duts} -| | | Run Keyword | Initialize layer ${driver} on node | ${dut} +| | | Initialize layer driver on node | ${dut} | ${driver} | | END -| | Set Test Variable | ${prev_layer} | vf +| | Set Test Variable | ${int} | vf | | Set interfaces in path up +| Initialize layer driver on node +| | [Documentation] +| | ... | Initialize driver based interfaces on DUT. +| | +| | ... | *Arguments:* +| | ... | - dut - DUT node. +| | ... | Type: string +| | ... | - driver - NIC driver used in test [vfio-pci|avf|rdma-core]. +| | ... | Type: string +| | +| | ... | *Example:* +| | +| | ... | \| Initialize layer driver \| DUT1 \| vfio-pci \| +| | +| | [Arguments] | ${dut} | ${driver} +| | +| | FOR | ${pf} | IN RANGE | 1 | ${nic_pfs} + 1 +| | | ${_vf}= +| | | ... | Copy List | ${${dut}_${int}${pf}} +| | | ${_ip4_addr}= +| | | ... | Copy List | ${${dut}_${int}${pf}_ip4_addr} +| | | ${_ip4_prefix}= +| | | ... | Copy List | ${${dut}_${int}${pf}_ip4_prefix} +| | | ${_mac}= +| | | ... | Copy List | ${${dut}_${int}${pf}_mac} +| | | ${_pci}= +| | | ... | Copy List | ${${dut}_${int}${pf}_pci} +| | | ${_vlan}= +| | | ... | Copy List | ${${dut}_${int}${pf}_vlan} +| | | Set Test Variable +| | | ... | ${${dut}_vf${pf}} | ${_vf} +| | | Set Test Variable +| | | ... | ${${dut}_vf${pf}_ip4_addr} | ${_ip4_addr} +| | | Set Suite Variable +| | | ... | ${${dut}_vf${pf}_ip4_prefix} | ${_ip4_prefix} +| | | Set Test Variable +| | | ... | ${${dut}_vf${pf}_mac} | ${_mac} +| | | Set Test Variable +| | | ... | ${${dut}_vf${pf}_pci} | ${_pci} +| | | Set Test Variable +| | | ... | ${${dut}_vf${pf}_vlan} | ${_vlan} +| | | Run Keyword | Initialize layer ${driver} on node | ${dut} | ${pf} +| | END + | Initialize layer vfio-pci on node | | [Documentation] -| | ... | Initialize vfio-pci interfaces on DUT. Currently no operation. +| | ... | Initialize vfio-pci interfaces on DUT on NIC PF. +| | ... | Currently no operation. | | | | ... | *Arguments:* | | ... | - dut - DUT node. Type: string +| | ... | - pf - NIC physical function (physical port). Type: integer | | | | ... | *Example:* | | -| | ... | \| Initialize layer vfio-pci on node \| DUT1 \| +| | ... | \| Initialize layer vfio-pci on node \| DUT1 \| 1 \| | | -| | [Arguments] | ${dut} +| | [Arguments] | ${dut} | ${pf} | | | | No operation | Initialize layer avf on node | | [Documentation] -| | ... | Initialize AVF interfaces on DUT. +| | ... | Initialize AVF (Intel) interfaces on DUT on NIC PF. | | | | ... | *Arguments:* | | ... | - dut - DUT node. Type: string +| | ... | - pf - NIC physical function (physical port). Type: integer | | | | ... | *Example:* | | -| | ... | \| Initialize layer avf on node \| DUT1 \| +| | ... | \| Initialize layer avf on node \| DUT1 \| 1 \| +| | +| | [Arguments] | ${dut} | ${pf} +| | +| | FOR | ${vf} | IN RANGE | 0 | ${nic_vfs} +| | | ${_avf}= | VPP Create AVF Interface +| | | ... | ${nodes['${dut}']} | ${${dut}_vf${pf}}[${vf}] +| | | ... | num_rx_queues=${rxq_count_int} +| | | ... | rxq_size=${nic_rxq_size} | txq_size=${nic_txq_size} +| | | ${_ip4}= +| | | ... | Get Interface IP4 | ${nodes['${dut}']} | ${_avf} +| | | ${_ip4_prefix}= +| | | ... | Get Interface IP4 Prefix Length | ${nodes['${dut}']} | ${_avf} +| | | ${_mac}= +| | | ... | Get Interface MAC | ${nodes['${dut}']} | ${_avf} +| | | ${_pci}= +| | | ... | Get Interface PCI Addr | ${nodes['${dut}']} | ${_avf} +| | | ${_vlan}= +| | | ... | Get Interface VLAN | ${nodes['${dut}']} | ${_avf} +| | | Set List Value | ${${dut}_vf${pf}} | ${vf} | ${_avf} +| | | Set List Value | ${${dut}_vf${pf}_ip4_addr} | ${vf} | ${_ip4} +| | | Set List Value | ${${dut}_vf${pf}_ip4_prefix} | ${vf} | ${_ip4_prefix} +| | | Set List Value | ${${dut}_vf${pf}_mac} | ${vf} | ${_mac} +| | | Set List Value | ${${dut}_vf${pf}_pci} | ${vf} | ${_pci} +| | | Set List Value | ${${dut}_vf${pf}_vlan} | ${vf} | ${_vlan} +| | END + +| Initialize layer rdma-core on node +| | [Documentation] +| | ... | Initialize rdma-core (Mellanox VPP) interfaces on DUT on NIC PF. | | -| | [Arguments] | ${dut} +| | ... | *Arguments:* +| | ... | - dut - DUT node. Type: string +| | ... | - pf - NIC physical function (physical port). Type: integer | | -| | ${dut_str}= | Convert To Lowercase | ${dut} -| | ${if1_vlan}= | Get Interface Vlan | ${nodes['${dut}']} | ${${dut}_if1} -| | ${if2_vlan}= | Get Interface Vlan | ${nodes['${dut}']} | ${${dut}_if2} -| | Set Test Variable | ${${dut_str}_vlan1} | ${if1_vlan} -| | Set Test Variable | ${${dut_str}_vlan2} | ${if2_vlan} -| | ${dut_new_if1}= | VPP Create AVF Interface | ${nodes['${dut}']} -| | ... | ${${dut}_if1_vf0} | num_rx_queues=${rxq_count_int} -| | ... | rxq_size=${nic_rxq_size} | txq_size=${nic_txq_size} -| | ${dut_new_if1_mac}= | Get Interface MAC | ${nodes['${dut}']} -| | ... | ${dut_new_if1} -| | ${dut_new_if2}= | VPP Create AVF Interface | ${nodes['${dut}']} -| | ... | ${${dut}_if2_vf0} | num_rx_queues=${rxq_count_int} +| | ... | *Example:* +| | +| | ... | \| Initialize layer rdma-core on node \| DUT1 \| 1 \| +| | +| | [Arguments] | ${dut} | ${pf} +| | +| | ${_rdma}= | VPP Create Rdma Interface +| | ... | ${nodes['${dut}']} | ${${dut}_vf${pf}}[0] +| | ... | num_rx_queues=${rxq_count_int} | | ... | rxq_size=${nic_rxq_size} | txq_size=${nic_txq_size} -| | ${dut_new_if2_mac}= | Get Interface MAC | ${nodes['${dut}']} -| | ... | ${dut_new_if2} -| | Set Test Variable | ${${dut_str}_if1} | ${dut_new_if1} -| | Set Test Variable | ${${dut_str}_if2} | ${dut_new_if2} -| | Set Test Variable | ${${dut_str}_if1_mac} | ${dut_new_if1_mac} -| | Set Test Variable | ${${dut_str}_if2_mac} | ${dut_new_if2_mac} +| | Set List Value | ${${dut}_vf${pf}} | 0 | ${_rdma} -| Initialize layer rdma-core on node +| Initialize layer interface | | [Documentation] -| | ... | Initialize rdma-core (MLX) interfaces on DUT. +| | ... | Physical interfaces variables to be created on all DUTs. +| | +| | ... | *Arguments:* +| | ... | - count - Number of untagged interfaces variables. Type: integer +| | +| | ... | *Example:* +| | +| | ... | \| Initialize layer interface \| 1 \| +| | +| | [Arguments] | ${count}=${1} +| | +| | FOR | ${dut} | IN | @{duts} +| | | Initialize layer interface on node | ${dut} | count=${count} +| | END + +| Initialize layer interface on node +| | [Documentation] +| | ... | Physical interfaces variables to be created on all DUTs. | | | | ... | *Arguments:* | | ... | - dut - DUT node. Type: string +| | ... | - count - Number of baseline interface variables. Type: integer | | | | ... | *Example:* | | -| | ... | \| Initialize layer rdma-core on node \| DUT1 \| +| | ... | \| Initialize layer interface on node \| DUT1 \| 1 \| | | -| | [Arguments] | ${dut} +| | [Arguments] | ${dut} | ${count}=${1} | | -| | ${dut_str}= | Convert To Lowercase | ${dut} -| | ${if1_vlan}= | Get Interface Vlan | ${nodes['${dut}']} | ${${dut}_if1} -| | ${if2_vlan}= | Get Interface Vlan | ${nodes['${dut}']} | ${${dut}_if2} -| | Set Test Variable | ${${dut_str}_vlan1} | ${if1_vlan} -| | Set Test Variable | ${${dut_str}_vlan2} | ${if2_vlan} -| | ${dut_new_if1}= | VPP Create Rdma Interface | ${nodes['${dut}']} -| | ... | ${${dut}_if1} | num_rx_queues=${rxq_count_int} -| | ... | rxq_size=${nic_rxq_size} | txq_size=${nic_txq_size} -| | ${dut_new_if1_mac}= | Get Interface MAC | ${nodes['${dut}']} -| | ... | ${dut_new_if1} -| | ${dut_new_if2}= | VPP Create Rdma Interface | ${nodes['${dut}']} -| | ... | ${${dut}_if2} | num_rx_queues=${rxq_count_int} -| | ... | rxq_size=${nic_rxq_size} | txq_size=${nic_txq_size} -| | ${dut_new_if2_mac}= | Get Interface MAC | ${nodes['${dut}']} -| | ... | ${dut_new_if2} -| | Set Test Variable | ${${dut_str}_if1} | ${dut_new_if1} -| | Set Test Variable | ${${dut_str}_if2} | ${dut_new_if2} -| | Set Test Variable | ${${dut_str}_if1_mac} | ${dut_new_if1_mac} -| | Set Test Variable | ${${dut_str}_if2_mac} | ${dut_new_if2_mac} +| | FOR | ${pf} | IN RANGE | 1 | ${nic_pfs} + 1 +| | | Initialize layer interface on node on PF | ${dut} | ${pf} | count=${count} +| | END + +| Initialize layer interface on node on PF +| | [Documentation] +| | ... | Baseline interfaces variables to be created. +| | +| | ... | *Arguments:* +| | ... | - dut - DUT node. Type: string +| | ... | - pf - NIC physical function (physical port). Type: integer +| | ... | - count - Number of baseline interface variables. Type: integer +| | +| | ... | *Example:* +| | +| | ... | \| Initialize layer interface on node on PF \| DUT1 \| 1 \| 1 \| +| | +| | [Arguments] | ${dut} | ${pf} | ${count}=${1} +| | +| | FOR | ${id} | IN RANGE | 1 | ${count} + 1 +| | | Set Test Variable +| | | ... | ${${dut}_${int}${pf}_${id}} | ${${dut}_${int}${pf}} +| | END + +| Initialize layer bonding +| | [Documentation] +| | ... | Bonded interfaces and variables to be created on all DUT's interfaces. +| | +| | ... | *Arguments:* +| | ... | - bond_mode - Link bonding mode. Type: string +| | ... | - lb_mode - Load balance mode. Type: string +| | ... | - count - Number of bond interface variables. Type: integer +| | +| | ... | *Example:* +| | +| | ... | \| Initialize layer bonding \| xor \| l34 \| 1 \| +| | +| | [Arguments] | ${bond_mode}=xor | ${lb_mode}=l34 | ${count}=${1} +| | +| | FOR | ${dut} | IN | @{duts} +| | | Initialize layer bonding on node +| | | ... | ${dut} | bond_mode=${bond_mode} | lb_mode=${lb_mode} +| | | ... | count=${count} +| | END +| | Set Test Variable | ${int} | bond | Initialize layer bonding on node | | [Documentation] @@ -330,101 +380,80 @@ | | | | [Arguments] | ${dut} | ${bond_mode}=xor | ${lb_mode}=l34 | ${count}=${1} | | -| | ${dut_str}= | Convert To Lowercase | ${dut} | | ${if_index}= | VPP Create Bond Interface | | ... | ${nodes['${dut}']} | ${bond_mode} | load_balance=${lb_mode} | | ... | mac=00:00:00:01:01:01 | | Set Interface State | ${nodes['${dut}']} | ${if_index} | up | | VPP Enslave Physical Interface -| | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_1_1} | ${if_index} +| | ... | ${nodes['${dut}']} | ${${dut}_${int}1_1} | ${if_index} | | VPP Enslave Physical Interface -| | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_1_2} | ${if_index} +| | ... | ${nodes['${dut}']} | ${${dut}_${int}2_1} | ${if_index} | | FOR | ${id} | IN RANGE | 1 | ${count} + 1 -| | | Set Test Variable | ${${dut_str}_bond_${id}_1} | ${if_index} -| | | Set Test Variable | ${${dut_str}_bond_${id}_2} | ${if_index} +| | | Set Test Variable | ${${dut}_bond1_${id}} | ${if_index} +| | | Set Test Variable | ${${dut}_bond2_${id}} | ${if_index} | | END -| Initialize layer bonding +| Initialize layer dot1q | | [Documentation] -| | ... | Bonded interfaces and variables to be created on all DUT's interfaces. +| | ... | Dot1q interfaces and variables to be created on all DUTs. | | | | ... | *Arguments:* -| | ... | - bond_mode - Link bonding mode. Type: string -| | ... | - lb_mode - Load balance mode. Type: string -| | ... | - count - Number of bond interface variables. Type: integer +| | ... | - count - Number of chains. +| | ... | Type: integer +| | ... | - vlan_per_chain - Whether to create vlan subinterface for each chain. +| | ... | Type: boolean +| | ... | - start - Id of first chain, allows adding chains during test. +| | ... | Type: integer | | -| | ... | *Example:* +| | ... | \| Initialize layer dot1q \| 1 \| True \| 1 \| | | -| | ... | \| Initialize layer bonding \| xor \| l34 \| 1 \| -| | -| | [Arguments] | ${bond_mode}=xor | ${lb_mode}=l34 | ${count}=${1} +| | [Arguments] | ${count}=${1} | ${vlan_per_chain}=${True} | ${start}=${1} | | | | FOR | ${dut} | IN | @{duts} -| | | Initialize layer bonding on node -| | | ... | ${dut} | bond_mode=${bond_mode} | lb_mode=${lb_mode} -| | | ... | count=${count} +| | | Initialize layer dot1q on node +| | | ... | ${dut} | count=${count} | vlan_per_chain=${vlan_per_chain} +| | | ... | start=${start} | | END -| | Set Test Variable | ${prev_layer} | bond +| | Set Test Variable | ${int} | dot1q -| Initialize layer dot1q on node for chain +| Initialize layer dot1q on node | | [Documentation] -| | ... | Optionally create tag popping subinterface per chain. -| | ... | Return interface indices for dot1q layer interfaces, -| | ... | or Nones if subinterfaces are not created. +| | ... | Dot1q interfaces and variables to be created on all DUT's node. | | | | ... | *Arguments:* -| | ... | - dut - DUT node. Type: string -| | ... | - id - Positive index of the chain. Type: integer +| | ... | - dut - DUT node. +| | ... | Type: string +| | ... | - count - Number of chains. +| | ... | Type: integer | | ... | - vlan_per_chain - Whether to create vlan subinterface for each chain. | | ... | Type: boolean +| | ... | - start - Id of first chain, allows adding chains during test. +| | ... | Type: integer | | | | ... | *Example:* | | -| | ... | \| Initialize layer dot1q on node for chain \| DUT1 \| 1 \| True \| +| | ... | \| Initialize layer dot1q on node \| DUT1 \| 1 \| True \| 1 \| | | -| | [Arguments] | ${dut} | ${id} | ${vlan_per_chain}=${True} +| | [Arguments] | ${dut} | ${count}=${1} | ${vlan_per_chain}=${True} +| | ... | ${start}=${1} | | -| | ${dut_str}= | Convert To Lowercase | ${dut} -| | Return From Keyword If | ${id} != ${1} and not ${vlan_per_chain} -| | ... | ${NONE} | ${NONE} -| | # TODO: Is it worth creating Get Variable Value If Not None keyword? -| | ${default}= | Evaluate | ${100} + ${id} - ${1} -| | ${if1_vlan}= | Get Variable Value | \${${dut_str}_vlan1} -| | ${if1_vlan}= | Set Variable If | '${if1_vlan}' != '${NONE}' -| | ... | ${if1_vlan} | ${default} -| | ${default}= | Evaluate | ${200} + ${id} - ${1} -| | ${if2_vlan}= | Get Variable Value | \${${dut_str}_vlan2} -| | ${if2_vlan}= | Set Variable If | '${if2_vlan}' != '${NONE}' -| | ... | ${if2_vlan} | ${default} -| | ${if1_name} | ${if1_index}= | Create Vlan Subinterface -| | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_${id}_1} -| | ... | ${if1_vlan} -| | ${if2_name} | ${if2_index}= | Create Vlan Subinterface -| | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_${id}_2} -| | ... | ${if2_vlan} -| | Set Interface State | ${nodes['${dut}']} | ${if1_index} | up -| | Set Interface State | ${nodes['${dut}']} | ${if2_index} | up -| | Configure L2 tag rewrite method on interfaces -| | ... | ${nodes['${dut}']} | ${if1_index} | TAG_REWRITE_METHOD=pop-1 -| | Configure L2 tag rewrite method on interfaces -| | ... | ${nodes['${dut}']} | ${if2_index} | TAG_REWRITE_METHOD=pop-1 -| | Return From Keyword | ${if1_index} | ${if2_index} +| | FOR | ${pf} | IN RANGE | 1 | ${nic_pfs} + 1 +| | | Initialize layer dot1q on node on PF | ${dut} | pf=${pf} | count=${count} +| | | ... | vlan_per_chain=${vlan_per_chain} | start=${start} +| | END -| Initialize layer dot1q on node +| Initialize layer dot1q on node on PF | | [Documentation] | | ... | Dot1q interfaces and variables to be created on all DUT's node | | ... | interfaces. | | -| | ... | TODO: Unify names for number of chains/pipelines/instances/interfaces. -| | ... | Chose names and descriptions that makes sense for both -| | ... | nf_density and older tests. -| | ... | Note that with vlan_per_chain=False it is not a number of interfaces. -| | ... | At least not number of real interfaces, just number of aliases. -| | ... | This TODO applies also to all keywords with nf_chains argument. -| | | | ... | *Arguments:* -| | ... | - dut - DUT node. Type: string -| | ... | - count - Number of chains. Type: integer +| | ... | - dut - DUT node. +| | ... | Type: string +| | ... | - pf - NIC physical function (physical port). +| | ... | Type: integer +| | ... | - count - Number of chains. +| | ... | Type: integer | | ... | - vlan_per_chain - Whether to create vlan subinterface for each chain. | | ... | Type: boolean | | ... | - start - Id of first chain, allows adding chains during test. @@ -432,44 +461,76 @@ | | | | ... | *Example:* | | -| | ... | \| Initialize layer dot1q on node \| DUT1 \| 3 \| True \| 2 \| +| | ... | \| Initialize layer dot1q on node on PF \| DUT1 \| 3 \| True \| 2 \| | | -| | [Arguments] | ${dut} | ${count}=${1} | ${vlan_per_chain}=${True} -| | ... | ${start}=${1} +| | [Arguments] | ${dut} | ${pf}=${1} | ${count}=${1} +| | ... | ${vlan_per_chain}=${True} | ${start}=${1} | | -| | ${dut_str}= | Convert To Lowercase | ${dut} | | FOR | ${id} | IN RANGE | ${start} | ${count} + 1 -| | | ${if1_index} | ${if2_index}= | Initialize layer dot1q on node for chain -| | | ... | dut=${dut} | id=${id} | vlan_per_chain=${vlan_per_chain} +| | | ${_dot1q} | Initialize layer dot1q on node on PF for chain +| | | ... | dut=${dut} | pf=${pf} | id=${id} | vlan_per_chain=${vlan_per_chain} | | | # First id results in non-None indices, after that _1_ are defined. -| | | ${if1_index}= | Set Variable If | '${if1_index}' == '${NONE}' -| | | ... | ${${dut_str}_dot1q_1_1} | ${if1_index} -| | | ${if2_index}= | Set Variable If | '${if2_index}' == '${NONE}' -| | | ... | ${${dut_str}_dot1q_1_2} | ${if2_index} -| | | Set Test Variable | ${${dut_str}_dot1q_${id}_1} | ${if1_index} -| | | Set Test Variable | ${${dut_str}_dot1q_${id}_2} | ${if2_index} +| | | ${_dot1q}= | Set Variable If | '${_dot1q}' == '${NONE}' +| | | ... | ${${dut}_dot1q${pf}_1} | ${_dot1q} +| | | ${_dot1q}= | Create List | ${_dot1q} +| | | Set Test Variable | ${${dut}_dot1q${pf}_${id}} | ${_dot1q} | | END -| Initialize layer dot1q +| Initialize layer dot1q on node on PF for chain | | [Documentation] -| | ... | Dot1q interfaces and variables to be created on all DUT's interfaces. +| | ... | Optionally create tag popping subinterface per chain. +| | ... | Return interface indices for dot1q layer interfaces, +| | ... | or Nones if subinterfaces are not created. | | | | ... | *Arguments:* -| | ... | - count - Number of chains. Type: integer +| | ... | - dut - DUT node. +| | ... | Type: string +| | ... | - pf - NIC physical function (physical port). +| | ... | Type: integer +| | ... | - id - Positive index of the chain. +| | ... | Type: integer | | ... | - vlan_per_chain - Whether to create vlan subinterface for each chain. | | ... | Type: boolean +| | +| | ... | *Example:* +| | +| | ... | \| Initialize layer dot1q on node on PF for chain \| DUT1 \ +| | ... | \| 1 \| 1 \| True \| +| | +| | [Arguments] | ${dut} | ${pf} | ${id} | ${vlan_per_chain}=${True} +| | +| | Return From Keyword If | ${id} != ${1} and not ${vlan_per_chain} +| | ... | ${NONE} | ${NONE} +| | ${_default}= | Evaluate | ${pf} * ${100} + ${id} - ${1} +| | ${_vlan}= | Get Variable Value | \${${dut}_pf${pf}_vlan} +| | ${_vlan}= | Set Variable If | '${_vlan}[0]' != '${NONE}' +| | ... | ${_vlan}[0] | ${_default} +| | ${_name} | ${_index}= | Create Vlan Subinterface +| | ... | ${nodes['${dut}']} | ${${dut}_${int}${pf}_${id}}[0] | ${_vlan} +| | Set Interface State | ${nodes['${dut}']} | ${_index} | up +| | Configure L2 tag rewrite method on interfaces +| | ... | ${nodes['${dut}']} | ${_index} | TAG_REWRITE_METHOD=pop-1 +| | Return From Keyword | ${_index} + +| Initialize layer ip4vxlan +| | [Documentation] +| | ... | VXLAN interfaces and variables to be created on all DUT's interfaces. +| | +| | ... | *Arguments:* +| | ... | - count - Number of vxlan interfaces. +| | ... | Type: integer | | ... | - start - Id of first chain, allows adding chains during test. | | ... | Type: integer | | -| | ... | \| Initialize layer dot1q \| 3 \| True \| 2 \| +| | ... | \| Initialize layer ip4vxlan \| 3 \| 2 \| | | -| | [Arguments] | ${count}=${1} | ${vlan_per_chain}=${True} | ${start}=${1} +| | [Arguments] | ${count}=${1} | ${start}=${1} | | | | FOR | ${dut} | IN | @{duts} -| | | Initialize layer dot1q on node | ${dut} | count=${count} -| | | ... | vlan_per_chain=${vlan_per_chain} | start=${start} +| | | Initialize layer ip4vxlan on node | ${dut} | count=${count} +| | | ... | start=${start} | | END -| | Set Test Variable | ${prev_layer} | dot1q +| | Set Test Variable | ${int} | ip4vxlan | Initialize layer ip4vxlan on node | | [Documentation] @@ -479,8 +540,10 @@ | | ... | towards TG. VXLAN sub-interfaces has same IPv4 address as interfaces. | | | | ... | *Arguments:* -| | ... | - dut - DUT node. Type: string -| | ... | - count - Number of vxlan interfaces. Type: integer +| | ... | - dut - DUT node. +| | ... | Type: string +| | ... | - count - Number of vxlan interfaces. +| | ... | Type: integer | | ... | - start - Id of first chain, allows adding chains during test. | | ... | Type: integer | | @@ -490,75 +553,75 @@ | | | | [Arguments] | ${dut} | ${count}=${1} | ${start}=${1} | | -| | ${dut_str}= | Convert To Lowercase | ${dut} -| | Run Keyword If | "${start}" == "1" | VPP Interface Set IP Address -| | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_1_1} -| | ... | 172.16.0.1 | 24 -| | Run Keyword If | "${start}" == "1" | VPP Interface Set IP Address -| | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_1_2} -| | ... | 172.26.0.1 | 24 -| | FOR | ${id} | IN RANGE | ${start} | ${count} + 1 -| | | ${subnet}= | Evaluate | ${id} - 1 -| | | ${vni}= | Evaluate | ${id} - 1 -| | | ${ip4vxlan_1}= | Create VXLAN interface -| | | ... | ${nodes['${dut}']} | ${vni} | 172.16.0.1 | 172.17.${subnet}.2 -| | | ${ip4vxlan_2}= | Create VXLAN interface -| | | ... | ${nodes['${dut}']} | ${vni} | 172.26.0.1 | 172.27.${subnet}.2 -| | | ${prev_mac}= | Set Variable If | '${dut}' == 'DUT1' -| | | ... | ${tg_if1_mac} | ${dut1_if2_mac} -| | | ${next_mac}= | Set Variable If | '${dut}' == 'DUT1' and ${duts_count} == 2 -| | | ... | ${dut2_if1_mac} | ${tg_if2_mac} -| | | VPP Add IP Neighbor -| | | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_${id}_1} -| | | ... | 172.16.${subnet}.2 | ${prev_mac} -| | | VPP Add IP Neighbor -| | | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_${id}_2} -| | | ... | 172.26.${subnet}.2 | ${next_mac} -| | | VPP Route Add -| | | ... | ${nodes['${dut}']} | 172.17.${subnet}.0 | 24 -| | | ... | gateway=172.16.${subnet}.2 -| | | ... | interface=${${dut_str}_${prev_layer}_${id}_1} -| | | VPP Route Add -| | | ... | ${nodes['${dut}']} | 172.27.${subnet}.0 | 24 -| | | ... | gateway=172.26.${subnet}.2 -| | | ... | interface=${${dut_str}_${prev_layer}_${id}_2} -| | | Set VXLAN Bypass -| | | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_${id}_1} -| | | Set VXLAN Bypass -| | | ... | ${nodes['${dut}']} | ${${dut_str}_${prev_layer}_${id}_2} -| | | Set Test Variable -| | | ... | ${${dut_str}_ip4vxlan_${id}_1} | ${ip4vxlan_1} -| | | Set Test Variable -| | | ... | ${${dut_str}_ip4vxlan_${id}_2} | ${ip4vxlan_2} +| | FOR | ${pf} | IN RANGE | 1 | ${nic_pfs} + 1 +| | | Initialize layer ip4vxlan on node on PF | ${dut} | pf=${pf} +| | | ... | count=${count} | start=${start} | | END -| Initialize layer ip4vxlan +| Initialize layer ip4vxlan on node on PF | | [Documentation] -| | ... | VXLAN interfaces and variables to be created on all DUT's interfaces. +| | ... | Setup VXLANoIPv4 between TG and DUTs and DUT to DUT by connecting +| | ... | physical and vxlan interfaces on each DUT. All interfaces are brought +| | ... | up. IPv4 addresses with prefix /24 are configured on interfaces +| | ... | towards TG. VXLAN sub-interfaces has same IPv4 address as interfaces. | | | | ... | *Arguments:* -| | ... | - count - Number of vxlan interfaces. Type: integer +| | ... | - dut - DUT node. +| | ... | Type: string +| | ... | - pf - NIC physical function (physical port). +| | ... | Type: integer +| | ... | - count - Number of vxlan interfaces. +| | ... | Type: integer | | ... | - start - Id of first chain, allows adding chains during test. | | ... | Type: integer | | -| | ... | \| Initialize layer ip4vxlan \| 3 \| 2 \| +| | ... | *Example:* | | -| | [Arguments] | ${count}=${1} | ${start}=${1} +| | ... | \| Initialize layer ip4vxlan on node on PF \| DUT1 \| 3 \| 2 \| | | -| | FOR | ${dut} | IN | @{duts} -| | | Initialize layer ip4vxlan on node | ${dut} | count=${count} -| | ... | start=${start} +| | [Arguments] | ${dut} | ${pf}=${1} | ${count}=${1} | ${start}=${1} +| | +| | Run Keyword If | "${start}" == "1" | VPP Interface Set IP Address +| | ... | ${nodes['${dut}']} | ${${dut}_${int}${pf}_1}[0] +| | ... | 172.${pf}6.0.1 | 24 +| | FOR | ${id} | IN RANGE | ${start} | ${count} + 1 +| | | ${_subnet}= | Evaluate | ${id} - 1 +| | | ${_vni}= | Evaluate | ${id} - 1 +| | | ${_ip4vxlan}= | Create VXLAN interface +| | | ... | ${nodes['${dut}']} | ${_vni} +| | | ... | 172.${pf}6.0.1 | 172.${pf}7.${_subnet}.2 +| | | ${_prev_mac}= | Set Variable If | '${dut}' == 'DUT1' +| | | ... | ${tg_if1_mac} | ${dut1_if2_mac} +| | | ${_next_mac}= | Set Variable If | '${dut}' == 'DUT1' and ${duts_count} == 2 +| | | ... | ${dut2_if1_mac} | ${tg_if2_mac} +| | | ${_even}= | Evaluate | ${pf} % 2 +| | | ${_mac}= | Set Variable If | ${_even} +| | | ... | ${_prev_mac} | ${_next_mac} +| | | VPP Add IP Neighbor +| | | ... | ${nodes['${dut}']} | ${${dut}_${int}${pf}_${id}}[0] +| | | ... | 172.${pf}6.${_subnet}.2 | ${_mac} +| | | VPP Route Add +| | | ... | ${nodes['${dut}']} | 172.${pf}7.${_subnet}.0 | 24 +| | | ... | gateway=172.${pf}6.${_subnet}.2 +| | | ... | interface=${${dut}_${int}${pf}_${id}}[0] +| | | Set VXLAN Bypass +| | | ... | ${nodes['${dut}']} | ${${dut}_${int}${pf}_${id}}[0] +| | | ${_ip4vxlan}= | Create List | ${_ip4vxlan} +| | | Set Test Variable +| | | ... | ${${dut}_ip4vxlan${pf}_${id}} | ${_ip4vxlan} | | END -| | Set Test Variable | ${prev_layer} | ip4vxlan | Configure vhost interfaces | | [Documentation] | | ... | Create two Vhost-User interfaces on defined VPP node. | | | | ... | *Arguments:* -| | ... | - ${dut_node} - DUT node. Type: dictionary -| | ... | - ${sock1} - Socket path for first Vhost-User interface. Type: string -| | ... | - ${sock2} - Socket path for second Vhost-User interface. Type: string +| | ... | - ${dut_node} - DUT node. +| | ... | Type: dictionary +| | ... | - ${sock1} - Socket path for first Vhost-User interface. +| | ... | Type: string +| | ... | - ${sock2} - Socket path for second Vhost-User interface. +| | ... | Type: string | | ... | - ${vhost_if1} - Name of the first Vhost-User interface (Optional). | | ... | Type: string | | ... | - ${vhost_if2} - Name of the second Vhost-User interface (Optional). @@ -576,9 +639,6 @@ | | | | ... | \| Configure vhost interfaces \ | | ... | \| ${nodes['DUT1']} \| /tmp/sock1 \| /tmp/sock2 \| -| | ... | \| Configure vhost interfaces \ -| | ... | \| ${nodes['DUT2']} \| /tmp/sock1 \| /tmp/sock2 \| dut2_vhost_if1 \ -| | ... | \| dut2_vhost_if2 \| | | | | [Arguments] | ${dut_node} | ${sock1} | ${sock2} | ${vhost_if1}=vhost_if1 | | ... | ${vhost_if2}=vhost_if2 | ${is_server}=${False} @@ -600,3 +660,15 @@ | | Set Test Variable | ${${vhost_if2}} | ${vhost_2} | | Set Test Variable | ${${vhost_if1}_mac} | ${vhost_1_mac} | | Set Test Variable | ${${vhost_if2}_mac} | ${vhost_2_mac} + +| Get Vhost dump +| | [Documentation] | Get vhost-user dump. +| | +| | ... | *Arguments:* +| | ... | - dut - DUT node data. +| | ... | Type: dictionary +| | +| | [Arguments] | ${dut} +| | +| | ${vhost_dump}= | Vhost User Dump | ${dut} +| | Return From Keyword | ${vhost_dump} diff --git a/resources/libraries/robot/shared/suite_setup.robot b/resources/libraries/robot/shared/suite_setup.robot index 7cfb38bcf7..5f8c3c5b2f 100644 --- a/resources/libraries/robot/shared/suite_setup.robot +++ b/resources/libraries/robot/shared/suite_setup.robot @@ -26,27 +26,40 @@ | Documentation | Suite setup keywords. *** Keywords *** -| Setup suite single link +| Setup suite topology interfaces | | [Documentation] -| | ... | Common suite setup for single link tests. +| | ... | Common suite setup for one to multiple link tests. | | ... | -| | ... | Compute path for testing on two given nodes in circular topology +| | ... | Compute path for testing on given topology nodes in circular topology | | ... | based on interface model provided as an argument and set | | ... | corresponding suite variables. | | -| | ... | _NOTE:_ This KW sets following suite variables: -| | ... | - duts - List of DUT nodes +| | ... | _NOTE:_ This KW sets various suite variables based on filtered +| | ... | topology. All variables are set with also backward compatibility +| | ... | format dut{m}_if{n} (where the value type is string). +| | ... | List type allows to access physical interfaces in same way as +| | ... | virtual interface (e.g. SRIOV). This keeps abstracted compatibility +| | ... | between existing L1 and L2 KWs library and underlaying physical +| | ... | topology. +| | +| | ... | - duts - List of DUT nodes (name as seen in topology file). | | ... | - duts_count - Number of DUT nodes. -| | ... | - tg - TG node -| | ... | - tg_if1 - 1st TG interface towards DUT. -| | ... | - tg_if1_mac - 1st TG interface MAC address. -| | ... | - tg_if2 - 2nd TG interface towards DUT. -| | ... | - tg_if2_mac - 2nd TG interface MAC address. -| | ... | - dut{n} - DUTx node -| | ... | - dut{n}_if1 - 1st DUT interface. -| | ... | - dut{n}_if1_mac - 1st DUT interface MAC address. -| | ... | - dut{n}_if2 - 2nd DUT interface. -| | ... | - dut{n}_if2_mac - 2nd DUT interface MAC address. +| | ... | - int - Interfacy type (layer). +| | ... | Type: string +| | ... | - dut{n} - DUTx node. +| | ... | Type: dictionary +| | ... | - dut{m}_pf{n} - Nth interface of Mth DUT. +| | ... | Type: list +| | ... | - dut{m}_pf{n}_mac - Nth interface of Mth DUT - MAC address. +| | ... | Type: list +| | ... | - dut{m}_pf{n}_vlan - Nth interface of Mth DUT - VLAN id. +| | ... | Type: list +| | ... | - dut{m}_pf{n}_pci - Nth interface of Mth DUT - PCI address. +| | ... | Type: list +| | ... | - dut{m}_pf{n}_ip4_addr - Nth interface of Mth DUT - IPv4 address. +| | ... | Type: list +| | ... | - dut{m}_pf{n}_ip4_prefix - Nth interface of Mth DUT - IPv4 prefix. +| | ... | Type: list | | | | ... | *Arguments:* | | ... | - ${actions} - Additional setup action. Type: list @@ -54,37 +67,13 @@ | | [Arguments] | @{actions} | | | | ${nic_model_list}= | Create list | ${nic_name} -| | Append Node | ${nodes['TG']} -| | ${duts}= | Get Matches | ${nodes} | DUT* -| | FOR | ${dut} | IN | @{duts} -| | | Append Node | ${nodes['${dut}']} | filter_list=${nic_model_list} -| | END -| | Append Node | ${nodes['TG']} -| | Compute Path | always_same_link=${FALSE} -| | ${tg_if1} | ${tg}= | Next Interface -| | FOR | ${dut} | IN | @{duts} -| | | ${dutx_if1} | ${dutx}= | Next Interface -| | | ${dutx_if2} | ${dutx}= | Next Interface -| | | ${dutx_if1_mac}= | Get Interface MAC | ${dutx} | ${dutx_if1} -| | | ${dutx_if2_mac}= | Get Interface MAC | ${dutx} | ${dutx_if2} -| | | ${dut_str}= | Convert To Lowercase | ${dut} -| | | Set Suite Variable | ${${dut_str}} | ${dutx} -| | | Set Suite Variable | ${${dut_str}_if1} | ${dutx_if1} -| | | Set Suite Variable | ${${dut_str}_if2} | ${dutx_if2} -| | | Set Suite Variable | ${${dut_str}_if1_mac} | ${dutx_if1_mac} -| | | Set Suite Variable | ${${dut_str}_if2_mac} | ${dutx_if2_mac} +| | &{info}= | Compute Circular Topology +| | ... | ${nodes} | filter_list=${nic_model_list} | nic_pfs=${nic_pfs} +| | ${variables}= | Get Dictionary Keys | ${info} +| | FOR | ${variable} | IN | @{variables} +| | | ${value}= | Get From Dictionary | ${info} | ${variable} +| | | Set Suite Variable | ${${variable}} | ${value} | | END -| | ${tg_if2} | ${tg}= | Next Interface -| | ${tg_if1_mac}= | Get Interface MAC | ${tg} | ${tg_if1} -| | ${tg_if2_mac}= | Get Interface MAC | ${tg} | ${tg_if2} -| | ${duts_count}= | Get Length | ${duts} -| | Set Suite Variable | ${duts} -| | Set Suite Variable | ${duts_count} -| | Set Suite Variable | ${tg} -| | Set Suite Variable | ${tg_if1} -| | Set Suite Variable | ${tg_if1_mac} -| | Set Suite Variable | ${tg_if2} -| | Set Suite Variable | ${tg_if2_mac} | | FOR | ${action} | IN | @{actions} | | | Run Keyword | Additional Suite setup Action For ${action} | | END @@ -147,152 +136,84 @@ | | | Run Keyword | Additional Suite setup Action For ${action} | | END -| Setup suite double link -| | [Documentation] -| | ... | Common suite setup for double link tests. -| | ... | -| | ... | Compute path for testing on three given nodes in circular topology -| | ... | with double link between DUTs based on interface model provided as an -| | ... | argument and set corresponding suite variables. -| | -| | ... | *Arguments:* -| | ... | - ${actions} - Additional setup action. Type: list -| | -| | ... | _NOTE:_ This KW sets following suite variables: -| | ... | - duts - List of DUT nodes -| | ... | - duts_count - Number of DUT nodes. -| | ... | - tg - TG node -| | ... | - tg_if1 - 1st TG interface towards DUT. -| | ... | - tg_if1 - 1st TG interface MAC address. -| | ... | - tg_if2 - 2nd TG interface towards DUT. -| | ... | - tg_if2 - 2nd TG interface MAC address. -| | ... | - dut1 - DUT1 node -| | ... | - dut1_if1 - DUT1 interface towards TG. -| | ... | - dut1_if2_1 - DUT1 interface 1 towards DUT2. -| | ... | - dut1_if2_2 - DUT1 interface 2 towards DUT2. -| | ... | - dut2 - DUT2 node -| | ... | - dut2_if1_1 - DUT2 interface 1 towards DUT1. -| | ... | - dut2_if1_2 - DUT2 interface 2 towards DUT1. -| | ... | - dut2_if2 - DUT2 interface towards TG. -| | -| | [Arguments] | @{actions} -| | -| | ${nic_model_list}= | Create list | ${nic_name} -| | # Compute path TG - DUT1 with single link in between -| | Append Node | ${nodes['TG']} -| | Append Node | ${nodes['DUT1']} | filter_list=${nic_model_list} -| | Append Node | ${nodes['TG']} -| | Compute Path -| | ${tg_if1} | ${tg}= | Next Interface -| | ${dut1_if1} | ${dut1}= | Next Interface -| | # Compute path TG - DUT2 with single link in between -| | Clear Path -| | Append Node | ${nodes['TG']} -| | Append Node | ${nodes['DUT2']} | filter_list=${nic_model_list} -| | Append Node | ${nodes['TG']} -| | Compute Path -| | ${tg_if2} | ${tg}= | Next Interface -| | ${dut2_if2} | ${dut2}= | Next Interface -| | # Compute path DUT1 - DUT2 with double link in between -| | Clear Path -| | Append Node | ${nodes['DUT1']} | filter_list=${nic_model_list} -| | Append Node | ${nodes['DUT2']} | filter_list=${nic_model_list} -| | Append Node | ${nodes['DUT1']} | filter_list=${nic_model_list} -| | Compute Path | always_same_link=${FALSE} -| | ${dut1_if2_1} | ${dut1}= | First Interface -| | ${dut1_if2_2} | ${dut1}= | Last Interface -| | ${dut2_if1_1} | ${dut2}= | First Ingress Interface -| | ${dut2_if1_2} | ${dut2}= | Last Egress Interface -| | ${tg_if1_mac}= | Get Interface MAC | ${tg} | ${tg_if1} -| | ${tg_if2_mac}= | Get Interface MAC | ${tg} | ${tg_if2} -| | ${duts_count}= | Set Variable | 2 -| | ${duts}= | Get Matches | ${nodes} | DUT* -| | # Set suite variables -| | Set Suite Variable | ${duts} -| | Set Suite Variable | ${duts_count} -| | Set Suite Variable | ${tg} -| | Set Suite Variable | ${tg_if1} -| | Set Suite Variable | ${tg_if1_mac} -| | Set Suite Variable | ${tg_if2} -| | Set Suite Variable | ${tg_if2_mac} -| | Set Suite Variable | ${dut1} -| | Set Suite Variable | ${dut1_if1} -| | Set Suite Variable | ${dut1_if2_1} -| | Set Suite Variable | ${dut1_if2_2} -| | Set Suite Variable | ${dut2} -| | Set Suite Variable | ${dut2_if1_1} -| | Set Suite Variable | ${dut2_if1_2} -| | Set Suite Variable | ${dut2_if2} -| | FOR | ${action} | IN | @{actions} -| | | Run Keyword | Additional Suite setup Action For ${action} -| | END - | Additional Suite Setup Action For scapy | | [Documentation] | | ... | Additional Setup for suites which uses scapy as Traffic generator. | | -| | Set Interface State | ${tg} | ${tg_if1} | up -| | Set Interface State | ${tg} | ${tg_if2} | up +| | FOR | ${dut} | IN | @{duts} +| | | Set Suite Variable | ${${dut}_vf1} | ${${dut}_${int}1} +| | | Set Suite Variable | ${${dut}_vf2} | ${${dut}_${int}2} +| | END +| | Set Interface State | ${tg} | ${TG_pf1}[0] | up +| | Set Interface State | ${tg} | ${TG_pf2}[0] | up | Additional Suite Setup Action For dpdk | | [Documentation] | | ... | Additional Setup for suites which uses dpdk. | | | | FOR | ${dut} | IN | @{duts} -| | | ${dut_str}= | Convert To Lowercase | ${dut} | | | Initialize DPDK Environment | ${nodes['${dut}']} -| | | ... | ${${dut_str}_if1} | ${${dut_str}_if2} +| | | ... | ${${dut}_${int}1}[0] | ${${dut}_${int}2}[0] | | END -| Additional Suite Setup Action For performance +| Additional Suite Setup Action For performance vf | | [Documentation] -| | ... | Additional Setup for suites which uses performance measurement. -| | ... -| | Run Keyword If | ${duts_count} == 1 -| | ... | Initialize traffic generator | ${tg} | ${tg_if1} | ${tg_if2} -| | ... | ${dut1} | ${dut1_if1} | ${dut1} | ${dut1_if2} | ${osi_layer} -| | Run Keyword If | ${duts_count} == 2 -| | ... | Initialize traffic generator | ${tg} | ${tg_if1} | ${tg_if2} -| | ... | ${dut1} | ${dut1_if1} | ${dut2} | ${dut2_if2} | ${osi_layer} - -| Additional Suite Setup Action For performance_rdma -| | [Documentation] -| | ... | Additional Setup for suites which uses performance measurement with -| | ... | RDMA-core driver. -| | ... -# TODO: Add functionality for tests that need some. -| | Additional Suite Setup Action For performance - -| Additional Suite Setup Action For performance_avf -| | [Documentation] -| | ... | Additional Setup for suites which uses performance measurement over -| | ... | SRIOV AVF. +| | ... | Additional Setup for suites which uses performance measurement for +| | ... | single DUT (inner loop). | | -| | FOR | ${dut} | IN | @{duts} -| | | ${if1_avf_arr}= | Init AVF interface | ${nodes['${dut}']} | ${${dut}_if1} -| | | ... | numvfs=${1} | osi_layer=${osi_layer} -| | | ${if2_avf_arr}= | Init AVF interface | ${nodes['${dut}']} | ${${dut}_if2} -| | | ... | numvfs=${1} | osi_layer=${osi_layer} -| | # Currently only one AVF is supported. -| | | Set Suite Variable | ${${dut}_if1_vf0} | ${if1_avf_arr[0]} -| | | Set Suite Variable | ${${dut}_if2_vf0} | ${if2_avf_arr[0]} +| | ... | *Arguments:* +| | ... | - dut - DUT node. Type: string +| | +| | ... | *Example:* +| | +| | ... | \| Additional Suite Setup Action For performance_dut \| DUT1 \| +| | +| | [Arguments] | ${dut} +| | +| | FOR | ${pf} | IN RANGE | 1 | ${nic_pfs} + 1 +| | | ${_vf}= +| | | ... | Run Keyword | Init ${nic_driver} interface +| | | ... | ${nodes['${dut}']} | ${${dut}_pf${pf}}[0] | numvfs=${nic_vfs} +| | | ... | osi_layer=${osi_layer} +| | | ${_mac}= +| | | ... | Create List | ${EMPTY} +| | | ${_ip4_addr}= +| | | ... | Create List | ${EMPTY} +| | | ${_ip4_prefix}= +| | | ... | Create List | ${EMPTY} +| | | ${_pci}= +| | | ... | Create List | ${EMPTY} +| | | ${_vlan}= +| | | ... | Create List | ${EMPTY} +| | | Set Suite Variable +| | | ... | ${${dut}_prevf${pf}} | ${_vf} +| | | Set Suite Variable +| | | ... | ${${dut}_prevf${pf}_ip4_addr} | ${_ip4_addr} +| | | Set Suite Variable +| | | ... | ${${dut}_prevf${pf}_ip4_prefix} | ${_ip4_prefix} +| | | Set Suite Variable +| | | ... | ${${dut}_prevf${pf}_mac} | ${_mac} +| | | Set Suite Variable +| | | ... | ${${dut}_prevf${pf}_pci} | ${_pci} +| | | Set Suite Variable +| | | ... | ${${dut}_prevf${pf}_vlan} | ${_vlan} | | END -| | Run Keyword If | ${duts_count} == 1 -| | ... | Initialize traffic generator | ${tg} | ${tg_if1} | ${tg_if2} -| | ... | ${dut1} | ${dut1_if1_vf0} | ${dut1} | ${dut1_if2_vf0} | ${osi_layer} -| | Run Keyword If | ${duts_count} == 2 -| | ... | Initialize traffic generator | ${tg} | ${tg_if1} | ${tg_if2} -| | ... | ${dut1} | ${dut1_if1_vf0} | ${dut2} | ${dut2_if2_vf0} | ${osi_layer} +| | Set Suite Variable +| | ... | ${int} | prevf -| Additional Suite Setup Action For avf +| Additional Suite Setup Action For performance | | [Documentation] -| | ... | Additional Setup for suites which uses SRIOV AVF. +| | ... | Additional Setup for suites which uses performance measurement. | | | | FOR | ${dut} | IN | @{duts} -| | # Currently only one AVF is supported. -| | | Set Suite Variable | ${${dut}_if1_vf0} | ${${dut}_if1} -| | | Set Suite Variable | ${${dut}_if2_vf0} | ${${dut}_if2} +| | | Run Keyword If | ${nic_vfs} > 0 +| | | ... | Additional Suite Setup Action For performance vf | ${dut} | | END +| | Initialize traffic generator +| | ... | ${tg} | ${TG_pf1}[0] | ${TG_pf2}[0] +| | ... | ${dut1} | ${DUT1_${int}1}[0] +| | ... | ${dut${duts_count}} | ${DUT${duts_count}_${int}2}[0] +| | ... | ${osi_layer} | Additional Suite Setup Action For ipsechw | | [Documentation] diff --git a/resources/libraries/robot/shared/suite_teardown.robot b/resources/libraries/robot/shared/suite_teardown.robot index 362c7366e9..38683658d7 100644 --- a/resources/libraries/robot/shared/suite_teardown.robot +++ b/resources/libraries/robot/shared/suite_teardown.robot @@ -47,7 +47,7 @@ | | | | FOR | ${dut} | IN | @{duts} | | | Cleanup DPDK Environment -| | | ... | ${nodes['${dut}']} | ${${dut}_if1} | ${${dut}_if2} +| | | ... | ${nodes['${dut}']} | ${${dut}_${int}1}[0] | ${${dut}_${int}2}[0] | | END | Additional Suite Tear Down Action For wrk diff --git a/resources/libraries/robot/shared/test_setup.robot b/resources/libraries/robot/shared/test_setup.robot index 5ebe048cd9..b5b9e57cf7 100644 --- a/resources/libraries/robot/shared/test_setup.robot +++ b/resources/libraries/robot/shared/test_setup.robot @@ -29,6 +29,7 @@ | | [Arguments] | @{actions} | | | | Reset PAPI History On All DUTs | ${nodes} +| | ${int} = | Set Variable If | ${nic_vfs} > 0 | prevf | pf | | Create base startup configuration of VPP on all DUTs | | FOR | ${action} | IN | @{actions} | | | Run Keyword | Additional Test Setup Action For ${action} diff --git a/resources/libraries/robot/shared/testing_path.robot b/resources/libraries/robot/shared/testing_path.robot deleted file mode 100644 index 696e7397a5..0000000000 --- a/resources/libraries/robot/shared/testing_path.robot +++ /dev/null @@ -1,380 +0,0 @@ -# Copyright (c) 2018 Cisco and/or its affiliates. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at: -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -*** Settings *** -| Library | resources.libraries.python.InterfaceUtil -| Library | resources.libraries.python.NodePath - -*** Keywords *** -| Configure path in 2-node circular topology -| | [Documentation] | Compute path for testing on two given nodes in circular -| | ... | topology and set corresponding test case variables. -| | -| | ... | *Arguments:* -| | ... | - ${tg_node} - TG node. Type: dictionary -| | ... | - ${dut_node} - DUT node. Type: dictionary -| | ... | - ${tg2_node} - Node where the path ends. Must be the same as TG node -| | ... | parameter in circular topology. Type: dictionary -| | -| | ... | *Return:* -| | ... | - No value returned -| | -| | ... | _NOTE:_ This KW sets following test case variables: -| | ... | - ${tg_node} - TG node. -| | ... | - ${tg_to_dut_if1} - 1st TG interface towards DUT. -| | ... | - ${tg_to_dut_if2} - 2nd TG interface towards DUT. -| | ... | - ${dut_node} - DUT node. -| | ... | - ${dut_to_tg_if1} - 1st DUT interface towards TG. -| | ... | - ${dut_to_tg_if2} - 2nd DUT interface towards TG. -| | ... | - ${tg_to_dut_if1_mac} -| | ... | - ${tg_to_dut_if2_mac} -| | ... | - ${dut_to_tg_if1_mac} -| | ... | - ${dut_to_tg_if2_mac} -| | -| | ... | *Example:* -| | -| | ... | \| Given Configure path in 2-node circular topology \| ${nodes['TG']} \ -| | ... | \| ${nodes['DUT1']} \| ${nodes['TG']} \| -| | -| | [Arguments] | ${tg_node} | ${dut_node} | ${tg2_node} -| | Should Be Equal | ${tg_node} | ${tg2_node} -| | Append Nodes | ${tg_node} | ${dut_node} | ${tg_node} -| | Compute Path | always_same_link=${FALSE} -| | ${tg_to_dut_if1} | ${tmp}= | First Interface -| | ${tg_to_dut_if2} | ${tmp}= | Last Interface -| | ${dut_to_tg_if1} | ${tmp}= | First Ingress Interface -| | ${dut_to_tg_if2} | ${tmp}= | Last Egress Interface -| | ${tg_to_dut_if1_mac}= | Get interface mac | ${tg_node} | ${tg_to_dut_if1} -| | ${tg_to_dut_if2_mac}= | Get interface mac | ${tg_node} | ${tg_to_dut_if2} -| | ${dut_to_tg_if1_mac}= | Get interface mac | ${dut_node} | ${dut_to_tg_if1} -| | ${dut_to_tg_if2_mac}= | Get interface mac | ${dut_node} | ${dut_to_tg_if2} -| | Set Test Variable | ${tg_to_dut_if1} -| | Set Test Variable | ${tg_to_dut_if2} -| | Set Test Variable | ${dut_to_tg_if1} -| | Set Test Variable | ${dut_to_tg_if2} -| | Set Test Variable | ${tg_to_dut_if1_mac} -| | Set Test Variable | ${tg_to_dut_if2_mac} -| | Set Test Variable | ${dut_to_tg_if1_mac} -| | Set Test Variable | ${dut_to_tg_if2_mac} -| | Set Test Variable | ${tg_node} -| | Set Test Variable | ${dut_node} - -| Set interfaces in 2-node circular topology up -| | [Documentation] | Set UP state on interfaces in 2-node path on nodes and -| | ... | wait for all interfaces are ready. Requires more than one link -| | ... | between nodes. -| | -| | ... | *Arguments:* -| | ... | - No arguments. -| | -| | ... | *Return:* -| | ... | - No value returned. -| | -| | ... | _NOTE:_ This KW uses test variables sets in -| | ... | "Configure path in 2-node circular topology" KW. -| | -| | ... | *Example:* -| | -| | ... | \| Given Configure path in 2-node circular topology \| ${nodes['TG']} \ -| | ... | \| ${nodes['DUT1']} \| ${nodes['TG']} \| -| | ... | \| And Set interfaces in 2-node circular topology up \| -| | -| | Set Interface State | ${tg_node} | ${tg_to_dut_if1} | up -| | Set Interface State | ${tg_node} | ${tg_to_dut_if2} | up -| | Set Interface State | ${dut_node} | ${dut_to_tg_if1} | up -| | Set Interface State | ${dut_node} | ${dut_to_tg_if2} | up -| | Vpp Node Interfaces Ready Wait | ${dut_node} - -| Configure path in 3-node circular topology -| | [Documentation] | Compute path for testing on three given nodes in circular -| | ... | topology and set corresponding test case variables. -| | -| | ... | *Arguments:* -| | ... | - ${tg_node} - TG node. Type: dictionary -| | ... | - ${dut1_node} - DUT1 node. Type: dictionary -| | ... | - ${dut2_node} - DUT2 node. Type: dictionary -| | ... | - ${tg2_node} - Node where the path ends. Must be the same as TG node -| | ... | parameter in circular topology. Type: dictionary -| | -| | ... | *Return:* -| | ... | - No value returned -| | ... | -| | ... | _NOTE:_ This KW sets following test case variables: -| | ... | - ${tg_node} - TG node. -| | ... | - ${tg_to_dut1} - TG interface towards DUT1. -| | ... | - ${tg_to_dut2} - TG interface towards DUT2. -| | ... | - ${dut1_node} - DUT1 node. -| | ... | - ${dut1_to_tg} - DUT1 interface towards TG. -| | ... | - ${dut1_to_dut2} - DUT1 interface towards DUT2. -| | ... | - ${dut2_node} - DUT2 node. -| | ... | - ${dut2_to_tg} - DUT2 interface towards TG. -| | ... | - ${dut2_to_dut1} - DUT2 interface towards DUT1. -| | ... | - ${tg_to_dut1_mac} -| | ... | - ${tg_to_dut2_mac} -| | ... | - ${dut1_to_tg_mac} -| | ... | - ${dut1_to_dut2_mac} -| | ... | - ${dut2_to_tg_mac} -| | ... | - ${dut2_to_dut1_mac} -| | -| | ... | *Example:* -| | -| | ... | \| Given Configure path in 3-node circular topology \| ${nodes['TG']} \ -| | ... | \| ${nodes['DUT1']} \| ${nodes['DUT2']} \| ${nodes['TG']} \| -| | -| | [Arguments] | ${tg_node} | ${dut1_node} | ${dut2_node} | ${tg2_node} -| | Should Be Equal | ${tg_node} | ${tg2_node} -| | Append Nodes | ${tg_node} | ${dut1_node} | ${dut2_node} | ${tg_node} -| | Compute Path -| | ${tg_to_dut1} | ${tmp}= | Next Interface -| | ${dut1_to_tg} | ${tmp}= | Next Interface -| | ${dut1_to_dut2} | ${tmp}= | Next Interface -| | ${dut2_to_dut1} | ${tmp}= | Next Interface -| | ${dut2_to_tg} | ${tmp}= | Next Interface -| | ${tg_to_dut2} | ${tmp}= | Next Interface -| | ${tg_to_dut1_mac}= | Get interface mac | ${tg_node} | ${tg_to_dut1} -| | ${tg_to_dut2_mac}= | Get interface mac | ${tg_node} | ${tg_to_dut2} -| | ${dut1_to_tg_mac}= | Get interface mac | ${dut1_node} | ${dut1_to_tg} -| | ${dut1_to_dut2_mac}= | Get interface mac | ${dut1_node} | ${dut1_to_dut2} -| | ${dut2_to_tg_mac}= | Get interface mac | ${dut2_node} | ${dut2_to_tg} -| | ${dut2_to_dut1_mac}= | Get interface mac | ${dut2_node} | ${dut2_to_dut1} -| | Set Test Variable | ${tg_to_dut1} -| | Set Test Variable | ${dut1_to_tg} -| | Set Test Variable | ${tg_to_dut2} -| | Set Test Variable | ${dut2_to_tg} -| | Set Test Variable | ${dut1_to_dut2} -| | Set Test Variable | ${dut2_to_dut1} -| | Set Test Variable | ${tg_to_dut1_mac} -| | Set Test Variable | ${tg_to_dut2_mac} -| | Set Test Variable | ${dut1_to_tg_mac} -| | Set Test Variable | ${dut1_to_dut2_mac} -| | Set Test Variable | ${dut2_to_tg_mac} -| | Set Test Variable | ${dut2_to_dut1_mac} -| | Set Test Variable | ${tg_node} -| | Set Test Variable | ${dut1_node} -| | Set Test Variable | ${dut2_node} - -| Set interfaces in 3-node circular topology up -| | [Documentation] -| | ... | Set UP state on interfaces in 3-node path on nodes and \ -| | ... | wait until all interfaces are ready. -| | -| | ... | *Arguments:* -| | ... | - No arguments. -| | -| | ... | *Return:* -| | ... | - No value returned. -| | -| | ... | _NOTE:_ This KW uses test variables sets in -| | ... | "Configure path in 3-node circular topology" KW. -| | -| | ... | *Example:* -| | -| | ... | \| Given Configure path in 3-node circular topology \| ${nodes['TG']} \ -| | ... | \| ${nodes['DUT1']} \| ${nodes['TG']} \| -| | ... | \| And Set interfaces in 3-node circular topology up \| -| | -| | Set Interface State | ${tg_node} | ${tg_to_dut1} | up -| | Set Interface State | ${tg_node} | ${tg_to_dut2} | up -| | Set Interface State | ${dut1_node} | ${dut1_to_tg} | up -| | Set Interface State | ${dut1_node} | ${dut1_to_dut2} | up -| | Set Interface State | ${dut2_node} | ${dut2_to_tg} | up -| | Set Interface State | ${dut2_node} | ${dut2_to_dut1} | up -| | Vpp Node Interfaces Ready Wait | ${dut1_node} -| | Vpp Node Interfaces Ready Wait | ${dut2_node} - -| Configure path in double-link 3-node circular topology -| | [Documentation] -| | ... | Compute path for testing on three given nodes in circular \ -| | ... | topology with double link and set corresponding \ -| | ... | test case variables. -| | -| | ... | *Arguments:* -| | ... | - ${tg_node} - TG node. Type: dictionary -| | ... | - ${dut1_node} - DUT1 node. Type: dictionary -| | ... | - ${dut2_node} - DUT2 node. Type: dictionary -| | ... | - ${tg2_node} - Node where the path ends. Must be the same as TG node -| | ... | parameter in circular topology. Type: dictionary -| | -| | ... | *Return:* -| | ... | - No value returned. -| | ... | -| | ... | _NOTE:_ This KW sets following test case variables: -| | ... | - ${tg_node} - TG node. -| | ... | - ${tg_to_dut1_if1} - TG interface towards DUT1 interface 1. -| | ... | - ${tg_to_dut1_if2} - TG interface towards DUT1 interface 2. -| | ... | - ${tg_to_dut1_mac_if1} - TG towards DUT1 MAC address interface 1. -| | ... | - ${tg_to_dut1_mac_if2} - TG towards DUT1 MAC address interface 2. -| | ... | - ${tg_to_dut2_if1} - TG interface towards DUT2 interface 1. -| | ... | - ${tg_to_dut2_if2} - TG interface towards DUT2 interface 2. -| | ... | - ${tg_to_dut2_mac_if1} - TG towards DUT2 MAC address interface 1. -| | ... | - ${tg_to_dut2_mac_if2} - TG towards DUT2 MAC address interface 2. -| | ... | - ${dut1_node} - DUT1 node. -| | ... | - ${dut1_to_tg_if1} - DUT1 interface towards TG interface 1. -| | ... | - ${dut1_to_tg_if2} - DUT1 interface towards TG interface 2. -| | ... | - ${dut1_to_tg_mac_if1} - DUT1 towards TG MAC address interface 1. -| | ... | - ${dut1_to_tg_mac_if2} - DUT1 towards TG MAC address interface 2. -| | ... | - ${dut1_to_dut2_if1} - DUT1 interface towards DUT2 interface 1. -| | ... | - ${dut1_to_dut2_if2} - DUT1 interface towards DUT2 interface 2. -| | ... | - ${dut1_to_dut2_mac_if1} - DUT1 towards DUT2 MAC address interface 1. -| | ... | - ${dut1_to_dut2_mac_if2} - DUT1 towards DUT2 MAC address interface 2. -| | ... | - ${dut2_node} - DUT2 node. -| | ... | - ${dut2_to_tg_if1} - DUT2 interface towards TG interface 1. -| | ... | - ${dut2_to_tg_if2} - DUT2 interface towards TG interface 2. -| | ... | - ${dut2_to_tg_mac_if1} - DUT2 towards TG MAC address interface 1. -| | ... | - ${dut2_to_tg_mac_if2} - DUT2 towards TG MAC address interface 2. -| | ... | - ${dut2_to_dut1_if1} - DUT2 interface towards DUT1 interface 1. -| | ... | - ${dut2_to_dut1_if2} - DUT2 interface towards DUT1 interface 2. -| | ... | - ${dut2_to_dut1_mac_if1} - DUT2 towards DUT1 MAC address interface 1. -| | ... | - ${dut2_to_dut1_mac_if2} - DUT2 towards DUT1 MAC address interface 2. -| | -| | ... | *Example:* -| | -| | ... | \| Configure path in double-link 3-node circular topology \| ${nodes['TG']} \ -| | ... | \| ${nodes['DUT1']} \| ${nodes['DUT2']} \| ${nodes['TG']} \| -| | -| | [Arguments] | ${tg_node} | ${dut1_node} | ${dut2_node} | ${tg2_node} -| | Should Be Equal | ${tg_node} | ${tg2_node} -| | # Compute path TG - DUT1 with two links in between -| | Append Nodes | ${tg_node} | ${dut1_node} | ${tg_node} -| | Compute Path | always_same_link=${FALSE} -| | ${tg_to_dut1_if1} | ${tmp}= | First Interface -| | ${tg_to_dut1_if2} | ${tmp}= | Last Interface -| | ${dut1_to_tg_if1} | ${tmp}= | First Ingress Interface -| | ${dut1_to_tg_if2} | ${tmp}= | Last Egress Interface -| | # Compute path TG - DUT2 with two links in between -| | Clear Path -| | Append Nodes | ${tg_node} | ${dut2_node} | ${tg_node} -| | Compute Path | always_same_link=${FALSE} -| | ${tg_to_dut2_if1} | ${tmp}= | First Interface -| | ${tg_to_dut2_if2} | ${tmp}= | Last Interface -| | ${dut2_to_tg_if1} | ${tmp}= | First Ingress Interface -| | ${dut2_to_tg_if2} | ${tmp}= | Last Egress Interface -| | # Compute path DUT1 - DUT2 with one link in between -| | Clear Path -| | Append Nodes | ${dut1_node} | ${dut2_node} | ${dut1_node} -| | Compute Path | always_same_link=${FALSE} -| | ${dut1_to_dut2_if1} | ${tmp}= | First Interface -| | ${dut1_to_dut2_if2} | ${tmp}= | Last Interface -| | ${dut2_to_dut1_if1} | ${tmp}= | First Ingress Interface -| | ${dut2_to_dut1_if2} | ${tmp}= | Last Egress Interface -| | # Set test variables -| | Set Test Variable | ${tg_to_dut1_if1} -| | Set Test Variable | ${tg_to_dut1_if2} -| | Set Test Variable | ${tg_to_dut2_if1} -| | Set Test Variable | ${tg_to_dut2_if2} -| | Set Test Variable | ${dut1_to_tg_if1} -| | Set Test Variable | ${dut1_to_tg_if2} -| | Set Test Variable | ${dut2_to_tg_if1} -| | Set Test Variable | ${dut2_to_tg_if2} -| | Set Test Variable | ${dut1_to_dut2_if1} -| | Set Test Variable | ${dut1_to_dut2_if2} -| | Set Test Variable | ${dut2_to_dut1_if1} -| | Set Test Variable | ${dut2_to_dut1_if2} -| | Set Test Variable | ${tg_node} -| | Set Test Variable | ${dut1_node} -| | Set Test Variable | ${dut2_node} -| | # Set Mac Addresses -| | ${tg_to_dut1_if1_mac}= | Get interface mac | ${tg_node} | ${tg_to_dut1_if1} -| | ${tg_to_dut1_if2_mac}= | Get interface mac | ${tg_node} | ${tg_to_dut1_if2} -| | ${tg_to_dut2_if1_mac}= | Get interface mac | ${tg_node} | ${tg_to_dut2_if1} -| | ${tg_to_dut2_if2_mac}= | Get interface mac | ${tg_node} | ${tg_to_dut2_if2} -| | ${dut1_to_tg_if1_mac}= | Get interface mac | ${dut1_node} -| | ... | ${dut1_to_tg_if1} -| | ${dut1_to_tg_if2_mac}= | Get interface mac | ${dut1_node} -| | ... | ${dut1_to_tg_if2} -| | ${dut1_to_dut2_if1_mac}= | Get interface mac | ${dut1_node} -| | ... | ${dut1_to_dut2_if1} -| | ${dut1_to_dut2_if2_mac}= | Get interface mac | ${dut1_node} -| | ... | ${dut1_to_dut2_if2} -| | ${dut2_to_tg_if1_mac}= | Get interface mac | ${dut2_node} -| | ... | ${dut2_to_tg_if1} -| | ${dut2_to_tg_if2_mac}= | Get interface mac | ${dut2_node} -| | ... | ${dut2_to_tg_if2} -| | ${dut2_to_dut1_if1_mac}= | Get interface mac | ${dut2_node} -| | ... | ${dut2_to_dut1_if1} -| | ${dut2_to_dut1_if2_mac}= | Get interface mac | ${dut2_node} -| | ... | ${dut2_to_dut1_if2} -| | Set Test Variable | ${tg_to_dut1_if1_mac} -| | Set Test Variable | ${tg_to_dut1_if2_mac} -| | Set Test Variable | ${tg_to_dut2_if1_mac} -| | Set Test Variable | ${tg_to_dut2_if2_mac} -| | Set Test Variable | ${dut1_to_tg_if1_mac} -| | Set Test Variable | ${dut1_to_tg_if2_mac} -| | Set Test Variable | ${dut1_to_dut2_if1_mac} -| | Set Test Variable | ${dut1_to_dut2_if2_mac} -| | Set Test Variable | ${dut2_to_tg_if1_mac} -| | Set Test Variable | ${dut2_to_tg_if2_mac} -| | Set Test Variable | ${dut2_to_dut1_if1_mac} -| | Set Test Variable | ${dut2_to_dut1_if2_mac} - -| Set interfaces in double-link 3-node circular topology up -| | [Documentation] -| | ... | Set UP state on interfaces in 3-node double link path \ -| | ... | wait until all interfaces are ready. -| | -| | ... | *Arguments:* -| | ... | - No arguments. -| | -| | ... | *Return:* -| | ... | - No value returned. -| | -| | ... | _NOTE:_ This KW uses test variables sets in -| | ... | "Configure path in double-link 3-node circular topology" KW. -| | -| | ... | *Example:* -| | -| | ... | \| Configure path in double-link 3-node circular topology \| ${nodes['TG']} \ -| | ... | \| ${nodes['DUT1']} \| ${nodes['TG']} \| -| | ... | \| Interfaces in Double-Link 3-node testing are UP \| -| | -| | Set Interface State | ${tg_node} | ${tg_to_dut1_if1} | up -| | Set Interface State | ${tg_node} | ${tg_to_dut1_if2} | up -| | Set Interface State | ${tg_node} | ${tg_to_dut2_if1} | up -| | Set Interface State | ${tg_node} | ${tg_to_dut2_if2} | up -| | Set Interface State | ${dut1_node} | ${dut1_to_tg_if1} | up -| | Set Interface State | ${dut1_node} | ${dut1_to_tg_if2} | up -| | Set Interface State | ${dut2_node} | ${dut2_to_tg_if1} | up -| | Set Interface State | ${dut2_node} | ${dut2_to_tg_if2} | up -| | Set Interface State | ${dut1_node} | ${dut1_to_dut2_if1} | up -| | Set Interface State | ${dut1_node} | ${dut1_to_dut2_if2} | up -| | Set Interface State | ${dut2_node} | ${dut2_to_dut1_if1} | up -| | Set Interface State | ${dut2_node} | ${dut2_to_dut1_if2} | up -| | Vpp Node Interfaces Ready Wait | ${dut1_node} -| | Vpp Node Interfaces Ready Wait | ${dut2_node} - -| Configure interfaces in path up -| | [Documentation] -| | ... | Set UP state on interfaces in 2-node or 3-node path on nodes and \ -| | ... | wait until all interfaces are ready. -| | -| | ... | *Arguments:* -| | ... | - No arguments. -| | -| | ... | *Return:* -| | ... | - No value returned. -| | -| | ... | _NOTE:_ This KW uses test variables sets in\ -| | ... | "Configure path in 2-node circular topology" or\ -| | ... | "Configure path in 3-node circular topology" KW. -| | -| | ... | *Example:* -| | -| | ... | \| Configure interfaces in path up \| -| | -| | ${dut2_status} | ${value}= | Run Keyword And Ignore Error -| | ... | Variable Should Exist | ${dut2} -| | -| | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | Set interfaces in 3-node circular topology up -| | ... | ELSE -| | ... | Set interfaces in 2-node circular topology up diff --git a/resources/libraries/robot/shared/vm.robot b/resources/libraries/robot/shared/vm.robot index b0fe5cf457..5963287335 100644 --- a/resources/libraries/robot/shared/vm.robot +++ b/resources/libraries/robot/shared/vm.robot @@ -1,4 +1,4 @@ -# Copyright (c) 2019 Cisco and/or its affiliates. +# Copyright (c) 2020 Cisco and/or its affiliates. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at: @@ -50,7 +50,7 @@ | | ... | nf_chains=${nf_chains} | nf_nodes=${nf_nodes} | jumbo=${jumbo} | | ... | perf_qemu_qsz=${perf_qemu_qsz} | use_tuned_cfs=${use_tuned_cfs} | | ... | auto_scale=${auto_scale} | vnf=${vnf} -| | ... | tg_if1_mac=${tg_if1_mac} | tg_if2_mac=${tg_if2_mac} +| | ... | tg_if1_mac=${TG_pf1_mac} | tg_if2_mac=${TG_pf2_mac} | | ... | vs_dtc=${cpu_count_int} | nf_dtc=${nf_dtc} | nf_dtcr=${nf_dtcr} | | ... | rxq_count_int=${rxq_count_int} | enable_csum=${False} | | ... | enable_gso=${False} @@ -96,7 +96,7 @@ | | ... | nf_chains=${nf_chains} | nf_nodes=${nf_nodes} | jumbo=${jumbo} | | ... | perf_qemu_qsz=${perf_qemu_qsz} | use_tuned_cfs=${use_tuned_cfs} | | ... | auto_scale=${auto_scale} | vnf=${vnf} -| | ... | tg_if1_mac=${tg_if1_mac} | tg_if2_mac=${tg_if2_mac} +| | ... | tg_if1_mac=${TG_pf1_mac} | tg_if2_mac=${TG_pf2_mac} | | ... | vs_dtc=${cpu_count_int} | nf_dtc=${nf_dtc} | nf_dtcr=${nf_dtcr} | | ... | rxq_count_int=${rxq_count_int} | enable_csum=${False} | | ... | enable_gso=${False} diff --git a/resources/libraries/robot/wrk/wrk_utils.robot b/resources/libraries/robot/wrk/wrk_utils.robot index 2a24bce9f3..0e7150ba1e 100644 --- a/resources/libraries/robot/wrk/wrk_utils.robot +++ b/resources/libraries/robot/wrk/wrk_utils.robot @@ -42,7 +42,7 @@ | | | | [Arguments] | ${profile} | | -| | ${tg_numa}= | Get interfaces numa node | ${tg} | ${tg_if1} | ${tg_if2} +| | ${tg_numa}= | Get interfaces numa node | ${tg} | ${TG_pf1}[0] | ${TG_pf2}[0] | | ${output}= | Run wrk | ${tg} | ${profile} | ${tg_numa} | bw | | Set test message | ${output} @@ -60,7 +60,7 @@ | | | | [Arguments] | ${profile} | | -| | ${tg_numa}= | Get interfaces numa node | ${tg} | ${tg_if1} | ${tg_if2} +| | ${tg_numa}= | Get interfaces numa node | ${tg} | ${TG_pf1}[0] | ${TG_pf2}[0] | | ${output}= | Run wrk | ${tg} | ${profile} | ${tg_numa} | rps | | Set test message | ${output} @@ -78,6 +78,6 @@ | | | | [Arguments] | ${profile} | | -| | ${tg_numa}= | Get interfaces numa node | ${tg} | ${tg_if1} | ${tg_if2} +| | ${tg_numa}= | Get interfaces numa node | ${tg} | ${TG_pf1}[0] | ${TG_pf2}[0] | | ${output}= | Run wrk | ${tg} | ${profile} | ${tg_numa} | cps | | Set test message | ${output} -- cgit 1.2.3-korg