Add test suites for crypto sw scheduler engine 39/30039/22
authorYulong Pei <yulong.pei@intel.com>
Thu, 19 Nov 2020 20:56:18 +0000 (13:56 -0700)
committerVratko Polak <vrpolak@cisco.com>
Fri, 19 Feb 2021 14:56:13 +0000 (14:56 +0000)
This patch is to add test suites for vpp plugin crypto_sw_scheduler,
IPsec sync mode is to do crypto and packet forward work in same worker cores,
crypto_sw_scheduler can schedule crypto work to other async crypto cores to
improve whole crypto processing capability.

This test suites configure fixed 1 rx queues per port, then measure IPsec
performance with 1, 2, 3 crypto cores.

This patchset include 1, 2, 4, 8 ipsec tunnels test cases.

+Vratko help to change to count total physical cores instead of previous only
count crypto cores in test cases.

Change-Id: I0e67182e3d13273890a23703d838101900e25126
Signed-off-by: Yulong Pei <yulong.pei@intel.com>
Signed-off-by: Vratko Polak <vrpolak@cisco.com>
Signed-off-by: pmikus <pmikus@cisco.com>
26 files changed:
GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst2.py [new file with mode: 0644]
GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst8.py [new file with mode: 0644]
docs/tag_documentation.rst
resources/api/vpp/supported_crcs.yaml
resources/libraries/python/CpuUtils.py
resources/libraries/python/IPsecUtil.py
resources/libraries/python/InterfaceUtil.py
resources/libraries/python/autogen/Regenerator.py
resources/libraries/robot/crypto/ipsec.robot
resources/libraries/robot/shared/default.robot
tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot [new file with mode: 0644]
tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot [new file with mode: 0644]
tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr.robot [new file with mode: 0644]
tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr.robot [new file with mode: 0644]
tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot [new file with mode: 0644]
tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot [new file with mode: 0644]
tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr.robot [new file with mode: 0644]
tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr.robot [new file with mode: 0644]
tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot [new file with mode: 0644]
tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot [new file with mode: 0644]
tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr.robot [new file with mode: 0644]
tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr.robot [new file with mode: 0644]
tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot [new file with mode: 0644]
tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot [new file with mode: 0644]
tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr.robot [new file with mode: 0644]
tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr.robot [new file with mode: 0644]

diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst2.py b/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst2.py
new file mode 100644 (file)
index 0000000..90290b4
--- /dev/null
@@ -0,0 +1,135 @@
+# Copyright (c) 2021 Cisco and/or its affiliates.
+#
+# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
+#
+# Licensed under the Apache License 2.0 or
+# GNU General Public License v2.0 or later;  you may not use this file
+# except in compliance with one of these Licenses. You
+# may obtain a copy of the Licenses at:
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#     https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
+#
+# Note: If this file is linked with Scapy, which is GPLv2+, your use of it
+# must be under GPLv2+.  If at any point in the future it is no longer linked
+# with Scapy (or other GPLv2+ licensed software), you are free to choose Apache 2.
+#
+# 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 / IP /
+ - Direction 0 --> 1:
+   - Source IP address range:      10.0.0.1
+   - Destination IP address range: 20.0.0.0 - 20.0.0.1
+ - Direction 1 --> 0:
+   - Source IP address range:      20.0.0.1
+   - Destination IP address range: 10.0.0.0 - 10.0.0.1
+"""
+
+from trex.stl.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 = u"10.0.0.1"
+        self.p1_dst_start_ip = u"20.0.0.0"
+        self.p1_dst_end_ip = u"20.0.0.1"
+
+        self.p2_src_start_ip = u"20.0.0.1"
+        self.p2_dst_start_ip = u"10.0.0.0"
+        self.p2_dst_end_ip = u"10.0.0.1"
+
+    def define_packets(self):
+        """Defines the packets to be sent from the traffic generator.
+
+        Packet definition: | ETH | IP |
+
+        :returns: Packets to be sent from the traffic generator.
+        :rtype: tuple
+        """
+
+        # Direction 0 --> 1
+        base_pkt_a = (
+            Ether() /
+            IP(
+                src=self.p1_src_start_ip,
+                dst=self.p1_dst_start_ip,
+                proto=61
+            )
+        )
+        # Direction 1 --> 0
+        base_pkt_b = (
+            Ether() /
+            IP(
+                src=self.p2_src_start_ip,
+                dst=self.p2_dst_start_ip,
+                proto=61
+            )
+        )
+
+        # Direction 0 --> 1
+        vm1 = STLScVmRaw(
+            [
+                STLVmFlowVar(
+                    name=u"dst",
+                    min_value=self.p1_dst_start_ip,
+                    max_value=self.p1_dst_end_ip,
+                    size=4,
+                    op=u"inc"
+                ),
+                STLVmWrFlowVar(
+                    fv_name=u"dst",
+                    pkt_offset=u"IP.dst"
+                ),
+                STLVmFixIpv4(
+                    offset=u"IP"
+                )
+            ]
+        )
+        # Direction 1 --> 0
+        vm2 = STLScVmRaw(
+            [
+                STLVmFlowVar(
+                    name=u"dst",
+                    min_value=self.p2_dst_start_ip,
+                    max_value=self.p2_dst_end_ip,
+                    size=4,
+                    op=u"inc"
+                ),
+                STLVmWrFlowVar(
+                    fv_name=u"dst",
+                    pkt_offset=u"IP.dst"
+                ),
+                STLVmFixIpv4(
+                    offset=u"IP"
+                )
+            ]
+        )
+
+        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/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst8.py b/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4dst8.py
new file mode 100644 (file)
index 0000000..33452c1
--- /dev/null
@@ -0,0 +1,135 @@
+# Copyright (c) 2021 Cisco and/or its affiliates.
+#
+# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
+#
+# Licensed under the Apache License 2.0 or
+# GNU General Public License v2.0 or later;  you may not use this file
+# except in compliance with one of these Licenses. You
+# may obtain a copy of the Licenses at:
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#     https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
+#
+# Note: If this file is linked with Scapy, which is GPLv2+, your use of it
+# must be under GPLv2+.  If at any point in the future it is no longer linked
+# with Scapy (or other GPLv2+ licensed software), you are free to choose Apache 2.
+#
+# 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 / IP /
+ - Direction 0 --> 1:
+   - Source IP address range:      10.0.0.1
+   - Destination IP address range: 20.0.0.0 - 20.0.0.7
+ - Direction 1 --> 0:
+   - Source IP address range:      20.0.0.1
+   - Destination IP address range: 10.0.0.0 - 10.0.0.7
+"""
+
+from trex.stl.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 = u"10.0.0.1"
+        self.p1_dst_start_ip = u"20.0.0.0"
+        self.p1_dst_end_ip = u"20.0.0.7"
+
+        self.p2_src_start_ip = u"20.0.0.1"
+        self.p2_dst_start_ip = u"10.0.0.0"
+        self.p2_dst_end_ip = u"10.0.0.7"
+
+    def define_packets(self):
+        """Defines the packets to be sent from the traffic generator.
+
+        Packet definition: | ETH | IP |
+
+        :returns: Packets to be sent from the traffic generator.
+        :rtype: tuple
+        """
+
+        # Direction 0 --> 1
+        base_pkt_a = (
+            Ether() /
+            IP(
+                src=self.p1_src_start_ip,
+                dst=self.p1_dst_start_ip,
+                proto=61
+            )
+        )
+        # Direction 1 --> 0
+        base_pkt_b = (
+            Ether() /
+            IP(
+                src=self.p2_src_start_ip,
+                dst=self.p2_dst_start_ip,
+                proto=61
+            )
+        )
+
+        # Direction 0 --> 1
+        vm1 = STLScVmRaw(
+            [
+                STLVmFlowVar(
+                    name=u"dst",
+                    min_value=self.p1_dst_start_ip,
+                    max_value=self.p1_dst_end_ip,
+                    size=4,
+                    op=u"inc"
+                ),
+                STLVmWrFlowVar(
+                    fv_name=u"dst",
+                    pkt_offset=u"IP.dst"
+                ),
+                STLVmFixIpv4(
+                    offset=u"IP"
+                )
+            ]
+        )
+        # Direction 1 --> 0
+        vm2 = STLScVmRaw(
+            [
+                STLVmFlowVar(
+                    name=u"dst",
+                    min_value=self.p2_dst_start_ip,
+                    max_value=self.p2_dst_end_ip,
+                    size=4,
+                    op=u"inc"
+                ),
+                STLVmWrFlowVar(
+                    fv_name=u"dst",
+                    pkt_offset=u"IP.dst"
+                ),
+                STLVmFixIpv4(
+                    offset=u"IP"
+                )
+            ]
+        )
+
+        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()
index e860d5a..e5441f4 100644 (file)
@@ -852,6 +852,10 @@ Encryption Tags
 
     IPSec using HMAC SHA 512 integrity algorithms.
 
+.. topic:: SCHEDULER
+
+    IPSec using crypto sw scheduler engine.
+
 Client-Workload Tags
 --------------------
 
index 6f658f4..71b9898 100644 (file)
@@ -79,6 +79,8 @@
     create_vhost_user_if_reply: '0x5383d31f'  # dev
     create_vlan_subif: '0xaf34ac8b'  # dev
     create_vlan_subif_reply: '0x5383d31f'  # dev
+    crypto_sw_scheduler_set_worker: '0xb4274502' #perf
+    crypto_sw_scheduler_set_worker_reply: '0xe8d4e804' #perf
     det44_add_del_map: '0x1150a190'  # perf
     det44_interface_add_del_feature: '0xdc17a836'  # perf
     det44_interface_add_del_feature_reply: '0xe8d4e804'  # perf
index 70177f5..170cbe6 100644 (file)
@@ -84,6 +84,29 @@ class CpuUtils:
                         [CpuUtils.__str2int(x) for x in line.split(u",")]
                     )
 
+    @staticmethod
+    def worker_count_from_cores_and_smt(phy_cores, smt_used):
+        """Simple conversion utility, needs smt from caller.
+
+        The implementation assumes we pack 1 or 2 workers per core,
+        depending on hyperthreading.
+
+        Some keywords use None to indicate no core/worker limit,
+        so this converts None to None.
+
+        :param phy_cores: How many physical cores to use for workers.
+        :param smt_used: Whether symmetric multithreading is used.
+        :type phy_cores: Optional[int]
+        :type smt_used: bool
+        :returns: How many VPP workers fit into the given number of cores.
+        :rtype: Optional[int]
+        """
+        if phy_cores is None:
+            return None
+        workers_per_core = CpuUtils.NR_OF_THREADS if smt_used else 1
+        workers = phy_cores * workers_per_core
+        return workers
+
     @staticmethod
     def cpu_node_count(node):
         """Return count of numa nodes.
index 99a470d..2bc10d3 100644 (file)
@@ -320,6 +320,30 @@ class IPsecUtil:
         with PapiSocketExecutor(node) as papi_exec:
             papi_exec.add(cmd, **args).get_reply(err_msg)
 
+    @staticmethod
+    def vpp_ipsec_crypto_sw_scheduler_set_worker(
+            node, worker_index, crypto_enable=False):
+        """Enable or disable crypto on specific vpp worker threads.
+
+        :param node: VPP node to enable or disable crypto for worker threads.
+        :param worker_index: VPP worker thread index.
+        :param crypto_enable: Disable or enable crypto work.
+        :type node: dict
+        :type worker_index: int
+        :type crypto_enable: bool
+        :raises RuntimeError: If failed to enable or disable crypto for worker
+            thread or if no API reply received.
+        """
+        cmd = u"crypto_sw_scheduler_set_worker"
+        err_msg = f"Failed to disable/enable crypto for worker thread " \
+            f"on host {node[u'host']}"
+        args = dict(
+            worker_index=worker_index,
+            crypto_enable=crypto_enable
+        )
+        with PapiSocketExecutor(node) as papi_exec:
+            papi_exec.add(cmd, **args).get_reply(err_msg)
+
     @staticmethod
     def vpp_ipsec_add_sad_entry(
             node, sad_id, spi, crypto_alg, crypto_key, integ_alg=None,
index 04fdff7..00a1933 100644 (file)
@@ -20,6 +20,7 @@ from ipaddress import ip_address
 from robot.api import logger
 
 from resources.libraries.python.Constants import Constants
+from resources.libraries.python.CpuUtils import CpuUtils
 from resources.libraries.python.DUTSetup import DUTSetup
 from resources.libraries.python.IPAddress import IPAddress
 from resources.libraries.python.L2Util import L2Util
@@ -1711,17 +1712,29 @@ class InterfaceUtil:
             papi_exec.add(cmd, **args).get_reply(err_msg)
 
     @staticmethod
-    def vpp_round_robin_rx_placement(node, prefix):
+    def vpp_round_robin_rx_placement(
+        node, prefix, dp_worker_limit=None
+    ):
         """Set Round Robin interface RX placement on all worker threads
         on node.
 
+        If specified, dp_core_limit limits the number of physical cores used
+        for data plane I/O work. Other cores are presumed to do something else,
+        e.g. asynchronous crypto processing.
+        None means all workers are used for data plane work.
+        Note this keyword specifies workers, not cores.
+
         :param node: Topology nodes.
         :param prefix: Interface name prefix.
