| | Add interface to bridge domain | ${dut2} | ${vhost_if2} | ${bd_id2}
| | Add interface to bridge domain | ${dut2} | ${dut2_if2} | ${bd_id2}
+| Init L2 bridge domains with single DUT with Vhost-User and VXLANoIPv4 in 3-node circular topology
+| | [Documentation]
+| | ... | Create two Vhost-User interfaces on one VPP node. Add each
+| | ... | Vhost-User interface into L2 bridge domains with learning enabled
+| | ... | one connected to physical interface, the other to VXLAN.
+| | ... | Setup VXLANoIPv4 between DUTs and TG by connecting physical and vxlan
+| | ... | interfaces on the DUT. All interfaces are brought up.
+| | ... | IPv4 addresses with prefix /24 are configured on interfaces between
+| | ... | DUT and TG.
+| | ...
+| | ... | *Arguments:*
+| | ... | - dut1_address - Address of physical interface on DUT1. Type: string
+| | ... | - dut1_address_subnet - Subnet of the address of physical interface on
+| | ... | DUT1. Type: string
+| | ... | - dut2_address - Address of physical interface on DUT2. Type: string
+| | ... | - dut2_address_subnet - Subnet of the address of physical interface on
+| | ... | DUT2. Type: string
+| | ... | - dut1_gw - Address of the _gateway_ to which the traffic will be
+| | ... | forwarded on DUT1. Type: string
+| | ... | - dut2_gw - Address of the _gateway_ to which the traffic will be
+| | ... | forwarded on DUT2. Type: string
+| | ... | - dut1_vxlans - List of VXLAN params to be configured on DUT1.
+| | ... | Type: list of dicts, dict params vni, vtep
+| | ... | - dut2_vxlans - List of VXLAN params to be configured on DUT2.
+| | ... | Type: list of dicts, dict params vni, vtep
+| | ... | - dut1_route_subnet - Subnet address to forward to _gateway_ on DUT1.
+| | ... | Type: string
+| | ... | - dut1_route_mask - Subnet address mask to forward to _gateway_
+| | ... | on DUT1. Type: string
+| | ... | - dut2_route_subnet - Subnet address to forward to _gateway_ on DUT2.
+| | ... | Type: string
+| | ... | - dut2_route_mask - Subnet address mask to forward to _gateway_
+| | ... | on DUT2. Type: string
+| | ...
+| | ... | *Example:*
+| | ...
+| | [Arguments] | ${dut1_address} | ${dut1_address_subnet} |
+| | ... | ${dut2_address} | ${dut2_address_subnet} | ${dut1_gw} | ${dut2_gw} |
+| | ... | ${dut1_vxlans} | ${dut2_vxlans} | ${dut1_route_subnet} |
+| | ... | ${dut1_route_mask} | ${dut2_route_subnet} | ${dut2_route_mask}
+| | ...
+| | Configure IP addresses on interfaces | ${dut1} | ${dut1_if1} |
+| | ... | ${dut1_address} | ${dut1_address_subnet}
+| | Configure IP addresses on interfaces | ${dut2} | ${dut2_if2} |
+| | ... | ${dut2_address} | ${dut2_address_subnet}
+| | ${dut1_bd_id1}= | Set Variable | 1
+| | ${dut1_bd_id2}= | Set Variable | 2
+| | ${dut2_bd_id1}= | Set Variable | 1
+| | :FOR | ${vxlan} | IN | @{dut1_vxlans}
+| | | ${dut1s_vxlan}= | Create VXLAN interface | ${dut1} | ${vxlan.vni}
+| | | ... | ${dut1_address} | ${vxlan.vtep}
+| | | Add interface to bridge domain | ${dut1} | ${dut1s_vxlan} | ${dut1_bd_id1}
+| | :FOR | ${vxlan} | IN | @{dut2_vxlans}
+| | | ${dut2s_vxlan}= | Create VXLAN interface | ${dut2} | ${vxlan.vni}
+| | | ... | ${dut2_address} | ${vxlan.vtep}
+| | | Add interface to bridge domain | ${dut2} | ${dut2s_vxlan} | ${dut2_bd_id1}
+| | ${tg_if1_mac}= | Get Interface MAC | ${tg} | ${tg_if1}
+| | ${tg_if2_mac}= | Get Interface MAC | ${tg} | ${tg_if2}
+| | Add arp on dut | ${dut1} | ${dut1_if1} | ${dut1_gw} | ${tg_if1_mac}
+| | Add arp on dut | ${dut2} | ${dut2_if2} | ${dut2_gw} | ${tg_if2_mac}
+| | Vpp Route Add | ${dut1} | ${dut1_route_subnet} | ${dut1_route_mask}
+| | ... | ${dut1_gw} | ${dut1_if1}
+| | Vpp Route Add | ${dut2} | ${dut2_route_subnet} | ${dut2_route_mask}
+| | ... | ${dut2_gw} | ${dut2_if2}
+| | Add interface to bridge domain | ${dut1} | ${dut1_if2} | ${dut1_bd_id2}
+| | Add interface to bridge domain | ${dut2} | ${dut2_if1} | ${dut2_bd_id1}
+| | Add interface to bridge domain | ${dut1} | ${vhost_if1} | ${dut1_bd_id1}
+| | Add interface to bridge domain | ${dut1} | ${vhost_if2} | ${dut1_bd_id2}
+
| Initialize L2 bridge domains with Vhost-User in 2-node circular topology
| | [Documentation]
| | ... | Create two Vhost-User interfaces on all defined VPP nodes. Add each
| | Set Test Variable | ${dut2_if1_pci}
| | Set Test Variable | ${dut2_if2_pci}
+| Add single PCI device to DUTs in 3-node single link topology
+| | [Documentation]
+| | ... | Add single (first) PCI device on DUT1 to VPP configuration file.
+| | ... | Add single (last) PCI device on DUT2 to VPP configuration file.
+| | ...
+| | ${dut1_if1_pci}= | Get Interface PCI Addr | ${dut1} | ${dut1_if1}
+| | ${dut2_if2_pci}= | Get Interface PCI Addr | ${dut2} | ${dut2_if2}
+| | Run keyword | DUT1.Add DPDK Dev | ${dut1_if1_pci}
+| | Run keyword | DUT2.Add DPDK Dev | ${dut2_if2_pci}
+| | Set Test Variable | ${dut1_if1_pci}
+| | Set Test Variable | ${dut2_if2_pci}
+
| Add PCI devices to DUTs in 2-node single link topology
| | [Documentation]
| | ... | Add PCI devices to VPP configuration file.
| | Set Test Variable | ${dut1_if1_pci}
| | Set Test Variable | ${dut1_if2_pci}
+| Add single PCI device to DUTs in 2-node single link topology
+| | [Documentation]
+| | ... | Add single (first) PCI device on DUT1 to VPP configuration file.
+| | ...
+| | ${dut1_if1_pci}= | Get Interface PCI Addr | ${dut1} | ${dut1_if1}
+| | Run keyword | DUT1.Add DPDK Dev | ${dut1_if1_pci}
+| | Set Test Variable | ${dut1_if1_pci}
+
| Add VLAN Strip Offload switch off between DUTs in 3-node single link topology
| | [Documentation]
| | ... | Add VLAN Strip Offload switch off on PCI devices between DUTs to VPP
| | | Run Keyword If | ${number}==${nr} | Configure L2XC
| | | ... | ${dut2} | ${dut2-memif-${number}-if2} | ${dut2_if2}
| | All Vpp Interfaces Ready Wait | ${nodes}
-| | ${duts}= | Get Matches | ${nodes} | DUT*
-| | :FOR | ${dut} | IN | @{duts}
-| | | Show Memif | ${nodes['${dut}']}
+| | Show Memif on all DUTs | ${nodes}
| Initialize L2 Bridge Domain for '${nr}' memif pairs and '${rxq}' rxqueues in 3-node circular topology
| | [Documentation]
| | | Add interface to bridge domain | ${dut2}
| | | ... | ${dut2-memif-${number}-if2} | ${bd_id2}
| | All Vpp Interfaces Ready Wait | ${nodes}
-| | ${duts}= | Get Matches | ${nodes} | DUT*
-| | :FOR | ${dut} | IN | @{duts}
-| | | Show Memif | ${nodes['${dut}']}
+| | Show Memif on all DUTs | ${nodes}
+
+| Initialize L2 xconnect for single memif in 3-node circular topology
+| | [Documentation]
+| | ... | Create single Memif interface on all defined VPP nodes. Cross
+| | ... | connect Memif interface with one physical interface.
+| | ...
+| | ... | *Arguments:*
+| | ... | - ${rxq} - Number of Memif RX queues. Type: integer
+| | ... | - ${number} - Memif ID. Type: integer
+| | ...
+| | ... | *Note:*
+| | ... | Socket paths for Memif are defined in following format:
+| | ... | - /tmp/memif-DUT1_VNF${number}-${sid}
+| | ...
+| | ... | *Example:*
+| | ...
+| | ... | \| Initialize L2 xconnect for single memif in 3-node circular \
+| | ... | topology \| 1 \| 1 \|
+| | ...
+| | [Arguments] | ${rxq}=${1} | ${number}=${1}
+| | ${sock}= | Set Variable | memif-DUT1_VNF
+| | Set up single memif interface on DUT node | ${dut1} | ${sock}
+| | ... | ${number} | dut1-memif-${number}-if1 | ${rxq} | ${rxq}
+| | Configure L2XC | ${dut1} | ${dut1_if1} | ${dut1-memif-${number}-if1}
+| | ${sock}= | Set Variable | memif-DUT2_VNF
+| | Set up single memif interface on DUT node | ${dut2} | ${sock}
+| | ... | ${number} | dut2-memif-${number}-if1 | ${rxq} | ${rxq}
+| | Configure L2XC | ${dut2} | ${dut2_if2} | ${dut2-memif-${number}-if1}
+| | All Vpp Interfaces Ready Wait | ${nodes}
+| | Show Memif on all DUTs | ${nodes}
+
+| Initialize L2 Bridge Domain for single memif in 3-node circular topology
+| | [Documentation]
+| | ... | Create single Memif interface on all defined VPP nodes. Put Memif
+| | ... | interface to separate L2 bridge domain with one physical interface.
+| | ...
+| | ... | *Arguments:*
+| | ... | - ${rxq} - Number of Memif RX queues. Type: integer
+| | ... | - ${number} - Memif ID. Type: integer
+| | ...
+| | ... | *Note:*
+| | ... | Socket paths for Memif are defined in following format:
+| | ... | - /tmp/memif-DUT1_VNF${number}-${sid}
+| | ...
+| | ... | *Example:*
+| | ...
+| | ... | \| Initialize L2 Bridge Domain for single memif in 3-node circular \
+| | ... | topology \| 1 \| 1 \|
+| | ...
+| | [Arguments] | ${rxq}=${1} | ${number}=${1}
+| | ${sock}= | Set Variable | memif-DUT1_VNF
+| | Set up single memif interface on DUT node | ${dut1} | ${sock}
+| | ... | ${number} | dut1-memif-${number}-if1 | ${rxq} | ${rxq}
+| | Add interface to bridge domain | ${dut1} | ${dut1_if1} | ${number}
+| | Add interface to bridge domain | ${dut1} | ${dut1-memif-${number}-if1}
+| | ... | ${number}
+| | ${sock}= | Set Variable | memif-DUT2_VNF
+| | Set up single memif interface on DUT node | ${dut2} | ${sock}
+| | ... | ${number} | dut2-memif-${number}-if1 | ${rxq} | ${rxq}
+| | Add interface to bridge domain | ${dut2} | ${dut2_if2} | ${number}
+| | Add interface to bridge domain | ${dut2} | ${dut2-memif-${number}-if1}
+| | ... | ${number}
+| | All Vpp Interfaces Ready Wait | ${nodes}
+| | Show Memif on all DUTs | ${nodes}