+| IPv4 forwarding with vhost initialized in a 3-node circular topology
+| | [Documentation]
+| | ... | Create vhost-user interfaces in VPP. Set UP state of all VPP
+| | ... | interfaces in path on nodes in 3-node circular topology. Create 2
+| | ... | FIB tables on each DUT with multipath routing. Assign pair of
+| | ... | Physical and Virtual interfaces on both nodes to each FIB table.
+| | ... | Setup IPv4 addresses with /30 prefix on DUT-TG links and /30 prefix
+| | ... | on DUT1-DUT2 link. Set routing on all DUT nodes in all FIB tables
+| | ... | with prefix /24 and next hop of neighbour IPv4 address. Setup
+| | ... | ARP on all VPP interfaces.
+| | ...
+| | ... | *Arguments:*
+| | ... | - sock1 - Sock path for first Vhost-User interface. Type: string
+| | ... | - sock2 - Sock path for second Vhost-User interface. Type: string
+| | ...
+| | ... | *Return:*
+| | ... | - No value returned
+| | ...
+| | ... | *Example:*
+| | ...
+| | ... | \| IPv4 forwarding with vhost initialized in a 3-node circular \
+| | ... | topology \| /tmp/sock1 \| /tmp/sock2 \|
+| | ...
+| | [Arguments] | ${sock1} | ${sock2}
+| | ...
+| | VPP interfaces in path are up in a 3-node circular topology
+| | VPP Vhost interfaces for L2BD forwarding are setup | ${dut1}
+| | ... | ${sock1} | ${sock2}
+| | ${dut1_vif1}= | Set Variable | ${vhost_if1}
+| | ${dut1_vif2}= | Set Variable | ${vhost_if2}
+| | Set Interface State | ${dut1} | ${dut1_vif1} | up
+| | Set Interface State | ${dut1} | ${dut1_vif2} | up
+| | VPP Vhost interfaces for L2BD forwarding are setup | ${dut2}
+| | ... | ${sock1} | ${sock2}
+| | ${dut2_vif1}= | Set Variable | ${vhost_if1}
+| | ${dut2_vif2}= | Set Variable | ${vhost_if2}
+| | Set Interface State | ${dut2} | ${dut2_vif1} | up
+| | Set Interface State | ${dut2} | ${dut2_vif2} | up
+| | ${dut1_vif1_idx}= | Get Interface SW Index | ${dut1} | ${dut1_vif1}
+| | ${dut1_vif2_idx}= | Get Interface SW Index | ${dut1} | ${dut1_vif2}
+| | ${dut1_if1_idx}= | Get Interface SW Index | ${dut1} | ${dut1_if1}
+| | ${dut1_if2_idx}= | Get Interface SW Index | ${dut1} | ${dut1_if2}
+| | ${dut2_vif1_idx}= | Get Interface SW Index | ${dut2} | ${dut2_vif1}
+| | ${dut2_vif2_idx}= | Get Interface SW Index | ${dut2} | ${dut2_vif2}
+| | ${dut2_if1_idx}= | Get Interface SW Index | ${dut2} | ${dut2_if1}
+| | ${dut2_if2_idx}= | Get Interface SW Index | ${dut2} | ${dut2_if2}
+| | Add fib table | ${dut1} | 20.20.20.0 | 24 | ${fib_table_1}
+| | ... |Â via 4.4.4.2 sw_if_index ${dut1_vif1_idx} multipath
+| | Add fib table | ${dut1} | 10.10.10.0 | 24 | ${fib_table_1}
+| | ... |Â via 1.1.1.2 sw_if_index ${dut1_if1_idx} multipath
+| | Add fib table | ${dut1} | 20.20.20.0 | 24 | ${fib_table_2}
+| | ... |Â via 2.2.2.2 sw_if_index ${dut1_if2_idx} multipath
+| | Add fib table | ${dut1} | 10.10.10.0 | 24 | ${fib_table_2}
+| | ... |Â via 5.5.5.2 sw_if_index ${dut1_vif2_idx} multipath
+| | Add fib table | ${dut2} | 10.10.10.0 | 24 | ${fib_table_1}
+| | ... |Â via 2.2.2.1 sw_if_index ${dut2_if1_idx} multipath
+| | Add fib table | ${dut2} | 20.20.20.0 | 24 | ${fib_table_1}
+| | ... |Â via 4.4.4.1 sw_if_index ${dut2_vif1_idx} multipath
+| | Add fib table | ${dut2} | 10.10.10.0 | 24 | ${fib_table_2}
+| | ... |Â via 5.5.5.2 sw_if_index ${dut2_vif2_idx} multipath
+| | Add fib table | ${dut2} | 20.20.20.0 | 24 | ${fib_table_2}
+| | ... |Â via 3.3.3.2 sw_if_index ${dut2_if2_idx} multipath
+| | Assign Interface To Fib Table | ${dut1} | ${dut1_if1} | ${fib_table_1}
+| | Assign Interface To Fib Table | ${dut1} | ${dut1_vif1} | ${fib_table_1}
+| | Assign Interface To Fib Table | ${dut1} | ${dut1_if2} | ${fib_table_2}
+| | Assign Interface To Fib Table | ${dut1} | ${dut1_vif2} | ${fib_table_2}
+| | Assign Interface To Fib Table | ${dut2} | ${dut2_if1} | ${fib_table_1}
+| | Assign Interface To Fib Table | ${dut2} | ${dut2_vif1} | ${fib_table_1}
+| | Assign Interface To Fib Table | ${dut2} | ${dut2_if2} | ${fib_table_2}
+| | Assign Interface To Fib Table | ${dut2} | ${dut2_vif2} | ${fib_table_2}
+| | IP addresses are set on interfaces | ${dut1} | ${dut1_if1} | 1.1.1.2 | 30
+| | IP addresses are set on interfaces | ${dut1} | ${dut1_if2} | 2.2.2.1 | 30
+| | IP addresses are set on interfaces | ${dut1} | ${dut1_vif1} | 4.4.4.1 | 30
+| | IP addresses are set on interfaces | ${dut1} | ${dut1_vif2} | 5.5.5.1 | 30
+| | IP addresses are set on interfaces | ${dut2} | ${dut2_if1} | 2.2.2.2 | 30
+| | IP addresses are set on interfaces | ${dut2} | ${dut2_if2} | 3.3.3.1 | 30
+| | IP addresses are set on interfaces | ${dut2} | ${dut2_vif1} | 4.4.4.1 | 30
+| | IP addresses are set on interfaces | ${dut2} | ${dut2_vif2} | 5.5.5.1 | 30
+| | ${tg1_if1_mac}= | Get Interface MAC | ${tg} | ${tg_if1}
+| | ${dut1_if2_mac}= | Get Interface MAC | ${dut1} | ${dut1_if2}
+| | ${tg1_if2_mac}= | Get Interface MAC | ${tg} | ${tg_if2}
+| | ${dut2_if1_mac}= | Get Interface MAC | ${dut2} | ${dut2_if1}
+| | ${dut1_vif1_mac}= | Get Vhost User Mac By Sw Index | ${dut1}
+| | ... | ${dut1_vif1_idx}
+| | ${dut1_vif2_mac}= | Get Vhost User Mac By Sw Index | ${dut1}
+| | ... | ${dut1_vif2_idx}
+| | ${dut2_vif1_mac}= | Get Vhost User Mac By Sw Index | ${dut2}
+| | ... | ${dut2_vif1_idx}
+| | ${dut2_vif2_mac}= | Get Vhost User Mac By Sw Index | ${dut2}
+| | ... | ${dut2_vif2_idx}
+| | Set Test Variable | ${dut1_vif1_mac}
+| | Set Test Variable | ${dut1_vif2_mac}
+| | Set Test Variable | ${dut2_vif1_mac}
+| | Set Test Variable | ${dut2_vif2_mac}
+| | Add arp on dut | ${dut1} | ${dut1_if1} | 1.1.1.1 | ${tg1_if1_mac}
+| | Add arp on dut | ${dut1} | ${dut1_if2} | 2.2.2.2 | ${dut2_if1_mac}
+| | Add arp on dut | ${dut1} | ${dut1_vif1} | 4.4.4.2 | 52:54:00:00:04:01
+| | Add arp on dut | ${dut1} | ${dut1_vif2} | 5.5.5.2 | 52:54:00:00:04:02
+| | Add arp on dut | ${dut2} | ${dut2_if1} | 2.2.2.1 | ${dut1_if2_mac}
+| | Add arp on dut | ${dut2} | ${dut2_if2} | 3.3.3.2 | ${tg1_if2_mac}
+| | Add arp on dut | ${dut2} | ${dut2_vif1} | 4.4.4.2 | 52:54:00:00:04:01
+| | Add arp on dut | ${dut2} | ${dut2_vif2} | 5.5.5.2 | 52:54:00:00:04:02
+| | Vpp Route Add | ${dut1} | 20.20.20.0 | 24 | 4.4.4.2 | ${dut1_vif1}
+| | ... | vrf=${fib_table_1}
+| | Vpp Route Add | ${dut1} | 10.10.10.0 | 24 | 1.1.1.1 | ${dut1_if1}
+| | ... | vrf=${fib_table_1}
+| | Vpp Route Add | ${dut1} | 20.20.20.0 | 24 | 2.2.2.2 | ${dut1_if2}
+| | ... | vrf=${fib_table_2}
+| | Vpp Route Add | ${dut1} | 10.10.10.0 | 24 | 5.5.5.2 | ${dut1_vif2}
+| | ... | vrf=${fib_table_2}
+| | Vpp Route Add | ${dut2} | 20.20.20.0 | 24 | 4.4.4.2 | ${dut2_vif1}
+| | ... | vrf=${fib_table_1}
+| | Vpp Route Add | ${dut2} | 10.10.10.0 | 24 | 2.2.2.1 | ${dut2_if1}
+| | ... | vrf=${fib_table_1}
+| | Vpp Route Add | ${dut2} | 20.20.20.0 | 24 | 3.3.3.2 | ${dut2_if2}
+| | ... | vrf=${fib_table_2}
+| | Vpp Route Add | ${dut2} | 10.10.10.0 | 24 | 5.5.5.2 | ${dut2_vif2}
+| | ... | vrf=${fib_table_2}
+
+| IPv4 forwarding with Vhost-User for '${nr}' VMs initialized in a 3-node circular topology
+| | [Documentation]
+| | ... | Create pairs of Vhost-User interfaces for defined number of VMs on all
+| | ... | VPP nodes. Set UP state of all VPP interfaces in path. Create ${nr}+1
+| | ... | FIB tables on each DUT with multipath routing. Assign each Virtual
+| | ... | interface to FIB table with Physical interface or Virtual interface on
+| | ... | both nodes. Setup IPv4 addresses with /30 prefix on DUT-TG links and
+| | ... | /30 prefix on DUT1-DUT2 link. Set routing on all DUT nodes in all FIB
+| | ... | tables with prefix /24 and next hop of neighbour IPv4 address. Setup
+| | ... | ARP on all VPP interfaces.
+| | ...
+| | ... | *Arguments:*
+| | ... | _None_
+| | ...
+| | ... | *Note:*
+| | ... | Socket paths for VM are defined in following format:
+| | ... | - /tmp/sock-${VM_ID}-1
+| | ... | - /tmp/sock-${VM_ID}-2
+| | ...
+| | ... | *Return:*
+| | ... | - No value returned
+| | ...
+| | ... | *Example:*
+| | ...
+| | ... | \| IPv4 forwarding with Vhost-User for '2' VMs initialized in \
+| | ... | a 3-node circular topology \|
+| | ...
+| | VPP interfaces in path are up in a 3-node circular topology
+| | ${fib_table_1}= | Set Variable | ${101}
+| | ${fib_table_2}= | Evaluate | ${fib_table_1}+${nr}
+| | ${dut1_if1_idx}= | Get Interface SW Index | ${dut1} | ${dut1_if1}
+| | ${dut1_if2_idx}= | Get Interface SW Index | ${dut1} | ${dut1_if2}
+| | Add fib table | ${dut1} | 10.10.10.0 | 24 | ${fib_table_1}
+| | ... |Â via 1.1.1.2 sw_if_index ${dut1_if1_idx} multipath
+| | Add fib table | ${dut1} | 20.20.20.0 | 24 | ${fib_table_2}
+| | ... |Â via 2.2.2.2 sw_if_index ${dut1_if2_idx} multipath
+| | ${dut2_if1_idx}= | Get Interface SW Index | ${dut2} | ${dut2_if1}
+| | ${dut2_if2_idx}= | Get Interface SW Index | ${dut2} | ${dut2_if2}
+| | Add fib table | ${dut2} | 10.10.10.0 | 24 | ${fib_table_1}
+| | ... |Â via 2.2.2.1 sw_if_index ${dut2_if1_idx} multipath
+| | Add fib table | ${dut2} | 20.20.20.0 | 24 | ${fib_table_2}
+| | ... |Â via 3.3.3.2 sw_if_index ${dut2_if2_idx} multipath
+| | 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}
+| | IP addresses are set on interfaces | ${dut1} | ${dut1_if1} | 1.1.1.2 | 30
+| | IP addresses are set on interfaces | ${dut1} | ${dut1_if2} | 2.2.2.1 | 30
+| | IP addresses are set on interfaces | ${dut2} | ${dut2_if1} | 2.2.2.2 | 30
+| | IP addresses are set on interfaces | ${dut2} | ${dut2_if2} | 3.3.3.1 | 30
+| | ${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}
+| | Add arp on dut | ${dut1} | ${dut1_if1} | 1.1.1.1 | ${tg1_if1_mac}
+| | Add arp on dut | ${dut1} | ${dut1_if2} | 2.2.2.2 | ${dut2_if1_mac}
+| | Add arp on dut | ${dut2} | ${dut2_if1} | 2.2.2.1 | ${dut1_if2_mac}
+| | Add arp on dut | ${dut2} | ${dut2_if2} | 3.3.3.2 | ${tg1_if2_mac}
+| | Vpp Route Add | ${dut1} | 10.10.10.0 | 24 | 1.1.1.1 | ${dut1_if1}
+| | ... | vrf=${fib_table_1}
+| | Vpp Route Add | ${dut1} | 20.20.20.0 | 24 | 2.2.2.2 | ${dut1_if2}
+| | ... | vrf=${fib_table_2}
+| | Vpp Route Add | ${dut2} | 10.10.10.0 | 24 | 2.2.2.1 | ${dut2_if1}
+| | ... | vrf=${fib_table_1}
+| | Vpp Route Add | ${dut2} | 20.20.20.0 | 24 | 3.3.3.2 | ${dut2_if2}
+| | ... | vrf=${fib_table_2}
+| | ${ip_base_start}= | Set Variable | ${4}
+| | :FOR | ${number} | IN RANGE | 1 | ${nr}+1
+| | | ${sock1}= | Set Variable | /tmp/sock-${number}-1
+| | | ${sock2}= | Set Variable | /tmp/sock-${number}-2
+| | | ${fib_table_1}= | Evaluate | ${100}+${number}
+| | | ${fib_table_2}= | Evaluate | ${fib_table_1}+${1}
+| | | ${ip_base_vif1}= | Evaluate | ${ip_base_start}+(${number}-1)*2
+| | | ${ip_base_vif2}= | Evaluate | ${ip_base_vif1}+1
+| | | ${ip_net_vif1}= | Set Variable
+| | | ... | ${ip_base_vif1}.${ip_base_vif1}.${ip_base_vif1}
+| | | ${ip_net_vif2}= | Set Variable
+| | | ... | ${ip_base_vif2}.${ip_base_vif2}.${ip_base_vif2}
+| | | VPP Vhost interfaces for L2BD forwarding are setup | ${dut1}
+| | | ... | ${sock1} | ${sock2} | dut1-vhost-${number}-if1
+| | | ... | dut1-vhost-${number}-if2
+| | | Set Interface State | ${dut1} | ${dut1-vhost-${number}-if1} | up
+| | | Set Interface State | ${dut1} | ${dut1-vhost-${number}-if2} | up
+| | | ${dut1_vif1_idx}= | Get Interface SW Index | ${dut1}
+| | | ... | ${dut1-vhost-${number}-if1}
+| | | ${dut1_vif2_idx}= | Get Interface SW Index | ${dut1}
+| | | ... | ${dut1-vhost-${number}-if2}
+| | | VPP Vhost interfaces for L2BD forwarding are setup | ${dut2}
+| | | ... | ${sock1} | ${sock2} | dut2-vhost-${number}-if1
+| | | ... | dut2-vhost-${number}-if2
+| | | Set Interface State | ${dut2} | ${dut2-vhost-${number}-if1} | up
+| | | Set Interface State | ${dut2} | ${dut2-vhost-${number}-if2} | up
+| | | ${dut2_vif1_idx}= | Get Interface SW Index | ${dut2}
+| | | ... | ${dut2-vhost-${number}-if1}
+| | | ${dut2_vif2_idx}= | Get Interface SW Index | ${dut2}
+| | | ... | ${dut2-vhost-${number}-if2}
+| | | Add fib table | ${dut1} | 20.20.20.0 | 24 | ${fib_table_1}
+| | | ... |Â via ${ip_net_vif1}.1 sw_if_index ${dut1_vif1_idx} multipath
+| | | Add fib table | ${dut1} | 10.10.10.0 | 24 | ${fib_table_2}
+| | | ... |Â via ${ip_net_vif2}.2 sw_if_index ${dut1_vif2_idx} multipath
+| | | Add fib table | ${dut2} | 20.20.20.0 | 24 | ${fib_table_1}
+| | | ... |Â via ${ip_net_vif1}.1 sw_if_index ${dut2_vif1_idx} multipath
+| | | Add fib table | ${dut2} | 10.10.10.0 | 24 | ${fib_table_2}
+| | | ... |Â via ${ip_net_vif2}.2 sw_if_index ${dut2_vif2_idx} multipath
+| | | Assign Interface To Fib Table | ${dut1} | ${dut1-vhost-${number}-if1}
+| | | ... | ${fib_table_1}
+| | | Assign Interface To Fib Table | ${dut1} | ${dut1-vhost-${number}-if2}
+| | | ... | ${fib_table_2}
+| | | Assign Interface To Fib Table | ${dut2} | ${dut2-vhost-${number}-if1}
+| | | ... | ${fib_table_1}
+| | | Assign Interface To Fib Table | ${dut2} | ${dut2-vhost-${number}-if2}
+| | | ... | ${fib_table_2}
+| | | IP addresses are set on interfaces
+| | | ... | ${dut1} | ${dut1-vhost-${number}-if1} | ${ip_net_vif1}.1 | 30
+| | | ... | ${dut1} | ${dut1-vhost-${number}-if2} | ${ip_net_vif2}.1 | 30
+| | | ... | ${dut2} | ${dut2-vhost-${number}-if1} | ${ip_net_vif1}.1 | 30
+| | | ... | ${dut2} | ${dut2-vhost-${number}-if2} | ${ip_net_vif2}.1 | 30
+| | | ${dut1_vif1_mac}= | Get Vhost User Mac By Sw Index | ${dut1}
+| | | ... | ${dut1_vif1_idx}
+| | | ${dut1_vif2_mac}= | Get Vhost User Mac By Sw Index | ${dut1}
+| | | ... | ${dut1_vif2_idx}
+| | | ${dut2_vif1_mac}= | Get Vhost User Mac By Sw Index | ${dut2}
+| | | ... | ${dut2_vif1_idx}
+| | | ${dut2_vif2_mac}= | Get Vhost User Mac By Sw Index | ${dut2}
+| | | ... | ${dut2_vif2_idx}
+| | | Set Test Variable | ${dut1-vhost-${number}-if1_mac}
+| | | ... | ${dut1_vif1_mac}
+| | | Set Test Variable | ${dut1-vhost-${number}-if2_mac}
+| | | ... | ${dut1_vif2_mac}
+| | | Set Test Variable | ${dut2-vhost-${number}-if1_mac}
+| | | ... | ${dut2_vif1_mac}
+| | | Set Test Variable | ${dut2-vhost-${number}-if2_mac}
+| | | ... | ${dut2_vif2_mac}
+| | | ${qemu_id}= | Set Variable If | ${number} < 10 | 0${number}
+| | | ... | ${number}
+| | | Add arp on dut | ${dut1} | ${dut1-vhost-${number}-if1}
+| | | ... | ${ip_net_vif1}.2 | 52:54:00:00:${qemu_id}:01
+| | | Add arp on dut | ${dut1} | ${dut1-vhost-${number}-if2}
+| | | ... | ${ip_net_vif2}.2 | 52:54:00:00:${qemu_id}:02
+| | | Add arp on dut | ${dut2} | ${dut2-vhost-${number}-if1}
+| | | ... | ${ip_net_vif1}.2 | 52:54:00:00:${qemu_id}:01
+| | | Add arp on dut | ${dut2} | ${dut2-vhost-${number}-if2}
+| | | ... | ${ip_net_vif2}.2 | 52:54:00:00:${qemu_id}:02
+| | | Vpp Route Add | ${dut1} | 20.20.20.0 | 24 | ${ip_net_vif1}.2
+| | | ... | ${dut1-vhost-${number}-if1} | vrf=${fib_table_1}
+| | | Vpp Route Add | ${dut1} | 10.10.10.0 | 24 | ${ip_net_vif2}.2
+| | | ... | ${dut1-vhost-${number}-if2} | vrf=${fib_table_2}
+| | | Vpp Route Add | ${dut2} | 20.20.20.0 | 24 | ${ip_net_vif1}.2
+| | | ... | ${dut2-vhost-${number}-if1} | vrf=${fib_table_1}
+| | | Vpp Route Add | ${dut2} | 10.10.10.0 | 24 | ${ip_net_vif2}.2
+| | | ... | ${dut2-vhost-${number}-if2} | vrf=${fib_table_2}
+
+| IPv4 policer 2r3c-${t} initialized in a 3-node circular topology
+| | [Documentation]
+| | ... | Setup of 2r3c color-aware or color-blind policer with dst ip match
+| | ... | on all DUT nodes in 3-node circular topology. Policer is applied on
+| | ... | links TG - DUT1 and DUT2 - TG.
+| | ...
+| | ${dscp}= | DSCP AF22
+| | Policer Set Name | policer1
+| | Policer Set CIR | ${cir}
+| | Policer Set EIR | ${eir}
+| | Policer Set CB | ${cb}
+| | Policer Set EB | ${eb}
+| | Policer Set Rate Type pps
+| | Policer Set Round Type Closest
+| | Policer Set Type 2R3C 2698
+| | Policer Set Conform Action Transmit
+| | Policer Set Exceed Action Mark and Transmit | ${dscp}
+| | Policer Set Violate Action Transmit
+| | Policer Enable Color Aware
+| | Run Keyword If | ${t} == 'ca' | Policer Enable Color Aware
+| | Policer Classify Set Precolor Exceed
+| | Policer Set Node | ${dut1}
+| | Policer Classify Set Interface | ${dut1_if1}
+| | Policer Classify Set Match IP | 20.20.20.2 | ${False}
+| | Policer Set Configuration
+| | Policer Set Node | ${dut2}
+| | Policer Classify Set Interface | ${dut2_if2}
+| | Policer Classify Set Match IP | 10.10.10.2 | ${False}
+| | Policer Set Configuration
+