aboutsummaryrefslogtreecommitdiffstats
path: root/tests/vpp/perf/l2/10ge2p1x710-eth-l2bdscale1mmaclrn-ndrpdr.robot
blob: 4427e5e0e1f6d9c036982ce7618f747907423bc3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# Copyright (c) 2020 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

*** Settings ***
| Resource | resources/libraries/robot/shared/default.robot
|
| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR
| ... | NIC_Intel-X710 | ETH | L2BDMACLRN | SCALE | L2BDSCALE | FIB_1M
| ... | DRV_VFIO_PCI
| ... | RXQ_SIZE_0 | TXQ_SIZE_0
| ... | eth-l2bdscale1mmaclrn
|
| Suite Setup | Setup suite topology interfaces | performance
| Suite Teardown | Tear down suite | performance
| Test Setup | Setup test | performance
| Test Teardown | Tear down test | performance
|
| Test Template | Local Template
|
| Documentation | *RFC2544: Pkt throughput for L2BD test cases*
|
| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology\
| ... | with single links between nodes.
| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 for L2 switching of IPv4.
| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with L2 bridge-\
| ... | domain and MAC learning enabled. DUT1 and DUT2 tested with ${nic_name}.\
| ... | *[Ver] TG verification:* TG finds and reports throughput NDR (Non Drop\
| ... | Rate) with zero packet loss tolerance and throughput PDR (Partial Drop\
| ... | Rate) with non-zero packet loss tolerance (LT) expressed in percentage\
| ... | of packets transmitted. NDR and PDR are discovered for different\
| ... | Ethernet L2 frame sizes using MLRsearch library.\
| ... | Test packets are generated by TG on links to DUTs. TG traffic profile\
| ... | contains two L3 flow-groups (flow-group per direction, 500k flows per\
| ... | flow-group) with all packets containing Ethernet header, IPv4 header\
| ... | with IP protocol=61 and static payload.\
| ... | MAC addresses ranges are incremented as follows:
| ... | port01_src ca:fe:00:00:00:00 - port01_src ca:fe:00:07:a1:1f,
| ... | port01_dst fa:ce:00:00:00:00 - port01_dst fa:ce:00:07:a1:1f,
| ... | port02_src fa:ce:00:00:00:00 - port02_src fa:ce:00:07:a1:1f,
| ... | port02_dst ca:fe:00:00:00:00 - port02_dst ca:fe:00:07:a1:1f
| ... | *[Ref] Applicable standard specifications:* RFC2544.

*** Variables ***
| @{plugins_to_enable}= | dpdk_plugin.so
| ${crypto_type}= | ${None}
| ${nic_name}= | Intel-X710
| ${nic_driver}= | vfio-pci
| ${nic_rxq_size}= | 0
| ${nic_txq_size}= | 0
| ${nic_pfs}= | 2
| ${nic_vfs}= | 0
| ${osi_layer}= | L2
| ${overhead}= | ${0}
# Traffic profile:
| ${traffic_profile}= | trex-stl-3n-ethip4-macsrc500kdst500k

*** Keywords ***
| Local Template
| | [Documentation]
| | ... | [Cfg] Each DUT runs L2BD switching config and uses ${phy_cores}\
| | ... | physical core(s) for worker threads.
| | ... | [Ver] Measure NDR and PDR values using MLRsearch algorithm.\
| |
| | ... | *Arguments:*
| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
| | ... | Type: integer, string
| | ... | - phy_cores - Number of physical cores. Type: integer
| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
| |
| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
| |
| | Set Test Variable | \${frame_size}
| |
| | Given Set Max Rate And Jumbo
| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
| | And Pre-initialize layer driver | ${nic_driver}
| | And Apply Startup configuration on all VPP DUTs
| | When Initialize layer driver | ${nic_driver}
| | And Initialize layer interface
| | And Initialize L2 bridge domain
| | Then Find NDR and PDR intervals using optimized search

*** Test Cases ***
| 64B-1c-eth-l2bdscale1mmaclrn-ndrpdr
| | [Tags] | 64B | 1C
| | frame_size=${64} | phy_cores=${1}

| 64B-2c-eth-l2bdscale1mmaclrn-ndrpdr
| | [Tags] | 64B | 2C
| | frame_size=${64} | phy_cores=${2}

| 64B-4c-eth-l2bdscale1mmaclrn-ndrpdr
| | [Tags] | 64B | 4C
| | frame_size=${64} | phy_cores=${4}

| 1518B-1c-eth-l2bdscale1mmaclrn-ndrpdr
| | [Tags] | 1518B | 1C
| | frame_size=${1518} | phy_cores=${1}

| 1518B-2c-eth-l2bdscale1mmaclrn-ndrpdr
| | [Tags] | 1518B | 2C
| | frame_size=${1518} | phy_cores=${2}

