X-Git-Url: https://gerrit.fd.io/r/gitweb?p=csit.git;a=blobdiff_plain;f=resources%2Flibraries%2Frobot%2Fperformance%2Fperformance_configuration.robot;h=f8628d0734def3a6c237b3755e41c4171a7533d2;hp=ad91d9903affc9e6d39febf27041754b56b7664e;hb=5075d208e29ece6bfd8cf4aa5289dd0b2ade583c;hpb=62af070d1834d71405600b930f3c7607dffecbe4 diff --git a/resources/libraries/robot/performance/performance_configuration.robot b/resources/libraries/robot/performance/performance_configuration.robot index ad91d9903a..f8628d0734 100644 --- a/resources/libraries/robot/performance/performance_configuration.robot +++ b/resources/libraries/robot/performance/performance_configuration.robot @@ -86,6 +86,38 @@ | | | ... | VPP Set Interface MTU | ${nodes['${dut}']} | ${${dut}_if2_2} | | All VPP Interfaces Ready Wait | ${nodes} +| Set single interfaces in path up +| | [Documentation] +| | ... | *Set UP state on single 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 +| | ${duts}= | Get Matches | ${nodes} | DUT* +| | :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 +| | All VPP Interfaces Ready Wait | ${nodes} +| | ${duts}= | Get Matches | ${nodes} | DUT* +| | :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} +| | All VPP Interfaces Ready Wait | ${nodes} + | Initialize AVF interfaces | | [Documentation] | | ... | Initialize AVF interfaces on each DUT. Interfaces are brought up. @@ -199,7 +231,7 @@ | | ... | DUT nodes in 2-node / 3-node circular topology | | ... | | ... | *Arguments:* -| | ... | - ${count} - IP route count. Type: integer +| | ... | - count - IP route count. Type: integer | | ... | | ... | *Return:* | | ... | - No value returned @@ -236,9 +268,11 @@ | | Add arp on dut | ${dut} | ${dut_if2} | 3.3.3.1 | ${tg1_if2_mac} | | Configure IP addresses on interfaces | ${dut1} | ${dut1_if1} | 1.1.1.2 | 30 | | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | Configure IP addresses on interfaces | ${dut1} | ${dut1_if2} | 2.2.2.1 | 30 +| | ... | Configure IP addresses on interfaces | ${dut1} | ${dut1_if2} | 2.2.2.1 +| | ... | 30 | | Run Keyword If | '${dut2_status}' == 'PASS' -| | ... | Configure IP addresses on interfaces | ${dut2} | ${dut2_if1} | 2.2.2.2 | 30 +| | ... | Configure IP addresses on interfaces | ${dut2} | ${dut2_if1} | 2.2.2.2 +| | ... | 30 | | Configure IP addresses on interfaces | ${dut} | ${dut_if2} | 3.3.3.2 | 30 | | Vpp Route Add | ${dut1} | 10.0.0.0 | 32 | 1.1.1.1 | ${dut1_if1} | | ... | count=${count} @@ -255,7 +289,7 @@ | | [Documentation] | | ... | Create pairs of Vhost-User interfaces for defined number of VMs on | | ... | VPP node. Set UP state of all VPP interfaces in path. Create -| | ... | ${vm_count}+1 FIB tables on DUT with multipath routing. Assign each +| | ... | vm_count+1 FIB tables on 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. Set routing on DUT nodes in all FIB tables with prefix @@ -357,7 +391,7 @@ | | [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 -| | ... | ${vm_count}+1 FIB tables on each DUT with multipath routing. Assign +| | ... | vm_count+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 @@ -369,8 +403,8 @@ | | ... | | ... | *Note:* | | ... | Socket paths for VM are defined in following format: -| | ... | - /tmp/sock-${VM_ID}-1 -| | ... | - /tmp/sock-${VM_ID}-2 +| | ... | - /tmp/sock-\${VM_ID}-1 +| | ... | - /tmp/sock-\${VM_ID}-2 | | ... | | ... | *Example:* | | ... @@ -512,6 +546,92 @@ | | | Vpp Route Add | ${dut2} | 10.10.10.0 | 24 | ${ip_net_vif2}.2 | | | ... | ${dut2-vhost-${number}-if2} | vrf=${fib_table_2} +| Initialize IPv4 forwarding with VLAN dot1q sub-interfaces in circular topology +| | [Documentation] +| | ... | Set UP state on VPP interfaces in path on nodes in 2-node / 3-node +| | ... | circular topology. In case of 3-node topology create VLAN +| | ... | sub-interfaces between DUTs. In case of 2-node topology create VLAN +| | ... | sub-interface on dut1-if2 interface. Get the interface MAC addresses +| | ... | and setup ARPs. Setup IPv4 addresses with /30 prefix on DUT-TG links +| | ... | and set routing with prefix /30. In case of 3-node set IPv4 adresses +| | ... | with /30 prefix on VLAN and set routing on both DUT nodes with prefix +| | ... | /30. Set next hop of neighbour DUT interface IPv4 address. All +| | ... | interfaces are brought up. +| | ... +| | ... | *Arguments:* +| | ... | - tg_if1_net - TG interface 1 IP subnet used by traffic generator. +| | ... | Type: integer +| | ... | - tg_if2_net - TG interface 2 IP subnet used by traffic generator. +| | ... | Type: integer +| | ... | - subid - ID of the sub-interface to be created. Type: string +| | ... | - tag_rewrite - Method of tag rewrite. Type: string +| | ... +| | ... | _NOTE:_ This KW uses following test case variables: +| | ... | - dut1 - DUT1 node. +| | ... | - dut2 - DUT2 node. +| | ... | - dut1_if2 - DUT1 interface towards DUT2. +| | ... | - dut2_if1 - DUT2 interface towards DUT1. +| | ... +| | ... | *Example:* +| | ... +| | ... | \| Initialize IPv4 forwarding with VLAN dot1q sub-interfaces\ +| | ... | in circular topology \| 10.10.10.0 \| 20.20.20.0 \| 10 \| pop-1 \| +| | ... +| | [Arguments] | ${tg_if1_net} | ${tg_if2_net} | ${subid} | ${tag_rewrite} +| | ... +| | ${dut2_status} | ${value}= | Run Keyword And Ignore Error +| | ... | Variable Should Exist | ${dut2} +| | ... +| | Set interfaces in path up +| | ... +| | Run Keyword If | '${dut2_status}' == 'PASS' +| | ... | Initialize VLAN dot1q sub-interfaces in circular topology +| | ... | ${dut1} | ${dut1_if2} | ${dut2} | ${dut2_if1} | ${subid} +| | ... | ELSE | Initialize VLAN dot1q sub-interfaces in circular topology +| | ... | ${dut1} | ${dut1_if2} | 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} +| | ... | ELSE | Configure L2 tag rewrite method on interfaces +| | ... | ${dut1} | ${subif_index_1} | TAG_REWRITE_METHOD=${tag_rewrite} +| | ... +| | ${tg1_if1_mac}= | Get Interface MAC | ${tg} | ${tg_if1} +| | ${tg1_if2_mac}= | Get Interface MAC | ${tg} | ${tg_if2} +| | ${dut1_if2_mac}= | Run Keyword If | '${dut2_status}' == 'PASS' +| | ... | Get Interface MAC | ${dut1} | ${dut1_if2} +| | ${dut2_if1_mac}= | Run Keyword If | '${dut2_status}' == 'PASS' +| | ... | Get Interface MAC | ${dut2} | ${dut2_if1} +| | Add arp on dut | ${dut1} | ${dut1_if1} | 1.1.1.1 | ${tg1_if1_mac} +| | Run Keyword If | '${dut2_status}' == 'PASS' +| | ... | Add arp on dut | ${dut1} | ${subif_index_1} | 2.2.2.2 +| | ... | ${dut2_if1_mac} +| | Run Keyword If | '${dut2_status}' == 'PASS' +| | ... | Add arp on dut | ${dut2} | ${subif_index_2} | 2.2.2.1 +| | ... | ${dut1_if2_mac} +| | ${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} +| | Add arp on dut | ${dut} | ${dut_if2} | 3.3.3.1 | ${tg1_if2_mac} +| | Configure IP addresses on interfaces | ${dut1} | ${dut1_if1} | 1.1.1.2 | 30 +| | Run Keyword If | '${dut2_status}' == 'PASS' +| | ... | Configure IP addresses on interfaces | ${dut1} | ${subif_index_1} +| | ... | 2.2.2.1 | 30 +| | Run Keyword If | '${dut2_status}' == 'PASS' +| | ... | Configure IP addresses on interfaces | ${dut2} | ${subif_index_2} +| | ... | 2.2.2.2 | 30 +| | Configure IP addresses on interfaces | ${dut} | ${dut_if2} | 3.3.3.2 | 30 +| | Vpp Route Add | ${dut1} | ${tg_if1_net} | 30 | 1.1.1.1 | ${dut1_if1} +| | Run Keyword If | '${dut2_status}' == 'PASS' +| | ... | Vpp Route Add | ${dut1} | ${tg_if2_net} | 30 | 2.2.2.2 +| | ... | ${subif_index_1} +| | Run Keyword If | '${dut2_status}' == 'PASS' +| | ... | Vpp Route Add | ${dut2} | ${tg_if1_net} | 30 | 2.2.2.1 +| | ... | ${subif_index_2} +| | Vpp Route Add | ${dut} | ${tg_if2_net} | 30 | 3.3.3.1 | ${dut_if2} + | Initialize IPv4 policer 2r3c-${t} in circular topology | | [Documentation] | | ... | Setup of 2r3c color-aware or color-blind policer with dst ip match @@ -601,7 +721,7 @@ | | ... | DUT nodes in 2-node / 3-node circular topology | | ... | | ... | *Arguments:* -| | ... | - ${count} - IP route count. Type: integer +| | ... | - count - IP route count. Type: integer | | ... | | ... | *Return:* | | ... | - No value returned @@ -656,6 +776,97 @@ | | Vpp Route Add | ${dut} | 2001:2::0 | ${host_prefix} | 2001:5::2 | | ... | interface=${dut_if2} | count=${count} +| Initialize IPv6 forwarding with VLAN dot1q sub-interfaces in circular topology +| | [Documentation] +| | ... | Set UP state on VPP interfaces in path on nodes in 2-node / 3-node +| | ... | circular topology. In case of 3-node topology create VLAN +| | ... | sub-interfaces between DUTs. In case of 2-node topology create VLAN +| | ... | sub-interface on dut1-if2 interface. Get the interface MAC addresses +| | ... | and setup ARPs. Setup IPv6 addresses with /64 prefix on DUT-TG links +| | ... | and set routing with prefix /64. In case of 3-node set IPv6 adresses +| | ... | with /64 prefix on VLAN and set routing on both DUT nodes with prefix +| | ... | /64. Set next hop of neighbour DUT interface IPv6 address. All +| | ... | interfaces are brought up. +| | ... +| | ... | *Arguments:* +| | ... | - tg_if1_net - TG interface 1 IPv6 subnet used by traffic generator. +| | ... | Type: integer +| | ... | - tg_if2_net - TG interface 2 IPv6 subnet used by traffic generator. +| | ... | Type: integer +| | ... | - subid - ID of the sub-interface to be created. Type: string +| | ... | - tag_rewrite - Method of tag rewrite. Type: string +| | ... +| | ... | _NOTE:_ This KW uses following test case variables: +| | ... | - dut1 - DUT1 node. +| | ... | - dut2 - DUT2 node. +| | ... | - dut1_if2 - DUT1 interface towards DUT2. +| | ... | - dut2_if1 - DUT2 interface towards DUT1. +| | ... +| | ... | *Example:* +| | ... +| | ... | \| Initialize IPv6 forwarding with VLAN dot1q sub-interfaces\ +| | ... | in circular topology \| 2001:1::0 \| 2001:2::0 \| 10 \| pop-1 \| +| | ... +| | [Arguments] | ${tg_if1_net} | ${tg_if2_net} | ${subid} | ${tag_rewrite} +| | ... +| | ${dut2_status} | ${value}= | Run Keyword And Ignore Error +| | ... | Variable Should Exist | ${dut2} +| | ... +| | Set interfaces in path up +| | ... +| | Run Keyword If | '${dut2_status}' == 'PASS' +| | ... | Initialize VLAN dot1q sub-interfaces in circular topology +| | ... | ${dut1} | ${dut1_if2} | ${dut2} | ${dut2_if1} | ${subid} +| | ... | ELSE | Initialize VLAN dot1q sub-interfaces in circular topology +| | ... | ${dut1} | ${dut1_if2} | 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} +| | ... | 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 +| | ${tg1_if1_mac}= | Get Interface MAC | ${tg} | ${tg_if1} +| | ${tg1_if2_mac}= | Get Interface MAC | ${tg} | ${tg_if2} +| | ${dut1_if2_mac}= | Run Keyword If | '${dut2_status}' == 'PASS' +| | ... | Get Interface MAC | ${dut1} | ${dut1_if2} +| | ${dut2_if1_mac}= | Run Keyword If | '${dut2_status}' == 'PASS' +| | ... | Get Interface MAC | ${dut2} | ${dut2_if1} +| | Add Ip Neighbor | ${dut1} | ${dut1_if1} | 2002:1::1 | ${tg1_if1_mac} +| | Run Keyword If | '${dut2_status}' == 'PASS' +| | ... | Add Ip Neighbor | ${dut1} | ${subif_index_1} | 2002:2::2 +| | ... | ${dut2_if1_mac} +| | Run Keyword If | '${dut2_status}' == 'PASS' +| | ... | Add Ip Neighbor | ${dut2} | ${subif_index_2} | 2002:2::1 +| | ... | ${dut1_if2_mac} +| | ${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} +| | Add Ip Neighbor | ${dut} | ${dut_if2} | 2002:3::1 | ${tg1_if2_mac} +| | VPP Set If IPv6 Addr | ${dut1} | ${dut1_if1} | 2002:1::2 | ${prefix} +| | Run Keyword If | '${dut2_status}' == 'PASS' +| | ... | VPP Set If IPv6 Addr | ${dut1} | ${subif_index_1} | 2002:2::1 +| | ... | ${prefix} +| | Run Keyword If | '${dut2_status}' == 'PASS' +| | ... | VPP Set If IPv6 Addr | ${dut2} | ${subif_index_2} | 2002:2::2 +| | ... | ${prefix} +| | VPP Set If IPv6 Addr | ${dut} | ${dut_if2} | 2002:3::2 | ${prefix} +| | Suppress ICMPv6 router advertisement message | ${nodes} +| | Vpp Route Add | ${dut1} | ${tg_if1_net} | ${host_prefix} | 2002:1::1 +| | ... | interface=${dut1_if1} +| | Run Keyword If | '${dut2_status}' == 'PASS' +| | ... | Vpp Route Add | ${dut1} | ${tg_if2_net} | ${host_prefix} | 2002:2::2 +| | ... | interface=${subif_index_1} +| | Run Keyword If | '${dut2_status}' == 'PASS' +| | ... | Vpp Route Add | ${dut2} | ${tg_if1_net} | ${host_prefix} | 2002:2::1 +| | ... | interface=${subif_index_2} +| | Vpp Route Add | ${dut} | ${tg_if2_net} | ${host_prefix} | 2002:3::1 +| | ... | interface=${dut_if2} + | Initialize IPv6 iAcl whitelist in 3-node circular topology | | [Documentation] | | ... | Creates classify L3 table on DUTs. IPv6 iAcl security whitelist @@ -765,15 +976,15 @@ | | ... | routes on both DUT nodes. | | ... | | ... | *Note:* -| | ... | KW uses test variable ${rxq_count_int} set by KW Add worker threads +| | ... | KW uses test variable rxq_count_int set by KW Add worker threads | | ... | and rxqueues to all DUTs | | ... | | ${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} -| | ${sock1}= | Set Variable | memif-DUT1_VNF -| | ${sock2}= | Set Variable | memif-DUT2_VNF +| | ${sock1}= | Set Variable | memif-DUT1_CNF1 +| | ${sock2}= | Set Variable | memif-DUT2_CNF1 | | Set up memif interfaces on DUT node | ${dut1} | ${sock1} | ${sock1} | | ... | ${1} | dut1-memif-1-if1 | dut1-memif-1-if2 | ${rxq_count_int} | | ... | ${rxq_count_int} @@ -929,8 +1140,8 @@ | | ... | | ... | *Note:* | | ... | Socket paths for VM are defined in following format: -| | ... | - /tmp/sock-${VM_ID}-1 -| | ... | - /tmp/sock-${VM_ID}-2 +| | ... | - /tmp/sock-\${VM_ID}-1 +| | ... | - /tmp/sock-\${VM_ID}-2 | | ... | | ... | *Example:* | | ... @@ -951,7 +1162,6 @@ | | | ... | ${${dut}-vhost-${number}-if1} | | | Run Keyword If | ${number}==${vm_count} | Configure L2XC | | | ... | ${nodes['${dut}']} | ${${dut}-vhost-${number}-if2} | ${${dut}_if2} -| | All VPP Interfaces Ready Wait | ${nodes} | Initialize L2 xconnect with Vhost-User | | [Documentation] @@ -993,7 +1203,7 @@ | | [Arguments] | ${sock1} | ${sock2} | ${subid} | ${tag_rewrite} | | ... | | Set interfaces in path up -| | Initialize VLAN dot1q sub-interfaces in 3-node circular topology +| | Initialize VLAN dot1q sub-interfaces in circular topology | | ... | ${dut1} | ${dut1_if2} | ${dut2} | ${dut2_if1} | ${subid} | | Configure L2 tag rewrite method on interfaces | | ... | ${dut1} | ${subif_index_1} | ${dut2} | ${subif_index_2} @@ -1034,7 +1244,7 @@ | | VPP Set interface MTU | ${dut1} | ${dut1_eth_bond_if1} | | Set Interface State | ${dut2} | ${dut2_eth_bond_if1} | up | | VPP Set interface MTU | ${dut2} | ${dut2_eth_bond_if1} -| | Initialize VLAN dot1q sub-interfaces in 3-node circular topology +| | Initialize VLAN dot1q sub-interfaces in circular topology | | ... | ${dut1} | ${dut1_eth_bond_if1} | ${dut2} | ${dut2_eth_bond_if1} | | ... | ${subid} | | Configure L2 tag rewrite method on interfaces @@ -1048,7 +1258,6 @@ | | ... | ${sock1} | ${sock2} | | Configure L2XC | ${dut2} | ${subif_index_2} | ${vhost_if1} | | Configure L2XC | ${dut2} | ${dut2_if2} | ${vhost_if2} -| | All VPP Interfaces Ready Wait | ${nodes} | Initialize L2 xconnect with Vhost-User and VLAN with VPP link bonding in 3-node circular topology | | [Documentation] @@ -1108,7 +1317,7 @@ | | ... | VPP Enslave Physical Interface | ${dut2} | ${dut2_if1_2} | | ... | ${dut2_eth_bond_if1} | | VPP Show Bond Data On All Nodes | ${nodes} | details=${TRUE} -| | Initialize VLAN dot1q sub-interfaces in 3-node circular topology +| | Initialize VLAN dot1q sub-interfaces in circular topology | | ... | ${dut1} | ${dut1_eth_bond_if1} | ${dut2} | ${dut2_eth_bond_if1} | | ... | ${subid} | | Configure L2 tag rewrite method on interfaces @@ -1166,21 +1375,21 @@ | | ... | \| GigabitEthernet0/8/0 \| | | ... | | ... | _NOTE:_ This KW uses following test case variables: -| | ... | - ${src_ip_start} - Source IP address start. Type: string -| | ... | - ${dst_ip_start} - Destination IP address start. Type: string -| | ... | - ${ip_step} - IP address step. Type: string -| | ... | - ${sport_start} - Source port number start. Type: string -| | ... | - ${dport_start} - Destination port number start. Type: string -| | ... | - ${port_step} - Port number step. Type: string -| | ... | - ${no_hit_aces_number} - Number of not-hitting ACEs to be configured. +| | ... | - src_ip_start - Source IP address start. Type: string +| | ... | - dst_ip_start - Destination IP address start. Type: string +| | ... | - ip_step - IP address step. Type: string +| | ... | - sport_start - Source port number start. Type: string +| | ... | - dport_start - Destination port number start. Type: string +| | ... | - port_step - Port number step. Type: string +| | ... | - no_hit_aces_number - Number of not-hitting ACEs to be configured. | | ... | Type: integer -| | ... | - ${acl_apply_type} - To what path apply the ACL - input or output. +| | ... | - acl_apply_type - To what path apply the ACL - input or output. | | ... | Type: string -| | ... | - ${acl_action} - Action for the rule - deny, permit, permit+reflect. +| | ... | - acl_action - Action for the rule - deny, permit, permit+reflect. | | ... | Type: string -| | ... | - ${trex_stream1_subnet} - IP subnet used by T-Rex in direction 0->1. +| | ... | - trex_stream1_subnet - IP subnet used by T-Rex in direction 0->1. | | ... | Type: string -| | ... | - ${trex_stream2_subnet} - IP subnet used by T-Rex in direction 1->0. +| | ... | - trex_stream2_subnet - IP subnet used by T-Rex in direction 1->0. | | ... | Type: string | | ... | | [Arguments] | ${dut} | ${dut_if1}=${NONE} | ${dut_if2}=${NONE} @@ -1261,12 +1470,12 @@ | | ... | circular topology \| | | ... | | ... | _NOTE:_ This KW uses following test case variables: -| | ... | - ${dut1} - DUT1 node. -| | ... | - ${dut2} - DUT2 node. -| | ... | - ${dut1_if1} - DUT1 interface towards TG. -| | ... | - ${dut1_if2} - DUT1 interface towards DUT2. -| | ... | - ${dut2_if1} - DUT2 interface towards DUT1. -| | ... | - ${dut2_if2} - DUT2 interface towards TG. +| | ... | - dut1 - DUT1 node. +| | ... | - dut2 - DUT2 node. +| | ... | - dut1_if1 - DUT1 interface towards TG. +| | ... | - dut1_if2 - DUT1 interface towards DUT2. +| | ... | - dut2_if1 - DUT2 interface towards DUT1. +| | ... | - dut2_if2 - DUT2 interface towards TG. | | ... | | Set interfaces in path up | | Configure L2BD forwarding | ${dut1} | ${dut1_if1} | ${dut1_if2} @@ -1292,17 +1501,17 @@ | | ... | in 3-node circular topology \| | | ... | | ... | _NOTE:_ This KW uses following test case variables: -| | ... | - ${tg} - TG node. -| | ... | - ${dut1} - DUT1 node. -| | ... | - ${dut2} - DUT2 node. -| | ... | - ${tg_if1} - TG interface 1 towards DUT1. -| | ... | - ${tg_if2} - TG interface 2 towards DUT2 (3-node topo) or DUT1 +| | ... | - tg - TG node. +| | ... | - dut1 - DUT1 node. +| | ... | - dut2 - DUT2 node. +| | ... | - tg_if1 - TG interface 1 towards DUT1. +| | ... | - tg_if2 - TG interface 2 towards DUT2 (3-node topo) or DUT1 | | ... | (2-node topo). -| | ... | - ${dut1_if1} - DUT1 interface 1 towards TG. -| | ... | - ${dut1_if2} - DUT1 interface 2 towards DUT2 (3-node topo) or TG +| | ... | - dut1_if1 - DUT1 interface 1 towards TG. +| | ... | - dut1_if2 - DUT1 interface 2 towards DUT2 (3-node topo) or TG | | ... | (2-node topo). -| | ... | - ${dut2_if1} - DUT2 interface 1 towards DUT1. -| | ... | - ${dut2_if2} - DUT2 interface 2 towards TG. +| | ... | - dut2_if1 - DUT2 interface 1 towards DUT1. +| | ... | - dut2_if2 - DUT2 interface 2 towards TG. | | ... | | ${dut2_status} | ${value}= | Run Keyword And Ignore Error | | ... | Variable Should Exist | ${dut2} @@ -1363,26 +1572,26 @@ | | ... | \| GigabitEthernet0/8/0 \| | | ... | | ... | _NOTE:_ This KW uses following test case variables: -| | ... | - ${src_ip_start} - Source IP address start. Type: string -| | ... | - ${ip_step} - IP address step. Type: string -| | ... | - ${src_mac_start} - Source MAC address start in format with colons. +| | ... | - src_ip_start - Source IP address start. Type: string +| | ... | - ip_step - IP address step. Type: string +| | ... | - src_mac_start - Source MAC address start in format with colons. | | ... | Type: string -| | ... | - ${src_mac_step} - Source MAC address step. Type: string -| | ... | - ${src_mac_mask} - Source MAC address mask. 00:00:00:00:00:00 is a +| | ... | - src_mac_step - Source MAC address step. Type: string +| | ... | - src_mac_mask - Source MAC address mask. 00:00:00:00:00:00 is a | | ... | wildcard mask. Type: string -| | ... | - ${no_hit_aces_number} - Number of not-hitting ACEs to be configured. +| | ... | - no_hit_aces_number - Number of not-hitting ACEs to be configured. | | ... | Type: integer -| | ... | - ${acl_action} - Action for the rule - deny, permit, permit+reflect. +| | ... | - acl_action - Action for the rule - deny, permit, permit+reflect. | | ... | Type: string -| | ... | - ${tg_stream1_subnet} - IP subnet used by TG in direction 0->1. +| | ... | - tg_stream1_subnet - IP subnet used by TG in direction 0->1. | | ... | Type: string -| | ... | - ${tg_stream2_subnet} - IP subnet used by TG in direction 1->0. +| | ... | - tg_stream2_subnet - IP subnet used by TG in direction 1->0. | | ... | Type: string -| | ... | - ${tg_stream1_mac} - Source MAC address of traffic stream 1. +| | ... | - tg_stream1_mac - Source MAC address of traffic stream 1. | | ... | Type: string -| | ... | - ${tg_stream2_mac} - Source MAC address of traffic stream 2. +| | ... | - tg_stream2_mac - Source MAC address of traffic stream 2. | | ... | Type: string -| | ... | - ${tg_mac_mask} - MAC address mask for traffic streams. +| | ... | - tg_mac_mask - MAC address mask for traffic streams. | | ... | 00:00:00:00:00:00 is a wildcard mask. Type: string | | ... | | [Arguments] | ${dut} | ${dut_if1}=${NONE} | ${dut_if2}=${NONE} @@ -1453,15 +1662,15 @@ | | ... | circular topology \| | | ... | | ... | _NOTE 1:_ This KW uses following test case variables: -| | ... | - ${tg} - TG node. -| | ... | - ${dut1} - DUT1 node. -| | ... | - ${dut2} - DUT2 node. -| | ... | - ${tg_if1} - TG interface towards DUT1. -| | ... | - ${tg_if2} - TG interface towards DUT2. -| | ... | - ${dut1_if1} - DUT1 interface towards TG. -| | ... | - ${dut1_if2} - DUT1 interface towards DUT2. -| | ... | - ${dut2_if1} - DUT2 interface towards DUT1. -| | ... | - ${dut2_if2} - DUT2 interface towards TG. +| | ... | - tg - TG node. +| | ... | - dut1 - DUT1 node. +| | ... | - dut2 - DUT2 node. +| | ... | - tg_if1 - TG interface towards DUT1. +| | ... | - tg_if2 - TG interface towards DUT2. +| | ... | - dut1_if1 - DUT1 interface towards TG. +| | ... | - dut1_if2 - DUT1 interface towards DUT2. +| | ... | - dut2_if1 - DUT2 interface towards DUT1. +| | ... | - dut2_if2 - DUT2 interface towards TG. | | ... | | Set interfaces in path up | | Configure L2BD forwarding | ${dut1} | ${dut1_if1} | ${dut1_if2} @@ -1481,8 +1690,8 @@ | | ... | | ... | *Note:* | | ... | Socket paths for VM are defined in following format: -| | ... | - /tmp/sock-${VM_ID}-1 -| | ... | - /tmp/sock-${VM_ID}-2 +| | ... | - /tmp/sock-\${VM_ID}-1 +| | ... | - /tmp/sock-\${VM_ID}-2 | | ... | | ... | *Example:* | | ... @@ -1507,7 +1716,6 @@ | | | ... | ${${dut}-vhost-${number}-if1} | ${number} | | | Add interface to bridge domain | ${nodes['${dut}']} | | | ... | ${${dut}-vhost-${number}-if2} | ${bd_id2} -| | All VPP Interfaces Ready Wait | ${nodes} | Initialize L2 bridge domains with Vhost-User | | [Documentation] @@ -1554,6 +1762,48 @@ | | Configure L2BD forwarding | ${dut1} | ${dut1_if1} | ${dut1s_vxlan} | | Configure L2BD forwarding | ${dut2} | ${dut2_if2} | ${dut2s_vxlan} +| Initialize L2 bridge domain with VLAN and VXLANoIPv4 in 3-node circular topology +| | [Documentation] +| | ... | Setup L2 bridge domain topology with VLAN and VXLANoIPv4 by connecting +| | ... | pairs of VLAN sub-interface and VXLAN interface to separate L2 bridge +| | ... | domain on each DUT. All interfaces are brought up. IPv4 addresses +| | ... | with prefix /32 are configured on interfaces between DUTs. VXLAN +| | ... | sub-interfaces has same IPv4 address as interfaces. +| | ... +| | ... | *Arguments:* +| | ... | - vxlan_count - VXLAN count. Type: integer +| | ... +| | ... | *Example:* +| | ... +| | ... | \| Initialize L2 bridge domain with VLAN and VXLANoIPv4 in 3-node \ +| | ... | \| circular topology \| ${1} \| +| | ... +| | [Arguments] | ${vxlan_count}=${1} +| | ... +| | Set interfaces in path up +| | ... +| | ${bd_id_start}= | Set Variable | ${1} +| | ${vni_start} = | Set Variable | ${20} +| | ... +| | ${ip_step} = | Set Variable | ${2} +| | ${dut1_ip_start}= | Set Variable | 172.16.0.1 +| | ${dut2_ip_start}= | Set Variable | 172.16.0.2 +| | ... +| | ${ip_limit} = | Set Variable | 255.255.255.255 +| | ... +| | 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} +| | ... | ip_limit=${ip_limit} | 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} +| | ... | ip_limit=${ip_limit} | bd_id_start=${bd_id_start} + | Initialize L2 bridge domains with Vhost-User and VXLANoIPv4 in 3-node circular topology | | [Documentation] | | ... | Create two Vhost-User interfaces on all defined VPP nodes. Add each @@ -1640,7 +1890,6 @@ | | ... | ${dut1_vxlans} | ${dut2_vxlans} | ${dut1_route_subnet} | | | ... | ${dut1_route_mask} | ${dut2_route_subnet} | ${dut2_route_mask} | | ... -| | Set interfaces in path up | | Configure IP addresses on interfaces | ${dut1} | ${dut1_if1} | | | ... | ${dut1_address} | ${dut1_address_subnet} | | Configure IP addresses on interfaces | ${dut2} | ${dut2_if2} | @@ -1669,11 +1918,13 @@ | | 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 VLAN dot1q sub-interfaces in a 3-node circular topology +| Initialize L2 bridge domains with VLAN dot1q sub-interfaces in circular topology | | [Documentation] -| | ... | Setup L2 bridge domain topology with learning enabled with VLAN -| | ... | between DUTs by connecting physical and vlan interfaces on each DUT. -| | ... | All interfaces are brought up. +| | ... | Setup L2 bridge domain topology with learning enabled with VLAN by +| | ... | connecting physical and vlan interfaces on each DUT. In case of 3-node +| | ... | topology create VLAN sub-interfaces between DUTs. In case of 2-node +| | ... | topology create VLAN sub-interface on dut1-if2 interface. All +| | ... | interfaces are brought up. | | ... | | ... | *Arguments:* | | ... | - bd_id1 - Bridge domain ID. Type: integer @@ -1682,10 +1933,10 @@ | | ... | - tag_rewrite - Method of tag rewrite. Type: string | | ... | | ... | _NOTE:_ This KW uses following test case variables: -| | ... | - ${dut1} - DUT1 node. -| | ... | - ${dut2} - DUT2 node. -| | ... | - ${dut1_if2} - DUT1 interface towards DUT2. -| | ... | - ${dut2_if1} - DUT2 interface towards DUT1. +| | ... | - dut1 - DUT1 node. +| | ... | - dut2 - DUT2 node. +| | ... | - dut1_if2 - DUT1 interface towards DUT2. +| | ... | - dut2_if1 - DUT2 interface towards DUT1. | | ... | | ... | *Example:* | | ... @@ -1694,23 +1945,38 @@ | | ... | | [Arguments] | ${bd_id1} | ${bd_id2} | ${subid} | ${tag_rewrite} | | ... +| | ${dut2_status} | ${value}= | Run Keyword And Ignore Error +| | ... | Variable Should Exist | ${dut2} +| | ... | | Set interfaces in path up -| | Initialize VLAN dot1q sub-interfaces in 3-node circular topology +| | ... +| | Run Keyword If | '${dut2_status}' == 'PASS' +| | ... | Initialize VLAN dot1q sub-interfaces in circular topology | | ... | ${dut1} | ${dut1_if2} | ${dut2} | ${dut2_if1} | ${subid} -| | Configure L2 tag rewrite method on interfaces -| | ... | ${dut1} | ${subif_index_1} | ${dut2} | ${subif_index_2} -| | ... | ${tag_rewrite} +| | ... | ELSE | Initialize VLAN dot1q sub-interfaces in circular topology +| | ... | ${dut1} | ${dut1_if2} | 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} +| | ... | 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 | ${dut2} | ${subif_index_2} | ${bd_id2} -| | Add interface to bridge domain | ${dut2} | ${dut2_if2} | ${bd_id2} +| | Run Keyword If | '${dut2_status}' == 'PASS' +| | ... | 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} -| Initialize L2 bridge domains with Vhost-User and VLAN in a 3-node circular topology +| Initialize L2 bridge domains with Vhost-User and VLAN in circular topology | | [Documentation] | | ... | Create two Vhost-User interfaces on all defined VPP nodes. Add each | | ... | Vhost-User interface into L2 bridge domains with learning enabled -| | ... | with physical inteface. -| | ... | Setup VLAN between DUTs. All interfaces are brought up. +| | ... | with physical inteface. In case of 3-node topology create VLAN +| | ... | sub-interfaces between DUTs. In case of 2-node topology create VLAN +| | ... | sub-interface on dut1-if2 interface. All interfaces are brought up. | | ... | | ... | *Arguments:* | | ... | - bd_id1 - Bridge domain ID. Type: integer @@ -1722,31 +1988,46 @@ | | ... | | ... | *Example:* | | ... -| | ... | \| L2 bridge domains with Vhost-User and VLAN initialized in a 3-node\ -| | ... | circular topology \| 1 \| 2 \| /tmp/sock1 \| /tmp/sock2 \| 10 \ -| | ... | \| pop-1 \| +| | ... | \| L2 bridge domains with Vhost-User and VLAN initialized in circular\ +| | ... | topology \| 1 \| 2 \| /tmp/sock1 \| /tmp/sock2 \| 10 \| pop-1 \| | | ... | | [Arguments] | ${bd_id1} | ${bd_id2} | ${sock1} | ${sock2} | ${subid} | | ... | ${tag_rewrite} | | ... +| | ${dut2_status} | ${value}= | Run Keyword And Ignore Error +| | ... | Variable Should Exist | ${dut2} +| | ... | | Set interfaces in path up -| | Initialize VLAN dot1q sub-interfaces in 3-node circular topology +| | ... +| | Run Keyword If | '${dut2_status}' == 'PASS' +| | ... | Initialize VLAN dot1q sub-interfaces in circular topology | | ... | ${dut1} | ${dut1_if2} | ${dut2} | ${dut2_if1} | ${subid} -| | Configure L2 tag rewrite method on interfaces -| | ... | ${dut1} | ${subif_index_1} | ${dut2} | ${subif_index_2} -| | ... | ${tag_rewrite} +| | ... | ELSE | Initialize VLAN dot1q sub-interfaces in circular topology +| | ... | ${dut1} | ${dut1_if2} | 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} +| | ... | ELSE | Configure L2 tag rewrite method on interfaces +| | ... | ${dut1} | ${subif_index_1} | TAG_REWRITE_METHOD=${tag_rewrite} +| | ... | | Configure vhost interfaces for L2BD forwarding | ${dut1} | | ... | ${sock1} | ${sock2} | | 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} -| | Configure vhost interfaces for L2BD forwarding | ${dut2} +| | Run Keyword If | '${dut2_status}' == 'PASS' +| | ... | Configure vhost interfaces for L2BD forwarding | ${dut2} | | ... | ${sock1} | ${sock2} -| | 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} +| | Run Keyword If | '${dut2_status}' == 'PASS' +| | ... | Add interface to bridge domain | ${dut2} | ${subif_index_2} +| | ... | ${bd_id1} +| | Run Keyword If | '${dut2_status}' == 'PASS' +| | ... | Add interface to bridge domain | ${dut2} | ${vhost_if1} | ${bd_id1} +| | 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} | Initialize L2 bridge domains with Vhost-User and VLAN with DPDK link bonding in a 3-node circular topology | | [Documentation] @@ -1780,7 +2061,7 @@ | | VPP Set interface MTU | ${dut1} | ${dut1_eth_bond_if1} | | Set Interface State | ${dut2} | ${dut2_eth_bond_if1} | up | | VPP Set interface MTU | ${dut2} | ${dut2_eth_bond_if1} -| | Initialize VLAN dot1q sub-interfaces in 3-node circular topology +| | Initialize VLAN dot1q sub-interfaces in circular topology | | ... | ${dut1} | ${dut1_eth_bond_if1} | ${dut2} | ${dut2_eth_bond_if1} | | ... | ${subid} | | Configure L2 tag rewrite method on interfaces @@ -1861,7 +2142,7 @@ | | ... | VPP Enslave Physical Interface | ${dut2} | ${dut2_if1_2} | | ... | ${dut2_eth_bond_if1} | | VPP Show Bond Data On All Nodes | ${nodes} | details=${TRUE} -| | Initialize VLAN dot1q sub-interfaces in 3-node circular topology +| | Initialize VLAN dot1q sub-interfaces in circular topology | | ... | ${dut1} | ${dut1_eth_bond_if1} | ${dut2} | ${dut2_eth_bond_if1} | | ... | ${subid} | | Configure L2 tag rewrite method on interfaces @@ -1931,9 +2212,7 @@ | | ... | | ${duts}= | Get Matches | ${nodes} | DUT* | | :FOR | ${dut} | IN | @{duts} -| | | ${if1_pci}= | Run Keyword If | '${dut}' == 'DUT1' | Get Interface PCI Addr -| | | ... | ${nodes['${dut}']} | ${${dut}_if1} | ELSE | Get Interface PCI Addr -| | | ... | ${nodes['${dut}']} | ${${dut}_if2} +| | | ${if1_pci}= | Get Interface PCI Addr | ${nodes['${dut}']} | ${${dut}_if1} | | | Run keyword | ${dut}.Add DPDK Dev | ${if1_pci} | | | Set Test Variable | ${${dut}_if1_pci} | ${if1_pci} @@ -1984,6 +2263,8 @@ | | ... | - sock2 - Socket path for second Vhost-User interface. | | ... | Type: string | | ... | - vm_name - QemuUtil instance name. Type: string +| | ... | - chains: Total number of chains. Type: integer +| | ... | - nodeness: Total number of nodes per chain. Type: integer | | ... | - qemu_id - Qemu Id when starting more then one guest VM on DUT | | ... | node. Type: integer | | ... | - jumbo - Set True if jumbo frames are used in the test. @@ -2002,10 +2283,14 @@ | | ... | \| ${nodes['DUT1']} \| /tmp/sock-2-1 \| /tmp/sock-2-2 \| DUT1_VM2 \ | | ... | \| qemu_id=${2} \| | | ... -| | [Arguments] | ${dut} | ${sock1} | ${sock2} | ${vm_name} | ${qemu_id}=${1} -| | ... | ${jumbo}=${False} | ${perf_qemu_qsz}=${256} -| | ... | ${use_tuned_cfs}=${False} +| | [Arguments] | ${dut} | ${sock1} | ${sock2} | ${vm_name} | ${chains}=${1} +| | ... | ${nodeness}=${1} | ${qemu_id}=${1} | ${jumbo}=${False} +| | ... | ${perf_qemu_qsz}=${256} | ${use_tuned_cfs}=${False} | | ... +| | ${nf_cpus}= | Create network function CPU list | ${dut} +| | ... | chains=${chains} | nodeness=${nodeness} | chain_id=${1} +| | ... | node_id=${qemu_id} | auto_scale=${True} +| | ${nf_cpus_count}= | Get Length | ${nf_cpus} | | Import Library | resources.libraries.python.QemuUtils | qemu_id=${qemu_id} | | ... | WITH NAME | ${vm_name} | | Run keyword | ${vm_name}.Qemu Set Node | ${nodes['${dut}']} @@ -2013,28 +2298,6 @@ | | Run keyword | ${vm_name}.Qemu Set Serial Port | ${serial_port} | | ${ssh_fwd_port}= | Evaluate | ${qemu_id} + ${10021} | | Run keyword | ${vm_name}.Qemu Set Ssh Fwd Port | ${ssh_fwd_port} -| | ${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} -| | ${dut_numa}= | Get interfaces numa node | ${nodes['${dut}']} | @{if_list} -# Compute CPU placement for VM based on expected DUT placement. -| | ${os_cpus}= | Set Variable | ${1} -| | ${dut_main_cpus}= | Set Variable | ${1} -| | ${dut_wk_cpus}= | Set Variable | ${cpu_count_int} -| | ${vm_cpus}= | Evaluate | ${dut_wk_cpus} + ${dut_main_cpus} -| | ${skip_dut}= | Evaluate | ${dut_wk_cpus} + ${dut_main_cpus} + ${os_cpus} -| | ${skip_cpu}= | Evaluate | ${skip_dut} + (${qemu_id} - ${1}) * ${vm_cpus} -| | ${qemu_cpus}= | Cpu slice of list per node | ${nodes['${dut}']} -| | ... | ${dut_numa} | skip_cnt=${skip_cpu} | cpu_cnt=${vm_cpus} -| | ... | smt_used=${smt_used} -| | ${vm_thrs}= | Get Length | ${qemu_cpus} | | Run keyword | ${vm_name}.Qemu Set Queue Count | ${rxq_count_int} | | Run keyword | ${vm_name}.Qemu Set Queue Size | ${perf_qemu_qsz} | | Run keyword | ${vm_name}.Qemu Add Vhost User If | ${sock1} @@ -2046,15 +2309,16 @@ | | ... | ${perf_qemu_path}-patch/bin/ | | ... | ${perf_qemu_path}-base/bin/ | | Run Keyword If | ${qemu_build} | ${vm_name}.Build QEMU | ${nodes['${dut}']} -| | ... | apply_patch=${False} +| | ... | apply_patch=${apply_patch} | | Run keyword | ${vm_name}.Qemu Set Path | ${perf_qemu_path} -| | Run keyword | ${vm_name}.Qemu Set Smp | ${vm_thrs} | ${vm_thrs} | 1 | 1 +| | Run keyword | ${vm_name}.Qemu Set Smp | ${nf_cpus_count} | ${nf_cpus_count} +| | ... | 1 | 1 | | Run keyword | ${vm_name}.Qemu Set Mem Size | 2048 | | Run keyword | ${vm_name}.Qemu Set Disk Image | ${perf_vm_image} | | ${vm}= | Run keyword | ${vm_name}.Qemu Start -| | Run keyword | ${vm_name}.Qemu Set Affinity | @{qemu_cpus} +| | Run keyword | ${vm_name}.Qemu Set Affinity | @{nf_cpus} | | Run keyword If | ${use_tuned_cfs} | ${vm_name}.Qemu Set Scheduler Policy -| | ${max_pkt_len}= | Set Variable If | ${jumbo} | 9000 | ${EMPTY} +| | ${max_pkt_len}= | Set Variable If | ${jumbo} | 9200 | ${EMPTY} | | ${testpmd_cpus}= | Evaluate | ${thr_count_int} + ${1} | | ${testpmd_cpus}= | Cpu list per node str | ${nodes['${dut}']} | ${0} | | ... | cpu_cnt=${testpmd_cpus} @@ -2067,7 +2331,7 @@ | Configure guest VMs with dpdk-testpmd connected via vhost-user on node | | [Documentation] -| | ... | Start ${vm_count} QEMU guests with two vhost-user interfaces and\ +| | ... | Start vm_count QEMU guests with two vhost-user interfaces and\ | | ... | interconnecting DPDK testpmd for defined number of VMs on all defined\ | | ... | VPP nodes. | | ... @@ -2094,13 +2358,13 @@ | | | ${vm}= | | | ... | Configure guest VM with dpdk-testpmd connected via vhost-user | | | ... | ${dut} | ${sock1} | ${sock2} | ${dut}_VM${number} -| | | ... | qemu_id=${number} | jumbo=${jumbo} | perf_qemu_qsz=${perf_qemu_qsz} -| | | ... | use_tuned_cfs=${use_tuned_cfs} +| | | ... | nodeness=${vm_count} | qemu_id=${number} | jumbo=${jumbo} +| | | ... | perf_qemu_qsz=${perf_qemu_qsz} | use_tuned_cfs=${use_tuned_cfs} | | | Set To Dictionary | ${${dut}_vm_refs} | ${dut}_VM${number} | ${vm} | Configure guest VMs with dpdk-testpmd connected via vhost-user | | [Documentation] -| | ... | Start ${vm_count} QEMU guests with two vhost-user interfaces and\ +| | ... | Start vm_count QEMU guests with two vhost-user interfaces and\ | | ... | interconnecting DPDK testpmd defined number of VMs on all defined VPP\ | | ... | nodes. | | ... @@ -2125,6 +2389,7 @@ | | | Configure guest VMs with dpdk-testpmd connected via vhost-user on node | | | ... | ${dut} | vm_count=${vm_count} | jumbo=${jumbo} | | | ... | perf_qemu_qsz=${perf_qemu_qsz} | use_tuned_cfs=${False} +| | All VPP Interfaces Ready Wait | ${nodes} | Configure guest VM with dpdk-testpmd-mac connected via vhost-user | | [Documentation] @@ -2140,6 +2405,8 @@ | | ... | - vm_name - QemuUtil instance name. Type: string | | ... | - eth0_mac - MAC address of first Vhost interface. Type: string | | ... | - eth1_mac - MAC address of second Vhost interface. Type: string +| | ... | - chains: Total number of chains. Type: integer +| | ... | - nodeness: Total number of nodes per chain. Type: integer | | ... | - qemu_id - Qemu Id when starting more then one guest VM on DUT | | ... | node. Type: integer | | ... | - jumbo - Set True if jumbo frames are used in the test. @@ -2159,9 +2426,14 @@ | | ... | \| 00:00:00:00:00:01 \| 00:00:00:00:00:02 \| | | ... | | [Arguments] | ${dut} | ${sock1} | ${sock2} | ${vm_name} -| | ... | ${eth0_mac} | ${eth1_mac} | ${qemu_id}=${1} | ${jumbo}=${False} -| | ... | ${perf_qemu_qsz}=${256} | ${use_tuned_cfs}=${False} +| | ... | ${eth0_mac} | ${eth1_mac} | ${chains}=${1} | ${nodeness}=${1} +| | ... | ${qemu_id}=${1} | ${jumbo}=${False} | ${perf_qemu_qsz}=${256} +| | ... | ${use_tuned_cfs}=${False} | | ... +| | ${nf_cpus}= | Create network function CPU list | ${dut} +| | ... | chains=${chains} | nodeness=${nodeness} | chain_id=${1} +| | ... | node_id=${qemu_id} | auto_scale=${True} +| | ${nf_cpus_count}= | Get Length | ${nf_cpus} | | Import Library | resources.libraries.python.QemuUtils | qemu_id=${qemu_id} | | ... | WITH NAME | ${vm_name} | | Run keyword | ${vm_name}.Qemu Set Node | ${nodes['${dut}']} @@ -2169,19 +2441,6 @@ | | Run keyword | ${vm_name}.Qemu Set Serial Port | ${serial_port} | | ${ssh_fwd_port}= | Evaluate | ${qemu_id} + ${10021} | | Run keyword | ${vm_name}.Qemu Set Ssh Fwd Port | ${ssh_fwd_port} -| | ${dut_numa}= | Get interfaces numa node | ${nodes['${dut}']} -| | ... | ${${dut}_if1} | ${${dut}_if2} -# Compute CPU placement for VM based on expected DUT placement. -| | ${os_cpus}= | Set Variable | ${1} -| | ${dut_main_cpus}= | Set Variable | ${1} -| | ${dut_wk_cpus}= | Set Variable | ${cpu_count_int} -| | ${vm_cpus}= | Evaluate | ${dut_wk_cpus} + ${dut_main_cpus} -| | ${skip_dut}= | Evaluate | ${dut_wk_cpus} + ${dut_main_cpus} + ${os_cpus} -| | ${skip_cpu}= | Evaluate | ${skip_dut} + (${qemu_id} - ${1}) * ${vm_cpus} -| | ${qemu_cpus}= | Cpu slice of list per node | ${nodes['${dut}']} -| | ... | ${dut_numa} | skip_cnt=${skip_cpu} | cpu_cnt=${vm_cpus} -| | ... | smt_used=${smt_used} -| | ${vm_thrs}= | Get Length | ${qemu_cpus} | | Run keyword | ${vm_name}.Qemu Set Queue Count | ${rxq_count_int} | | Run keyword | ${vm_name}.Qemu Set Queue Size | ${perf_qemu_qsz} | | Run keyword | ${vm_name}.Qemu Add Vhost User If | ${sock1} @@ -2195,13 +2454,14 @@ | | Run Keyword If | ${qemu_build} | ${vm_name}.Build QEMU | ${nodes['${dut}']} | | ... | apply_patch=${False} | | Run keyword | ${vm_name}.Qemu Set Path | ${perf_qemu_path} -| | Run keyword | ${vm_name}.Qemu Set Smp | ${vm_thrs} | ${vm_thrs} | 1 | 1 +| | Run keyword | ${vm_name}.Qemu Set Smp | ${nf_cpus_count} | ${nf_cpus_count} +| | ... | 1 | 1 | | Run keyword | ${vm_name}.Qemu Set Mem Size | 2048 | | Run keyword | ${vm_name}.Qemu Set Disk Image | ${perf_vm_image} | | ${vm}= | Run keyword | ${vm_name}.Qemu Start -| | Run keyword | ${vm_name}.Qemu Set Affinity | @{qemu_cpus} +| | Run keyword | ${vm_name}.Qemu Set Affinity | @{nf_cpus} | | Run keyword If | ${use_tuned_cfs} | ${vm_name}.Qemu Set Scheduler Policy -| | ${max_pkt_len}= | Set Variable If | ${jumbo} | 9000 | ${EMPTY} +| | ${max_pkt_len}= | Set Variable If | ${jumbo} | 9200 | ${EMPTY} | | ${testpmd_cpus}= | Evaluate | ${thr_count_int} + ${1} | | ${testpmd_cpus}= | Cpu list per node str | ${nodes['${dut}']} | ${0} | | ... | cpu_cnt=${testpmd_cpus} @@ -2215,7 +2475,7 @@ | Configure guest VMs with dpdk-testpmd-mac connected via vhost-user on node | | [Documentation] -| | ... | Start ${vm_count} QEMU guests with two vhost-user interfaces and\ +| | ... | Start vm_count QEMU guests with two vhost-user interfaces and\ | | ... | interconnecting DPDK testpmd with fwd mode set to mac rewrite for\ | | ... | defined number of VMs on all defined VPP nodes. | | ... @@ -2246,14 +2506,14 @@ | | | ... | Configure guest VM with dpdk-testpmd-mac connected via vhost-user | | | ... | ${dut} | ${sock1} | ${sock2} | ${dut}_VM${number} | | | ... | ${${dut}-vhost-${number}-if1_mac} -| | | ... | ${${dut}-vhost-${number}-if2_mac} | qemu_id=${number} -| | | ... | jumbo=${jumbo} | perf_qemu_qsz=${perf_qemu_qsz} +| | | ... | ${${dut}-vhost-${number}-if2_mac} | nodeness=${vm_count} +| | | ... | qemu_id=${number} | jumbo=${jumbo} | perf_qemu_qsz=${perf_qemu_qsz} | | | ... | use_tuned_cfs=${use_tuned_cfs} | | | Set To Dictionary | ${${dut}_vm_refs} | ${dut}_VM${number} | ${vm} | Configure guest VMs with dpdk-testpmd-mac connected via vhost-user | | [Documentation] -| | ... | Start ${vm_count} QEMU guests with two vhost-user interfaces and\ +| | ... | Start vm_count QEMU guests with two vhost-user interfaces and\ | | ... | interconnecting DPDK testpmd with fwd mode set to mac rewrite for\ | | ... | defined number of VMs on all defined VPP nodes. | | ... @@ -2278,77 +2538,18 @@ | | | Configure guest VMs with dpdk-testpmd-mac connected via vhost-user on node | | | ... | ${dut} | vm_count=${vm_count} | jumbo=${jumbo} | | | ... | perf_qemu_qsz=${perf_qemu_qsz} | use_tuned_cfs=${False} - -| Configure guest VM with linux bridge connected via vhost-user -| | [Documentation] -| | ... | Start QEMU guest with two vhost-user interfaces and interconnecting\ -| | ... | linux bridge. -| | ... -| | ... | *Arguments:* -| | ... | - dut - DUT node to start guest VM on. Type: dictionary -| | ... | - sock1 - Socket path for first Vhost-User interface. -| | ... | Type: string -| | ... | - sock2 - Socket path for second Vhost-User interface. -| | ... | Type: string -| | ... | - vm_name - QemuUtil instance name. Type: string -| | ... | - skip_cnt - number of cpus which will be skipped. Type: int -| | ... -| | ... | _NOTE:_ This KW expects following test case variables to be set: -| | ... | - cpu_count_int - Number of Physical CPUs allocated for DUT. -| | ... -| | ... | *Example:* -| | ... -| | ... | \| Configure guest VM with linux bridge connected via vhost-user \ -| | ... | \| ${nodes['DUT1']} \| /tmp/sock1 \| /tmp/sock2 \| DUT1_VM \| ${6} \| -| | ... -| | [Arguments] | ${dut} | ${sock1} | ${sock2} | ${vm_name} | ${skip_cnt}=${6} -| | ... | ${count}=${5} -| | ... -| | Import Library | resources.libraries.python.QemuUtils -| | ... | WITH NAME | ${vm_name} -| | Run keyword | ${vm_name}.Qemu Set Node | ${dut} -| | ${dut_numa}= | Get interfaces numa node | ${dut} -| | ... | ${dut1_if1} | ${dut1_if2} -| | ${vm_phy_cpus}= | Evaluate | ${cpu_count_int} + ${1} -| | ${skip_cnt}= | Evaluate | ${skip} + (${qemu_id} - ${1}) * ${vm_phy_cpus} -| | ${qemu_cpus}= | Cpu slice of list per node | ${dut} | ${dut_numa} -| | ... | skip_cnt=${skip_cnt} | cpu_cnt=${vm_phy_cpus} | smt_used=${smt_used} -| | ${vm_thr_cpus}= | Get Length | ${qemu_cpus} -| | Run keyword | ${vm_name}.Qemu Set Queue Size | ${perf_qemu_qsz} -| | Run keyword | ${vm_name}.Qemu Add Vhost User If | ${sock1} -| | Run keyword | ${vm_name}.Qemu Add Vhost User If | ${sock2} -| | ${apply_patch}= | Set Variable | ${False} -| | ${perf_qemu_path}= | Set Variable If | ${apply_patch} -| | ... | ${perf_qemu_path}-patch/bin/ -| | ... | ${perf_qemu_path}-base/bin/ -| | Run Keyword If | ${qemu_build} | ${vm_name}.Build QEMU | ${dut} -| | ... | apply_patch=${apply_patch} -| | Run keyword | ${vm_name}.Qemu Set Path | ${perf_qemu_path} -| | Run keyword | ${vm_name}.Qemu Set Smp | ${vm_thr_cpus} | ${vm_thr_cpus} -| | ... | 1 | 1 -| | Run keyword | ${vm_name}.Qemu Set Mem Size | 2048 -| | Run keyword | ${vm_name}.Qemu Set Disk Image | ${perf_vm_image} -| | ${vm}= | Run keyword | ${vm_name}.Qemu Start -| | Run keyword | ${vm_name}.Qemu Set Affinity | @{qemu_cpus} -| | ${br}= | Set Variable | br0 -| | ${vhost1}= | Get Vhost User If Name By Sock | ${vm} | ${sock1} -| | ${vhost2}= | Get Vhost User If Name By Sock | ${vm} | ${sock2} -| | Linux Add Bridge | ${vm} | ${br} | ${vhost1} | ${vhost2} -| | Set Interface State | ${vm} | ${vhost1} | up | if_type=name -| | Set Interface State | ${vm} | ${vhost2} | up | if_type=name -| | Set Interface State | ${vm} | ${br} | up | if_type=name -| | Return From Keyword | ${vm} +| | All VPP Interfaces Ready Wait | ${nodes} | 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 +| | ... | - 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 @@ -2385,8 +2586,8 @@ | | [Documentation] | Setup Lisp GPE IPv4 forwarding over IPsec. | | ... | | ... | *Arguments:* -| | ... | -${encr_alg} - Encryption algorithm. Type: string -| | ... | -${auth_alg} - Authentication algorithm. Type: string +| | ... | - encr_alg - Encryption algorithm. Type: string +| | ... | - auth_alg - Authentication algorithm. Type: string | | ... | | ... | *Return:* | | ... | - No value returned @@ -2420,11 +2621,11 @@ | | ... | 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 +| | ... | - 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 @@ -2463,14 +2664,14 @@ | | ... | Don`t set route. | | ... | | ... | *Arguments:* -| | ... | - ${dut1_dut2_ip6_address} - IPv6 address from DUT1 to DUT2. +| | ... | - 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. +| | ... | - 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 +| | ... | - 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 @@ -2511,14 +2712,14 @@ | | ... | Don`t set route. | | ... | | ... | *Arguments:* -| | ... | - ${dut1_dut2_ip4_address} - IPv4 address from DUT1 to DUT2. +| | ... | - 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. +| | ... | - 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 +| | ... | - 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 @@ -2615,14 +2816,14 @@ | | ... | a chain accross DUT node. | | ... | | ... | *Arguments:* -| | ... | - ${dut} - DUT node. Type: dictionary -| | ... | - ${count} - Number of memif pairs (containers). Type: integer +| | ... | - dut - DUT node. Type: dictionary +| | ... | - count - Number of memif pairs (containers). Type: integer | | ... | | ... | *Note:* | | ... | Socket paths for Memif are defined in following format: -| | ... | - /tmp/memif-${dut}_VNF${number}-${sid} +| | ... | - /tmp/memif-\${dut}_CNF\${number}-\${sid} | | ... -| | ... | KW uses test variable ${rxq_count_int} set by KW Add worker threads +| | ... | KW uses test variable \${rxq_count_int} set by KW Add worker threads | | ... | and rxqueues to all DUTs | | ... | | ... | *Example:* @@ -2633,8 +2834,8 @@ | | [Arguments] | ${dut} | ${count} | | ... | | :FOR | ${number} | IN RANGE | 1 | ${count}+1 -| | | ${sock1}= | Set Variable | memif-${dut}_VNF -| | | ${sock2}= | Set Variable | memif-${dut}_VNF +| | | ${sock1}= | Set Variable | memif-${dut}_CNF1 +| | | ${sock2}= | Set Variable | memif-${dut}_CNF1 | | | ${prev_index}= | Evaluate | ${number}-1 | | | Set up memif interfaces on DUT node | ${nodes['${dut}']} | | | ... | ${sock1} | ${sock2} | ${number} | ${dut}-memif-${number}-if1 @@ -2653,7 +2854,7 @@ | | ... | interface to create a chain accross DUT node. | | ... | | ... | *Arguments:* -| | ... | - ${count} - Number of memif pairs (containers). Type: integer +| | ... | - count - Number of memif pairs (containers). Type: integer | | ... | | ... | *Example:* | | ... @@ -2674,12 +2875,12 @@ | | ... | to create a chain accross DUT node. | | ... | | ... | *Arguments:* -| | ... | - ${dut} - DUT node. Type: dictionary -| | ... | - ${count} - Number of memif pairs (containers). Type: integer +| | ... | - dut - DUT node. Type: dictionary +| | ... | - count - Number of memif pairs (containers). Type: integer | | ... | | ... | *Note:* | | ... | Socket paths for Memif are defined in following format: -| | ... | - /tmp/memif-${dut}_VNF${number}-${sid} +| | ... | - /tmp/memif-\${dut}_CNF\${number}-\${sid} | | ... | | ... | *Example:* | | ... @@ -2693,8 +2894,8 @@ | | Add interface to bridge domain | ${nodes['${dut}']} | ${${dut}_if2} | | ... | ${bd_id2} | | :FOR | ${number} | IN RANGE | 1 | ${count}+1 -| | | ${sock1}= | Set Variable | memif-${dut}_VNF -| | | ${sock2}= | Set Variable | memif-${dut}_VNF +| | | ${sock1}= | Set Variable | memif-${dut}_CNF1 +| | | ${sock2}= | Set Variable | memif-${dut}_CNF1 | | | 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} @@ -2711,7 +2912,7 @@ | | ... | virtual interface to create a chain accross DUT node. | | ... | | ... | *Arguments:* -| | ... | - ${count} - Number of memif pairs (containers). Type: integer +| | ... | - count - Number of memif pairs (containers). Type: integer | | ... | | ... | *Example:* | | ... @@ -2726,6 +2927,82 @@ | | Set interfaces in path up | | Show Memif on all DUTs | ${nodes} +| Initialize L2 Bridge Domain with memif pairs and VLAN in circular topology +| | [Documentation] +| | ... | Create pairs of Memif interfaces on all defined VPP nodes. Put each +| | ... | Memif interface to separate L2 bridge domain with one physical or +| | ... | virtual interface to create a chain accross DUT node. In case of +| | ... | 3-node topology create VLAN sub-interfaces between DUTs. In case of +| | ... | 2-node topology create VLAN sub-interface on dut1-if2 interface. All +| | ... | interfaces are brought up. +| | ... +| | ... | *Arguments:* +| | ... | - bd_id1 - Bridge domain ID. Type: integer +| | ... | - bd_id2 - Bridge domain ID. Type: integer +| | ... | - subid - ID of the sub-interface to be created. Type: string +| | ... | - tag_rewrite - Method of tag rewrite. Type: string +| | ... +| | ... | *Example:* +| | ... +| | ... | \| Initialize L2 Bridge Domain with memif pairs and VLAN in circular\ +| | ... | topology \| 1 \| 2 \| 10 \| pop-1 \| +| | ... +| | [Arguments] | ${bd_id1} | ${bd_id2} | ${subid} | ${tag_rewrite} +| | ... +| | ${dut2_status} | ${value}= | Run Keyword And Ignore Error +| | ... | Variable Should Exist | ${dut2} +| | ... +| | Set interfaces in path up +| | ... +| | Run Keyword If | '${dut2_status}' == 'PASS' +| | ... | Initialize VLAN dot1q sub-interfaces in circular topology +| | ... | ${dut1} | ${dut1_if2} | ${dut2} | ${dut2_if1} | ${subid} +| | ... | ELSE | Initialize VLAN dot1q sub-interfaces in circular topology +| | ... | ${dut1} | ${dut1_if2} | 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} +| | ... | ELSE | Configure L2 tag rewrite method on interfaces +| | ... | ${dut1} | ${subif_index_1} | TAG_REWRITE_METHOD=${tag_rewrite} +| | ... +| | ${number}= | Set Variable | ${1} +| | ${sock1}= | Set Variable | memif-DUT1_CNF1 +| | ${sock2}= | Set Variable | memif-DUT1_CNF1 +| | ${memif_if1_name}= | Set Variable | DUT1-memif-${number}-if1 +| | ${memif_if2_name}= | Set Variable | DUT1-memif-${number}-if2 +| | 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} +| | ${sock1}= | Run Keyword If | '${dut2_status}' == 'PASS' +| | ... | Set Variable | memif-DUT2_CNF1 +| | ${sock2}= | Run Keyword If | '${dut2_status}' == 'PASS' +| | ... | Set Variable | memif-DUT2_CNF1 +| | ${memif_if1_name}= | Run Keyword If | '${dut2_status}' == 'PASS' +| | ... | Set Variable | DUT2-memif-${number}-if1 +| | ${memif_if2_name}= | Run Keyword If | '${dut2_status}' == 'PASS' +| | ... | Set Variable | DUT2-memif-${number}-if2 +| | Run Keyword If | '${dut2_status}' == 'PASS' +| | ... | Set up memif interfaces on DUT node | ${dut2} | ${sock1} | ${sock2} +| | ... | ${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} +| | Run Keyword If | '${dut2_status}' == 'PASS' +| | ... | 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} +| | Run Keyword If | '${dut2_status}' == 'PASS' +| | ... | Add interface to bridge domain | ${dut2} | ${dut2_if2} | ${bd_id2} +| | ... +| | Show Memif on all DUTs | ${nodes} + | Initialize IPv4 routing with memif pairs on DUT node | | [Documentation] | | ... | Create pairs of Memif interfaces on DUT node. Put each Memif interface @@ -2733,12 +3010,12 @@ | | ... | to create a chain accross DUT node. | | ... | | ... | *Arguments:* -| | ... | - ${dut} - DUT node. Type: dictionary -| | ... | - ${count} - Number of memif pairs (containers). Type: integer +| | ... | - dut - DUT node. Type: dictionary +| | ... | - count - Number of memif pairs (containers). Type: integer | | ... | | ... | *Note:* | | ... | Socket paths for Memif are defined in following format: -| | ... | - /tmp/memif-${dut}_VNF${number}-${sid} +| | ... | - /tmp/memif-\${dut}_CNF\${number}-\${sid} | | ... | | ... | *Example:* | | ... @@ -2803,8 +3080,8 @@ | | ${fib_table_1}= | Evaluate | ${fib_table_1} - ${1} | | ${ip_base_start}= | Set Variable | ${31} | | :FOR | ${number} | IN RANGE | 1 | ${count+${1}} -| | | ${sock1}= | Set Variable | memif-${dut}_VNF -| | | ${sock2}= | Set Variable | memif-${dut}_VNF +| | | ${sock1}= | Set Variable | memif-${dut}_CNF1 +| | | ${sock2}= | Set Variable | memif-${dut}_CNF1 | | | 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} @@ -2854,7 +3131,7 @@ | | ... | virtual interface to create a chain accross DUT node. | | ... | | ... | *Arguments:* -| | ... | - ${count} - Number of memif pairs (containers). Type: integer +| | ... | - count - Number of memif pairs (containers). Type: integer | | ... | | ... | *Example:* | | ... @@ -2874,11 +3151,11 @@ | | ... | connect Memif interface with one physical interface. | | ... | | ... | *Arguments:* -| | ... | - ${number} - Memif ID. Type: integer +| | ... | - number - Memif ID. Type: integer | | ... | | ... | *Note:* | | ... | Socket paths for Memif are defined in following format: -| | ... | - /tmp/memif-DUT1_VNF${number}-${sid} +| | ... | - /tmp/memif-DUT1_CNF\${number}-\${sid} | | ... | | ... | KW uses test variable ${rxq_count_int} set by KW Add worker threads | | ... | and rxqueues to all DUTs @@ -2891,13 +3168,13 @@ | | ... | | ${duts}= | Get Matches | ${nodes} | DUT* | | :FOR | ${dut} | IN | @{duts} -| | | ${sock}= | Set Variable | memif-${dut}_VNF +| | | ${sock}= | Set Variable | memif-${dut}_CNF1 | | | Set up single memif interface on DUT node | ${nodes['${dut}']} | ${sock} | | | ... | ${number} | ${dut}-memif-${number}-if1 | ${rxq_count_int} | | | ... | ${rxq_count_int} | | | Configure L2XC | ${nodes['${dut}']} | ${${dut}_if1} | | | ... | ${${dut}-memif-${number}-if1} -| | Set interfaces in path up +| | Set single interfaces in path up | | Show Memif on all DUTs | ${nodes} | Initialize L2 Bridge Domain for single memif @@ -2906,11 +3183,11 @@ | | ... | interface to separate L2 bridge domain with one physical interface. | | ... | | ... | *Arguments:* -| | ... | - ${number} - Memif ID. Type: integer +| | ... | - number - Memif ID. Type: integer | | ... | | ... | *Note:* | | ... | Socket paths for Memif are defined in following format: -| | ... | - /tmp/memif-DUT1_VNF${number}-${sid} +| | ... | - /tmp/memif-DUT1_CNF\${number}-\${sid} | | ... | | ... | KW uses test variable ${rxq_count_int} set by KW Add worker threads | | ... | and rxqueues to all DUTs @@ -2923,7 +3200,7 @@ | | ... | | ${duts}= | Get Matches | ${nodes} | DUT* | | :FOR | ${dut} | IN | @{duts} -| | | ${sock}= | Set Variable | memif-${dut}_VNF +| | | ${sock}= | Set Variable | memif-${dut}_CNF1 | | | Set up single memif interface on DUT node | ${nodes['${dut}']} | ${sock} | | | ... | ${number} | ${dut}-memif-${number}-if1 | ${rxq_count_int} | | | ... | ${rxq_count_int} @@ -2931,7 +3208,7 @@ | | | ... | ${number} | | | Add interface to bridge domain | ${nodes['${dut}']} | | | ... | ${${dut}-memif-${number}-if1} | ${number} -| | Set interfaces in path up +| | Set single interfaces in path up | | Show Memif on all DUTs | ${nodes} | Configure ACLs on a single interface