fix: start testpmd and l3fwd in 3 cycles 81/36581/20
authorViliam Luc <vluc@cisco.com>
Fri, 1 Jul 2022 08:53:51 +0000 (10:53 +0200)
committerTibor Frank <tifrank@cisco.com>
Wed, 27 Jul 2022 07:19:30 +0000 (07:19 +0000)
Signed-off-by: Viliam Luc <vluc@cisco.com>
Change-Id: I935ee5cf5bd7e760ef29fdc338f981e4e7cc333f

resources/libraries/bash/function/dpdk.sh
resources/libraries/python/DPDK/L3fwdCheck.py [deleted file]
resources/libraries/python/DPDK/L3fwdTest.py
resources/libraries/python/DPDK/TestpmdCheck.py [deleted file]
resources/libraries/python/DPDK/TestpmdTest.py
resources/libraries/robot/dpdk/default.robot [deleted file]
tests/dpdk/perf/10ge2p1x710-eth-l2xcbase-testpmd-ndrpdr.robot
tests/dpdk/perf/10ge2p1x710-ethip4-ip4base-l3fwd-ndrpdr.robot
tests/dpdk/perf/2n1l-10ge2p1x710-eth-l2xcbase-testpmd-ndrpdr.robot
tests/dpdk/perf/2n1l-10ge2p1x710-ethip4-ip4base-l3fwd-ndrpdr.robot

