+| Lisp IPv4 forwarding initialized in a 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:*
+| | ... | \| Lisp IPv4 forwarding initialized in a 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 Interface State | ${dut1} | ${dut1_if1} | up
+| | Set Interface State | ${dut1} | ${dut1_if2} | up
+| | Set Interface State | ${dut2} | ${dut2_if1} | up
+| | Set Interface State | ${dut2} | ${dut2_if2} | up
+| | ${tg1_if1_mac}= | Get Interface MAC | ${tg} | ${tg_if1}
+| | ${tg1_if2_mac}= | Get Interface MAC | ${tg} | ${tg_if2}
+| | ${dut1_if2_mac}= | Get Interface MAC | ${dut1} | ${dut1_if2}
+| | ${dut2_if1_mac}= | Get Interface MAC | ${dut2} | ${dut2_if1}
+| | dut1_v4.set_arp | ${dut1_if1} | 10.10.10.2 | ${tg1_if1_mac}
+| | dut1_v4.set_arp | ${dut1_if2} | ${dut2_dut1_address} | ${dut2_if1_mac}
+| | dut2_v4.set_arp | ${dut2_if1} | ${dut1_dut2_address} | ${dut1_if2_mac}
+| | dut2_v4.set_arp | ${dut2_if2} | 20.20.20.2 | ${tg1_if2_mac}
+| | dut1_v4.set_ip | ${dut1_if1} | ${dut1_tg_address} | ${duts_prefix}
+| | dut1_v4.set_ip | ${dut1_if2} | ${dut1_dut2_address} | ${duts_prefix}
+| | dut2_v4.set_ip | ${dut2_if1} | ${dut2_dut1_address} | ${duts_prefix}
+| | dut2_v4.set_ip | ${dut2_if2} | ${dut2_tg_address} | ${duts_prefix}
+| | All Vpp Interfaces Ready Wait | ${nodes}
+
+| Lisp IPv6 forwarding initialized in a 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:*
+| | ... | \| Lisp IPv6 forwarding initialized in a 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}
+| | ${tg1_if1_mac}= | Get Interface MAC | ${tg} | ${tg_if1}
+| | ${tg1_if2_mac}= | Get Interface MAC | ${tg} | ${tg_if2}
+| | ${dut1_if2_mac}= | Get Interface MAC | ${dut1} | ${dut1_if2}
+| | ${dut2_if1_mac}= | Get Interface MAC | ${dut2} | ${dut2_if1}
+| | VPP Set If IPv6 Addr | ${dut1} | ${dut1_if1} | ${dut1_tg_address}
+| | ... | ${prefix}
+| | VPP Set If IPv6 Addr | ${dut1} | ${dut1_if2} | ${dut1_dut2_address}
+| | ... | ${prefix}
+| | VPP Set If IPv6 Addr | ${dut2} | ${dut2_if1} | ${dut2_dut1_address}
+| | ... | ${prefix}
+| | VPP Set If IPv6 Addr | ${dut2} | ${dut2_if2} | ${dut2_tg_address}
+| | ... | ${prefix}
+| | Vpp nodes ra suppress link layer | ${nodes}
+| | Add Ip Neighbor | ${dut1} | ${dut1_if1} | 2001:1::2
+| | ... | ${tg1_if1_mac}
+| | Add Ip Neighbor | ${dut2} | ${dut2_if2} | 2001:2::2
+| | ... | ${tg1_if2_mac}
+| | Add Ip Neighbor | ${dut1} | ${dut1_if2} | ${dut2_dut1_address}
+| | ... | ${dut2_if1_mac}
+| | Add Ip Neighbor | ${dut2} | ${dut2_if1} | ${dut1_dut2_address}
+| | ... | ${dut1_if2_mac}
+
+| Lisp IPv4 over IPv6 forwarding initialized in a 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 Interface State | ${dut1} | ${dut1_if1} | up
+| | Set Interface State | ${dut1} | ${dut1_if2} | up
+| | Set Interface State | ${dut2} | ${dut2_if1} | up
+| | Set Interface State | ${dut2} | ${dut2_if2} | up
+| | ${tg1_if1_mac}= | Get Interface MAC | ${tg} | ${tg_if1}
+| | ${tg1_if2_mac}= | Get Interface MAC | ${tg} | ${tg_if2}
+| | ${dut1_if2_mac}= | Get Interface MAC | ${dut1} | ${dut1_if2}
+| | ${dut2_if1_mac}= | Get Interface MAC | ${dut2} | ${dut2_if1}
+| | dut1_v4.set_ip | ${dut1_if1} | ${dut1_tg_ip4_address} | ${prefix4}
+| | VPP Set If IPv6 Addr | ${dut1} | ${dut1_if2} | ${dut1_dut2_ip6_address}
+| | ... | ${prefix6}
+| | VPP Set If IPv6 Addr | ${dut2} | ${dut2_if1} | ${dut2_dut1_ip6_address}
+| | ... | ${prefix6}
+| | dut2_v4.set_ip | ${dut2_if2} | ${dut2_tg_ip4_address} | ${prefix4}
+| | Vpp nodes ra suppress link layer | ${nodes}
+| | dut1_v4.set_arp | ${dut1_if1} | 10.10.10.2 | ${tg1_if1_mac}
+| | dut2_v4.set_arp | ${dut2_if2} | 20.20.20.2 | ${tg1_if2_mac}
+| | Add Ip Neighbor | ${dut1} | ${dut1_if2} | ${dut2_dut1_ip6_address}
+| | ... | ${dut2_if1_mac}
+| | Add Ip Neighbor | ${dut2} | ${dut2_if1} | ${dut1_dut2_ip6_address}
+| | ... | ${dut1_if2_mac}
+
+| Lisp IPv6 over IPv4 forwarding initialized in a 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 Interface State | ${dut1} | ${dut1_if1} | up
+| | Set Interface State | ${dut1} | ${dut1_if2} | up
+| | Set Interface State | ${dut2} | ${dut2_if1} | up
+| | Set Interface State | ${dut2} | ${dut2_if2} | up
+| | ${tg1_if1_mac}= | Get Interface MAC | ${tg} | ${tg_if1}
+| | ${tg1_if2_mac}= | Get Interface MAC | ${tg} | ${tg_if2}
+| | ${dut1_if2_mac}= | Get Interface MAC | ${dut1} | ${dut1_if2}
+| | ${dut2_if1_mac}= | Get Interface MAC | ${dut2} | ${dut2_if1}
+| | VPP Set If IPv6 Addr | ${dut1} | ${dut1_if1} | ${dut1_tg_ip6_address}
+| | ... | ${prefix6}
+| | dut1_v4.set_ip | ${dut1_if2} | ${dut1_dut2_ip4_address} | ${prefix4}
+| | dut2_v4.set_ip | ${dut2_if1} | ${dut2_dut1_ip4_address} | ${prefix4}
+| | VPP Set If IPv6 Addr | ${dut2} | ${dut2_if2} | ${dut2_tg_ip6_address}
+| | ... | ${prefix6}
+| | Vpp nodes ra suppress link layer | ${nodes}
+| | Add Ip Neighbor | ${dut1} | ${dut1_if1} | 2001:1::2 | ${tg1_if1_mac}
+| | Add Ip Neighbor | ${dut2} | ${dut2_if2} | 2001:2::2 | ${tg1_if2_mac}
+| | dut1_v4.set_arp | ${dut1_if2} | ${dut2_dut1_ip4_address} | ${dut2_if1_mac}
+| | dut2_v4.set_arp | ${dut2_if1} | ${dut1_dut2_ip4_address} | ${dut1_if2_mac}
+
+DPDK 2-node Performance Suite Setup with DUT's NIC model
+| | [Documentation]
+| | ... | Updates interfaces on all nodes and setup global
+| | ... | variables used in test cases based on interface model provided as an
+| | ... | argument. Initializes traffic generator. Initializes DPDK test
+| | ... | environment.
+| | ...
+| | ... | *Arguments:*
+| | ... | - topology_type - Topology type. Type: string
+| | ... | - nic_model - Interface model. Type: string
+| | ...
+| | ... | *Example:*
+| | ...
+| | ... | \| DPDK 2-node Performance Suite Setup with DUT's NIC model \
+| | ... | \| L2 \| Intel-X520-DA2 \|
+| | [Arguments] | ${topology_type} | ${nic_model}
+| | Setup performance global Variables
+| | 2-node circular Topology Variables Setup with DUT interface model
+| | ... | ${nic_model}
+| | Initialize traffic generator | ${tg} | ${tg_if1} | ${tg_if2}
+| | ... | ${dut1} | ${dut1_if1}
+| | ... | ${dut1} | ${dut1_if2}
+| | ... | ${topology_type}
+| | Initialize DPDK Environment | ${dut1} | ${dut1_if1} | ${dut1_if2}
+
+DPDK 3-node Performance Suite Setup with DUT's NIC model
+| | [Documentation]
+| | ... | Updates interfaces on all nodes and setup global
+| | ... | variables used in test cases based on interface model provided as an
+| | ... | argument. Initializes traffic generator. Initializes DPDK test
+| | ... | environment.
+| | ...
+| | ... | *Arguments:*
+| | ... | - topology_type - Topology type. Type: string
+| | ... | - nic_model - Interface model. Type: string
+| | ...
+| | ... | *Example:*
+| | ...
+| | ... | \| 3-node Performance Suite Setup \| L2 \| Intel-X520-DA2 \|
+| | [Arguments] | ${topology_type} | ${nic_model}
+| | Setup performance global Variables
+| | 3-node circular Topology Variables Setup with DUT interface model
+| | ... | ${nic_model}
+| | Initialize traffic generator | ${tg} | ${tg_if1} | ${tg_if2}
+| | ... | ${dut1} | ${dut1_if1}
+| | ... | ${dut2} | ${dut2_if2}
+| | ... | ${topology_type}
+| | Initialize DPDK Environment | ${dut1} | ${dut1_if1} | ${dut1_if2}
+| | Initialize DPDK Environment | ${dut2} | ${dut2_if1} | ${dut2_if2}
+
+DPDK 3-node Performance Suite Teardown
+| | [Documentation]
+| | ... | Suite teardown phase with traffic generator teardown.
+| | ... | Cleanup DPDK test environment.
+| | ...
+| | Teardown traffic generator | ${tg}
+| | Cleanup DPDK Environment | ${dut1} | ${dut1_if1} | ${dut1_if2}
+| | Cleanup DPDK Environment | ${dut2} | ${dut2_if1} | ${dut2_if2}
+
+DPDK 2-node Performance Suite Teardown
+| | [Documentation]
+| | ... | Suite teardown phase with traffic generator teardown.
+| | ... | Cleanup DPDK test environment.
+| | ...
+| | Teardown traffic generator | ${tg}
+| | Cleanup DPDK Environment | ${dut1} | ${dut1_if1} | ${dut1_if2}
+
+For DPDK Performance Test
+| | [Documentation]
+| | ... | Return TRUE if variable DPDK_TEST exist, otherwise FALSE.
+| | ${ret} | ${tmp}= | Run Keyword And Ignore Error
+| | ... | Variable Should Exist | ${DPDK_TEST}
+| | Return From Keyword If | "${ret}" == "PASS" | ${TRUE}
+| | Return From Keyword | ${FALSE}
+