+        :param dp_worker_limit: How many cores for data plane work.
         :type node: dict
         :type prefix: str
+        :type dp_worker_limit: Optional[int]
         """
         worker_id = 0
         worker_cnt = len(VPPUtil.vpp_show_threads(node)) - 1
+        if dp_worker_limit is not None:
+            worker_cnt = min(worker_cnt, dp_worker_limit)
         if not worker_cnt:
             return
         for placement in InterfaceUtil.vpp_sw_interface_rx_placement_dump(node):
@@ -1735,15 +1748,31 @@ class InterfaceUtil:
                     worker_id += 1
 
     @staticmethod
-    def vpp_round_robin_rx_placement_on_all_duts(nodes, prefix):
+    def vpp_round_robin_rx_placement_on_all_duts(
+        nodes, prefix, dp_core_limit=None
+    ):
         """Set Round Robin interface RX placement on all worker threads
         on all DUTs.
 
+        If specified, dp_core_limit limits the number of physical cores used
+        for data plane I/O work. Other cores are presumed to do something else,
+        e.g. asynchronous crypto processing.
+        None means all cores are used for data plane work.
+        Note this keyword specifies cores, not workers.
+
         :param nodes: Topology nodes.
         :param prefix: Interface name prefix.
+        :param dp_worker_limit: How many cores for data plane work.
         :type nodes: dict
         :type prefix: str