| 1518B-4c-eth-l2bdscale1mmaclrn-ndrpdr
| | [Tags] | 1518B | 4C
| | frame_size=${1518} | phy_cores=${4}

| 9000B-1c-eth-l2bdscale1mmaclrn-ndrpdr
| | [Tags] | 9000B | 1C
| | frame_size=${9000} | phy_cores=${1}

| 9000B-2c-eth-l2bdscale1mmaclrn-ndrpdr
| | [Tags] | 9000B | 2C
| | frame_size=${9000} | phy_cores=${2}

| 9000B-4c-eth-l2bdscale1mmaclrn-ndrpdr
| | [Tags] | 9000B | 4C
| | frame_size=${9000} | phy_cores=${4}

| IMIX-1c-eth-l2bdscale1mmaclrn-ndrpdr
| | [Tags] | IMIX | 1C
| | frame_size=IMIX_v4_1 | phy_cores=${1}

| IMIX-2c-eth-l2bdscale1mmaclrn-ndrpdr
| | [Tags] | IMIX | 2C
| | frame_size=IMIX_v4_1 | phy_cores=${2}

| IMIX-4c-eth-l2bdscale1mmaclrn-ndrpdr
| | [Tags] | IMIX | 4C
| | frame_size=IMIX_v4_1 | phy_cores=${4}
class="nv">if1_data}= | interfaceAPI.Get interface oper data | | ... | ${node} | ${interface1} | | ${if2_data}= | interfaceAPI.Get interface oper data | | ... | ${node} | ${interface2} | | Should be equal | ${if1_data['v3po:l2']['bridge-domain']} | | ... | ${if1_data['v3po:l2']['bridge-domain']} | ${bd_name} | | :FOR | ${key} | IN | @{settings.keys()} | | | Should be equal | ${if1_data['v3po:l2']['${key}']} | | | ... | ${if2_data['v3po:l2']['${key}']} | ${settings['${key}']} | VAT should show interfaces assigned to bridge domain | | [Documentation] | Uses VAT to verify interface assignment to\ | | ... | bridge domain. | | ... | | ... | *Arguments:* | | ... | - node - information about a DUT node. Type: dictionary | | ... | - interface1, interface2 - names of interfaces to assign to bridge\ | | ... | domain. Type: string | | ... | - index - index of bridge domains on VPP node. Starts from 0,\ | | ... | new BDs reuse numbers after a bridge domain is removed. Type: int | | ... | | ... | *Example:* | | ... | | ... | \| VAT should show interfaces assigned to bridge domain \ | | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| GigabitEthernet0/9/0 \ | | ... | \| ${4} \| | | [Arguments] | ${node} | ${interface1} | ${interface2} | ${index} | | ${if1_index}= | Get interface sw index | ${node} | ${interface1} | | ${if2_index}= | Get interface sw index | ${node} | ${interface2} | | ${if_indices}= | Create list | ${if1_index} | ${if2_index} | | ${bd_data}= | VPP get bridge domain data | ${node} | | ${bd_data}= | Set Variable | ${bd_data[${index}]} | | :FOR | ${sw_if_index} | IN | ${bd_data['sw_if']} | | | Should contain | ${if_indices} | ${sw_if_index} | Honeycomb removes all bridge domains | | [Documentation] | Uses Honeycomb API to remove all bridge domains from the \ | | ... | VPP node. | | ... | | ... | *Arguments:* | | ... | - node - information about a DUT node. Type: dictionary | | ... | | ... | *Example:* | | ... | | ... | \| Honeycomb removes all bridge domains \| ${nodes['DUT1']} \| | | [Arguments] | ${node} | | Remove all bds | ${node} | Honeycomb should show no bridge domains | | [Documentation] | Uses Honeycomb API to verify the removal of all\ | | ... | bridge domains. | | ... | | ... | *Arguments:* | | ... | - node - information about a DUT node. Type: dictionary | | ... | | ... | *Example:* | | ... | | ... | \| Honeycomb should show no bridge domains \| ${nodes['DUT1']} \| | | [Arguments] | ${node} | | ${bd_data} | Get all BDs cfg data | ${node} | | Should be empty | ${bd_data} | VAT should show no bridge domains | | [Documentation] | Uses VAT to verify the removal of all bridge domains. | | ... | | ... | *Arguments:* | | ... | - node - information about a DUT node. Type: dictionary | | ... | | ... | *Example:* | | ... | | ... | \| VAT should show no bridge domains \| ${nodes['DUT1']} \| | | [Arguments] | ${node} | | Run Keyword And Expect Error | ValueError: No JSON object could be decoded | | ... | VPP get bridge domain data | ${node}