Add wireguard multiple tunnels test suites 45/37145/3
authorYulong Pei <yulong.pei@intel.com>
Thu, 15 Sep 2022 04:06:20 +0000 (12:06 +0800)
committerPeter Mikus <peter.mikus@protonmail.ch>
Fri, 30 Sep 2022 12:01:12 +0000 (12:01 +0000)
Signed-off-by: Yulong Pei <yulong.pei@intel.com>
Change-Id: I7abd546e67fdbe481b204bb6a1ec7e9c654dcdae

14 files changed:
GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4src1000ip4dst1000.py [new file with mode: 0644]
GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4src100ip4dst100.py [new file with mode: 0644]
GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4src1ip4dst1.py [new file with mode: 0644]
GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4src2ip4dst2.py [new file with mode: 0644]
GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4src4ip4dst4.py [new file with mode: 0644]
GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4src8ip4dst8.py [new file with mode: 0644]
resources/api/vpp/supported_crcs.yaml
resources/libraries/python/WireGuardUtil.py
tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4udpwireguard1000tnlsw-ip4base-ndrpdr.robot [new file with mode: 0644]
tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4udpwireguard100tnlsw-ip4base-ndrpdr.robot [new file with mode: 0644]
tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4udpwireguard1tnlsw-ip4base-ndrpdr.robot
tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4udpwireguard2tnlsw-ip4base-ndrpdr.robot [new file with mode: 0644]
tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4udpwireguard4tnlsw-ip4base-ndrpdr.robot [new file with mode: 0644]
tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4udpwireguard8tnlsw-ip4base-ndrpdr.robot [new file with mode: 0644]

diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4src1000ip4dst1000.py b/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4src1000ip4dst1000.py
new file mode 100644 (file)
index 0000000..667d4ec
--- /dev/null
@@ -0,0 +1,165 @@
+# Copyright (c) 2022 Intel 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.0 - 10.3.231.0
+   - Destination IP address range:  20.0.0.0 - 20.3.231.0
+ - Direction 1 --> 0:
+   - Source IP address range:       20.0.0.0 - 20.3.231.0
+   - Destination IP address range:  10.0.0.0 - 10.3.231.0
+"""
+
+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.0"
+        self.p1_src_end_ip = u"10.3.231.0"
+
+        self.p1_dst_start_ip = u"20.0.0.0"
+        self.p1_dst_end_ip = u"20.3.231.0"
+
+        self.p2_src_start_ip = u"20.0.0.0"
+        self.p2_src_end_ip = u"20.3.231.0"
+
+        self.p2_dst_start_ip = u"10.0.0.0"
+        self.p2_dst_end_ip = u"10.3.231.0"
+
+    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"ip_src",
+                    min_value=self.p1_src_start_ip,
+                    max_value=self.p1_src_end_ip,
+                    size=4,
+                    step=256,
+                    op=u"inc"
+                ),
+                STLVmWrFlowVar(
+                    fv_name=u"ip_src",
+                    pkt_offset=u"IP.src"
+                ),
+                STLVmFlowVar(
+                    name=u"ip_dst",
+                    min_value=self.p1_dst_start_ip,
+                    max_value=self.p1_dst_end_ip,
+                    size=4,
+                    step=256,
+                    op=u"inc"
+                ),
+                STLVmWrFlowVar(
+                    fv_name=u"ip_dst",
+                    pkt_offset=u"IP.dst"
+                ),
+                STLVmFixIpv4(
+                    offset=u"IP"
+                )
+            ]
+        )
+        # Direction 1 --> 0
+        vm2 = STLScVmRaw(
+            [
+                STLVmFlowVar(
+                    name=u"ip_src",
+                    min_value=self.p2_src_start_ip,
+                    max_value=self.p2_src_end_ip,
+                    size=4,
+                    step=256,
+                    op=u"inc"
+                ),
+                STLVmWrFlowVar(
+                    fv_name=u"ip_src",
+                    pkt_offset=u"IP.src"
+                ),
+                STLVmFlowVar(
+                    name=u"ip_dst",
+                    min_value=self.p2_dst_start_ip,
+                    max_value=self.p2_dst_end_ip,
+                    size=4,
+                    step=256,
+                    op=u"inc"
+                ),
+                STLVmWrFlowVar(
+                    fv_name=u"ip_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.
+
+    :returns: Traffic streams.
+    :rtype: Object
+    """
+    return TrafficStreams()
diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4src100ip4dst100.py b/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4src100ip4dst100.py
new file mode 100644 (file)
index 0000000..8d0950c
--- /dev/null
@@ -0,0 +1,165 @@
+# Copyright (c) 2022 Intel 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.0 - 10.0.99.0
+   - Destination IP address range:  20.0.0.0 - 20.0.99.0
+ - Direction 1 --> 0:
+   - Source IP address range:       20.0.0.0 - 20.0.99.0
+   - Destination IP address range:  10.0.0.0 - 10.0.99.0
+"""
+
+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.0"
+        self.p1_src_end_ip = u"10.0.99.0"
+
+        self.p1_dst_start_ip = u"20.0.0.0"
+        self.p1_dst_end_ip = u"20.0.99.0"
+
+        self.p2_src_start_ip = u"20.0.0.0"
+        self.p2_src_end_ip = u"20.0.99.0"
+
+        self.p2_dst_start_ip = u"10.0.0.0"
+        self.p2_dst_end_ip = u"10.0.99.0"
+
+    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"ip_src",
+                    min_value=self.p1_src_start_ip,
+                    max_value=self.p1_src_end_ip,
+                    size=4,
+                    step=256,
+                    op=u"inc"
+                ),
+                STLVmWrFlowVar(
+                    fv_name=u"ip_src",
+                    pkt_offset=u"IP.src"
+                ),
+                STLVmFlowVar(
+                    name=u"ip_dst",
+                    min_value=self.p1_dst_start_ip,
+                    max_value=self.p1_dst_end_ip,
+                    size=4,
+                    step=256,
+                    op=u"inc"
+                ),
+                STLVmWrFlowVar(
+                    fv_name=u"ip_dst",
+                    pkt_offset=u"IP.dst"
+                ),
+                STLVmFixIpv4(
+                    offset=u"IP"
+                )
+            ]
+        )
+        # Direction 1 --> 0
+        vm2 = STLScVmRaw(
+            [
+                STLVmFlowVar(
+                    name=u"ip_src",
+                    min_value=self.p2_src_start_ip,
+                    max_value=self.p2_src_end_ip,
+                    size=4,
+                    step=256,
+                    op=u"inc"
+                ),
+                STLVmWrFlowVar(
+                    fv_name=u"ip_src",
+                    pkt_offset=u"IP.src"
+                ),
+                STLVmFlowVar(
+                    name=u"ip_dst",
+                    min_value=self.p2_dst_start_ip,
+                    max_value=self.p2_dst_end_ip,
+                    size=4,
+                    step=256,
+                    op=u"inc"
+                ),
+                STLVmWrFlowVar(
+                    fv_name=u"ip_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.
+
+    :returns: Traffic streams.
+    :rtype: Object
+    """
+    return TrafficStreams()
diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4src1ip4dst1.py b/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4src1ip4dst1.py
new file mode 100644 (file)
index 0000000..77a2f84
--- /dev/null
@@ -0,0 +1,95 @@
+# Copyright (c) 2022 Intel 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.0
+   - Destination IP address range: 20.0.0.0
+ - Direction 1 --> 0:
+   - Source IP address range:      20.0.0.0
+   - Destination IP address range: 10.0.0.0
+"""
+
+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_ip = u"10.0.0.0"
+        self.p1_dst_ip = u"20.0.0.0"
+
+        self.p2_src_ip = u"20.0.0.0"
+        self.p2_dst_ip = u"10.0.0.0"
+
+    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_ip,
+                dst=self.p1_dst_ip,
+                proto=61
+            )
+        )
+        # Direction 1 --> 0
+        base_pkt_b = (
+            Ether() /
+            IP(
+                src=self.p2_src_ip,
+                dst=self.p2_dst_ip,
+                proto=61
+            )
+        )
+
+        return base_pkt_a, base_pkt_b, None, None
+
+
+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-ip4src2ip4dst2.py b/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4src2ip4dst2.py
new file mode 100644 (file)
index 0000000..59bf205
--- /dev/null
@@ -0,0 +1,165 @@
+# Copyright (c) 2022 Intel 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.0 - 10.0.1.0
+   - Destination IP address range:  20.0.0.0 - 20.0.1.0
+ - Direction 1 --> 0:
+   - Source IP address range:       20.0.0.0 - 20.0.1.0
+   - Destination IP address range:  10.0.0.0 - 10.0.1.0
+"""
+
+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.0"
+        self.p1_src_end_ip = u"10.0.1.0"
+
+        self.p1_dst_start_ip = u"20.0.0.0"
+        self.p1_dst_end_ip = u"20.0.1.0"
+
+        self.p2_src_start_ip = u"20.0.0.0"
+        self.p2_src_end_ip = u"20.0.1.0"
+
+        self.p2_dst_start_ip = u"10.0.0.0"
+        self.p2_dst_end_ip = u"10.0.1.0"
+
+    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"ip_src",
+                    min_value=self.p1_src_start_ip,
+                    max_value=self.p1_src_end_ip,
+                    size=4,
+                    step=256,
+                    op=u"inc"
+                ),
+                STLVmWrFlowVar(
+                    fv_name=u"ip_src",
+                    pkt_offset=u"IP.src"
+                ),
+                STLVmFlowVar(
+                    name=u"ip_dst",
+                    min_value=self.p1_dst_start_ip,
+                    max_value=self.p1_dst_end_ip,
+                    size=4,
+                    step=256,
+                    op=u"inc"
+                ),
+                STLVmWrFlowVar(
+                    fv_name=u"ip_dst",
+                    pkt_offset=u"IP.dst"
+                ),
+                STLVmFixIpv4(
+                    offset=u"IP"
+                )
+            ]
+        )
+        # Direction 1 --> 0
+        vm2 = STLScVmRaw(
+            [
+                STLVmFlowVar(
+                    name=u"ip_src",
+                    min_value=self.p2_src_start_ip,
+                    max_value=self.p2_src_end_ip,
+                    size=4,
+                    step=256,
+                    op=u"inc"
+                ),
+                STLVmWrFlowVar(
+                    fv_name=u"ip_src",
+                    pkt_offset=u"IP.src"
+                ),
+                STLVmFlowVar(
+                    name=u"ip_dst",
+                    min_value=self.p2_dst_start_ip,
+                    max_value=self.p2_dst_end_ip,
+                    size=4,
+                    step=256,
+                    op=u"inc"
+                ),
+                STLVmWrFlowVar(
+                    fv_name=u"ip_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.
+
+    :returns: Traffic streams.
+    :rtype: Object
+    """
+    return TrafficStreams()
diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4src4ip4dst4.py b/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4src4ip4dst4.py
new file mode 100644 (file)
index 0000000..7eb661d
--- /dev/null
@@ -0,0 +1,165 @@
+# Copyright (c) 2022 Intel 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.0 - 10.0.3.0
+   - Destination IP address range:  20.0.0.0 - 20.0.3.0
+ - Direction 1 --> 0:
+   - Source IP address range:       20.0.0.0 - 20.0.3.0
+   - Destination IP address range:  10.0.0.0 - 10.0.3.0
+"""
+
+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.0"
+        self.p1_src_end_ip = u"10.0.3.0"
+
+        self.p1_dst_start_ip = u"20.0.0.0"
+        self.p1_dst_end_ip = u"20.0.3.0"
+
+        self.p2_src_start_ip = u"20.0.0.0"
+        self.p2_src_end_ip = u"20.0.3.0"
+
+        self.p2_dst_start_ip = u"10.0.0.0"
+        self.p2_dst_end_ip = u"10.0.3.0"
+
+    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"ip_src",
+                    min_value=self.p1_src_start_ip,
+                    max_value=self.p1_src_end_ip,
+                    size=4,
+                    step=256,
+                    op=u"inc"
+                ),
+                STLVmWrFlowVar(
+                    fv_name=u"ip_src",
+                    pkt_offset=u"IP.src"
+                ),
+                STLVmFlowVar(
+                    name=u"ip_dst",
+                    min_value=self.p1_dst_start_ip,
+                    max_value=self.p1_dst_end_ip,
+                    size=4,
+                    step=256,
+                    op=u"inc"
+                ),
+                STLVmWrFlowVar(
+                    fv_name=u"ip_dst",
+                    pkt_offset=u"IP.dst"
+                ),
+                STLVmFixIpv4(
+                    offset=u"IP"
+                )
+            ]
+        )
+        # Direction 1 --> 0
+        vm2 = STLScVmRaw(
+            [
+                STLVmFlowVar(
+                    name=u"ip_src",
+                    min_value=self.p2_src_start_ip,
+                    max_value=self.p2_src_end_ip,
+                    size=4,
+                    step=256,
+                    op=u"inc"
+                ),
+                STLVmWrFlowVar(
+                    fv_name=u"ip_src",
+                    pkt_offset=u"IP.src"
+                ),
+                STLVmFlowVar(
+                    name=u"ip_dst",
+                    min_value=self.p2_dst_start_ip,
+                    max_value=self.p2_dst_end_ip,
+                    size=4,
+                    step=256,
+                    op=u"inc"
+                ),
+                STLVmWrFlowVar(
+                    fv_name=u"ip_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.
+
+    :returns: Traffic streams.
+    :rtype: Object
+    """
+    return TrafficStreams()
diff --git a/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4src8ip4dst8.py b/GPL/traffic_profiles/trex/trex-stl-3n-ethip4-ip4src8ip4dst8.py
new file mode 100644 (file)
index 0000000..1db7715
--- /dev/null
@@ -0,0 +1,165 @@
+# Copyright (c) 2022 Intel 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.0 - 10.0.7.0
+   - Destination IP address range:  20.0.0.0 - 20.0.7.0
+ - Direction 1 --> 0:
+   - Source IP address range:       20.0.0.0 - 20.0.7.0
+   - Destination IP address range:  10.0.0.0 - 10.0.7.0
+"""
+
+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.0"
+        self.p1_src_end_ip = u"10.0.7.0"
+
+        self.p1_dst_start_ip = u"20.0.0.0"
+        self.p1_dst_end_ip = u"20.0.7.0"
+
+        self.p2_src_start_ip = u"20.0.0.0"
+        self.p2_src_end_ip = u"20.0.7.0"
+
+        self.p2_dst_start_ip = u"10.0.0.0"
+        self.p2_dst_end_ip = u"10.0.7.0"
+
+    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"ip_src",
+                    min_value=self.p1_src_start_ip,
+                    max_value=self.p1_src_end_ip,
+                    size=4,
+                    step=256,
+                    op=u"inc"
+                ),
+                STLVmWrFlowVar(
+                    fv_name=u"ip_src",
+                    pkt_offset=u"IP.src"
+                ),
+                STLVmFlowVar(
+                    name=u"ip_dst",
+                    min_value=self.p1_dst_start_ip,
+                    max_value=self.p1_dst_end_ip,
+                    size=4,
+                    step=256,
+                    op=u"inc"
+                ),
+                STLVmWrFlowVar(
+                    fv_name=u"ip_dst",
+                    pkt_offset=u"IP.dst"
+                ),
+                STLVmFixIpv4(
+                    offset=u"IP"
+                )
+            ]
+        )
+        # Direction 1 --> 0
+        vm2 = STLScVmRaw(
+            [
+                STLVmFlowVar(
+                    name=u"ip_src",
+                    min_value=self.p2_src_start_ip,
+                    max_value=self.p2_src_end_ip,
+                    size=4,
+                    step=256,
+                    op=u"inc"
+                ),
+                STLVmWrFlowVar(
+                    fv_name=u"ip_src",
+                    pkt_offset=u"IP.src"
+                ),
+                STLVmFlowVar(
+                    name=u"ip_dst",
+                    min_value=self.p2_dst_start_ip,
+                    max_value=self.p2_dst_end_ip,
+                    size=4,
+                    step=256,
+                    op=u"inc"
+                ),
+                STLVmWrFlowVar(
+                    fv_name=u"ip_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.
+
+    :returns: Traffic streams.
+    :rtype: Object
+    """
+    return TrafficStreams()
index 10deb6e..c778753 100644 (file)
     wireguard_interface_create_reply: '0x5383d31f'
     wireguard_peer_add: '0x9b8aad61'
     wireguard_peer_add_reply: '0x084a0cd3'
+    wg_set_async_mode: '0xa6465f7c'
+    wg_set_async_mode_reply: '0xe8d4e804'
     # Please keep alphabetic order.
 # Use bash command "env LC_COLLATE=C sort -u" if not clear.
 
index d8d2396..6e6237e 100644 (file)
@@ -68,7 +68,7 @@ class WireGuardUtil:
 
         :param node: VPP node to add config on.
         :param listen_port: WireGuard interface listen port.
-        :param wg_src: WireGuard srouce IPv4.
+        :param wg_src: WireGuard source IPv4.
         :param private_key: WireGuard interface private key
         :type node: dict
         :type listen_port: int
@@ -118,12 +118,9 @@ class WireGuardUtil:
         :type keepalive_time: int
         """
         endpoint_ip = ip_address(endpoint_ip)
-        wg_name = InterfaceUtil.vpp_get_interface_name(
-            node, sw_if_index=interface
-        )
         cmd = u"wireguard_peer_add"
-        err_msg = f"Failed to add wireguard interface" \
-            f"{wg_name} peer on host {node[u'host']}"
+        err_msg = f"Failed to add peer of wireguard interface" \
+            f"{interface} on host {node[u'host']}"
         args = dict(
             peer=dict(
                 public_key=peer_pubkey,
@@ -138,6 +135,23 @@ class WireGuardUtil:
         with PapiSocketExecutor(node) as papi_exec:
             papi_exec.add(cmd, **args).get_reply(err_msg)
 
+    @staticmethod
+    def vpp_wireguard_set_async_mode(node, async_enable=1):
+        """Set wireguard async mode on or off.
+
+        :param node: VPP node to set wireguard async mode.
+        :param async_enable: Async mode on or off.
+        :type node: dict
+        :type async_enable: int
+        """
+        cmd = u"wg_set_async_mode"
+        err_msg = f"Failed to set wireguard async mode on host {node[u'host']}"
+        args = dict(
+            async_enable=async_enable
+        )
+        with PapiSocketExecutor(node) as papi_exec:
+            papi_exec.add(cmd, **args).get_reply(err_msg)
+
     @staticmethod
     def _wireguard_create_tunnel_interface_on_dut(
             node, if1_key, if2_mac_addr, src_ip, peer_endpoint_ip,
@@ -162,11 +176,11 @@ class WireGuardUtil:
         :type nodes: dict
         :type if1_key: str
         :type if2_mac_addr: str
-        :type src_ip: src
-        :type peer_endpoint_ip: src
+        :type src_ip: str
+        :type peer_endpoint_ip: str
         :type peer_allowed_ips: list
         :type peer_n_allowed_ips: int
-        :type dut_wg_ip: src
+        :type dut_wg_ip: str
         :type port: int
         :type keepalive_time: int
         :type dut_private_key: bytes
@@ -213,10 +227,10 @@ class WireGuardUtil:
             )
 
     @staticmethod
-    def vpp_wireguard_create_tunnel_interface_on_duts(
+    def vpp_wireguard_create_tunnel_interfaces_on_duts(
             nodes, if1_key, if2_key, if1_ip_addr, if2_ip_addr,
             if1_mac_addr, if2_mac_addr, wg_if1_ip_addr, wg_if2_ip_addr,
-            n_allowed_ips, port, keepalive_time, raddr_ip1, raddr_ip2):
+            n_tunnels, port, keepalive_time, raddr_ip1, raddr_ip2):
         """Create WireGuard tunnel interfaces between two VPP nodes.
 
         :param nodes: VPP nodes to create tunnel interfaces.
@@ -229,8 +243,7 @@ class WireGuardUtil:
         :param if2_mac_addr: VPP node2 interface mac address.
         :param wg_if1_ip_addr: VPP node 1 WireGuard interface IPv4 address.
         :param wg_if2_ip_addr: VPP node 2 WireGuard interface IPv4 address.
-        :param allowed_ips: WireGuard interface allowed ip list.
-        :param n_allowed_ips: Number of allowed ips.
+        :param n_tunnels: Number of wireguard tunnels.
         :param port: WireGuard interface listen port or
             Peer interface destination port.
         :param keepalive_time: WireGuard persistent keepalive time.
@@ -247,32 +260,39 @@ class WireGuardUtil:
         :type if2_mac_addr: str
         :type wg_if1_ip_addr: str
         :type wg_if2_ip_addr: str
-        :type allowed_ips: str
-        :type n_allowed_ips: int
+        :type n_tunnels: int
         :type port: int
         :type keepalive_time: int
         :type raddr_ip1: str
         :type raddr_ip2: str
         """
-        dut1_privatekey, dut1_pubkey = \
-            WireGuardUtil.generate_wireguard_privatekey_and_pubkey()
-        dut2_privatekey, dut2_pubkey = \
-            WireGuardUtil.generate_wireguard_privatekey_and_pubkey()
-        raddr_ip1 = ip_address(raddr_ip1)
-        raddr_ip2 = ip_address(raddr_ip2)
-        dut1_allowed_ips = \
-            [IPUtil.create_prefix_object(raddr_ip2, 24),]
-        dut2_allowed_ips = \
-            [IPUtil.create_prefix_object(raddr_ip1, 24),]
-        #Configure WireGuard interface on DUT1
-        WireGuardUtil._wireguard_create_tunnel_interface_on_dut(
-            nodes[u'DUT1'], if1_key, if2_mac_addr, if1_ip_addr, if2_ip_addr,
-            dut1_allowed_ips, n_allowed_ips, wg_if1_ip_addr, port,
-            keepalive_time, dut1_privatekey, dut2_pubkey
-        )
-        #Configure WireGuard interface on DUT2
-        WireGuardUtil._wireguard_create_tunnel_interface_on_dut(
-            nodes[u'DUT2'], if2_key, if1_mac_addr, if2_ip_addr, if1_ip_addr,
-            dut2_allowed_ips, n_allowed_ips, wg_if2_ip_addr, port,
-            keepalive_time, dut2_privatekey, dut1_pubkey
-        )
+        for i in range(n_tunnels):
+            if1_ipaddr = str(ip_address(if1_ip_addr) + i*256)
+            if2_ipaddr = str(ip_address(if2_ip_addr) + i*256)
+            wg_if1_ipaddr = str(ip_address(wg_if1_ip_addr) + i*256)
+            wg_if2_ipaddr = str(ip_address(wg_if2_ip_addr) + i*256)
+
+            allowed_ipaddr1 = ip_address(raddr_ip1) + i*256
+            allowed_ipaddr2 = ip_address(raddr_ip2) + i*256
+            dut1_allowed_ips = \
+                [IPUtil.create_prefix_object(allowed_ipaddr2, 24),]
+            dut2_allowed_ips = \
+                [IPUtil.create_prefix_object(allowed_ipaddr1, 24),]
+
+            dut1_privatekey, dut1_pubkey = \
+                WireGuardUtil.generate_wireguard_privatekey_and_pubkey()
+            dut2_privatekey, dut2_pubkey = \
+                WireGuardUtil.generate_wireguard_privatekey_and_pubkey()
+
+            #Configure WireGuard interface on DUT1
+            WireGuardUtil._wireguard_create_tunnel_interface_on_dut(
+                nodes[u'DUT1'], if1_key, if2_mac_addr, if1_ipaddr, if2_ipaddr,
+                dut1_allowed_ips, 1, wg_if1_ipaddr, port,
+                keepalive_time, dut1_privatekey, dut2_pubkey
+            )
+            #Configure WireGuard interface on DUT2
+            WireGuardUtil._wireguard_create_tunnel_interface_on_dut(
+                nodes[u'DUT2'], if2_key, if1_mac_addr, if2_ipaddr, if1_ipaddr,
+                dut2_allowed_ips, 1, wg_if2_ipaddr, port,
+                keepalive_time, dut2_privatekey, dut1_pubkey
+            )
diff --git a/tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4udpwireguard1000tnlsw-ip4base-ndrpdr.robot b/tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4udpwireguard1000tnlsw-ip4base-ndrpdr.robot
new file mode 100644 (file)
index 0000000..dec630f
--- /dev/null
@@ -0,0 +1,169 @@
+# Copyright (c) 2022 Intel 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/wireguard/wireguard.robot
+|
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_1000
+| ... | IP4FWD |  NIC_Intel-X710 | WIREGUARD | DRV_VFIO_PCI
+| ... | RXQ_SIZE_0 | TXQ_SIZE_0
+| ... | ethip4udpwireguard1000tnlsw-ip4base
+|
+| Suite Setup | Setup suite topology interfaces | performance
+| Suite Teardown | Tear down suite | performance
+| Test Setup | Setup test | performance
+| Test Teardown | Tear down test | performance
+|
+| Test Template | Local Template
+|
+| Documentation | **RFC2544: Pkt throughput IPv4 WireGuard 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-UDP-WireGuard on DUT1-DUT2.
+| ... |
+| ... | - **[Cfg] DUT configuration:** DUT1 and DUT2 are configured with \
+| ... | multiple WireGuard tunnels between them. DUTs get IPv4 traffic from TG, \
+| ... | 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 WireGuard 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.src and IP.dst \
+| ... | are applied to both streams.
+| ... |
+| ... | - **[Ref] Applicable standard specifications:** RFC4303 and RFC2544.
+
+
+*** Variables ***
+| @{plugins_to_enable}= | dpdk_plugin.so | perfmon_plugin.so
+| ... | crypto_native_plugin.so | crypto_ipsecmb_plugin.so
+| ... | wireguard_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}= | ${60}
+| ${tg_if1_ip4}= | 192.168.10.2
+| ${dut1_if1_ip4}= | 192.168.10.1
+| ${dut1_if2_ip4}= | 200.0.0.1
+| ${dut2_if1_ip4}= | 200.0.0.2
+| ${dut2_if2_ip4}= | 192.168.20.1
+| ${tg_if2_ip4}= | 192.168.20.2
+| ${wg_if1_ip4}= | 1.0.0.1
+| ${wg_if2_ip4}= | 1.0.0.2
+| ${raddr_ip4}= | 20.0.0.0
+| ${laddr_ip4}= | 10.0.0.0
+| ${n_tunnels}= | ${1000}
+| ${listen_port}= | ${51820}
+| ${keepalive_time}= | ${256}
+# Traffic profile:
+| ${traffic_profile}= | trex-stl-3n-ethip4-ip4src${n_tunnels}ip4dst${n_tunnels}
+
+*** Keywords ***
+| Local Template
+| | [Documentation]
+| | ... | - **[Cfg]** DUT runs wireguard tunnel config. \
+| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
+| | ... | - **[Ver]** Measure NDR and PDR values using MLRsearch algorithm.
+| |
+| | ... | *Arguments:*
+| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
+| | ... | Type: integer, string
+| | ... | - phy_cores - Number of physical cores. Type: integer
+| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
+| |
+| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
+| |
+| | Set Test Variable | \${frame_size}
+| |
+| | Given Set Max Rate And Jumbo
+| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
+| | And Pre-initialize layer driver | ${nic_driver}
+| | And Apply startup configuration on all VPP DUTs
+| | When Initialize layer driver | ${nic_driver}
+| | And Initialize layer interface
+| | And Initialize WireGuard in 3-node circular topology
+| | And VPP WireGuard Create Tunnel Interfaces On DUTs
+| | ... | ${nodes} | ${DUT1_${int}2}[0] | ${DUT2_${int}1}[0]
+| | ... | ${dut1_if2_ip4} | ${dut2_if1_ip4} | ${DUT1_${int}2_mac}[0]
+| | ... | ${DUT2_${int}1_mac}[0] | ${wg_if1_ip4} | ${wg_if2_ip4}
+| | ... | ${n_tunnels} | ${listen_port} | ${keepalive_time}
+| | ... | ${laddr_ip4} | ${raddr_ip4}
+| | Then Find NDR and PDR intervals using optimized search
+
+*** Test Cases ***
+| 64B-1c-ethip4udpwireguard1000tnlsw-ip4base-ndrpdr
+| | [Tags] | 64B | 1C
+| | frame_size=${64} | phy_cores=${1}
+
+| 64B-2c-ethip4udpwireguard1000tnlsw-ip4base-ndrpdr
+| | [Tags] | 64B | 2C
+| | frame_size=${64} | phy_cores=${2}
+
+| 64B-4c-ethip4udpwireguard1000tnlsw-ip4base-ndrpdr
+| | [Tags] | 64B | 4C
+| | frame_size=${64} | phy_cores=${4}
+
+| 1518B-1c-ethip4udpwireguard1000tnlsw-ip4base-ndrpdr
+| | [Tags] | 1518B | 1C
+| | frame_size=${1518} | phy_cores=${1}
+
+| 1518B-2c-ethip4udpwireguard1000tnlsw-ip4base-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-4c-ethip4udpwireguard1000tnlsw-ip4base-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-1c-ethip4udpwireguard1000tnlsw-ip4base-ndrpdr
+| | [Tags] | 9000B | 1C
+| | frame_size=${9000} | phy_cores=${1}
+
+| 9000B-2c-ethip4udpwireguard1000tnlsw-ip4base-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-4c-ethip4udpwireguard1000tnlsw-ip4base-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
+
+| IMIX-1c-ethip4udpwireguard1000tnlsw-ip4base-ndrpdr
+| | [Tags] | IMIX | 1C
+| | frame_size=IMIX_v4_1 | phy_cores=${1}
+
+| IMIX-2c-ethip4udpwireguard1000tnlsw-ip4base-ndrpdr
+| | [Tags] | IMIX | 2C
+| | frame_size=IMIX_v4_1 | phy_cores=${2}
+
+| IMIX-4c-ethip4udpwireguard1000tnlsw-ip4base-ndrpdr
+| | [Tags] | IMIX | 4C
+| | frame_size=IMIX_v4_1 | phy_cores=${4}
diff --git a/tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4udpwireguard100tnlsw-ip4base-ndrpdr.robot b/tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4udpwireguard100tnlsw-ip4base-ndrpdr.robot
new file mode 100644 (file)
index 0000000..8536ef2
--- /dev/null
@@ -0,0 +1,169 @@
+# Copyright (c) 2022 Intel 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/wireguard/wireguard.robot
+|
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_100
+| ... | IP4FWD |  NIC_Intel-X710 | WIREGUARD | DRV_VFIO_PCI
+| ... | RXQ_SIZE_0 | TXQ_SIZE_0
+| ... | ethip4udpwireguard100tnlsw-ip4base
+|
+| Suite Setup | Setup suite topology interfaces | performance
+| Suite Teardown | Tear down suite | performance
+| Test Setup | Setup test | performance
+| Test Teardown | Tear down test | performance
+|
+| Test Template | Local Template
+|
+| Documentation | **RFC2544: Pkt throughput IPv4 WireGuard 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-UDP-WireGuard on DUT1-DUT2.
+| ... |
+| ... | - **[Cfg] DUT configuration:** DUT1 and DUT2 are configured with \
+| ... | multiple WireGuard tunnels between them. DUTs get IPv4 traffic from TG, \
+| ... | 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 WireGuard 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.src and IP.dst \
+| ... | are applied to both streams.
+| ... |
+| ... | - **[Ref] Applicable standard specifications:** RFC4303 and RFC2544.
+
+
+*** Variables ***
+| @{plugins_to_enable}= | dpdk_plugin.so | perfmon_plugin.so
+| ... | crypto_native_plugin.so | crypto_ipsecmb_plugin.so
+| ... | wireguard_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}= | ${60}
+| ${tg_if1_ip4}= | 192.168.10.2
+| ${dut1_if1_ip4}= | 192.168.10.1
+| ${dut1_if2_ip4}= | 200.0.0.1
+| ${dut2_if1_ip4}= | 200.0.0.2
+| ${dut2_if2_ip4}= | 192.168.20.1
+| ${tg_if2_ip4}= | 192.168.20.2
+| ${wg_if1_ip4}= | 1.0.0.1
+| ${wg_if2_ip4}= | 1.0.0.2
+| ${raddr_ip4}= | 20.0.0.0
+| ${laddr_ip4}= | 10.0.0.0
+| ${n_tunnels}= | ${100}
+| ${listen_port}= | ${51820}
+| ${keepalive_time}= | ${256}
+# Traffic profile:
+| ${traffic_profile}= | trex-stl-3n-ethip4-ip4src${n_tunnels}ip4dst${n_tunnels}
+
+*** Keywords ***
+| Local Template
+| | [Documentation]
+| | ... | - **[Cfg]** DUT runs wireguard tunnel config. \
+| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
+| | ... | - **[Ver]** Measure NDR and PDR values using MLRsearch algorithm.
+| |
+| | ... | *Arguments:*
+| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
+| | ... | Type: integer, string
+| | ... | - phy_cores - Number of physical cores. Type: integer
+| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
+| |
+| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
+| |
+| | Set Test Variable | \${frame_size}
+| |
+| | Given Set Max Rate And Jumbo
+| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
+| | And Pre-initialize layer driver | ${nic_driver}
+| | And Apply startup configuration on all VPP DUTs
+| | When Initialize layer driver | ${nic_driver}
+| | And Initialize layer interface
+| | And Initialize WireGuard in 3-node circular topology
+| | And VPP WireGuard Create Tunnel Interfaces On DUTs
+| | ... | ${nodes} | ${DUT1_${int}2}[0] | ${DUT2_${int}1}[0]
+| | ... | ${dut1_if2_ip4} | ${dut2_if1_ip4} | ${DUT1_${int}2_mac}[0]
+| | ... | ${DUT2_${int}1_mac}[0] | ${wg_if1_ip4} | ${wg_if2_ip4}
+| | ... | ${n_tunnels} | ${listen_port} | ${keepalive_time}
+| | ... | ${laddr_ip4} | ${raddr_ip4}
+| | Then Find NDR and PDR intervals using optimized search
+
+*** Test Cases ***
+| 64B-1c-ethip4udpwireguard100tnlsw-ip4base-ndrpdr
+| | [Tags] | 64B | 1C
+| | frame_size=${64} | phy_cores=${1}
+
+| 64B-2c-ethip4udpwireguard100tnlsw-ip4base-ndrpdr
+| | [Tags] | 64B | 2C
+| | frame_size=${64} | phy_cores=${2}
+
+| 64B-4c-ethip4udpwireguard100tnlsw-ip4base-ndrpdr
+| | [Tags] | 64B | 4C
+| | frame_size=${64} | phy_cores=${4}
+
+| 1518B-1c-ethip4udpwireguard100tnlsw-ip4base-ndrpdr
+| | [Tags] | 1518B | 1C
+| | frame_size=${1518} | phy_cores=${1}
+
+| 1518B-2c-ethip4udpwireguard100tnlsw-ip4base-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-4c-ethip4udpwireguard100tnlsw-ip4base-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-1c-ethip4udpwireguard100tnlsw-ip4base-ndrpdr
+| | [Tags] | 9000B | 1C
+| | frame_size=${9000} | phy_cores=${1}
+
+| 9000B-2c-ethip4udpwireguard100tnlsw-ip4base-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-4c-ethip4udpwireguard100tnlsw-ip4base-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
+
+| IMIX-1c-ethip4udpwireguard100tnlsw-ip4base-ndrpdr
+| | [Tags] | IMIX | 1C
+| | frame_size=IMIX_v4_1 | phy_cores=${1}
+
+| IMIX-2c-ethip4udpwireguard100tnlsw-ip4base-ndrpdr
+| | [Tags] | IMIX | 2C
+| | frame_size=IMIX_v4_1 | phy_cores=${2}
+
+| IMIX-4c-ethip4udpwireguard100tnlsw-ip4base-ndrpdr
+| | [Tags] | IMIX | 4C
+| | frame_size=IMIX_v4_1 | phy_cores=${4}
index 13d9551..5f611a8 100644 (file)
 | ${dut2_if1_ip4}= | 200.0.0.2
 | ${dut2_if2_ip4}= | 192.168.20.1
 | ${tg_if2_ip4}= | 192.168.20.2
-| ${wg_if1_ip4}= | 192.168.110.1
-| ${wg_if2_ip4}= | 192.168.120.1
+| ${wg_if1_ip4}= | 1.0.0.1
+| ${wg_if2_ip4}= | 1.0.0.2
 | ${raddr_ip4}= | 20.0.0.0
 | ${laddr_ip4}= | 10.0.0.0
 | ${n_tunnels}= | ${1}
 | ${listen_port}= | ${51820}
 | ${keepalive_time}= | ${256}
 # Traffic profile:
-| ${traffic_profile}= | trex-stl-3n-ethip4-ip4dst${n_tunnels}
+| ${traffic_profile}= | trex-stl-3n-ethip4-ip4src${n_tunnels}ip4dst${n_tunnels}
 
 *** Keywords ***
 | Local Template
 | | When Initialize layer driver | ${nic_driver}
 | | And Initialize layer interface
 | | And Initialize WireGuard in 3-node circular topology
-| | And VPP WireGuard Create Tunnel Interface On DUTs
+| | And VPP WireGuard Create Tunnel Interfaces On DUTs
 | | ... | ${nodes} | ${DUT1_${int}2}[0] | ${DUT2_${int}1}[0]
 | | ... | ${dut1_if2_ip4} | ${dut2_if1_ip4} | ${DUT1_${int}2_mac}[0]
 | | ... | ${DUT2_${int}1_mac}[0] | ${wg_if1_ip4} | ${wg_if2_ip4}
diff --git a/tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4udpwireguard2tnlsw-ip4base-ndrpdr.robot b/tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4udpwireguard2tnlsw-ip4base-ndrpdr.robot
new file mode 100644 (file)
index 0000000..05e642d
--- /dev/null
@@ -0,0 +1,169 @@
+# Copyright (c) 2022 Intel 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/wireguard/wireguard.robot
+|
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_2
+| ... | IP4FWD |  NIC_Intel-X710 | WIREGUARD | DRV_VFIO_PCI
+| ... | RXQ_SIZE_0 | TXQ_SIZE_0
+| ... | ethip4udpwireguard2tnlsw-ip4base
+|
+| Suite Setup | Setup suite topology interfaces | performance
+| Suite Teardown | Tear down suite | performance
+| Test Setup | Setup test | performance
+| Test Teardown | Tear down test | performance
+|
+| Test Template | Local Template
+|
+| Documentation | **RFC2544: Pkt throughput IPv4 WireGuard 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-UDP-WireGuard on DUT1-DUT2.
+| ... |
+| ... | - **[Cfg] DUT configuration:** DUT1 and DUT2 are configured with \
+| ... | multiple WireGuard tunnels between them. DUTs get IPv4 traffic from TG, \
+| ... | 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 WireGuard 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.src and IP.dst \
+| ... | are applied to both streams.
+| ... |
+| ... | - **[Ref] Applicable standard specifications:** RFC4303 and RFC2544.
+
+
+*** Variables ***
+| @{plugins_to_enable}= | dpdk_plugin.so | perfmon_plugin.so
+| ... | crypto_native_plugin.so | crypto_ipsecmb_plugin.so
+| ... | wireguard_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}= | ${60}
+| ${tg_if1_ip4}= | 192.168.10.2
+| ${dut1_if1_ip4}= | 192.168.10.1
+| ${dut1_if2_ip4}= | 200.0.0.1
+| ${dut2_if1_ip4}= | 200.0.0.2
+| ${dut2_if2_ip4}= | 192.168.20.1
+| ${tg_if2_ip4}= | 192.168.20.2
+| ${wg_if1_ip4}= | 1.0.0.1
+| ${wg_if2_ip4}= | 1.0.0.2
+| ${raddr_ip4}= | 20.0.0.0
+| ${laddr_ip4}= | 10.0.0.0
+| ${n_tunnels}= | ${2}
+| ${listen_port}= | ${51820}
+| ${keepalive_time}= | ${256}
+# Traffic profile:
+| ${traffic_profile}= | trex-stl-3n-ethip4-ip4src${n_tunnels}ip4dst${n_tunnels}
+
+*** Keywords ***
+| Local Template
+| | [Documentation]
+| | ... | - **[Cfg]** DUT runs wireguard tunnel config. \
+| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
+| | ... | - **[Ver]** Measure NDR and PDR values using MLRsearch algorithm.
+| |
+| | ... | *Arguments:*
+| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
+| | ... | Type: integer, string
+| | ... | - phy_cores - Number of physical cores. Type: integer
+| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
+| |
+| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
+| |
+| | Set Test Variable | \${frame_size}
+| |
+| | Given Set Max Rate And Jumbo
+| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
+| | And Pre-initialize layer driver | ${nic_driver}
+| | And Apply startup configuration on all VPP DUTs
+| | When Initialize layer driver | ${nic_driver}
+| | And Initialize layer interface
+| | And Initialize WireGuard in 3-node circular topology
+| | And VPP WireGuard Create Tunnel Interfaces On DUTs
+| | ... | ${nodes} | ${DUT1_${int}2}[0] | ${DUT2_${int}1}[0]
+| | ... | ${dut1_if2_ip4} | ${dut2_if1_ip4} | ${DUT1_${int}2_mac}[0]
+| | ... | ${DUT2_${int}1_mac}[0] | ${wg_if1_ip4} | ${wg_if2_ip4}
+| | ... | ${n_tunnels} | ${listen_port} | ${keepalive_time}
+| | ... | ${laddr_ip4} | ${raddr_ip4}
+| | Then Find NDR and PDR intervals using optimized search
+
+*** Test Cases ***
+| 64B-1c-ethip4udpwireguard2tnlsw-ip4base-ndrpdr
+| | [Tags] | 64B | 1C
+| | frame_size=${64} | phy_cores=${1}
+
+| 64B-2c-ethip4udpwireguard2tnlsw-ip4base-ndrpdr
+| | [Tags] | 64B | 2C
+| | frame_size=${64} | phy_cores=${2}
+
+| 64B-4c-ethip4udpwireguard2tnlsw-ip4base-ndrpdr
+| | [Tags] | 64B | 4C
+| | frame_size=${64} | phy_cores=${4}
+
+| 1518B-1c-ethip4udpwireguard2tnlsw-ip4base-ndrpdr
+| | [Tags] | 1518B | 1C
+| | frame_size=${1518} | phy_cores=${1}
+
+| 1518B-2c-ethip4udpwireguard2tnlsw-ip4base-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-4c-ethip4udpwireguard2tnlsw-ip4base-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-1c-ethip4udpwireguard2tnlsw-ip4base-ndrpdr
+| | [Tags] | 9000B | 1C
+| | frame_size=${9000} | phy_cores=${1}
+
+| 9000B-2c-ethip4udpwireguard2tnlsw-ip4base-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-4c-ethip4udpwireguard2tnlsw-ip4base-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
+
+| IMIX-1c-ethip4udpwireguard2tnlsw-ip4base-ndrpdr
+| | [Tags] | IMIX | 1C
+| | frame_size=IMIX_v4_1 | phy_cores=${1}
+
+| IMIX-2c-ethip4udpwireguard2tnlsw-ip4base-ndrpdr
+| | [Tags] | IMIX | 2C
+| | frame_size=IMIX_v4_1 | phy_cores=${2}
+
+| IMIX-4c-ethip4udpwireguard2tnlsw-ip4base-ndrpdr
+| | [Tags] | IMIX | 4C
+| | frame_size=IMIX_v4_1 | phy_cores=${4}
diff --git a/tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4udpwireguard4tnlsw-ip4base-ndrpdr.robot b/tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4udpwireguard4tnlsw-ip4base-ndrpdr.robot
new file mode 100644 (file)
index 0000000..48af908
--- /dev/null
@@ -0,0 +1,169 @@
+# Copyright (c) 2022 Intel 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/wireguard/wireguard.robot
+|
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_4
+| ... | IP4FWD |  NIC_Intel-X710 | WIREGUARD | DRV_VFIO_PCI
+| ... | RXQ_SIZE_0 | TXQ_SIZE_0
+| ... | ethip4udpwireguard4tnlsw-ip4base
+|
+| Suite Setup | Setup suite topology interfaces | performance
+| Suite Teardown | Tear down suite | performance
+| Test Setup | Setup test | performance
+| Test Teardown | Tear down test | performance
+|
+| Test Template | Local Template
+|
+| Documentation | **RFC2544: Pkt throughput IPv4 WireGuard 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-UDP-WireGuard on DUT1-DUT2.
+| ... |
+| ... | - **[Cfg] DUT configuration:** DUT1 and DUT2 are configured with \
+| ... | multiple WireGuard tunnels between them. DUTs get IPv4 traffic from TG, \
+| ... | 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 WireGuard 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.src and IP.dst \
+| ... | are applied to both streams.
+| ... |
+| ... | - **[Ref] Applicable standard specifications:** RFC4303 and RFC2544.
+
+
+*** Variables ***
+| @{plugins_to_enable}= | dpdk_plugin.so | perfmon_plugin.so
+| ... | crypto_native_plugin.so | crypto_ipsecmb_plugin.so
+| ... | wireguard_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}= | ${60}
+| ${tg_if1_ip4}= | 192.168.10.2
+| ${dut1_if1_ip4}= | 192.168.10.1
+| ${dut1_if2_ip4}= | 200.0.0.1
+| ${dut2_if1_ip4}= | 200.0.0.2
+| ${dut2_if2_ip4}= | 192.168.20.1
+| ${tg_if2_ip4}= | 192.168.20.2
+| ${wg_if1_ip4}= | 1.0.0.1
+| ${wg_if2_ip4}= | 1.0.0.2
+| ${raddr_ip4}= | 20.0.0.0
+| ${laddr_ip4}= | 10.0.0.0
+| ${n_tunnels}= | ${4}
+| ${listen_port}= | ${51820}
+| ${keepalive_time}= | ${256}
+# Traffic profile:
+| ${traffic_profile}= | trex-stl-3n-ethip4-ip4src${n_tunnels}ip4dst${n_tunnels}
+
+*** Keywords ***
+| Local Template
+| | [Documentation]
+| | ... | - **[Cfg]** DUT runs wireguard tunnel config. \
+| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
+| | ... | - **[Ver]** Measure NDR and PDR values using MLRsearch algorithm.
+| |
+| | ... | *Arguments:*
+| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
+| | ... | Type: integer, string
+| | ... | - phy_cores - Number of physical cores. Type: integer
+| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
+| |
+| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
+| |
+| | Set Test Variable | \${frame_size}
+| |
+| | Given Set Max Rate And Jumbo
+| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
+| | And Pre-initialize layer driver | ${nic_driver}
+| | And Apply startup configuration on all VPP DUTs
+| | When Initialize layer driver | ${nic_driver}
+| | And Initialize layer interface
+| | And Initialize WireGuard in 3-node circular topology
+| | And VPP WireGuard Create Tunnel Interfaces On DUTs
+| | ... | ${nodes} | ${DUT1_${int}2}[0] | ${DUT2_${int}1}[0]
+| | ... | ${dut1_if2_ip4} | ${dut2_if1_ip4} | ${DUT1_${int}2_mac}[0]
+| | ... | ${DUT2_${int}1_mac}[0] | ${wg_if1_ip4} | ${wg_if2_ip4}
+| | ... | ${n_tunnels} | ${listen_port} | ${keepalive_time}
+| | ... | ${laddr_ip4} | ${raddr_ip4}
+| | Then Find NDR and PDR intervals using optimized search
+
+*** Test Cases ***
+| 64B-1c-ethip4udpwireguard4tnlsw-ip4base-ndrpdr
+| | [Tags] | 64B | 1C
+| | frame_size=${64} | phy_cores=${1}
+
+| 64B-2c-ethip4udpwireguard4tnlsw-ip4base-ndrpdr
+| | [Tags] | 64B | 2C
+| | frame_size=${64} | phy_cores=${2}
+
+| 64B-4c-ethip4udpwireguard4tnlsw-ip4base-ndrpdr
+| | [Tags] | 64B | 4C
+| | frame_size=${64} | phy_cores=${4}
+
+| 1518B-1c-ethip4udpwireguard4tnlsw-ip4base-ndrpdr
+| | [Tags] | 1518B | 1C
+| | frame_size=${1518} | phy_cores=${1}
+
+| 1518B-2c-ethip4udpwireguard4tnlsw-ip4base-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-4c-ethip4udpwireguard4tnlsw-ip4base-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-1c-ethip4udpwireguard4tnlsw-ip4base-ndrpdr
+| | [Tags] | 9000B | 1C
+| | frame_size=${9000} | phy_cores=${1}
+
+| 9000B-2c-ethip4udpwireguard4tnlsw-ip4base-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-4c-ethip4udpwireguard4tnlsw-ip4base-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
+
+| IMIX-1c-ethip4udpwireguard4tnlsw-ip4base-ndrpdr
+| | [Tags] | IMIX | 1C
+| | frame_size=IMIX_v4_1 | phy_cores=${1}
+
+| IMIX-2c-ethip4udpwireguard4tnlsw-ip4base-ndrpdr
+| | [Tags] | IMIX | 2C
+| | frame_size=IMIX_v4_1 | phy_cores=${2}
+
+| IMIX-4c-ethip4udpwireguard4tnlsw-ip4base-ndrpdr
+| | [Tags] | IMIX | 4C
+| | frame_size=IMIX_v4_1 | phy_cores=${4}
diff --git a/tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4udpwireguard8tnlsw-ip4base-ndrpdr.robot b/tests/vpp/perf/ip4_tunnels/10ge2p1x710-ethip4udpwireguard8tnlsw-ip4base-ndrpdr.robot
new file mode 100644 (file)
index 0000000..1f321e0
--- /dev/null
@@ -0,0 +1,169 @@
+# Copyright (c) 2022 Intel 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/wireguard/wireguard.robot
+|
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | TNL_8
+| ... | IP4FWD |  NIC_Intel-X710 | WIREGUARD | DRV_VFIO_PCI
+| ... | RXQ_SIZE_0 | TXQ_SIZE_0
+| ... | ethip4udpwireguard8tnlsw-ip4base
+|
+| Suite Setup | Setup suite topology interfaces | performance
+| Suite Teardown | Tear down suite | performance
+| Test Setup | Setup test | performance
+| Test Teardown | Tear down test | performance
+|
+| Test Template | Local Template
+|
+| Documentation | **RFC2544: Pkt throughput IPv4 WireGuard 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-UDP-WireGuard on DUT1-DUT2.
+| ... |
+| ... | - **[Cfg] DUT configuration:** DUT1 and DUT2 are configured with \
+| ... | multiple WireGuard tunnels between them. DUTs get IPv4 traffic from TG, \
+| ... | 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 WireGuard 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.src and IP.dst \
+| ... | are applied to both streams.
+| ... |
+| ... | - **[Ref] Applicable standard specifications:** RFC4303 and RFC2544.
+
+
+*** Variables ***
+| @{plugins_to_enable}= | dpdk_plugin.so | perfmon_plugin.so
+| ... | crypto_native_plugin.so | crypto_ipsecmb_plugin.so
+| ... | wireguard_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}= | ${60}
+| ${tg_if1_ip4}= | 192.168.10.2
+| ${dut1_if1_ip4}= | 192.168.10.1
+| ${dut1_if2_ip4}= | 200.0.0.1
+| ${dut2_if1_ip4}= | 200.0.0.2
+| ${dut2_if2_ip4}= | 192.168.20.1
+| ${tg_if2_ip4}= | 192.168.20.2
+| ${wg_if1_ip4}= | 1.0.0.1
+| ${wg_if2_ip4}= | 1.0.0.2
+| ${raddr_ip4}= | 20.0.0.0
+| ${laddr_ip4}= | 10.0.0.0
+| ${n_tunnels}= | ${8}
+| ${listen_port}= | ${51820}
+| ${keepalive_time}= | ${256}
+# Traffic profile:
+| ${traffic_profile}= | trex-stl-3n-ethip4-ip4src${n_tunnels}ip4dst${n_tunnels}
+
+*** Keywords ***
+| Local Template
+| | [Documentation]
+| | ... | - **[Cfg]** DUT runs wireguard tunnel config. \
+| | ... | Each DUT uses ${phy_cores} physical core(s) for worker threads.
+| | ... | - **[Ver]** Measure NDR and PDR values using MLRsearch algorithm.
+| |
+| | ... | *Arguments:*
+| | ... | - frame_size - Framesize in Bytes in integer or string (IMIX_v4_1).
+| | ... | Type: integer, string
+| | ... | - phy_cores - Number of physical cores. Type: integer
+| | ... | - rxq - Number of RX queues, default value: ${None}. Type: integer
+| |
+| | [Arguments] | ${frame_size} | ${phy_cores} | ${rxq}=${None}
+| |
+| | Set Test Variable | \${frame_size}
+| |
+| | Given Set Max Rate And Jumbo
+| | And Add worker threads to all DUTs | ${phy_cores} | ${rxq}
+| | And Pre-initialize layer driver | ${nic_driver}
+| | And Apply startup configuration on all VPP DUTs
+| | When Initialize layer driver | ${nic_driver}
+| | And Initialize layer interface
+| | And Initialize WireGuard in 3-node circular topology
+| | And VPP WireGuard Create Tunnel Interfaces On DUTs
+| | ... | ${nodes} | ${DUT1_${int}2}[0] | ${DUT2_${int}1}[0]
+| | ... | ${dut1_if2_ip4} | ${dut2_if1_ip4} | ${DUT1_${int}2_mac}[0]
+| | ... | ${DUT2_${int}1_mac}[0] | ${wg_if1_ip4} | ${wg_if2_ip4}
+| | ... | ${n_tunnels} | ${listen_port} | ${keepalive_time}
+| | ... | ${laddr_ip4} | ${raddr_ip4}
+| | Then Find NDR and PDR intervals using optimized search
+
+*** Test Cases ***
+| 64B-1c-ethip4udpwireguard8tnlsw-ip4base-ndrpdr
+| | [Tags] | 64B | 1C
+| | frame_size=${64} | phy_cores=${1}
+
+| 64B-2c-ethip4udpwireguard8tnlsw-ip4base-ndrpdr
+| | [Tags] | 64B | 2C
+| | frame_size=${64} | phy_cores=${2}
+
+| 64B-4c-ethip4udpwireguard8tnlsw-ip4base-ndrpdr
+| | [Tags] | 64B | 4C
+| | frame_size=${64} | phy_cores=${4}
+
+| 1518B-1c-ethip4udpwireguard8tnlsw-ip4base-ndrpdr
+| | [Tags] | 1518B | 1C
+| | frame_size=${1518} | phy_cores=${1}
+
+| 1518B-2c-ethip4udpwireguard8tnlsw-ip4base-ndrpdr
+| | [Tags] | 1518B | 2C
+| | frame_size=${1518} | phy_cores=${2}
+
+| 1518B-4c-ethip4udpwireguard8tnlsw-ip4base-ndrpdr
+| | [Tags] | 1518B | 4C
+| | frame_size=${1518} | phy_cores=${4}
+
+| 9000B-1c-ethip4udpwireguard8tnlsw-ip4base-ndrpdr
+| | [Tags] | 9000B | 1C
+| | frame_size=${9000} | phy_cores=${1}
+
+| 9000B-2c-ethip4udpwireguard8tnlsw-ip4base-ndrpdr
+| | [Tags] | 9000B | 2C
+| | frame_size=${9000} | phy_cores=${2}
+
+| 9000B-4c-ethip4udpwireguard8tnlsw-ip4base-ndrpdr
+| | [Tags] | 9000B | 4C
+| | frame_size=${9000} | phy_cores=${4}
+
+| IMIX-1c-ethip4udpwireguard8tnlsw-ip4base-ndrpdr
+| | [Tags] | IMIX | 1C
+| | frame_size=IMIX_v4_1 | phy_cores=${1}
+
+| IMIX-2c-ethip4udpwireguard8tnlsw-ip4base-ndrpdr
+| | [Tags] | IMIX | 2C
+| | frame_size=IMIX_v4_1 | phy_cores=${2}
+
+| IMIX-4c-ethip4udpwireguard8tnlsw-ip4base-ndrpdr
+| | [Tags] | IMIX | 4C
+| | frame_size=IMIX_v4_1 | phy_cores=${4}