+        :type dp_worker_limit: Optional[int]
         """
         for node in nodes.values():
             if node[u"type"] == NodeType.DUT:
-                InterfaceUtil.vpp_round_robin_rx_placement(node, prefix)
+                dp_worker_limit = CpuUtils.worker_count_from_cores_and_smt(
+                    phy_cores=dp_core_limit,
+                    smt_used=CpuUtils.is_smt_enabled(node[u"cpuinfo"]),
+                )
+                InterfaceUtil.vpp_round_robin_rx_placement(
+                    node, prefix, dp_worker_limit
+                )
index 92860b0..e670b69 100644 (file)
@@ -536,6 +536,22 @@ class Regenerator:
             {u"frame_size": 128000, u"phy_cores": 2},
             {u"frame_size": 128000, u"phy_cores": 4}
         ]
+        # List for tests with one dataplane core
+        # (and variable number of other cores).
+        dp1_kwargs_list = [
+            {u"frame_size": min_frame_size, u"phy_cores": 2},
+            {u"frame_size": min_frame_size, u"phy_cores": 3},
+            {u"frame_size": min_frame_size, u"phy_cores": 4},
+            {u"frame_size": 1518, u"phy_cores": 2},
+            {u"frame_size": 1518, u"phy_cores": 3},
+            {u"frame_size": 1518, u"phy_cores": 4},
+            {u"frame_size": 9000, u"phy_cores": 2},
+            {u"frame_size": 9000, u"phy_cores": 3},
+            {u"frame_size": 9000, u"phy_cores": 4},
+            {u"frame_size": u"IMIX_v4_1", u"phy_cores": 2},
+            {u"frame_size": u"IMIX_v4_1", u"phy_cores": 3},
+            {u"frame_size": u"IMIX_v4_1", u"phy_cores": 4}
+        ]
 
         for in_filename in glob(pattern):
             if not self.quiet:
@@ -557,7 +573,14 @@ class Regenerator:
                     file_in.read().partition(u"*** Test Cases ***")[:-1]
                 )
             if in_filename.endswith(u"-ndrpdr.robot"):
-                write_default_files(in_filename, in_prolog, default_kwargs_list)
+                if u"scheduler" in in_filename:
+                    write_default_files(
+                        in_filename, in_prolog, dp1_kwargs_list
+                    )
+                else:
+                    write_default_files(
+                        in_filename, in_prolog, default_kwargs_list
+                    )
             elif in_filename.endswith(u"-reconf.robot"):
                 write_reconf_files(in_filename, in_prolog, default_kwargs_list)
             elif in_filename.endswith(u"-bps.robot"):
index 666b362..dc1265f 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2020 Cisco and/or its affiliates.
+# Copyright (c) 2021 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:
 | | FOR | ${dut} | IN | @{duts}
 | | | VPP Ipsec Set Async Mode | ${nodes['${dut}']}
 | | END
+
+| Disable Crypto Work of VPP Worker Threads on all VPP DUTs
+| | [Documentation]
+| | ... | Disable crypto work for specified data plane CPU cores
+| | ... | on all DUT nodes.
+| | ... | Currently only "port" (physical) interfaces are supported.
+| | ... | Will need a redesign if virtual interfaces (memif, vhost-user)
+| | ... | are present.
+| |
+| | ... | *Arguments:*
+| | ... | - dp_cores - Number of physical cores. Type: integer
+| |
+| | [Arguments] | ${dp_cores}
+| |
+| | VPP Round Robin Rx Placement on all DUTs
+| | ... | ${nodes} | prefix=port | dp_core_limit=${dp_cores}
+| | FOR | ${dut} | IN | @{duts}
+| | | Disable Crypto Work of VPP Worker Threads on node
+| | | ... | ${dut} | ${dp_cores}
+| | END
+
+| Disable Crypto Work of VPP Worker Threads on node
+| | [Documentation]
+| | ... | Disable crypto work for specified data plane cores
+| | ... | on DUT node.
+| |
+| | ... | *Arguments:*
+| | ... | - dut - DUT node. Type: string
+| | ... | - dp_cores - Number of physical cores. Type: integer
+| |
+| | [Arguments] | ${dut} | ${dp_cores}
+| |
+| | # Workers From Physical Cores keyword is currently defined in default.robot
+| | ${dp_worker_count} = | Workers From Physical Cores | ${dp_cores}
+| | FOR | ${worker_index} | IN RANGE | ${dp_worker_count}
+| | | VPP IPSec Crypto SW Scheduler Set Worker
+| | | ... | ${nodes['${dut}']} | ${worker_index} | crypto_enable=${False}
+| | END
index 1364c16..891ef21 100644 (file)
 | | # Parens are there to perform the call.
 | | Run Keyword If | $resetter | Evaluate | $resetter()
 
+| Workers From Physical Cores
+| | [Documentation]
+| | ... | Convert from core count to worker count.
+| |
+| | ... | This just calls CpuUtils.worker_count_from_cores_and_smt keyword
+| | ... | with the global \${smt_used} value.
+| | ... | See documentation there.
+| |
+| | ... | *Arguments:*
+| | ... | - phy_cores - Number of physical cores to convert from. Type: integer.
+| |
+| | ... | *Return value:*
+| | ... | - Number of workers active on the given number of cores.
+| |
+| | ... | *Example:*
+| |
+| | ... | \| \${dp_workers} = \| Workers from Physical Cores \| \${1} \|
+| |
+| | [Arguments] | ${phy_cores}
+| |
+| | Run Keyword And Return | Worker Count From Cores And Smt
+| | ... | phy_cores=${phy_cores} | smt_used=${smt_used}
+
 | Configure crypto device on all DUTs
 | | [Documentation] | Verify if Crypto QAT device virtual functions are
 | | ... | initialized on all DUTs. If parameter force_init is set to True, then
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot
new file mode 100644 (file)
index 0000000..b49bf87
--- /dev/null
@@ -0,0 +1,169 @@
+# Copyright (c) 2021 Intel and/or its affiliates.
+# Copyright (c) 2021 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
+| Resource | resources/libraries/robot/crypto/ipsec.robot
+|
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_1
+| ... | IP4FWD | IPSEC | IPSECHW | ASYNC | IPSECINT | NIC_Intel-X710 | BASE
+| ... | SCHEDULER | AES_128_CBC | HMAC_SHA_256 | HMAC | AES | DRV_VFIO_PCI
+| ... | RXQ_SIZE_0 | TXQ_SIZE_0
+| ... | ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha
+|
+| Suite Setup | Setup suite topology interfaces | performance
+| Suite Teardown | Tear down suite | performance
+| Test Setup | Setup test | performance
+| Test Teardown | Tear down test | performance | ipsec_sa
+|
+| Test Template | Local Template
+|
+| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
+|
+| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
+| ... | with single links between nodes.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
+| ... | Eth-IPv4-IPSec on DUT1-DUT2
+| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with multiple
+| ... | IPsec tunnels between them, run with IPsec async mode and use crypto
+| ... | sw scheduler engine to schedule crypto work to crypto cores. DUTs get
+| ... | IPv4 traffic from TG, encrypt it and send to another DUT, where packets
+| ... | are decrypted and sent back to TG.
+| ... | *[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, number of flows per flow-group equals to
+| ... | number of IPSec tunnels) with all packets
+| ... | containing Ethernet header, IPv4 header with IP protocol=61 and
+| ... | static payload. MAC addresses are matching MAC addresses of the TG
+| ... | node interfaces. Incrementing of IP.dst (IPv4 destination address) field
+| ... | is applied to both streams.
+| ... | *[Ref] Applicable standard specifications:* RFC4303 and RFC2544.
+
+*** Variables ***
+| @{plugins_to_enable}= | dpdk_plugin.so | crypto_native_plugin.so
+| ... | crypto_ipsecmb_plugin.so | crypto_sw_scheduler_plugin.so
+| ... | crypto_openssl_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}= | L3
+| ${overhead}= | ${62}
+| ${tg_if1_ip4}= | 192.168.10.2
+| ${dut1_if1_ip4}= | 192.168.10.1
+| ${dut1_if2_ip4}= | 100.0.0.1
+| ${dut2_if1_ip4}= | 200.0.0.2
+| ${dut2_if2_ip4}= | 192.168.20.1
+| ${tg_if2_ip4}= | 192.168.20.2
+| ${raddr_ip4}= | 20.0.0.0
+| ${laddr_ip4}= | 10.0.0.0
+| ${addr_range}= | ${24}
+| ${n_tunnels}= | ${1}
+| ${dp_cores}= | ${1}
+# Traffic profile:
+| ${traffic_profile}= | trex-stl-3n-ethip4-ip4dst${n_tunnels}
+
+*** Keywords ***
+| Local Template
+| | [Documentation]
+| | ... | [Cfg] DUT runs IPSec tunneling AES_128_CBC / HMAC_SHA_256 config.\
+| | ... | Each DUT uses one physical core for data plane workers
+| | ... | and rest of ${phy_cores} physical core(s) for crypto workers.
+| | ... | [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 - Total number of physical cores. Type: integer
+| | ... | - rxq - Number of RX queues, default value: ${1}. Type: integer
+| |
+| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${1}
+| |
+| | Set Test Variable | \${frame_size}
+| |
+| | # These are enums (not strings) so they cannot be in Variables table.
+| | ${encr_alg}= | Crypto Alg AES CBC 128
+| | ${auth_alg}= | Integ Alg SHA 256 128
+| |
+| | 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 Enable IPSec Async Mode on all VPP DUTs
+| | And Disable Crypto Work of VPP Worker Threads on all VPP DUTs | ${dp_cores}
+| | And Initialize IPSec in 3-node circular topology
+| | And VPP IPsec Create Tunnel Interfaces
+| | ... | ${nodes} | ${dut1_if2_ip4} | ${dut2_if1_ip4} | ${DUT1_${int}2}[0]
+| | ... | ${DUT2_${int}1}[0] | ${n_tunnels} | ${encr_alg} | ${auth_alg}
+| | ... | ${laddr_ip4} | ${raddr_ip4} | ${addr_range}
+| | Then Find NDR and PDR intervals using optimized search
+
+*** Test Cases ***
+| 64B-2c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | 64B | 2C
+| | frame_size=${64} | phy_cores=${2}
+
+| 64B-3c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | 64B | 3C
+| | frame_size=${64} | phy_cores=${3}
+
+| 64B-4c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | 64B | 4C
+| | frame_size=${64} | phy_cores=${4}
+
+| 1518B-2c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-3c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | 1518B | 3C
+| | frame_size=${1518} | phy_cores=${3}
+
+| 1518B-4c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-2c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-3c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | 9000B | 3C
+| | frame_size=${9000} | phy_cores=${3}
+
+| 9000B-4c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
+
+| IMIX-2c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | IMIX | 2C
+| | frame_size=IMIX_v4_1 | phy_cores=${2}
+
+| IMIX-3c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | IMIX | 3C
+| | frame_size=IMIX_v4_1 | phy_cores=${3}
+
+| IMIX-4c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | IMIX | 4C
+| | frame_size=IMIX_v4_1 | phy_cores=${4}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot
new file mode 100644 (file)
index 0000000..55b1b5b
--- /dev/null
@@ -0,0 +1,169 @@
+# Copyright (c) 2021 Intel and/or its affiliates.
+# Copyright (c) 2021 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
+| Resource | resources/libraries/robot/crypto/ipsec.robot
+|
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_1
+| ... | IP4FWD | IPSEC | IPSECHW | ASYNC | IPSECINT | NIC_Intel-X710 | BASE
+| ... | SCHEDULER | AES_128_CBC | HMAC_SHA_512 | HMAC | AES | DRV_VFIO_PCI
+| ... | RXQ_SIZE_0 | TXQ_SIZE_0
+| ... | ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+|
+| Suite Setup | Setup suite topology interfaces | performance
+| Suite Teardown | Tear down suite | performance
+| Test Setup | Setup test | performance
+| Test Teardown | Tear down test | performance | ipsec_sa
+|
+| Test Template | Local Template
+|
+| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
+|
+| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
+| ... | with single links between nodes.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
+| ... | Eth-IPv4-IPSec on DUT1-DUT2
+| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with multiple
+| ... | IPsec tunnels between them, run with IPsec async mode and use crypto
+| ... | sw scheduler engine to schedule crypto work to crypto cores. DUTs get
+| ... | IPv4 traffic from TG, encrypt it and send to another DUT, where packets
+| ... | are decrypted and sent back to TG.
+| ... | *[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, number of flows per flow-group equals to
+| ... | number of IPSec tunnels) with all packets
+| ... | containing Ethernet header, IPv4 header with IP protocol=61 and
+| ... | static payload. MAC addresses are matching MAC addresses of the TG
+| ... | node interfaces. Incrementing of IP.dst (IPv4 destination address) field
+| ... | is applied to both streams.
+| ... | *[Ref] Applicable standard specifications:* RFC4303 and RFC2544.
+
+*** Variables ***
+| @{plugins_to_enable}= | dpdk_plugin.so | crypto_native_plugin.so
+| ... | crypto_ipsecmb_plugin.so | crypto_sw_scheduler_plugin.so
+| ... | crypto_openssl_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}= | L3
+| ${overhead}= | ${78}
+| ${tg_if1_ip4}= | 192.168.10.2
+| ${dut1_if1_ip4}= | 192.168.10.1
+| ${dut1_if2_ip4}= | 100.0.0.1
+| ${dut2_if1_ip4}= | 200.0.0.2
+| ${dut2_if2_ip4}= | 192.168.20.1
+| ${tg_if2_ip4}= | 192.168.20.2
+| ${raddr_ip4}= | 20.0.0.0
+| ${laddr_ip4}= | 10.0.0.0
+| ${addr_range}= | ${24}
+| ${n_tunnels}= | ${1}
+| ${dp_cores}= | ${1}
+# Traffic profile:
+| ${traffic_profile}= | trex-stl-3n-ethip4-ip4dst${n_tunnels}
+
+*** Keywords ***
+| Local Template
+| | [Documentation]
+| | ... | [Cfg] DUT runs IPSec tunneling AES_128_CBC / HMAC_SHA_512 config.\
+| | ... | Each DUT uses one physical core for data plane workers
+| | ... | and rest of ${phy_cores} physical core(s) for crypto workers.
+| | ... | [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 - Total number of physical cores. Type: integer
+| | ... | - rxq - Number of RX queues, default value: ${1}. Type: integer
+| |
+| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${1}
+| |
+| | Set Test Variable | \${frame_size}
+| |
+| | # These are enums (not strings) so they cannot be in Variables table.
+| | ${encr_alg}= | Crypto Alg AES CBC 128
+| | ${auth_alg}= | Integ Alg SHA 512 256
+| |
+| | 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 Enable IPSec Async Mode on all VPP DUTs
+| | And Disable Crypto Work of VPP Worker Threads on all VPP DUTs | ${dp_cores}
+| | And Initialize IPSec in 3-node circular topology
+| | And VPP IPsec Create Tunnel Interfaces
+| | ... | ${nodes} | ${dut1_if2_ip4} | ${dut2_if1_ip4} | ${DUT1_${int}2}[0]
+| | ... | ${DUT2_${int}1}[0] | ${n_tunnels} | ${encr_alg} | ${auth_alg}
+| | ... | ${laddr_ip4} | ${raddr_ip4} | ${addr_range}
+| | Then Find NDR and PDR intervals using optimized search
+
+*** Test Cases ***
+| 64B-2c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | 64B | 2C
+| | frame_size=${64} | phy_cores=${2}
+
+| 64B-3c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | 64B | 3C
+| | frame_size=${64} | phy_cores=${3}
+
+| 64B-4c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | 64B | 4C
+| | frame_size=${64} | phy_cores=${4}
+
+| 1518B-2c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-3c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | 1518B | 3C
+| | frame_size=${1518} | phy_cores=${3}
+
+| 1518B-4c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-2c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-3c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | 9000B | 3C
+| | frame_size=${9000} | phy_cores=${3}
+
+| 9000B-4c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
+
+| IMIX-2c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | IMIX | 2C
+| | frame_size=IMIX_v4_1 | phy_cores=${2}
+
+| IMIX-3c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | IMIX | 3C
+| | frame_size=IMIX_v4_1 | phy_cores=${3}
+
+| IMIX-4c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | IMIX | 4C
+| | frame_size=IMIX_v4_1 | phy_cores=${4}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr.robot
new file mode 100644 (file)
index 0000000..a0619e3
--- /dev/null
@@ -0,0 +1,169 @@
+# Copyright (c) 2021 Intel and/or its affiliates.
+# Copyright (c) 2021 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
+| Resource | resources/libraries/robot/crypto/ipsec.robot
+|
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_1
+| ... | IP4FWD | IPSEC | IPSECSW | ASYNC | IPSECINT | NIC_Intel-X710 | BASE
+| ... | SCHEDULER | AES_128_GCM | AES | DRV_VFIO_PCI
+| ... | RXQ_SIZE_0 | TXQ_SIZE_0
+| ... | ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+|
+| Suite Setup | Setup suite topology interfaces | performance
+| Suite Teardown | Tear down suite | performance
+| Test Setup | Setup test | performance
+| Test Teardown | Tear down test | performance | ipsec_sa
+|
+| Test Template | Local Template
+|
+| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
+|
+| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
+| ... | with single links between nodes.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
+| ... | Eth-IPv4-IPSec on DUT1-DUT2
+| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with multiple
+| ... | IPsec tunnels between them, run with IPsec async mode and use crypto
+| ... | sw scheduler engine to schedule crypto work to crypto cores. DUTs get
+| ... | IPv4 traffic from TG, encrypt it and send to another DUT, where packets
+| ... | are decrypted and sent back to TG.
+| ... | *[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, number of flows per flow-group equals to
+| ... | number of IPSec tunnels) with all packets
+| ... | containing Ethernet header, IPv4 header with IP protocol=61 and
+| ... | static payload. MAC addresses are matching MAC addresses of the TG
+| ... | node interfaces. Incrementing of IP.dst (IPv4 destination address) field
+| ... | is applied to both streams.
+| ... | *[Ref] Applicable standard specifications:* RFC4303 and RFC2544.
+
+*** Variables ***
+| @{plugins_to_enable}= | dpdk_plugin.so | crypto_native_plugin.so
+| ... | crypto_ipsecmb_plugin.so | crypto_sw_scheduler_plugin.so
+| ... | crypto_openssl_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}= | L3
+| ${overhead}= | ${54}
+| ${tg_if1_ip4}= | 192.168.10.2
+| ${dut1_if1_ip4}= | 192.168.10.1
+| ${dut1_if2_ip4}= | 100.0.0.1
+| ${dut2_if1_ip4}= | 200.0.0.2
+| ${dut2_if2_ip4}= | 192.168.20.1
+| ${tg_if2_ip4}= | 192.168.20.2
+| ${raddr_ip4}= | 20.0.0.0
+| ${laddr_ip4}= | 10.0.0.0
+| ${addr_range}= | ${24}
+| ${n_tunnels}= | ${1}
+| ${dp_cores}= | ${1}
+# Traffic profile:
+| ${traffic_profile}= | trex-stl-3n-ethip4-ip4dst${n_tunnels}
+
+*** Keywords ***
+| Local Template
+| | [Documentation]
+| | ... | [Cfg] DUT runs IPSec tunneling AES_128_GCM config.\
+| | ... | Each DUT uses one physical core for data plane workers
+| | ... | and rest of ${phy_cores} physical core(s) for crypto workers.
+| | ... | [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 - Total number of physical cores. Type: integer
+| | ... | - rxq - Number of RX queues, default value: ${1}. Type: integer
+| |
+| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${1}
+| |
+| | Set Test Variable | \${frame_size}
+| |
+| | # These are enums (not strings) so they cannot be in Variables table.
+| | ${encr_alg}= | Crypto Alg AES GCM 128
+| | ${auth_alg}= | Set Variable | ${NONE}
+| |
+| | 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 Enable IPSec Async Mode on all VPP DUTs
+| | And Disable Crypto Work of VPP Worker Threads on all VPP DUTs | ${dp_cores}
+| | And Initialize IPSec in 3-node circular topology
+| | And VPP IPsec Create Tunnel Interfaces
+| | ... | ${nodes} | ${dut1_if2_ip4} | ${dut2_if1_ip4} | ${DUT1_${int}2}[0]
+| | ... | ${DUT2_${int}1}[0] | ${n_tunnels} | ${encr_alg} | ${auth_alg}
+| | ... | ${laddr_ip4} | ${raddr_ip4} | ${addr_range}
+| | Then Find NDR and PDR intervals using optimized search
+
+*** Test Cases ***
+| 64B-2c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | 64B | 2C
+| | frame_size=${64} | phy_cores=${2}
+
+| 64B-3c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | 64B | 3C
+| | frame_size=${64} | phy_cores=${3}
+
+| 64B-4c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | 64B | 4C
+| | frame_size=${64} | phy_cores=${4}
+
+| 1518B-2c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-3c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | 1518B | 3C
+| | frame_size=${1518} | phy_cores=${3}
+
+| 1518B-4c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-2c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-3c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | 9000B | 3C
+| | frame_size=${9000} | phy_cores=${3}
+
+| 9000B-4c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
+
+| IMIX-2c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | IMIX | 2C
+| | frame_size=IMIX_v4_1 | phy_cores=${2}
+
+| IMIX-3c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | IMIX | 3C
+| | frame_size=IMIX_v4_1 | phy_cores=${3}
+
+| IMIX-4c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | IMIX | 4C
+| | frame_size=IMIX_v4_1 | phy_cores=${4}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr.robot
new file mode 100644 (file)
index 0000000..dbbbeb1
--- /dev/null
@@ -0,0 +1,169 @@
+# Copyright (c) 2021 Intel and/or its affiliates.
+# Copyright (c) 2021 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
+| Resource | resources/libraries/robot/crypto/ipsec.robot
+|
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | BASE | NDRPDR
+| ... | IP4FWD | IPSEC | IPSECHW | ASYNC | IPSECINT | NIC_Intel-X710 | TNL_1
+| ... | SCHEDULER | AES_256_GCM | AES | DRV_VFIO_PCI
+| ... | RXQ_SIZE_0 | TXQ_SIZE_0
+| ... | ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+|
+| Suite Setup | Setup suite topology interfaces | performance
+| Suite Teardown | Tear down suite | performance
+| Test Setup | Setup test | performance
+| Test Teardown | Tear down test | performance | ipsec_sa
+|
+| Test Template | Local Template
+|
+| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
+|
+| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
+| ... | with single links between nodes.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
+| ... | Eth-IPv4-IPSec on DUT1-DUT2
+| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with multiple
+| ... | IPsec tunnels between them, run with IPsec async mode and use crypto
+| ... | sw scheduler engine to schedule crypto work to crypto cores. DUTs get
+| ... | IPv4 traffic from TG, encrypt it and send to another DUT, where packets
+| ... | are decrypted and sent back to TG.
+| ... | *[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, number of flows per flow-group equals to
+| ... | number of IPSec tunnels) with all packets
+| ... | containing Ethernet header, IPv4 header with IP protocol=61 and
+| ... | static payload. MAC addresses are matching MAC addresses of the TG
+| ... | node interfaces. Incrementing of IP.dst (IPv4 destination address) field
+| ... | is applied to both streams.
+| ... | *[Ref] Applicable standard specifications:* RFC4303 and RFC2544.
+
+*** Variables ***
+| @{plugins_to_enable}= | dpdk_plugin.so | crypto_native_plugin.so
+| ... | crypto_ipsecmb_plugin.so | crypto_sw_scheduler_plugin.so
+| ... | crypto_openssl_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}= | L3
+| ${overhead}= | ${54}
+| ${tg_if1_ip4}= | 192.168.10.2
+| ${dut1_if1_ip4}= | 192.168.10.1
+| ${dut1_if2_ip4}= | 100.0.0.1
+| ${dut2_if1_ip4}= | 200.0.0.2
+| ${dut2_if2_ip4}= | 192.168.20.1
+| ${tg_if2_ip4}= | 192.168.20.2
+| ${raddr_ip4}= | 20.0.0.0
+| ${laddr_ip4}= | 10.0.0.0
+| ${addr_range}= | ${24}
+| ${n_tunnels}= | ${1}
+| ${dp_cores}= | ${1}
+# Traffic profile:
+| ${traffic_profile}= | trex-stl-3n-ethip4-ip4dst${n_tunnels}
+
+*** Keywords ***
+| Local Template
+| | [Documentation]
+| | ... | [Cfg] DUT runs IPSec tunneling AES_256_GCM config.\
+| | ... | Each DUT uses one physical core for data plane workers
+| | ... | and rest of ${phy_cores} physical core(s) for crypto workers.
+| | ... | [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 - Total number of physical cores. Type: integer
+| | ... | - rxq - Number of RX queues, default value: ${1}. Type: integer
+| |
+| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${1}
+| |
+| | Set Test Variable | \${frame_size}
+| |
+| | # These are enums (not strings) so they cannot be in Variables table.
+| | ${encr_alg}= | Crypto Alg AES GCM 256
+| | ${auth_alg}= | Set Variable | ${NONE}
+| |
+| | 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 Enable IPSec Async Mode on all VPP DUTs
+| | And Disable Crypto Work of VPP Worker Threads on all VPP DUTs | ${dp_cores}
+| | And Initialize IPSec in 3-node circular topology
+| | And VPP IPsec Create Tunnel Interfaces
+| | ... | ${nodes} | ${dut1_if2_ip4} | ${dut2_if1_ip4} | ${DUT1_${int}2}[0]
+| | ... | ${DUT2_${int}1}[0] | ${n_tunnels} | ${encr_alg} | ${auth_alg}
+| | ... | ${laddr_ip4} | ${raddr_ip4} | ${addr_range}
+| | Then Find NDR and PDR intervals using optimized search
+
+*** Test Cases ***
+| 64B-2c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | 64B | 2C
+| | frame_size=${64} | phy_cores=${2}
+
+| 64B-3c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | 64B | 3C
+| | frame_size=${64} | phy_cores=${3}
+
+| 64B-4c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | 64B | 4C
+| | frame_size=${64} | phy_cores=${4}
+
+| 1518B-2c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-3c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | 1518B | 3C
+| | frame_size=${1518} | phy_cores=${3}
+
+| 1518B-4c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-2c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-3c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | 9000B | 3C
+| | frame_size=${9000} | phy_cores=${3}
+
+| 9000B-4c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
+
+| IMIX-2c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | IMIX | 2C
+| | frame_size=IMIX_v4_1 | phy_cores=${2}
+
+| IMIX-3c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | IMIX | 3C
+| | frame_size=IMIX_v4_1 | phy_cores=${3}
+
+| IMIX-4c-ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | IMIX | 4C
+| | frame_size=IMIX_v4_1 | phy_cores=${4}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot
new file mode 100644 (file)
index 0000000..ee2cf92
--- /dev/null
@@ -0,0 +1,169 @@
+# Copyright (c) 2021 Intel and/or its affiliates.
+# Copyright (c) 2021 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
+| Resource | resources/libraries/robot/crypto/ipsec.robot
+|
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_2
+| ... | IP4FWD | IPSEC | IPSECHW | ASYNC | IPSECINT | NIC_Intel-X710 | SCALE
+| ... | SCHEDULER | AES_128_CBC | HMAC_SHA_256 | HMAC | AES | DRV_VFIO_PCI
+| ... | RXQ_SIZE_0 | TXQ_SIZE_0
+| ... | ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha
+|
+| Suite Setup | Setup suite topology interfaces | performance
+| Suite Teardown | Tear down suite | performance
+| Test Setup | Setup test | performance
+| Test Teardown | Tear down test | performance | ipsec_sa
+|
+| Test Template | Local Template
+|
+| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
+|
+| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
+| ... | with single links between nodes.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
+| ... | Eth-IPv4-IPSec on DUT1-DUT2
+| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with multiple
+| ... | IPsec tunnels between them, run with IPsec async mode and use crypto
+| ... | sw scheduler engine to schedule crypto work to crypto cores. DUTs get
+| ... | IPv4 traffic from TG, encrypt it and send to another DUT, where packets
+| ... | are decrypted and sent back to TG.
+| ... | *[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, number of flows per flow-group equals to
+| ... | number of IPSec tunnels) with all packets
+| ... | containing Ethernet header, IPv4 header with IP protocol=61 and
+| ... | static payload. MAC addresses are matching MAC addresses of the TG
+| ... | node interfaces. Incrementing of IP.dst (IPv4 destination address) field
+| ... | is applied to both streams.
+| ... | *[Ref] Applicable standard specifications:* RFC4303 and RFC2544.
+
+*** Variables ***
+| @{plugins_to_enable}= | dpdk_plugin.so | crypto_native_plugin.so
+| ... | crypto_ipsecmb_plugin.so | crypto_sw_scheduler_plugin.so
+| ... | crypto_openssl_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}= | L3
+| ${overhead}= | ${62}
+| ${tg_if1_ip4}= | 192.168.10.2
+| ${dut1_if1_ip4}= | 192.168.10.1
+| ${dut1_if2_ip4}= | 100.0.0.1
+| ${dut2_if1_ip4}= | 200.0.0.2
+| ${dut2_if2_ip4}= | 192.168.20.1
+| ${tg_if2_ip4}= | 192.168.20.2
+| ${raddr_ip4}= | 20.0.0.0
+| ${laddr_ip4}= | 10.0.0.0
+| ${addr_range}= | ${24}
+| ${n_tunnels}= | ${2}
+| ${dp_cores}= | ${1}
+# Traffic profile:
+| ${traffic_profile}= | trex-stl-3n-ethip4-ip4dst${n_tunnels}
+
+*** Keywords ***
+| Local Template
+| | [Documentation]
+| | ... | [Cfg] DUT runs IPSec tunneling AES_128_CBC / HMAC_SHA_256 config.\
+| | ... | Each DUT uses one physical core for data plane workers
+| | ... | and rest of ${phy_cores} physical core(s) for crypto workers.
+| | ... | [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 - Total number of physical cores. Type: integer
+| | ... | - rxq - Number of RX queues, default value: ${1}. Type: integer
+| |
+| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${1}
+| |
+| | Set Test Variable | \${frame_size}
+| |
+| | # These are enums (not strings) so they cannot be in Variables table.
+| | ${encr_alg}= | Crypto Alg AES CBC 128
+| | ${auth_alg}= | Integ Alg SHA 256 128
+| |
+| | 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 Enable IPSec Async Mode on all VPP DUTs
+| | And Disable Crypto Work of VPP Worker Threads on all VPP DUTs | ${dp_cores}
+| | And Initialize IPSec in 3-node circular topology
+| | And VPP IPsec Create Tunnel Interfaces
+| | ... | ${nodes} | ${dut1_if2_ip4} | ${dut2_if1_ip4} | ${DUT1_${int}2}[0]
+| | ... | ${DUT2_${int}1}[0] | ${n_tunnels} | ${encr_alg} | ${auth_alg}
+| | ... | ${laddr_ip4} | ${raddr_ip4} | ${addr_range}
+| | Then Find NDR and PDR intervals using optimized search
+
+*** Test Cases ***
+| 64B-2c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | 64B | 2C
+| | frame_size=${64} | phy_cores=${2}
+
+| 64B-3c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | 64B | 3C
+| | frame_size=${64} | phy_cores=${3}
+
+| 64B-4c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | 64B | 4C
+| | frame_size=${64} | phy_cores=${4}
+
+| 1518B-2c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-3c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | 1518B | 3C
+| | frame_size=${1518} | phy_cores=${3}
+
+| 1518B-4c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-2c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-3c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | 9000B | 3C
+| | frame_size=${9000} | phy_cores=${3}
+
+| 9000B-4c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
+
+| IMIX-2c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | IMIX | 2C
+| | frame_size=IMIX_v4_1 | phy_cores=${2}
+
+| IMIX-3c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | IMIX | 3C
+| | frame_size=IMIX_v4_1 | phy_cores=${3}
+
+| IMIX-4c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | IMIX | 4C
+| | frame_size=IMIX_v4_1 | phy_cores=${4}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot
new file mode 100644 (file)
index 0000000..a8e688d
--- /dev/null
@@ -0,0 +1,169 @@
+# Copyright (c) 2021 Intel and/or its affiliates.
+# Copyright (c) 2021 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
+| Resource | resources/libraries/robot/crypto/ipsec.robot
+|
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_2
+| ... | IP4FWD | IPSEC | IPSECHW | ASYNC | IPSECINT | NIC_Intel-X710 | SCALE
+| ... | SCHEDULER | AES_128_CBC | HMAC_SHA_512 | HMAC | AES | DRV_VFIO_PCI
+| ... | RXQ_SIZE_0 | TXQ_SIZE_0
+| ... | ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+|
+| Suite Setup | Setup suite topology interfaces | performance
+| Suite Teardown | Tear down suite | performance
+| Test Setup | Setup test | performance
+| Test Teardown | Tear down test | performance | ipsec_sa
+|
+| Test Template | Local Template
+|
+| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
+|
+| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
+| ... | with single links between nodes.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
+| ... | Eth-IPv4-IPSec on DUT1-DUT2
+| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with multiple
+| ... | IPsec tunnels between them, run with IPsec async mode and use crypto
+| ... | sw scheduler engine to schedule crypto work to crypto cores. DUTs get
+| ... | IPv4 traffic from TG, encrypt it and send to another DUT, where packets
+| ... | are decrypted and sent back to TG.
+| ... | *[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, number of flows per flow-group equals to
+| ... | number of IPSec tunnels) with all packets
+| ... | containing Ethernet header, IPv4 header with IP protocol=61 and
+| ... | static payload. MAC addresses are matching MAC addresses of the TG
+| ... | node interfaces. Incrementing of IP.dst (IPv4 destination address) field
+| ... | is applied to both streams.
+| ... | *[Ref] Applicable standard specifications:* RFC4303 and RFC2544.
+
+*** Variables ***
+| @{plugins_to_enable}= | dpdk_plugin.so | crypto_native_plugin.so
+| ... | crypto_ipsecmb_plugin.so | crypto_sw_scheduler_plugin.so
+| ... | crypto_openssl_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}= | L3
+| ${overhead}= | ${78}
+| ${tg_if1_ip4}= | 192.168.10.2
+| ${dut1_if1_ip4}= | 192.168.10.1
+| ${dut1_if2_ip4}= | 100.0.0.1
+| ${dut2_if1_ip4}= | 200.0.0.2
+| ${dut2_if2_ip4}= | 192.168.20.1
+| ${tg_if2_ip4}= | 192.168.20.2
+| ${raddr_ip4}= | 20.0.0.0
+| ${laddr_ip4}= | 10.0.0.0
+| ${addr_range}= | ${24}
+| ${n_tunnels}= | ${2}
+| ${dp_cores}= | ${1}
+# Traffic profile:
+| ${traffic_profile}= | trex-stl-3n-ethip4-ip4dst${n_tunnels}
+
+*** Keywords ***
+| Local Template
+| | [Documentation]
+| | ... | [Cfg] DUT runs IPSec tunneling AES_128_CBC / HMAC_SHA_512 config.\
+| | ... | Each DUT uses one physical core for data plane workers
+| | ... | and rest of ${phy_cores} physical core(s) for crypto workers.
+| | ... | [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 - Total number of physical cores. Type: integer
+| | ... | - rxq - Number of RX queues, default value: ${1}. Type: integer
+| |
+| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${1}
+| |
+| | Set Test Variable | \${frame_size}
+| |
+| | # These are enums (not strings) so they cannot be in Variables table.
+| | ${encr_alg}= | Crypto Alg AES CBC 128
+| | ${auth_alg}= | Integ Alg SHA 512 256
+| |
+| | 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 Enable IPSec Async Mode on all VPP DUTs
+| | And Disable Crypto Work of VPP Worker Threads on all VPP DUTs | ${dp_cores}
+| | And Initialize IPSec in 3-node circular topology
+| | And VPP IPsec Create Tunnel Interfaces
+| | ... | ${nodes} | ${dut1_if2_ip4} | ${dut2_if1_ip4} | ${DUT1_${int}2}[0]
+| | ... | ${DUT2_${int}1}[0] | ${n_tunnels} | ${encr_alg} | ${auth_alg}
+| | ... | ${laddr_ip4} | ${raddr_ip4} | ${addr_range}
+| | Then Find NDR and PDR intervals using optimized search
+
+*** Test Cases ***
+| 64B-2c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | 64B | 2C
+| | frame_size=${64} | phy_cores=${2}
+
+| 64B-3c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | 64B | 3C
+| | frame_size=${64} | phy_cores=${3}
+
+| 64B-4c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | 64B | 4C
+| | frame_size=${64} | phy_cores=${4}
+
+| 1518B-2c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-3c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | 1518B | 3C
+| | frame_size=${1518} | phy_cores=${3}
+
+| 1518B-4c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-2c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-3c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | 9000B | 3C
+| | frame_size=${9000} | phy_cores=${3}
+
+| 9000B-4c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
+
+| IMIX-2c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | IMIX | 2C
+| | frame_size=IMIX_v4_1 | phy_cores=${2}
+
+| IMIX-3c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | IMIX | 3C
+| | frame_size=IMIX_v4_1 | phy_cores=${3}
+
+| IMIX-4c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | IMIX | 4C
+| | frame_size=IMIX_v4_1 | phy_cores=${4}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr.robot
new file mode 100644 (file)
index 0000000..47a0c1d
--- /dev/null
@@ -0,0 +1,169 @@
+# Copyright (c) 2021 Intel and/or its affiliates.
+# Copyright (c) 2021 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
+| Resource | resources/libraries/robot/crypto/ipsec.robot
+|
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_2
+| ... | IP4FWD | IPSEC | IPSECSW | ASYNC | IPSECINT | NIC_Intel-X710 | SCALE
+| ... | SCHEDULER | AES_128_GCM | AES | DRV_VFIO_PCI
+| ... | RXQ_SIZE_0 | TXQ_SIZE_0
+| ... | ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+|
+| Suite Setup | Setup suite topology interfaces | performance
+| Suite Teardown | Tear down suite | performance
+| Test Setup | Setup test | performance
+| Test Teardown | Tear down test | performance | ipsec_sa
+|
+| Test Template | Local Template
+|
+| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
+|
+| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
+| ... | with single links between nodes.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
+| ... | Eth-IPv4-IPSec on DUT1-DUT2
+| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with multiple
+| ... | IPsec tunnels between them, run with IPsec async mode and use crypto
+| ... | sw scheduler engine to schedule crypto work to crypto cores. DUTs get
+| ... | IPv4 traffic from TG, encrypt it and send to another DUT, where packets
+| ... | are decrypted and sent back to TG.
+| ... | *[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, number of flows per flow-group equals to
+| ... | number of IPSec tunnels) with all packets
+| ... | containing Ethernet header, IPv4 header with IP protocol=61 and
+| ... | static payload. MAC addresses are matching MAC addresses of the TG
+| ... | node interfaces. Incrementing of IP.dst (IPv4 destination address) field
+| ... | is applied to both streams.
+| ... | *[Ref] Applicable standard specifications:* RFC4303 and RFC2544.
+
+*** Variables ***
+| @{plugins_to_enable}= | dpdk_plugin.so | crypto_native_plugin.so
+| ... | crypto_ipsecmb_plugin.so | crypto_sw_scheduler_plugin.so
+| ... | crypto_openssl_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}= | L3
+| ${overhead}= | ${54}
+| ${tg_if1_ip4}= | 192.168.10.2
+| ${dut1_if1_ip4}= | 192.168.10.1
+| ${dut1_if2_ip4}= | 100.0.0.1
+| ${dut2_if1_ip4}= | 200.0.0.2
+| ${dut2_if2_ip4}= | 192.168.20.1
+| ${tg_if2_ip4}= | 192.168.20.2
+| ${raddr_ip4}= | 20.0.0.0
+| ${laddr_ip4}= | 10.0.0.0
+| ${addr_range}= | ${24}
+| ${n_tunnels}= | ${2}
+| ${dp_cores}= | ${1}
+# Traffic profile:
+| ${traffic_profile}= | trex-stl-3n-ethip4-ip4dst${n_tunnels}
+
+*** Keywords ***
+| Local Template
+| | [Documentation]
+| | ... | [Cfg] DUT runs IPSec tunneling AES_128_GCM config.\
+| | ... | Each DUT uses one physical core for data plane workers
+| | ... | and rest of ${phy_cores} physical core(s) for crypto workers.
+| | ... | [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 - Total number of physical cores. Type: integer
+| | ... | - rxq - Number of RX queues, default value: ${1}. Type: integer
+| |
+| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${1}
+| |
+| | Set Test Variable | \${frame_size}
+| |
+| | # These are enums (not strings) so they cannot be in Variables table.
+| | ${encr_alg}= | Crypto Alg AES GCM 128
+| | ${auth_alg}= | Set Variable | ${NONE}
+| |
+| | 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 Enable IPSec Async Mode on all VPP DUTs
+| | And Disable Crypto Work of VPP Worker Threads on all VPP DUTs | ${dp_cores}
+| | And Initialize IPSec in 3-node circular topology
+| | And VPP IPsec Create Tunnel Interfaces
+| | ... | ${nodes} | ${dut1_if2_ip4} | ${dut2_if1_ip4} | ${DUT1_${int}2}[0]
+| | ... | ${DUT2_${int}1}[0] | ${n_tunnels} | ${encr_alg} | ${auth_alg}
+| | ... | ${laddr_ip4} | ${raddr_ip4} | ${addr_range}
+| | Then Find NDR and PDR intervals using optimized search
+
+*** Test Cases ***
+| 64B-2c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | 64B | 2C
+| | frame_size=${64} | phy_cores=${2}
+
+| 64B-3c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | 64B | 3C
+| | frame_size=${64} | phy_cores=${3}
+
+| 64B-4c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | 64B | 4C
+| | frame_size=${64} | phy_cores=${4}
+
+| 1518B-2c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-3c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | 1518B | 3C
+| | frame_size=${1518} | phy_cores=${3}
+
+| 1518B-4c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-2c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-3c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | 9000B | 3C
+| | frame_size=${9000} | phy_cores=${3}
+
+| 9000B-4c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
+
+| IMIX-2c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | IMIX | 2C
+| | frame_size=IMIX_v4_1 | phy_cores=${2}
+
+| IMIX-3c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | IMIX | 3C
+| | frame_size=IMIX_v4_1 | phy_cores=${3}
+
+| IMIX-4c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | IMIX | 4C
+| | frame_size=IMIX_v4_1 | phy_cores=${4}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr.robot
new file mode 100644 (file)
index 0000000..eb2b430
--- /dev/null
@@ -0,0 +1,169 @@
+# Copyright (c) 2021 Intel and/or its affiliates.
+# Copyright (c) 2021 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
+| Resource | resources/libraries/robot/crypto/ipsec.robot
+|
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | SCALE | NDRPDR
+| ... | IP4FWD | IPSEC | IPSECHW | ASYNC | IPSECINT | NIC_Intel-X710 | TNL_2
+| ... | SCHEDULER | AES_256_GCM | AES | DRV_VFIO_PCI
+| ... | RXQ_SIZE_0 | TXQ_SIZE_0
+| ... | ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+|
+| Suite Setup | Setup suite topology interfaces | performance
+| Suite Teardown | Tear down suite | performance
+| Test Setup | Setup test | performance
+| Test Teardown | Tear down test | performance | ipsec_sa
+|
+| Test Template | Local Template
+|
+| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
+|
+| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
+| ... | with single links between nodes.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
+| ... | Eth-IPv4-IPSec on DUT1-DUT2
+| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with multiple
+| ... | IPsec tunnels between them, run with IPsec async mode and use crypto
+| ... | sw scheduler engine to schedule crypto work to crypto cores. DUTs get
+| ... | IPv4 traffic from TG, encrypt it and send to another DUT, where packets
+| ... | are decrypted and sent back to TG.
+| ... | *[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, number of flows per flow-group equals to
+| ... | number of IPSec tunnels) with all packets
+| ... | containing Ethernet header, IPv4 header with IP protocol=61 and
+| ... | static payload. MAC addresses are matching MAC addresses of the TG
+| ... | node interfaces. Incrementing of IP.dst (IPv4 destination address) field
+| ... | is applied to both streams.
+| ... | *[Ref] Applicable standard specifications:* RFC4303 and RFC2544.
+
+*** Variables ***
+| @{plugins_to_enable}= | dpdk_plugin.so | crypto_native_plugin.so
+| ... | crypto_ipsecmb_plugin.so | crypto_sw_scheduler_plugin.so
+| ... | crypto_openssl_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}= | L3
+| ${overhead}= | ${54}
+| ${tg_if1_ip4}= | 192.168.10.2
+| ${dut1_if1_ip4}= | 192.168.10.1
+| ${dut1_if2_ip4}= | 100.0.0.1
+| ${dut2_if1_ip4}= | 200.0.0.2
+| ${dut2_if2_ip4}= | 192.168.20.1
+| ${tg_if2_ip4}= | 192.168.20.2
+| ${raddr_ip4}= | 20.0.0.0
+| ${laddr_ip4}= | 10.0.0.0
+| ${addr_range}= | ${24}
+| ${n_tunnels}= | ${2}
+| ${dp_cores}= | ${1}
+# Traffic profile:
+| ${traffic_profile}= | trex-stl-3n-ethip4-ip4dst${n_tunnels}
+
+*** Keywords ***
+| Local Template
+| | [Documentation]
+| | ... | [Cfg] DUT runs IPSec tunneling AES_256_GCM config.\
+| | ... | Each DUT uses one physical core for data plane workers
+| | ... | and rest of ${phy_cores} physical core(s) for crypto workers.
+| | ... | [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 - Total number of physical cores. Type: integer
+| | ... | - rxq - Number of RX queues, default value: ${1}. Type: integer
+| |
+| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${1}
+| |
+| | Set Test Variable | \${frame_size}
+| |
+| | # These are enums (not strings) so they cannot be in Variables table.
+| | ${encr_alg}= | Crypto Alg AES GCM 256
+| | ${auth_alg}= | Set Variable | ${NONE}
+| |
+| | 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 Enable IPSec Async Mode on all VPP DUTs
+| | And Disable Crypto Work of VPP Worker Threads on all VPP DUTs | ${dp_cores}
+| | And Initialize IPSec in 3-node circular topology
+| | And VPP IPsec Create Tunnel Interfaces
+| | ... | ${nodes} | ${dut1_if2_ip4} | ${dut2_if1_ip4} | ${DUT1_${int}2}[0]
+| | ... | ${DUT2_${int}1}[0] | ${n_tunnels} | ${encr_alg} | ${auth_alg}
+| | ... | ${laddr_ip4} | ${raddr_ip4} | ${addr_range}
+| | Then Find NDR and PDR intervals using optimized search
+
+*** Test Cases ***
+| 64B-2c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | 64B | 2C
+| | frame_size=${64} | phy_cores=${2}
+
+| 64B-3c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | 64B | 3C
+| | frame_size=${64} | phy_cores=${3}
+
+| 64B-4c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | 64B | 4C
+| | frame_size=${64} | phy_cores=${4}
+
+| 1518B-2c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-3c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | 1518B | 3C
+| | frame_size=${1518} | phy_cores=${3}
+
+| 1518B-4c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-2c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-3c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | 9000B | 3C
+| | frame_size=${9000} | phy_cores=${3}
+
+| 9000B-4c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
+
+| IMIX-2c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | IMIX | 2C
+| | frame_size=IMIX_v4_1 | phy_cores=${2}
+
+| IMIX-3c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | IMIX | 3C
+| | frame_size=IMIX_v4_1 | phy_cores=${3}
+
+| IMIX-4c-ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | IMIX | 4C
+| | frame_size=IMIX_v4_1 | phy_cores=${4}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot
new file mode 100644 (file)
index 0000000..df7622d
--- /dev/null
@@ -0,0 +1,169 @@
+# Copyright (c) 2021 Intel and/or its affiliates.
+# Copyright (c) 2021 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
+| Resource | resources/libraries/robot/crypto/ipsec.robot
+|
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_4
+| ... | IP4FWD | IPSEC | IPSECHW | ASYNC | IPSECINT | NIC_Intel-X710 | SCALE
+| ... | SCHEDULER | AES_128_CBC | HMAC_SHA_256 | HMAC | AES | DRV_VFIO_PCI
+| ... | RXQ_SIZE_0 | TXQ_SIZE_0
+| ... | ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha
+|
+| Suite Setup | Setup suite topology interfaces | performance
+| Suite Teardown | Tear down suite | performance
+| Test Setup | Setup test | performance
+| Test Teardown | Tear down test | performance | ipsec_sa
+|
+| Test Template | Local Template
+|
+| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
+|
+| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
+| ... | with single links between nodes.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
+| ... | Eth-IPv4-IPSec on DUT1-DUT2
+| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with multiple
+| ... | IPsec tunnels between them, run with IPsec async mode and use crypto
+| ... | sw scheduler engine to schedule crypto work to crypto cores. DUTs get
+| ... | IPv4 traffic from TG, encrypt it and send to another DUT, where packets
+| ... | are decrypted and sent back to TG.
+| ... | *[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, number of flows per flow-group equals to
+| ... | number of IPSec tunnels) with all packets
+| ... | containing Ethernet header, IPv4 header with IP protocol=61 and
+| ... | static payload. MAC addresses are matching MAC addresses of the TG
+| ... | node interfaces. Incrementing of IP.dst (IPv4 destination address) field
+| ... | is applied to both streams.
+| ... | *[Ref] Applicable standard specifications:* RFC4303 and RFC2544.
+
+*** Variables ***
+| @{plugins_to_enable}= | dpdk_plugin.so | crypto_native_plugin.so
+| ... | crypto_ipsecmb_plugin.so | crypto_sw_scheduler_plugin.so
+| ... | crypto_openssl_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}= | L3
+| ${overhead}= | ${62}
+| ${tg_if1_ip4}= | 192.168.10.2
+| ${dut1_if1_ip4}= | 192.168.10.1
+| ${dut1_if2_ip4}= | 100.0.0.1
+| ${dut2_if1_ip4}= | 200.0.0.2
+| ${dut2_if2_ip4}= | 192.168.20.1
+| ${tg_if2_ip4}= | 192.168.20.2
+| ${raddr_ip4}= | 20.0.0.0
+| ${laddr_ip4}= | 10.0.0.0
+| ${addr_range}= | ${24}
+| ${n_tunnels}= | ${4}
+| ${dp_cores}= | ${1}
+# Traffic profile:
+| ${traffic_profile}= | trex-stl-3n-ethip4-ip4dst${n_tunnels}
+
+*** Keywords ***
+| Local Template
+| | [Documentation]
+| | ... | [Cfg] DUT runs IPSec tunneling AES_128_CBC / HMAC_SHA_256 config.\
+| | ... | Each DUT uses one physical core for data plane workers
+| | ... | and rest of ${phy_cores} physical core(s) for crypto workers.
+| | ... | [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 - Total number of physical cores. Type: integer
+| | ... | - rxq - Number of RX queues, default value: ${1}. Type: integer
+| |
+| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${1}
+| |
+| | Set Test Variable | \${frame_size}
+| |
+| | # These are enums (not strings) so they cannot be in Variables table.
+| | ${encr_alg}= | Crypto Alg AES CBC 128
+| | ${auth_alg}= | Integ Alg SHA 256 128
+| |
+| | 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 Enable IPSec Async Mode on all VPP DUTs
+| | And Disable Crypto Work of VPP Worker Threads on all VPP DUTs | ${dp_cores}
+| | And Initialize IPSec in 3-node circular topology
+| | And VPP IPsec Create Tunnel Interfaces
+| | ... | ${nodes} | ${dut1_if2_ip4} | ${dut2_if1_ip4} | ${DUT1_${int}2}[0]
+| | ... | ${DUT2_${int}1}[0] | ${n_tunnels} | ${encr_alg} | ${auth_alg}
+| | ... | ${laddr_ip4} | ${raddr_ip4} | ${addr_range}
+| | Then Find NDR and PDR intervals using optimized search
+
+*** Test Cases ***
+| 64B-2c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | 64B | 2C
+| | frame_size=${64} | phy_cores=${2}
+
+| 64B-3c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | 64B | 3C
+| | frame_size=${64} | phy_cores=${3}
+
+| 64B-4c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | 64B | 4C
+| | frame_size=${64} | phy_cores=${4}
+
+| 1518B-2c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-3c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | 1518B | 3C
+| | frame_size=${1518} | phy_cores=${3}
+
+| 1518B-4c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-2c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-3c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | 9000B | 3C
+| | frame_size=${9000} | phy_cores=${3}
+
+| 9000B-4c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
+
+| IMIX-2c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | IMIX | 2C
+| | frame_size=IMIX_v4_1 | phy_cores=${2}
+
+| IMIX-3c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | IMIX | 3C
+| | frame_size=IMIX_v4_1 | phy_cores=${3}
+
+| IMIX-4c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | IMIX | 4C
+| | frame_size=IMIX_v4_1 | phy_cores=${4}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot
new file mode 100644 (file)
index 0000000..365a363
--- /dev/null
@@ -0,0 +1,169 @@
+# Copyright (c) 2021 Intel and/or its affiliates.
+# Copyright (c) 2021 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
+| Resource | resources/libraries/robot/crypto/ipsec.robot
+|
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_4
+| ... | IP4FWD | IPSEC | IPSECHW | ASYNC | IPSECINT | NIC_Intel-X710 | SCALE
+| ... | SCHEDULER | AES_128_CBC | HMAC_SHA_512 | HMAC | AES | DRV_VFIO_PCI
+| ... | RXQ_SIZE_0 | TXQ_SIZE_0
+| ... | ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+|
+| Suite Setup | Setup suite topology interfaces | performance
+| Suite Teardown | Tear down suite | performance
+| Test Setup | Setup test | performance
+| Test Teardown | Tear down test | performance | ipsec_sa
+|
+| Test Template | Local Template
+|
+| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
+|
+| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
+| ... | with single links between nodes.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
+| ... | Eth-IPv4-IPSec on DUT1-DUT2
+| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with multiple
+| ... | IPsec tunnels between them, run with IPsec async mode and use crypto
+| ... | sw scheduler engine to schedule crypto work to crypto cores. DUTs get
+| ... | IPv4 traffic from TG, encrypt it and send to another DUT, where packets
+| ... | are decrypted and sent back to TG.
+| ... | *[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, number of flows per flow-group equals to
+| ... | number of IPSec tunnels) with all packets
+| ... | containing Ethernet header, IPv4 header with IP protocol=61 and
+| ... | static payload. MAC addresses are matching MAC addresses of the TG
+| ... | node interfaces. Incrementing of IP.dst (IPv4 destination address) field
+| ... | is applied to both streams.
+| ... | *[Ref] Applicable standard specifications:* RFC4303 and RFC2544.
+
+*** Variables ***
+| @{plugins_to_enable}= | dpdk_plugin.so | crypto_native_plugin.so
+| ... | crypto_ipsecmb_plugin.so | crypto_sw_scheduler_plugin.so
+| ... | crypto_openssl_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}= | L3
+| ${overhead}= | ${78}
+| ${tg_if1_ip4}= | 192.168.10.2
+| ${dut1_if1_ip4}= | 192.168.10.1
+| ${dut1_if2_ip4}= | 100.0.0.1
+| ${dut2_if1_ip4}= | 200.0.0.2
+| ${dut2_if2_ip4}= | 192.168.20.1
+| ${tg_if2_ip4}= | 192.168.20.2
+| ${raddr_ip4}= | 20.0.0.0
+| ${laddr_ip4}= | 10.0.0.0
+| ${addr_range}= | ${24}
+| ${n_tunnels}= | ${4}
+| ${dp_cores}= | ${1}
+# Traffic profile:
+| ${traffic_profile}= | trex-stl-3n-ethip4-ip4dst${n_tunnels}
+
+*** Keywords ***
+| Local Template
+| | [Documentation]
+| | ... | [Cfg] DUT runs IPSec tunneling AES_128_CBC / HMAC_SHA_512 config.\
+| | ... | Each DUT uses one physical core for data plane workers
+| | ... | and rest of ${phy_cores} physical core(s) for crypto workers.
+| | ... | [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 - Total number of physical cores. Type: integer
+| | ... | - rxq - Number of RX queues, default value: ${1}. Type: integer
+| |
+| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${1}
+| |
+| | Set Test Variable | \${frame_size}
+| |
+| | # These are enums (not strings) so they cannot be in Variables table.
+| | ${encr_alg}= | Crypto Alg AES CBC 128
+| | ${auth_alg}= | Integ Alg SHA 512 256
+| |
+| | 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 Enable IPSec Async Mode on all VPP DUTs
+| | And Disable Crypto Work of VPP Worker Threads on all VPP DUTs | ${dp_cores}
+| | And Initialize IPSec in 3-node circular topology
+| | And VPP IPsec Create Tunnel Interfaces
+| | ... | ${nodes} | ${dut1_if2_ip4} | ${dut2_if1_ip4} | ${DUT1_${int}2}[0]
+| | ... | ${DUT2_${int}1}[0] | ${n_tunnels} | ${encr_alg} | ${auth_alg}
+| | ... | ${laddr_ip4} | ${raddr_ip4} | ${addr_range}
+| | Then Find NDR and PDR intervals using optimized search
+
+*** Test Cases ***
+| 64B-2c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | 64B | 2C
+| | frame_size=${64} | phy_cores=${2}
+
+| 64B-3c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | 64B | 3C
+| | frame_size=${64} | phy_cores=${3}
+
+| 64B-4c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | 64B | 4C
+| | frame_size=${64} | phy_cores=${4}
+
+| 1518B-2c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-3c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | 1518B | 3C
+| | frame_size=${1518} | phy_cores=${3}
+
+| 1518B-4c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-2c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-3c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | 9000B | 3C
+| | frame_size=${9000} | phy_cores=${3}
+
+| 9000B-4c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
+
+| IMIX-2c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | IMIX | 2C
+| | frame_size=IMIX_v4_1 | phy_cores=${2}
+
+| IMIX-3c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | IMIX | 3C
+| | frame_size=IMIX_v4_1 | phy_cores=${3}
+
+| IMIX-4c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | IMIX | 4C
+| | frame_size=IMIX_v4_1 | phy_cores=${4}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr.robot
new file mode 100644 (file)
index 0000000..12dd35d
--- /dev/null
@@ -0,0 +1,169 @@
+# Copyright (c) 2021 Intel and/or its affiliates.
+# Copyright (c) 2021 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
+| Resource | resources/libraries/robot/crypto/ipsec.robot
+|
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_4
+| ... | IP4FWD | IPSEC | IPSECSW | ASYNC | IPSECINT | NIC_Intel-X710 | SCALE
+| ... | SCHEDULER | AES_128_GCM | AES | DRV_VFIO_PCI
+| ... | RXQ_SIZE_0 | TXQ_SIZE_0
+| ... | ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+|
+| Suite Setup | Setup suite topology interfaces | performance
+| Suite Teardown | Tear down suite | performance
+| Test Setup | Setup test | performance
+| Test Teardown | Tear down test | performance | ipsec_sa
+|
+| Test Template | Local Template
+|
+| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
+|
+| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
+| ... | with single links between nodes.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
+| ... | Eth-IPv4-IPSec on DUT1-DUT2
+| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with multiple
+| ... | IPsec tunnels between them, run with IPsec async mode and use crypto
+| ... | sw scheduler engine to schedule crypto work to crypto cores. DUTs get
+| ... | IPv4 traffic from TG, encrypt it and send to another DUT, where packets
+| ... | are decrypted and sent back to TG.
+| ... | *[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, number of flows per flow-group equals to
+| ... | number of IPSec tunnels) with all packets
+| ... | containing Ethernet header, IPv4 header with IP protocol=61 and
+| ... | static payload. MAC addresses are matching MAC addresses of the TG
+| ... | node interfaces. Incrementing of IP.dst (IPv4 destination address) field
+| ... | is applied to both streams.
+| ... | *[Ref] Applicable standard specifications:* RFC4303 and RFC2544.
+
+*** Variables ***
+| @{plugins_to_enable}= | dpdk_plugin.so | crypto_native_plugin.so
+| ... | crypto_ipsecmb_plugin.so | crypto_sw_scheduler_plugin.so
+| ... | crypto_openssl_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}= | L3
+| ${overhead}= | ${54}
+| ${tg_if1_ip4}= | 192.168.10.2
+| ${dut1_if1_ip4}= | 192.168.10.1
+| ${dut1_if2_ip4}= | 100.0.0.1
+| ${dut2_if1_ip4}= | 200.0.0.2
+| ${dut2_if2_ip4}= | 192.168.20.1
+| ${tg_if2_ip4}= | 192.168.20.2
+| ${raddr_ip4}= | 20.0.0.0
+| ${laddr_ip4}= | 10.0.0.0
+| ${addr_range}= | ${24}
+| ${n_tunnels}= | ${4}
+| ${dp_cores}= | ${1}
+# Traffic profile:
+| ${traffic_profile}= | trex-stl-3n-ethip4-ip4dst${n_tunnels}
+
+*** Keywords ***
+| Local Template
+| | [Documentation]
+| | ... | [Cfg] DUT runs IPSec tunneling AES_128_GCM config.\
+| | ... | Each DUT uses one physical core for data plane workers
+| | ... | and rest of ${phy_cores} physical core(s) for crypto workers.
+| | ... | [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 - Total number of physical cores. Type: integer
+| | ... | - rxq - Number of RX queues, default value: ${1}. Type: integer
+| |
+| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${1}
+| |
+| | Set Test Variable | \${frame_size}
+| |
+| | # These are enums (not strings) so they cannot be in Variables table.
+| | ${encr_alg}= | Crypto Alg AES GCM 128
+| | ${auth_alg}= | Set Variable | ${NONE}
+| |
+| | 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 Enable IPSec Async Mode on all VPP DUTs
+| | And Disable Crypto Work of VPP Worker Threads on all VPP DUTs | ${dp_cores}
+| | And Initialize IPSec in 3-node circular topology
+| | And VPP IPsec Create Tunnel Interfaces
+| | ... | ${nodes} | ${dut1_if2_ip4} | ${dut2_if1_ip4} | ${DUT1_${int}2}[0]
+| | ... | ${DUT2_${int}1}[0] | ${n_tunnels} | ${encr_alg} | ${auth_alg}
+| | ... | ${laddr_ip4} | ${raddr_ip4} | ${addr_range}
+| | Then Find NDR and PDR intervals using optimized search
+
+*** Test Cases ***
+| 64B-2c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | 64B | 2C
+| | frame_size=${64} | phy_cores=${2}
+
+| 64B-3c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | 64B | 3C
+| | frame_size=${64} | phy_cores=${3}
+
+| 64B-4c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | 64B | 4C
+| | frame_size=${64} | phy_cores=${4}
+
+| 1518B-2c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-3c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | 1518B | 3C
+| | frame_size=${1518} | phy_cores=${3}
+
+| 1518B-4c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-2c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-3c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | 9000B | 3C
+| | frame_size=${9000} | phy_cores=${3}
+
+| 9000B-4c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
+
+| IMIX-2c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | IMIX | 2C
+| | frame_size=IMIX_v4_1 | phy_cores=${2}
+
+| IMIX-3c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | IMIX | 3C
+| | frame_size=IMIX_v4_1 | phy_cores=${3}
+
+| IMIX-4c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | IMIX | 4C
+| | frame_size=IMIX_v4_1 | phy_cores=${4}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr.robot
new file mode 100644 (file)
index 0000000..8397689
--- /dev/null
@@ -0,0 +1,169 @@
+# Copyright (c) 2021 Intel and/or its affiliates.
+# Copyright (c) 2021 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
+| Resource | resources/libraries/robot/crypto/ipsec.robot
+|
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | SCALE | NDRPDR
+| ... | IP4FWD | IPSEC | IPSECHW | ASYNC | IPSECINT | NIC_Intel-X710 | TNL_4
+| ... | SCHEDULER | AES_256_GCM | AES | DRV_VFIO_PCI
+| ... | RXQ_SIZE_0 | TXQ_SIZE_0
+| ... | ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+|
+| Suite Setup | Setup suite topology interfaces | performance
+| Suite Teardown | Tear down suite | performance
+| Test Setup | Setup test | performance
+| Test Teardown | Tear down test | performance | ipsec_sa
+|
+| Test Template | Local Template
+|
+| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
+|
+| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
+| ... | with single links between nodes.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
+| ... | Eth-IPv4-IPSec on DUT1-DUT2
+| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with multiple
+| ... | IPsec tunnels between them, run with IPsec async mode and use crypto
+| ... | sw scheduler engine to schedule crypto work to crypto cores. DUTs get
+| ... | IPv4 traffic from TG, encrypt it and send to another DUT, where packets
+| ... | are decrypted and sent back to TG.
+| ... | *[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, number of flows per flow-group equals to
+| ... | number of IPSec tunnels) with all packets
+| ... | containing Ethernet header, IPv4 header with IP protocol=61 and
+| ... | static payload. MAC addresses are matching MAC addresses of the TG
+| ... | node interfaces. Incrementing of IP.dst (IPv4 destination address) field
+| ... | is applied to both streams.
+| ... | *[Ref] Applicable standard specifications:* RFC4303 and RFC2544.
+
+*** Variables ***
+| @{plugins_to_enable}= | dpdk_plugin.so | crypto_native_plugin.so
+| ... | crypto_ipsecmb_plugin.so | crypto_sw_scheduler_plugin.so
+| ... | crypto_openssl_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}= | L3
+| ${overhead}= | ${54}
+| ${tg_if1_ip4}= | 192.168.10.2
+| ${dut1_if1_ip4}= | 192.168.10.1
+| ${dut1_if2_ip4}= | 100.0.0.1
+| ${dut2_if1_ip4}= | 200.0.0.2
+| ${dut2_if2_ip4}= | 192.168.20.1
+| ${tg_if2_ip4}= | 192.168.20.2
+| ${raddr_ip4}= | 20.0.0.0
+| ${laddr_ip4}= | 10.0.0.0
+| ${addr_range}= | ${24}
+| ${n_tunnels}= | ${4}
+| ${dp_cores}= | ${1}
+# Traffic profile:
+| ${traffic_profile}= | trex-stl-3n-ethip4-ip4dst${n_tunnels}
+
+*** Keywords ***
+| Local Template
+| | [Documentation]
+| | ... | [Cfg] DUT runs IPSec tunneling AES_256_GCM config.\
+| | ... | Each DUT uses one physical core for data plane workers
+| | ... | and rest of ${phy_cores} physical core(s) for crypto workers.
+| | ... | [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 - Total number of physical cores. Type: integer
+| | ... | - rxq - Number of RX queues, default value: ${1}. Type: integer
+| |
+| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${1}
+| |
+| | Set Test Variable | \${frame_size}
+| |
+| | # These are enums (not strings) so they cannot be in Variables table.
+| | ${encr_alg}= | Crypto Alg AES GCM 256
+| | ${auth_alg}= | Set Variable | ${NONE}
+| |
+| | 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 Enable IPSec Async Mode on all VPP DUTs
+| | And Disable Crypto Work of VPP Worker Threads on all VPP DUTs | ${dp_cores}
+| | And Initialize IPSec in 3-node circular topology
+| | And VPP IPsec Create Tunnel Interfaces
+| | ... | ${nodes} | ${dut1_if2_ip4} | ${dut2_if1_ip4} | ${DUT1_${int}2}[0]
+| | ... | ${DUT2_${int}1}[0] | ${n_tunnels} | ${encr_alg} | ${auth_alg}
+| | ... | ${laddr_ip4} | ${raddr_ip4} | ${addr_range}
+| | Then Find NDR and PDR intervals using optimized search
+
+*** Test Cases ***
+| 64B-2c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | 64B | 2C
+| | frame_size=${64} | phy_cores=${2}
+
+| 64B-3c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | 64B | 3C
+| | frame_size=${64} | phy_cores=${3}
+
+| 64B-4c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | 64B | 4C
+| | frame_size=${64} | phy_cores=${4}
+
+| 1518B-2c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-3c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | 1518B | 3C
+| | frame_size=${1518} | phy_cores=${3}
+
+| 1518B-4c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-2c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-3c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | 9000B | 3C
+| | frame_size=${9000} | phy_cores=${3}
+
+| 9000B-4c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
+
+| IMIX-2c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | IMIX | 2C
+| | frame_size=IMIX_v4_1 | phy_cores=${2}
+
+| IMIX-3c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | IMIX | 3C
+| | frame_size=IMIX_v4_1 | phy_cores=${3}
+
+| IMIX-4c-ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | IMIX | 4C
+| | frame_size=IMIX_v4_1 | phy_cores=${4}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr.robot
new file mode 100644 (file)
index 0000000..d5fc51d
--- /dev/null
@@ -0,0 +1,169 @@
+# Copyright (c) 2021 Intel and/or its affiliates.
+# Copyright (c) 2021 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
+| Resource | resources/libraries/robot/crypto/ipsec.robot
+|
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_8
+| ... | IP4FWD | IPSEC | IPSECHW | ASYNC | IPSECINT | NIC_Intel-X710 | SCALE
+| ... | SCHEDULER | AES_128_CBC | HMAC_SHA_256 | HMAC | AES | DRV_VFIO_PCI
+| ... | RXQ_SIZE_0 | TXQ_SIZE_0
+| ... | ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha
+|
+| Suite Setup | Setup suite topology interfaces | performance
+| Suite Teardown | Tear down suite | performance
+| Test Setup | Setup test | performance
+| Test Teardown | Tear down test | performance | ipsec_sa
+|
+| Test Template | Local Template
+|
+| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
+|
+| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
+| ... | with single links between nodes.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
+| ... | Eth-IPv4-IPSec on DUT1-DUT2
+| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with multiple
+| ... | IPsec tunnels between them, run with IPsec async mode and use crypto
+| ... | sw scheduler engine to schedule crypto work to crypto cores. DUTs get
+| ... | IPv4 traffic from TG, encrypt it and send to another DUT, where packets
+| ... | are decrypted and sent back to TG.
+| ... | *[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, number of flows per flow-group equals to
+| ... | number of IPSec tunnels) with all packets
+| ... | containing Ethernet header, IPv4 header with IP protocol=61 and
+| ... | static payload. MAC addresses are matching MAC addresses of the TG
+| ... | node interfaces. Incrementing of IP.dst (IPv4 destination address) field
+| ... | is applied to both streams.
+| ... | *[Ref] Applicable standard specifications:* RFC4303 and RFC2544.
+
+*** Variables ***
+| @{plugins_to_enable}= | dpdk_plugin.so | crypto_native_plugin.so
+| ... | crypto_ipsecmb_plugin.so | crypto_sw_scheduler_plugin.so
+| ... | crypto_openssl_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}= | L3
+| ${overhead}= | ${62}
+| ${tg_if1_ip4}= | 192.168.10.2
+| ${dut1_if1_ip4}= | 192.168.10.1
+| ${dut1_if2_ip4}= | 100.0.0.1
+| ${dut2_if1_ip4}= | 200.0.0.2
+| ${dut2_if2_ip4}= | 192.168.20.1
+| ${tg_if2_ip4}= | 192.168.20.2
+| ${raddr_ip4}= | 20.0.0.0
+| ${laddr_ip4}= | 10.0.0.0
+| ${addr_range}= | ${24}
+| ${n_tunnels}= | ${8}
+| ${dp_cores}= | ${1}
+# Traffic profile:
+| ${traffic_profile}= | trex-stl-3n-ethip4-ip4dst${n_tunnels}
+
+*** Keywords ***
+| Local Template
+| | [Documentation]
+| | ... | [Cfg] DUT runs IPSec tunneling AES_128_CBC / HMAC_SHA_256 config.\
+| | ... | Each DUT uses one physical core for data plane workers
+| | ... | and rest of ${phy_cores} physical core(s) for crypto workers.
+| | ... | [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 - Total number of physical cores. Type: integer
+| | ... | - rxq - Number of RX queues, default value: ${1}. Type: integer
+| |
+| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${1}
+| |
+| | Set Test Variable | \${frame_size}
+| |
+| | # These are enums (not strings) so they cannot be in Variables table.
+| | ${encr_alg}= | Crypto Alg AES CBC 128
+| | ${auth_alg}= | Integ Alg SHA 256 128
+| |
+| | 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 Enable IPSec Async Mode on all VPP DUTs
+| | And Disable Crypto Work of VPP Worker Threads on all VPP DUTs | ${dp_cores}
+| | And Initialize IPSec in 3-node circular topology
+| | And VPP IPsec Create Tunnel Interfaces
+| | ... | ${nodes} | ${dut1_if2_ip4} | ${dut2_if1_ip4} | ${DUT1_${int}2}[0]
+| | ... | ${DUT2_${int}1}[0] | ${n_tunnels} | ${encr_alg} | ${auth_alg}
+| | ... | ${laddr_ip4} | ${raddr_ip4} | ${addr_range}
+| | Then Find NDR and PDR intervals using optimized search
+
+*** Test Cases ***
+| 64B-2c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | 64B | 2C
+| | frame_size=${64} | phy_cores=${2}
+
+| 64B-3c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | 64B | 3C
+| | frame_size=${64} | phy_cores=${3}
+
+| 64B-4c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | 64B | 4C
+| | frame_size=${64} | phy_cores=${4}
+
+| 1518B-2c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-3c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | 1518B | 3C
+| | frame_size=${1518} | phy_cores=${3}
+
+| 1518B-4c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-2c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-3c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | 9000B | 3C
+| | frame_size=${9000} | phy_cores=${3}
+
+| 9000B-4c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
+
+| IMIX-2c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | IMIX | 2C
+| | frame_size=IMIX_v4_1 | phy_cores=${2}
+
+| IMIX-3c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | IMIX | 3C
+| | frame_size=IMIX_v4_1 | phy_cores=${3}
+
+| IMIX-4c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac256sha-ndrpdr
+| | [Tags] | IMIX | 4C
+| | frame_size=IMIX_v4_1 | phy_cores=${4}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr.robot
new file mode 100644 (file)
index 0000000..9066738
--- /dev/null
@@ -0,0 +1,169 @@
+# Copyright (c) 2021 Intel and/or its affiliates.
+# Copyright (c) 2021 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
+| Resource | resources/libraries/robot/crypto/ipsec.robot
+|
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_8
+| ... | IP4FWD | IPSEC | IPSECHW | ASYNC | IPSECINT | NIC_Intel-X710 | SCALE
+| ... | SCHEDULER | AES_128_CBC | HMAC_SHA_512 | HMAC | AES | DRV_VFIO_PCI
+| ... | RXQ_SIZE_0 | TXQ_SIZE_0
+| ... | ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+|
+| Suite Setup | Setup suite topology interfaces | performance
+| Suite Teardown | Tear down suite | performance
+| Test Setup | Setup test | performance
+| Test Teardown | Tear down test | performance | ipsec_sa
+|
+| Test Template | Local Template
+|
+| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
+|
+| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
+| ... | with single links between nodes.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
+| ... | Eth-IPv4-IPSec on DUT1-DUT2
+| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with multiple
+| ... | IPsec tunnels between them, run with IPsec async mode and use crypto
+| ... | sw scheduler engine to schedule crypto work to crypto cores. DUTs get
+| ... | IPv4 traffic from TG, encrypt it and send to another DUT, where packets
+| ... | are decrypted and sent back to TG.
+| ... | *[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, number of flows per flow-group equals to
+| ... | number of IPSec tunnels) with all packets
+| ... | containing Ethernet header, IPv4 header with IP protocol=61 and
+| ... | static payload. MAC addresses are matching MAC addresses of the TG
+| ... | node interfaces. Incrementing of IP.dst (IPv4 destination address) field
+| ... | is applied to both streams.
+| ... | *[Ref] Applicable standard specifications:* RFC4303 and RFC2544.
+
+*** Variables ***
+| @{plugins_to_enable}= | dpdk_plugin.so | crypto_native_plugin.so
+| ... | crypto_ipsecmb_plugin.so | crypto_sw_scheduler_plugin.so
+| ... | crypto_openssl_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}= | L3
+| ${overhead}= | ${78}
+| ${tg_if1_ip4}= | 192.168.10.2
+| ${dut1_if1_ip4}= | 192.168.10.1
+| ${dut1_if2_ip4}= | 100.0.0.1
+| ${dut2_if1_ip4}= | 200.0.0.2
+| ${dut2_if2_ip4}= | 192.168.20.1
+| ${tg_if2_ip4}= | 192.168.20.2
+| ${raddr_ip4}= | 20.0.0.0
+| ${laddr_ip4}= | 10.0.0.0
+| ${addr_range}= | ${24}
+| ${n_tunnels}= | ${8}
+| ${dp_cores}= | ${1}
+# Traffic profile:
+| ${traffic_profile}= | trex-stl-3n-ethip4-ip4dst${n_tunnels}
+
+*** Keywords ***
+| Local Template
+| | [Documentation]
+| | ... | [Cfg] DUT runs IPSec tunneling AES_128_CBC / HMAC_SHA_512 config.\
+| | ... | Each DUT uses one physical core for data plane workers
+| | ... | and rest of ${phy_cores} physical core(s) for crypto workers.
+| | ... | [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 - Total number of physical cores. Type: integer
+| | ... | - rxq - Number of RX queues, default value: ${1}. Type: integer
+| |
+| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${1}
+| |
+| | Set Test Variable | \${frame_size}
+| |
+| | # These are enums (not strings) so they cannot be in Variables table.
+| | ${encr_alg}= | Crypto Alg AES CBC 128
+| | ${auth_alg}= | Integ Alg SHA 512 256
+| |
+| | 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 Enable IPSec Async Mode on all VPP DUTs
+| | And Disable Crypto Work of VPP Worker Threads on all VPP DUTs | ${dp_cores}
+| | And Initialize IPSec in 3-node circular topology
+| | And VPP IPsec Create Tunnel Interfaces
+| | ... | ${nodes} | ${dut1_if2_ip4} | ${dut2_if1_ip4} | ${DUT1_${int}2}[0]
+| | ... | ${DUT2_${int}1}[0] | ${n_tunnels} | ${encr_alg} | ${auth_alg}
+| | ... | ${laddr_ip4} | ${raddr_ip4} | ${addr_range}
+| | Then Find NDR and PDR intervals using optimized search
+
+*** Test Cases ***
+| 64B-2c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | 64B | 2C
+| | frame_size=${64} | phy_cores=${2}
+
+| 64B-3c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | 64B | 3C
+| | frame_size=${64} | phy_cores=${3}
+
+| 64B-4c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | 64B | 4C
+| | frame_size=${64} | phy_cores=${4}
+
+| 1518B-2c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-3c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | 1518B | 3C
+| | frame_size=${1518} | phy_cores=${3}
+
+| 1518B-4c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-2c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-3c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | 9000B | 3C
+| | frame_size=${9000} | phy_cores=${3}
+
+| 9000B-4c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
+
+| IMIX-2c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | IMIX | 2C
+| | frame_size=IMIX_v4_1 | phy_cores=${2}
+
+| IMIX-3c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | IMIX | 3C
+| | frame_size=IMIX_v4_1 | phy_cores=${3}
+
+| IMIX-4c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha-ndrpdr
+| | [Tags] | IMIX | 4C
+| | frame_size=IMIX_v4_1 | phy_cores=${4}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr.robot
new file mode 100644 (file)
index 0000000..bcc954a
--- /dev/null
@@ -0,0 +1,169 @@
+# Copyright (c) 2021 Intel and/or its affiliates.
+# Copyright (c) 2021 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
+| Resource | resources/libraries/robot/crypto/ipsec.robot
+|
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_8
+| ... | IP4FWD | IPSEC | IPSECSW | ASYNC | IPSECINT | NIC_Intel-X710 | SCALE
+| ... | SCHEDULER | AES_128_GCM | AES | DRV_VFIO_PCI
+| ... | RXQ_SIZE_0 | TXQ_SIZE_0
+| ... | ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+|
+| Suite Setup | Setup suite topology interfaces | performance
+| Suite Teardown | Tear down suite | performance
+| Test Setup | Setup test | performance
+| Test Teardown | Tear down test | performance | ipsec_sa
+|
+| Test Template | Local Template
+|
+| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
+|
+| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
+| ... | with single links between nodes.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
+| ... | Eth-IPv4-IPSec on DUT1-DUT2
+| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with multiple
+| ... | IPsec tunnels between them, run with IPsec async mode and use crypto
+| ... | sw scheduler engine to schedule crypto work to crypto cores. DUTs get
+| ... | IPv4 traffic from TG, encrypt it and send to another DUT, where packets
+| ... | are decrypted and sent back to TG.
+| ... | *[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, number of flows per flow-group equals to
+| ... | number of IPSec tunnels) with all packets
+| ... | containing Ethernet header, IPv4 header with IP protocol=61 and
+| ... | static payload. MAC addresses are matching MAC addresses of the TG
+| ... | node interfaces. Incrementing of IP.dst (IPv4 destination address) field
+| ... | is applied to both streams.
+| ... | *[Ref] Applicable standard specifications:* RFC4303 and RFC2544.
+
+*** Variables ***
+| @{plugins_to_enable}= | dpdk_plugin.so | crypto_native_plugin.so
+| ... | crypto_ipsecmb_plugin.so | crypto_sw_scheduler_plugin.so
+| ... | crypto_openssl_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}= | L3
+| ${overhead}= | ${54}
+| ${tg_if1_ip4}= | 192.168.10.2
+| ${dut1_if1_ip4}= | 192.168.10.1
+| ${dut1_if2_ip4}= | 100.0.0.1
+| ${dut2_if1_ip4}= | 200.0.0.2
+| ${dut2_if2_ip4}= | 192.168.20.1
+| ${tg_if2_ip4}= | 192.168.20.2
+| ${raddr_ip4}= | 20.0.0.0
+| ${laddr_ip4}= | 10.0.0.0
+| ${addr_range}= | ${24}
+| ${n_tunnels}= | ${8}
+| ${dp_cores}= | ${1}
+# Traffic profile:
+| ${traffic_profile}= | trex-stl-3n-ethip4-ip4dst${n_tunnels}
+
+*** Keywords ***
+| Local Template
+| | [Documentation]
+| | ... | [Cfg] DUT runs IPSec tunneling AES_128_GCM config.\
+| | ... | Each DUT uses one physical core for data plane workers
+| | ... | and rest of ${phy_cores} physical core(s) for crypto workers.
+| | ... | [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 - Total number of physical cores. Type: integer
+| | ... | - rxq - Number of RX queues, default value: ${1}. Type: integer
+| |
+| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${1}
+| |
+| | Set Test Variable | \${frame_size}
+| |
+| | # These are enums (not strings) so they cannot be in Variables table.
+| | ${encr_alg}= | Crypto Alg AES GCM 128
+| | ${auth_alg}= | Set Variable | ${NONE}
+| |
+| | 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 Enable IPSec Async Mode on all VPP DUTs
+| | And Disable Crypto Work of VPP Worker Threads on all VPP DUTs | ${dp_cores}
+| | And Initialize IPSec in 3-node circular topology
+| | And VPP IPsec Create Tunnel Interfaces
+| | ... | ${nodes} | ${dut1_if2_ip4} | ${dut2_if1_ip4} | ${DUT1_${int}2}[0]
+| | ... | ${DUT2_${int}1}[0] | ${n_tunnels} | ${encr_alg} | ${auth_alg}
+| | ... | ${laddr_ip4} | ${raddr_ip4} | ${addr_range}
+| | Then Find NDR and PDR intervals using optimized search
+
+*** Test Cases ***
+| 64B-2c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | 64B | 2C
+| | frame_size=${64} | phy_cores=${2}
+
+| 64B-3c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | 64B | 3C
+| | frame_size=${64} | phy_cores=${3}
+
+| 64B-4c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | 64B | 4C
+| | frame_size=${64} | phy_cores=${4}
+
+| 1518B-2c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-3c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | 1518B | 3C
+| | frame_size=${1518} | phy_cores=${3}
+
+| 1518B-4c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-2c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-3c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | 9000B | 3C
+| | frame_size=${9000} | phy_cores=${3}
+
+| 9000B-4c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
+
+| IMIX-2c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | IMIX | 2C
+| | frame_size=IMIX_v4_1 | phy_cores=${2}
+
+| IMIX-3c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | IMIX | 3C
+| | frame_size=IMIX_v4_1 | phy_cores=${3}
+
+| IMIX-4c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm-ndrpdr
+| | [Tags] | IMIX | 4C
+| | frame_size=IMIX_v4_1 | phy_cores=${4}
diff --git a/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr.robot b/tests/vpp/perf/crypto/10ge2p1x710-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr.robot
new file mode 100644 (file)
index 0000000..598b716
--- /dev/null
@@ -0,0 +1,169 @@
+# Copyright (c) 2021 Intel and/or its affiliates.
+# Copyright (c) 2021 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
+| Resource | resources/libraries/robot/crypto/ipsec.robot
+|
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | SCALE | NDRPDR
+| ... | IP4FWD | IPSEC | IPSECHW | ASYNC | IPSECINT | NIC_Intel-X710 | TNL_8
+| ... | SCHEDULER | AES_256_GCM | AES | DRV_VFIO_PCI
+| ... | RXQ_SIZE_0 | TXQ_SIZE_0
+| ... | ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+|
+| Suite Setup | Setup suite topology interfaces | performance
+| Suite Teardown | Tear down suite | performance
+| Test Setup | Setup test | performance
+| Test Teardown | Tear down test | performance | ipsec_sa
+|
+| Test Template | Local Template
+|
+| Documentation | *RFC2544: Pkt throughput IPv4 IPsec tunnel mode.*
+|
+| ... | *[Top] Network Topologies:* TG-DUT1-DUT2-TG 3-node circular topology
+| ... | with single links between nodes.
+| ... | *[Enc] Packet Encapsulations:* Eth-IPv4 on TG-DUTn,
+| ... | Eth-IPv4-IPSec on DUT1-DUT2
+| ... | *[Cfg] DUT configuration:* DUT1 and DUT2 are configured with multiple
+| ... | IPsec tunnels between them, run with IPsec async mode and use crypto
+| ... | sw scheduler engine to schedule crypto work to crypto cores. DUTs get
+| ... | IPv4 traffic from TG, encrypt it and send to another DUT, where packets
+| ... | are decrypted and sent back to TG.
+| ... | *[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, number of flows per flow-group equals to
+| ... | number of IPSec tunnels) with all packets
+| ... | containing Ethernet header, IPv4 header with IP protocol=61 and
+| ... | static payload. MAC addresses are matching MAC addresses of the TG
+| ... | node interfaces. Incrementing of IP.dst (IPv4 destination address) field
+| ... | is applied to both streams.
+| ... | *[Ref] Applicable standard specifications:* RFC4303 and RFC2544.
+
+*** Variables ***
+| @{plugins_to_enable}= | dpdk_plugin.so | crypto_native_plugin.so
+| ... | crypto_ipsecmb_plugin.so | crypto_sw_scheduler_plugin.so
+| ... | crypto_openssl_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}= | L3
+| ${overhead}= | ${54}
+| ${tg_if1_ip4}= | 192.168.10.2
+| ${dut1_if1_ip4}= | 192.168.10.1
+| ${dut1_if2_ip4}= | 100.0.0.1
+| ${dut2_if1_ip4}= | 200.0.0.2
+| ${dut2_if2_ip4}= | 192.168.20.1
+| ${tg_if2_ip4}= | 192.168.20.2
+| ${raddr_ip4}= | 20.0.0.0
+| ${laddr_ip4}= | 10.0.0.0
+| ${addr_range}= | ${24}
+| ${n_tunnels}= | ${8}
+| ${dp_cores}= | ${1}
+# Traffic profile:
+| ${traffic_profile}= | trex-stl-3n-ethip4-ip4dst${n_tunnels}
+
+*** Keywords ***
+| Local Template
+| | [Documentation]
+| | ... | [Cfg] DUT runs IPSec tunneling AES_256_GCM config.\
+| | ... | Each DUT uses one physical core for data plane workers
+| | ... | and rest of ${phy_cores} physical core(s) for crypto workers.
+| | ... | [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 - Total number of physical cores. Type: integer
+| | ... | - rxq - Number of RX queues, default value: ${1}. Type: integer
+| |
+| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${1}
+| |
+| | Set Test Variable | \${frame_size}
+| |
+| | # These are enums (not strings) so they cannot be in Variables table.
+| | ${encr_alg}= | Crypto Alg AES GCM 256
+| | ${auth_alg}= | Set Variable | ${NONE}
+| |
+| | 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 Enable IPSec Async Mode on all VPP DUTs
+| | And Disable Crypto Work of VPP Worker Threads on all VPP DUTs | ${dp_cores}
+| | And Initialize IPSec in 3-node circular topology
+| | And VPP IPsec Create Tunnel Interfaces
+| | ... | ${nodes} | ${dut1_if2_ip4} | ${dut2_if1_ip4} | ${DUT1_${int}2}[0]
+| | ... | ${DUT2_${int}1}[0] | ${n_tunnels} | ${encr_alg} | ${auth_alg}
+| | ... | ${laddr_ip4} | ${raddr_ip4} | ${addr_range}
+| | Then Find NDR and PDR intervals using optimized search
+
+*** Test Cases ***
+| 64B-2c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | 64B | 2C
+| | frame_size=${64} | phy_cores=${2}
+
+| 64B-3c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | 64B | 3C
+| | frame_size=${64} | phy_cores=${3}
+
+| 64B-4c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | 64B | 4C
+| | frame_size=${64} | phy_cores=${4}
+
+| 1518B-2c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-3c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | 1518B | 3C
+| | frame_size=${1518} | phy_cores=${3}
+
+| 1518B-4c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-2c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-3c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | 9000B | 3C
+| | frame_size=${9000} | phy_cores=${3}
+
+| 9000B-4c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
+
+| IMIX-2c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | IMIX | 2C
+| | frame_size=IMIX_v4_1 | phy_cores=${2}
+
+| IMIX-3c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | IMIX | 3C
+| | frame_size=IMIX_v4_1 | phy_cores=${3}
+
+| IMIX-4c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm-ndrpdr
+| | [Tags] | IMIX | 4C
+| | frame_size=IMIX_v4_1 | phy_cores=${4}