index bf1e8e3..f013683 100644 (file)
@@ -264,8 +264,7 @@ function dpdk_l3fwd_check () {
 
     for attempt in {1..60}; do
         echo "Checking if l3fwd state is ok, attempt nr ${attempt}"
-        if fgrep "Port 0 Link up" screenlog.0 && \
-        fgrep "Port 1 Link up" screenlog.0; then
+        if fgrep "Link up" screenlog.0; then
             cat screenlog.0
             dpdk_l3fwd_pid
             exit 0
@@ -353,8 +352,7 @@ function dpdk_testpmd_check () {
 
     for attempt in {1..60}; do
         echo "Checking if testpmd links state changed, attempt nr ${attempt}"
-        if fgrep "Port 0: link state change event" screenlog.0 && \
-        fgrep "Port 1: link state change event" screenlog.0; then
+        if fgrep "link state change event" screenlog.0; then
             cat screenlog.0
             exit 0
         fi
diff --git a/resources/libraries/python/DPDK/L3fwdCheck.py b/resources/libraries/python/DPDK/L3fwdCheck.py
deleted file mode 100644 (file)
index a2f3ce6..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright (c) 2022 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.
-
-from resources.libraries.python.Constants import Constants
-from resources.libraries.python.DpdkUtil import DpdkUtil
-from resources.libraries.python.ssh import exec_cmd_no_error, exec_cmd
-from resources.libraries.python.topology import NodeType, Topology
-
-
-class L3fwdCheck:
-    """Test the DPDK l3fwd is ready."""
-
-    @staticmethod
-    def check_l3fwd(node):
-        """
-        Execute the l3fwd check on the DUT node.
-
-        :param node: DUT node.
-        :type node: dict
-        :raises RuntimeError: If the script "check_l3fwd.sh" fails.
-        """
-        if node[u"type"] == NodeType.DUT:
-            command = f"{Constants.REMOTE_FW_DIR}/{Constants.RESOURCES_LIB_SH}"\
-                f"/entry/check_l3fwd.sh"
-            message = f"Failed to check l3fwd state at node {node['host']}"
-            exec_cmd_no_error(node, command, timeout=1800, message=message)
index 1c6e618..2ceeab2 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 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:
 # limitations under the License.
 
 """
-This module exists to provide the l3fwd test for DPDK on topology nodes.
+This module exists to start l3fwd on topology nodes.
 """
 
+from robot.libraries.BuiltIn import BuiltIn
 from resources.libraries.python.Constants import Constants
+from resources.libraries.python.CpuUtils import CpuUtils
 from resources.libraries.python.DpdkUtil import DpdkUtil
 from resources.libraries.python.ssh import exec_cmd_no_error, exec_cmd
 from resources.libraries.python.topology import NodeType, Topology
 
-
 NB_PORTS = 2
 
+
 class L3fwdTest:
-    """Test the DPDK l3fwd performance."""
+    """This class start l3fwd on topology nodes and check if properly started.
+    """
+
+    @staticmethod
+    def start_l3fwd_on_all_duts(
+            nodes, topology_info, phy_cores, rx_queues=None, jumbo_frames=False,
+            rxd=None, txd=None):
+        """
+        Execute the l3fwd on all dut nodes.
+
+        :param nodes: All the nodes info from the topology file.
+        :param topology_info: All the info from the topology file.
+        :param phy_cores: Number of physical cores to use.
+        :param rx_queues: Number of RX queues.
+        :param jumbo_frames: Jumbo frames on/off.
+        :param rxd: Number of RX descriptors.
+        :param txd: Number of TX descriptors.
+
+        :type nodes: dict
+        :type topology_info: dict
+        :type phy_cores: int
+        :type rx_queues: int
+        :type jumbo_frames: bool
+        :type rxd: int
+        :type txd: int
+        :raises RuntimeError: If bash return code is not 0.
+        """
+        cpu_count_int = dp_count_int = int(phy_cores)
+        dp_cores = cpu_count_int+1
+        for node in nodes:
+            if u"DUT" in node:
+                compute_resource_info = CpuUtils.get_affinity_vswitch(
+                    nodes, node, phy_cores, rx_queues=rx_queues,
+                    rxd=rxd, txd=txd
+                )
+                if dp_count_int > 1:
+                    BuiltIn().set_tags('MTHREAD')
+                else:
+                    BuiltIn().set_tags('STHREAD')
+                BuiltIn().set_tags(
+                    f"{dp_count_int}T{cpu_count_int}C"
+                )
+
+                cpu_dp = compute_resource_info[u"cpu_dp"]
+                rxq_count_int = compute_resource_info[u"rxq_count_int"]
+                if1 = topology_info[f"{node}_pf1"][0]
+                if2 = topology_info[f"{node}_pf2"][0]
+                L3fwdTest.start_l3fwd(
+                    nodes, nodes[node], if1=if1, if2=if2, lcores_list=cpu_dp,
+                    nb_cores=dp_count_int, queue_nums=rxq_count_int,
+                    jumbo_frames=jumbo_frames
+                )
+        for node in nodes:
+            if u"DUT" in node:
+                for i in range(3):
+                    try:
+                        L3fwdTest.check_l3fwd(nodes[node])
+                        break
+                    except RuntimeError:
+                        L3fwdTest.start_l3fwd(
+                            nodes, nodes[node], if1=if1, if2=if2,
+                            lcores_list=cpu_dp, nb_cores=dp_count_int,
+                            queue_nums=rxq_count_int, jumbo_frames=jumbo_frames
+                        )
+                else:
+                    message = f"Failed to start l3fwd at node {node}"
+                    raise RuntimeError(message)
 
     @staticmethod
     def start_l3fwd(
@@ -100,6 +168,20 @@ class L3fwdTest:
             message = f"Failed to execute l3fwd test at node {node['host']}"
             exec_cmd_no_error(node, command, timeout=1800, message=message)
 
+    @staticmethod
+    def check_l3fwd(node):
+        """
+        Execute the l3fwd check on the DUT node.
+
+        :param node: DUT node.
+        :type node: dict
+        :raises RuntimeError: If the script "check_l3fwd.sh" fails.
+        """
+        if node[u"type"] == NodeType.DUT:
+            command = f"{Constants.REMOTE_FW_DIR}/{Constants.RESOURCES_LIB_SH}"\
+                f"/entry/check_l3fwd.sh"
+            message = "L3fwd not started properly"
+            exec_cmd_no_error(node, command, timeout=1800, message=message)
 
     @staticmethod
     def get_adj_mac(nodes, node, if1, if2):
diff --git a/resources/libraries/python/DPDK/TestpmdCheck.py b/resources/libraries/python/DPDK/TestpmdCheck.py
deleted file mode 100644 (file)
index fb6f4dc..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright (c) 2022 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.
-
-from resources.libraries.python.Constants import Constants
-from resources.libraries.python.ssh import exec_cmd_no_error
-from resources.libraries.python.topology import NodeType
-
-
-class TestpmdCheck:
-    """Test the DPDK testpmd is ready."""
-
-    @staticmethod
-    def check_testpmd(node):
-        """
-        Execute the testpmd check on the DUT node.
-
-        :param node: DUT node.
-        :type node: dict
-        :raises RuntimeError: If the script "check_testpmd.sh" fails.
-        """
-        if node[u"type"] == NodeType.DUT:
-            command = f"{Constants.REMOTE_FW_DIR}/{Constants.RESOURCES_LIB_SH}"\
-                f"/entry/check_testpmd.sh"
-            message = f"Failed to check testpmd state at node {node['host']}"
-            exec_cmd_no_error(node, command, timeout=1800, message=message)
index f88b368..091110f 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-"""This module implements functionality which sets L2 forwarding for DPDK on
-DUT nodes.
+"""
+This module exists to start testpmd on topology nodes.
 """
 
+from robot.libraries.BuiltIn import BuiltIn
 from resources.libraries.python.Constants import Constants
+from resources.libraries.python.CpuUtils import CpuUtils
 from resources.libraries.python.DpdkUtil import DpdkUtil
 from resources.libraries.python.ssh import exec_cmd_no_error
 from resources.libraries.python.topology import NodeType, Topology
 
 
 class TestpmdTest:
-    """Setup the DPDK for testpmd performance test."""
+    """
+    This class start testpmd on topology nodes and check if properly started.
+    """
+    
+    @staticmethod
+    def start_testpmd_on_all_duts(
+            nodes, topology_info, phy_cores, rx_queues=None, jumbo_frames=False,
+            rxd=None, txd=None, nic_rxq_size=None, nic_txq_size=None):
+        """
+        Start the testpmd with M worker threads and rxqueues N and jumbo
+        support frames on/off on all DUTs.
+
+        :param nodes: All the nodes info from the topology file.
+        :param topology_info: All the info from the topology file.
+        :param phy_cores: Number of physical cores to use.
+        :param rx_queues: Number of RX queues.
+        :param jumbo_frames: Jumbo frames on/off.
+        :param rxd: Number of RX descriptors.
+        :param txd: Number of TX descriptors.
+        :param nic_rxq_size: RX queue size.
+        :param nic_txq_size: TX queue size.
+
+        :type nodes: dict
+        :type topology_info: dict
+        :type phy_cores: int
+        :type rx_queues: int
+        :type jumbo_frames: bool
+        :type rxd: int
+        :type txd: int
+        :type nic_rxq_size: int
+        :type nic_txq_size: int
+        :raises RuntimeError: If bash return code is not 0.
+        """
+
+        cpu_count_int = dp_count_int = int(phy_cores)
+        dp_cores = cpu_count_int+1
+        for node in nodes:
+            if u"DUT" in node:
+                compute_resource_info = CpuUtils.get_affinity_vswitch(
+                    nodes, node, phy_cores, rx_queues=rx_queues,
+                    rxd=rxd, txd=txd
+                )
+                if dp_count_int > 1:
+                    BuiltIn().set_tags('MTHREAD')
+                else:
+                    BuiltIn().set_tags('STHREAD')
+                BuiltIn().set_tags(
+                    f"{dp_count_int}T{cpu_count_int}C"
+                )
+
+                cpu_dp = compute_resource_info[u"cpu_dp"]
+                rxq_count_int = compute_resource_info[u"rxq_count_int"]
+                if1 = topology_info[f"{node}_pf1"][0]
+                if2 = topology_info[f"{node}_pf2"][0]
+                TestpmdTest.start_testpmd(
+                    nodes[node], if1=if1, if2=if2, lcores_list=cpu_dp,
+                    nb_cores=dp_count_int, queue_nums=rxq_count_int,
+                    jumbo_frames=jumbo_frames, rxq_size=nic_rxq_size,
+                    txq_size=nic_txq_size
+                )
+        for node in nodes:
+            if u"DUT" in node:
+                for i in range(3):
+                    try:
+                        TestpmdTest.check_testpmd(nodes[node])
+                        break
+                    except RuntimeError:
+                        TestpmdTest.start_testpmd(
+                            nodes[node], if1=if1, if2=if2,
+                            lcores_list=cpu_dp, nb_cores=dp_count_int,
+                            queue_nums=rxq_count_int,
+                            jumbo_frames=jumbo_frames,
+                            rxq_size=nic_rxq_size, txq_size=nic_txq_size
+                        )
+                else:
+                    message = f"Failed to start testpmd at node {node}"
+                    raise RuntimeError(message)
 
     @staticmethod
     def start_testpmd(
@@ -45,7 +123,7 @@ class TestpmdTest:
         :type if1: str
         :type if2: str
         :type lcores_list: str
-        :type nb_cores: str
+        :type nb_cores: int
         :type queue_nums: str
         :type jumbo_frames: bool
         :type rxq_size: int
@@ -83,3 +161,18 @@ class TestpmdTest:
                 f"/entry/run_testpmd.sh \"{testpmd_args}\""
             message = f"Failed to execute testpmd at node {node['host']}"
             exec_cmd_no_error(node, command, timeout=1800, message=message)
+
+    @staticmethod
+    def check_testpmd(node):
+        """
+        Execute the testpmd check on the DUT node.
+
+        :param node: DUT node.
+        :type node: dict
+        :raises RuntimeError: If the script "check_testpmd.sh" fails.
+        """
+        if node[u"type"] == NodeType.DUT:
+            command = f"{Constants.REMOTE_FW_DIR}/{Constants.RESOURCES_LIB_SH}"\
+                      f"/entry/check_testpmd.sh"
+            message = "Testpmd not started properly"
+            exec_cmd_no_error(node, command, timeout=1800, message=message)
diff --git a/resources/libraries/robot/dpdk/default.robot b/resources/libraries/robot/dpdk/default.robot
deleted file mode 100644 (file)
index b63f245..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-# Copyright (c) 2022 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 ***
-| Library | resources.libraries.python.InterfaceUtil
-| Library | resources.libraries.python.CpuUtils
-| Library | resources.libraries.python.DPDK.TestpmdTest
-| Library | resources.libraries.python.DPDK.TestpmdCheck
-| Library | resources.libraries.python.DPDK.L3fwdTest
-| Library | resources.libraries.python.DPDK.L3fwdCheck
-| Library | Collections
-
-*** Keywords ***
-| Start testpmd on all DUTs
-| | [Documentation] | Start the testpmd with M worker threads and rxqueues N and
-| | ... | jumbo support frames on/off on all DUTs.
-| |
-| | ... | *Arguments:*
-| | ... | - phy_cores - Number of physical cores to use. Type: integer
-| | ... | - rx_queues - Number of RX queues. Type: integer
-| | ... | - jumbo_frames - Jumbo frames on/off: boolean
-| | ... | - rxd - Number of RX descriptors. Type: integer
-| | ... | - txd - Number of TX descriptors. Type: integer
-| |
-| | ... | *Example:*
-| |
-| | ... | \| Start testpmd on all DUTs \| ${1} \| ${1} \| ${False} \|
-| |
-| | [Arguments] | ${phy_cores} | ${rx_queues}=${None} | ${jumbo_frames}=${False}
-| | ... | ${rxd}=${None} | ${txd}=${None}
-| |
-| | ${cpu_count_int} | Convert to Integer | ${phy_cores}
-| | ${dp_count_int} | Convert to Integer | ${phy_cores}
-| | ${dp_cores}= | Evaluate | ${cpu_count_int}+1
-| | FOR | ${dut} | IN | @{duts}
-| | | &{compute_resource_info}= | Get Affinity Vswitch
-| | | ... | ${nodes} | ${dut} | ${phy_cores} | rx_queues=${rx_queues}
-| | | ... | rxd=${rxd} | txd=${txd}
-| | | Set Test Variable | &{compute_resource_info}
-| | | Create compute resources variables
-| | | Start testpmd
-| | | ... | ${nodes['${dut}']} | ${${dut}_pf1}[0] | ${${dut}_pf2}[0]
-| | | ... | ${cpu_dp} | ${dp_count_int} | ${rxq_count_int} | ${jumbo_frames}
-| | | ... | ${nic_rxq_size} | ${nic_txq_size}
-| | FOR | ${dut} | IN | @{duts}
-| | | Check testpmd
-| | | ... | ${nodes['${dut}']}
-| | END
-
-| Start l3fwd on all DUTs
-| | [Documentation] | Start the l3fwd with M worker threads and rxqueues N and
-| | ... | jumbo support frames on/off on all DUTs.
-| |
-| | ... | *Arguments:*
-| | ... | - phy_cores - Number of physical cores to use. Type: integer
-| | ... | - rx_queues - Number of RX queues. Type: integer
-| | ... | - jumbo_frames - Jumbo frames on/off: boolean
-| | ... | - rxd - Number of RX descriptors. Type: integer
-| | ... | - txd - Number of TX descriptors. Type: integer
-| |
-| | ... | *Example:*
-| |
-| | ... | \| Start l3fwd on all DUTs \| ${1} \| ${1} \| ${False} \|
-| |
-| | [Arguments] | ${phy_cores} | ${rx_queues}=${None} | ${jumbo_frames}=${False}
-| | ... | ${rxd}=${None} | ${txd}=${None}
-| |
-| | ${cpu_count_int} | Convert to Integer | ${phy_cores}
-| | ${dp_count_int} | Convert to Integer | ${phy_cores}
-| | ${dp_cores}= | Evaluate | ${cpu_count_int}+1
-| | FOR | ${dut} | IN | @{duts}
-| | | &{compute_resource_info}= | Get Affinity Vswitch
-| | | ... | ${nodes} | ${dut} | ${phy_cores} | rx_queues=${rx_queues}
-| | | ... | rxd=${rxd} | txd=${txd}
-| | | Set Test Variable | &{compute_resource_info}
-| | | Create compute resources variables
-| | | Start l3fwd
-| | | ... | ${nodes} | ${nodes['${dut}']} | ${${dut}_pf1}[0] | ${${dut}_pf2}[0]
-| | | ... | ${cpu_dp} | ${dp_count_int} | ${rxq_count_int} | ${jumbo_frames}
-| | FOR | ${dut} | IN | @{duts}
-| | | Check l3fwd
-| | | ... | ${nodes['${dut}']}
-| | END
index 6979140..f693c12 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 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:
@@ -13,8 +13,8 @@
 
 *** Settings ***
 | Resource | resources/libraries/robot/shared/default.robot
-| Resource | resources/libraries/robot/dpdk/default.robot
 | Library | resources.libraries.python.DPDK.DPDKTools
+| Library | resources.libraries.python.DPDK.TestpmdTest
 |
 | Force Tags | 3_NODE_SINGLE_LINK_TOPO | HW_ENV | PERFTEST | NDRPDR | 1NUMA
 | ... | NIC_Intel-X710 | DPDK | ETH | L2XCFWD | BASE
@@ -78,7 +78,8 @@
 | |
 | | Given Set Max Rate And Jumbo
 | | And Pre-initialize layer driver | ${nic_driver}
-| | When Start testpmd on all DUTs | ${phy_cores} | ${rxq} | ${jumbo}
+| | When Start testpmd on all DUTs | ${nodes} | ${topology_info}
+| | ... | ${phy_cores} | ${rxq} | ${jumbo}
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
index 285ce73..58d9ce7 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 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:
@@ -13,8 +13,8 @@
 
 *** Settings ***
 | Resource | resources/libraries/robot/shared/default.robot
-| Resource | resources/libraries/robot/dpdk/default.robot
 | Library | resources.libraries.python.DPDK.DPDKTools
+| Library | resources.libraries.python.DPDK.L3fwdTest
 |
 | Force Tags | 3_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | 1NUMA
 | ... | NIC_Intel-X710 | DPDK | IP4FWD | BASE | ETH
@@ -78,7 +78,8 @@
 | |
 | | Given Set Max Rate And Jumbo
 | | And Pre-initialize layer driver | ${nic_driver}
-| | When Start L3FWD on all DUTs | ${phy_cores} | ${rxq} | ${jumbo}
+| | When Start l3fwd on all DUTs | ${nodes} | ${topology_info}
+| | ... | ${phy_cores} | ${rxq} | ${jumbo}
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
index c7dd40c..0b65b37 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 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:
@@ -13,8 +13,8 @@
 
 *** Settings ***
 | Resource | resources/libraries/robot/shared/default.robot
-| Resource | resources/libraries/robot/dpdk/default.robot
 | Library | resources.libraries.python.DPDK.DPDKTools
+| Library | resources.libraries.python.DPDK.TestpmdTest
 |
 | Force Tags | 2_NODE_SINGLE_LINK_TOPO | HW_ENV | PERFTEST | NDRPDR | 1NUMA
 | ... | NIC_Intel-X710 | DPDK | ETH | L2XCFWD | BASE
@@ -78,7 +78,8 @@
 | |
 | | Given Set Max Rate And Jumbo
 | | And Pre-initialize layer driver | ${nic_driver}
-| | When Start testpmd on all DUTs | ${phy_cores} | ${rxq} | ${jumbo}
+| | When Start testpmd on all DUTs | ${nodes} | ${topology_info}
+| | ... | ${phy_cores} | ${rxq} | ${jumbo}
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***
index 8ed6dfe..1c76767 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 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:
@@ -13,8 +13,8 @@
 
 *** Settings ***
 | Resource | resources/libraries/robot/shared/default.robot
-| Resource | resources/libraries/robot/dpdk/default.robot
 | Library | resources.libraries.python.DPDK.DPDKTools
+| Library | resources.libraries.python.DPDK.L3fwdTest
 |
 | Force Tags | 2_NODE_SINGLE_LINK_TOPO | PERFTEST | HW_ENV | NDRPDR | 1NUMA
 | ... | NIC_Intel-X710 | DPDK | IP4FWD | BASE | ETH
@@ -78,7 +78,8 @@
 | |
 | | Given Set Max Rate And Jumbo
 | | And Pre-initialize layer driver | ${nic_driver}
-| | When Start L3FWD on all DUTs | ${phy_cores} | ${rxq} | ${jumbo}
+| | When Start l3fwd on all DUTs | ${nodes} | ${topology_info}
+| | ... | ${phy_cores} | ${rxq} | ${jumbo}
 | | Then Find NDR and PDR intervals using optimized search
 
 *** Test Cases ***