diff options
Diffstat (limited to 'resources')
4 files changed, 328 insertions, 19 deletions
diff --git a/resources/libraries/robot/performance/performance_configuration.robot b/resources/libraries/robot/performance/performance_configuration.robot index 88847b598d..19e42690ed 100644 --- a/resources/libraries/robot/performance/performance_configuration.robot +++ b/resources/libraries/robot/performance/performance_configuration.robot @@ -595,10 +595,10 @@ | | Vpp Route Add | ${dut1} | 2001:2::0 | ${prefix} | 2001:3::2 | ${dut1_if2} | | Vpp Route Add | ${dut2} | 2001:1::0 | ${prefix} | 2001:3::1 | ${dut2_if1} -| Initialize IPv6 forwarding with scaling in 3-node circular topology +| Initialize IPv6 forwarding with scaling in circular topology | | [Documentation] | | ... | Custom setup of IPv6 topology with scalability of ip routes on all -| | ... | DUT nodes in 3-node circular topology +| | ... | DUT nodes in 2-node / 3-node circular topology | | ... | | ... | *Arguments:* | | ... | - ${count} - IP route count. Type: integer @@ -608,35 +608,53 @@ | | ... | | ... | *Example:* | | ... -| | ... | \| Initialize IPv6 forwarding with scaling in 3-node circular \ +| | ... | \| Initialize IPv6 forwarding with scaling in circular \ | | ... | topology \| 100000 \| | | ... | | [Arguments] | ${count} | | ... +| | ${dut2_status} | ${value}= | Run Keyword And Ignore Error +| | ... | Variable Should Exist | ${dut2} +| | ... | | Set interfaces in path up -| | ${subn_prefix}= | Set Variable | 64 -| | ${host_prefix}= | Set Variable | 128 -| | VPP Set If IPv6 Addr | ${dut1} | ${dut1_if1} | 2001:3::1 | ${subn_prefix} -| | VPP Set If IPv6 Addr | ${dut1} | ${dut1_if2} | 2001:4::1 | ${subn_prefix} -| | VPP Set If IPv6 Addr | ${dut2} | ${dut2_if1} | 2001:4::2 | ${subn_prefix} -| | VPP Set If IPv6 Addr | ${dut2} | ${dut2_if2} | 2001:5::1 | ${subn_prefix} +| | ... | | ${tg1_if1_mac}= | Get Interface MAC | ${tg} | ${tg_if1} | | ${tg1_if2_mac}= | Get Interface MAC | ${tg} | ${tg_if2} -| | ${dut1_if2_mac}= | Get Interface MAC | ${dut1} | ${dut1_if2} -| | ${dut2_if1_mac}= | Get Interface MAC | ${dut2} | ${dut2_if1} +| | ${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} +| | ${prefix}= | Set Variable | 64 +| | ${host_prefix}= | Set Variable | 128 +| | VPP Set If IPv6 Addr | ${dut1} | ${dut1_if1} | 2001:3::1 | ${prefix} +| | Run Keyword If | '${dut2_status}' == 'PASS' +| | ... | VPP Set If IPv6 Addr | ${dut1} | ${dut1_if2} | 2001:4::1 | ${prefix} +| | Run Keyword If | '${dut2_status}' == 'PASS' +| | ... | VPP Set If IPv6 Addr | ${dut2} | ${dut2_if1} | 2001:4::2 | ${prefix} +| | ${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 | ${dut1_if2} +| | VPP Set If IPv6 Addr | ${dut} | ${dut_if2} | 2001:5::1 | ${prefix} | | Suppress ICMPv6 router advertisement message | ${nodes} | | Add Ip Neighbor | ${dut1} | ${dut1_if1} | 2001:3::2 | ${tg1_if1_mac} -| | Add Ip Neighbor | ${dut1} | ${dut1_if2} | 2001:4::2 | ${dut2_if1_mac} -| | Add Ip Neighbor | ${dut2} | ${dut2_if1} | 2001:4::1 | ${dut1_if2_mac} -| | Add Ip Neighbor | ${dut2} | ${dut2_if2} | 2001:5::2 | ${tg1_if2_mac} -| | Vpp Route Add | ${dut1} | 2001:2::0 | ${host_prefix} | 2001:4::2 -| | ... | interface=${dut1_if2} | count=${count} +| | Run Keyword If | '${dut2_status}' == 'PASS' +| | ... | Add Ip Neighbor | ${dut1} | ${dut1_if2} | 2001:4::2 | ${dut2_if1_mac} +| | Run Keyword If | '${dut2_status}' == 'PASS' +| | ... | Add Ip Neighbor | ${dut2} | ${dut2_if1} | 2001:4::1 | ${dut1_if2_mac} +| | Add Ip Neighbor | ${dut} | ${dut_if2} | 2001:5::2 | ${tg1_if2_mac} | | Vpp Route Add | ${dut1} | 2001:1::0 | ${host_prefix} | 2001:3::2 | | ... | interface=${dut1_if1} | count=${count} -| | Vpp Route Add | ${dut2} | 2001:1::0 | ${host_prefix} | 2001:4::1 +| | Run Keyword If | '${dut2_status}' == 'PASS' +| | ... | Vpp Route Add | ${dut1} | 2001:2::0 | ${host_prefix} | 2001:4::2 +| | ... | interface=${dut1_if2} | count=${count} +| | Run Keyword If | '${dut2_status}' == 'PASS' +| | ... | Vpp Route Add | ${dut2} | 2001:1::0 | ${host_prefix} | 2001:4::1 | | ... | interface=${dut2_if1} | count=${count} -| | Vpp Route Add | ${dut2} | 2001:2::0 | ${host_prefix} | 2001:5::2 -| | ... | interface=${dut2_if2} | count=${count} +| | Vpp Route Add | ${dut} | 2001:2::0 | ${host_prefix} | 2001:5::2 +| | ... | interface=${dut_if2} | count=${count} | Initialize IPv6 iAcl whitelist in 3-node circular topology | | [Documentation] diff --git a/resources/traffic_profiles/trex/trex-sl-2n-ethip6-ip6dst10000.py b/resources/traffic_profiles/trex/trex-sl-2n-ethip6-ip6dst10000.py new file mode 100755 index 0000000000..757e90318b --- /dev/null +++ b/resources/traffic_profiles/trex/trex-sl-2n-ethip6-ip6dst10000.py @@ -0,0 +1,97 @@ +# Copyright (c) 2017 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. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. + - Packet: ETH / IPv6 / + - Direction 0 --> 1: + - Source IP address range: 2001:1::1 + - Destination IP address range: 2001:2::0 - 2001:2::270F + - Direction 1 --> 0: + - Source IP address range: 2001:2::1 + - Destination IP address range: 2001:1::0 - 2001:1::270F +""" + +from trex_stl_lib.api import * +from profile_trex_stateless_base_class import TrafficStreamsBaseClass + + +class TrafficStreams(TrafficStreamsBaseClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsBaseClass, self).__init__() + + # IPs used in packet headers. + self.p1_src_start_ip = '2001:1::1' + self.p1_dst_start_ip = '2001:2::0' + self.p1_dst_end_ip = '2001:2::270F' + + self.p2_src_start_ip = '2001:2::1' + self.p2_dst_start_ip = '2001:1::0' + self.p2_dst_end_ip = '2001:1::270F' + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IPv6 | + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + + base_p1, count_p1 = self._get_start_end_ipv6(self.p1_dst_start_ip, + self.p1_dst_end_ip) + base_p2, count_p2 = self._get_start_end_ipv6(self.p2_dst_start_ip, + self.p2_dst_end_ip) + + # Direction 0 --> 1 + base_pkt_a = Ether() / IPv6(src=self.p1_src_start_ip, + dst=self.p1_dst_start_ip) + # Direction 1 --> 0 + base_pkt_b = Ether() / IPv6(src=self.p2_src_start_ip, + dst=self.p2_dst_start_ip) + + # Direction 0 --> 1 + vm1 = STLScVmRaw([STLVmFlowVar(name="ipv6_dst", + min_value=base_p1, + max_value=base_p1 + count_p1, + size=8, op="inc"), + STLVmWrFlowVar(fv_name="ipv6_dst", + pkt_offset="IPv6.dst", + offset_fixup=8)]) + # Direction 1 --> 0 + vm2 = STLScVmRaw([STLVmFlowVar(name="ipv6_dst", + min_value=base_p2, + max_value=base_p2 + count_p2, + size=8, op="inc"), + STLVmWrFlowVar(fv_name="ipv6_dst", + pkt_offset="IPv6.dst", + offset_fixup=8)]) + + return base_pkt_a, base_pkt_b, vm1, vm2 + + +def register(): + """Register this traffic profile to T-rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/resources/traffic_profiles/trex/trex-sl-2n-ethip6-ip6dst100000.py b/resources/traffic_profiles/trex/trex-sl-2n-ethip6-ip6dst100000.py new file mode 100755 index 0000000000..fd252d4725 --- /dev/null +++ b/resources/traffic_profiles/trex/trex-sl-2n-ethip6-ip6dst100000.py @@ -0,0 +1,97 @@ +# Copyright (c) 2017 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. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. + - Packet: ETH / IPv6 / + - Direction 0 --> 1: + - Source IP address range: 2001:1::1 + - Destination IP address range: 2001:2::0 - 2001:2::1:869F + - Direction 1 --> 0: + - Source IP address range: 2001:2::1 + - Destination IP address range: 2001:1::0 - 2001:1::1:869F +""" + +from trex_stl_lib.api import * +from profile_trex_stateless_base_class import TrafficStreamsBaseClass + + +class TrafficStreams(TrafficStreamsBaseClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsBaseClass, self).__init__() + + # IPs used in packet headers. + self.p1_src_start_ip = '2001:1::1' + self.p1_dst_start_ip = '2001:2::0' + self.p1_dst_end_ip = '2001:2::1:869F' + + self.p2_src_start_ip = '2001:2::1' + self.p2_dst_start_ip = '2001:1::0' + self.p2_dst_end_ip = '2001:1::1:869F' + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IPv6 | + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + + base_p1, count_p1 = self._get_start_end_ipv6(self.p1_dst_start_ip, + self.p1_dst_end_ip) + base_p2, count_p2 = self._get_start_end_ipv6(self.p2_dst_start_ip, + self.p2_dst_end_ip) + + # Direction 0 --> 1 + base_pkt_a = Ether() / IPv6(src=self.p1_src_start_ip, + dst=self.p1_dst_start_ip) + # Direction 1 --> 0 + base_pkt_b = Ether() / IPv6(src=self.p2_src_start_ip, + dst=self.p2_dst_start_ip) + + # Direction 0 --> 1 + vm1 = STLScVmRaw([STLVmFlowVar(name="ipv6_dst", + min_value=base_p1, + max_value=base_p1 + count_p1, + size=8, op="inc"), + STLVmWrFlowVar(fv_name="ipv6_dst", + pkt_offset="IPv6.dst", + offset_fixup=8)]) + # Direction 1 --> 0 + vm2 = STLScVmRaw([STLVmFlowVar(name="ipv6_dst", + min_value=base_p2, + max_value=base_p2 + count_p2, + size=8, op="inc"), + STLVmWrFlowVar(fv_name="ipv6_dst", + pkt_offset="IPv6.dst", + offset_fixup=8)]) + + return base_pkt_a, base_pkt_b, vm1, vm2 + + +def register(): + """Register this traffic profile to T-rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() diff --git a/resources/traffic_profiles/trex/trex-sl-2n-ethip6-ip6dst1000000.py b/resources/traffic_profiles/trex/trex-sl-2n-ethip6-ip6dst1000000.py new file mode 100755 index 0000000000..700dc7437d --- /dev/null +++ b/resources/traffic_profiles/trex/trex-sl-2n-ethip6-ip6dst1000000.py @@ -0,0 +1,97 @@ +# Copyright (c) 2017 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. + +"""Stream profile for T-rex traffic generator. + +Stream profile: + - Two streams sent in directions 0 --> 1 and 1 --> 0 at the same time. + - Packet: ETH / IPv6 / + - Direction 0 --> 1: + - Source IP address range: 2001:1::1 + - Destination IP address range: 2001:2::0 - 2001:2::F:423F + - Direction 1 --> 0: + - Source IP address range: 2001:2::1 + - Destination IP address range: 2001:1::0 - 2001:1::F:423F +""" + +from trex_stl_lib.api import * +from profile_trex_stateless_base_class import TrafficStreamsBaseClass + + +class TrafficStreams(TrafficStreamsBaseClass): + """Stream profile.""" + + def __init__(self): + """Initialization and setting of streams' parameters.""" + + super(TrafficStreamsBaseClass, self).__init__() + + # IPs used in packet headers. + self.p1_src_start_ip = '2001:1::1' + self.p1_dst_start_ip = '2001:2::0' + self.p1_dst_end_ip = '2001:2::F:423F' + + self.p2_src_start_ip = '2001:2::1' + self.p2_dst_start_ip = '2001:1::0' + self.p2_dst_end_ip = '2001:1::F:423F' + + def define_packets(self): + """Defines the packets to be sent from the traffic generator. + + Packet definition: | ETH | IPv6 | + + :returns: Packets to be sent from the traffic generator. + :rtype: tuple + """ + + base_p1, count_p1 = self._get_start_end_ipv6(self.p1_dst_start_ip, + self.p1_dst_end_ip) + base_p2, count_p2 = self._get_start_end_ipv6(self.p2_dst_start_ip, + self.p2_dst_end_ip) + + # Direction 0 --> 1 + base_pkt_a = Ether() / IPv6(src=self.p1_src_start_ip, + dst=self.p1_dst_start_ip) + # Direction 1 --> 0 + base_pkt_b = Ether() / IPv6(src=self.p2_src_start_ip, + dst=self.p2_dst_start_ip) + + # Direction 0 --> 1 + vm1 = STLScVmRaw([STLVmFlowVar(name="ipv6_dst", + min_value=base_p1, + max_value=base_p1 + count_p1, + size=8, op="inc"), + STLVmWrFlowVar(fv_name="ipv6_dst", + pkt_offset="IPv6.dst", + offset_fixup=8)]) + # Direction 1 --> 0 + vm2 = STLScVmRaw([STLVmFlowVar(name="ipv6_dst", + min_value=base_p2, + max_value=base_p2 + count_p2, + size=8, op="inc"), + STLVmWrFlowVar(fv_name="ipv6_dst", + pkt_offset="IPv6.dst", + offset_fixup=8)]) + + return base_pkt_a, base_pkt_b, vm1, vm2 + + +def register(): + """Register this traffic profile to T-rex. + + Do not change this function. + + :return: Traffic streams. + :rtype: Object + """ + return TrafficStreams() |