[PATCH v3 3/4] dts: add physical function capability check
Patrick Robb
probb at iol.unh.edu
Fri Jul 4 06:23:43 CEST 2025
On Wed, Jul 2, 2025 at 12:23 PM Dean Marx <dmarx at iol.unh.edu> wrote:
> Add a physical function NIC capability that checks
> if the test run is using PFs. Add PF capability
> requirement to all suites/cases that do not
> run without error on virtual functions.
>
> Signed-off-by: Dean Marx <dmarx at iol.unh.edu>
> ---
> dts/framework/remote_session/testpmd_shell.py | 22 +++++++++++++++++++
> dts/tests/TestSuite_dynamic_config.py | 3 ++-
> dts/tests/TestSuite_dynamic_queue_conf.py | 1 +
> dts/tests/TestSuite_l2fwd.py | 3 ++-
> dts/tests/TestSuite_mac_filter.py | 1 +
> dts/tests/TestSuite_mtu.py | 4 +++-
> dts/tests/TestSuite_pmd_buffer_scatter.py | 1 +
> dts/tests/TestSuite_port_control.py | 3 ++-
> dts/tests/TestSuite_port_stats.py | 2 ++
> dts/tests/TestSuite_promisc_support.py | 4 +++-
> dts/tests/TestSuite_rte_flow.py | 1 +
> dts/tests/TestSuite_softnic.py | 3 ++-
> dts/tests/TestSuite_uni_pkt.py | 2 ++
> 13 files changed, 44 insertions(+), 6 deletions(-)
>
> diff --git a/dts/framework/remote_session/testpmd_shell.py
> b/dts/framework/remote_session/testpmd_shell.py
> index 6d75f89969..ad8cb273dc 100644
> --- a/dts/framework/remote_session/testpmd_shell.py
> +++ b/dts/framework/remote_session/testpmd_shell.py
> @@ -2655,6 +2655,23 @@ def get_capabilities_flow_ctrl(
> else:
> unsupported_capabilities.add(NicCapability.FLOW_CTRL)
>
> + def get_capabilities_physical_function(
> + self,
> + supported_capabilities: MutableSet["NicCapability"],
> + unsupported_capabilities: MutableSet["NicCapability"],
> + ) -> None:
> + """Store capability representing a physical function test run.
> +
> + Args:
> + supported_capabilities: Supported capabilities will be added
> to this set.
> + unsupported_capabilities: Unsupported capabilities will be
> added to this set.
> + """
> + ctx = get_ctx()
> + if ctx.topology.vf_ports == []:
> + supported_capabilities.add(NicCapability.PHYSICAL_FUNCTION)
> + else:
> + unsupported_capabilities.add(NicCapability.PHYSICAL_FUNCTION)
> +
>
Another option would be to read directly from
config.virtual_functions_testrun. But, it's the same thing at the end of
the day.
>
> class NicCapability(NoAliasEnum):
> """A mapping between capability names and the associated
> :class:`TestPmdShell` methods.
> @@ -2803,6 +2820,11 @@ class NicCapability(NoAliasEnum):
> )
> #: Device supports flow ctrl.
> FLOW_CTRL: TestPmdShellNicCapability =
> (TestPmdShell.get_capabilities_flow_ctrl, None)
> + #: Device is running on a physical function.
> + PHYSICAL_FUNCTION: TestPmdShellNicCapability = (
> + TestPmdShell.get_capabilities_physical_function,
> + None,
> + )
>
> def __call__(
> self,
> diff --git a/dts/tests/TestSuite_dynamic_config.py
> b/dts/tests/TestSuite_dynamic_config.py
> index 1fce31a0b5..49f295a39a 100644
> --- a/dts/tests/TestSuite_dynamic_config.py
> +++ b/dts/tests/TestSuite_dynamic_config.py
> @@ -20,11 +20,12 @@
> from scapy.packet import Raw
>
> from framework.params.testpmd import SimpleForwardingModes
> -from framework.remote_session.testpmd_shell import TestPmdShell
> +from framework.remote_session.testpmd_shell import NicCapability,
> TestPmdShell
> from framework.test_suite import TestSuite, func_test
> from framework.testbed_model.capability import TopologyType, requires
>
>
> + at requires(NicCapability.PHYSICAL_FUNCTION)
> @requires(topology_type=TopologyType.two_links)
> class TestDynamicConfig(TestSuite):
> """Dynamic config suite.
> diff --git a/dts/tests/TestSuite_dynamic_queue_conf.py
> b/dts/tests/TestSuite_dynamic_queue_conf.py
> index 344dd540eb..f8c7dbfb71 100644
> --- a/dts/tests/TestSuite_dynamic_queue_conf.py
> +++ b/dts/tests/TestSuite_dynamic_queue_conf.py
> @@ -117,6 +117,7 @@ def wrap(self: "TestDynamicQueueConf", is_rx_testing:
> bool) -> None:
> return wrap
>
>
> + at requires(NicCapability.PHYSICAL_FUNCTION)
> class TestDynamicQueueConf(TestSuite):
> """DPDK dynamic queue configuration test suite.
>
> diff --git a/dts/tests/TestSuite_l2fwd.py b/dts/tests/TestSuite_l2fwd.py
> index 0555d75ed8..5ffa2dcd19 100644
> --- a/dts/tests/TestSuite_l2fwd.py
> +++ b/dts/tests/TestSuite_l2fwd.py
> @@ -9,7 +9,7 @@
>
> from framework.context import filter_cores
> from framework.params.testpmd import EthPeer, SimpleForwardingModes
> -from framework.remote_session.testpmd_shell import TestPmdShell
> +from framework.remote_session.testpmd_shell import NicCapability,
> TestPmdShell
> from framework.test_suite import TestSuite, func_test
> from framework.testbed_model.capability import requires
> from framework.testbed_model.cpu import LogicalCoreCount
> @@ -17,6 +17,7 @@
> from framework.utils import generate_random_packets
>
>
> + at requires(NicCapability.PHYSICAL_FUNCTION)
> @requires(topology_type=TopologyType.two_links)
> class TestL2fwd(TestSuite):
> """L2 forwarding test suite."""
> diff --git a/dts/tests/TestSuite_mac_filter.py
> b/dts/tests/TestSuite_mac_filter.py
> index 9dbfec5da2..2387fdfac2 100644
> --- a/dts/tests/TestSuite_mac_filter.py
> +++ b/dts/tests/TestSuite_mac_filter.py
> @@ -25,6 +25,7 @@
> from framework.testbed_model.capability import requires
>
>
> + at requires(NicCapability.PHYSICAL_FUNCTION)
> class TestMacFilter(TestSuite):
> """Mac address allowlist filtering test suite.
>
> diff --git a/dts/tests/TestSuite_mtu.py b/dts/tests/TestSuite_mtu.py
> index af6ab88501..d5b3fe02af 100644
> --- a/dts/tests/TestSuite_mtu.py
> +++ b/dts/tests/TestSuite_mtu.py
> @@ -17,8 +17,9 @@
> from scapy.layers.l2 import Ether
> from scapy.packet import Raw
>
> -from framework.remote_session.testpmd_shell import TestPmdShell
> +from framework.remote_session.testpmd_shell import NicCapability,
> TestPmdShell
> from framework.test_suite import TestSuite, func_test
> +from framework.testbed_model.capability import requires
>
> STANDARD_FRAME = 1518 # --max-pkt-len will subtract l2 information at a
> minimum of 18 bytes.
> JUMBO_FRAME = 9018
> @@ -30,6 +31,7 @@
> VENDOR_AGNOSTIC_PADDING = 9 # Used as a work around for varying MTU
> definitions between vendors.
>
>
> + at requires(NicCapability.PHYSICAL_FUNCTION)
> class TestMtu(TestSuite):
> """DPDK PMD jumbo frames and MTU update test suite.
>
> diff --git a/dts/tests/TestSuite_pmd_buffer_scatter.py
> b/dts/tests/TestSuite_pmd_buffer_scatter.py
> index 5e23f28bc6..015163dd11 100644
> --- a/dts/tests/TestSuite_pmd_buffer_scatter.py
> +++ b/dts/tests/TestSuite_pmd_buffer_scatter.py
> @@ -28,6 +28,7 @@
> from framework.testbed_model.capability import NicCapability, requires
>
>
> + at requires(NicCapability.PHYSICAL_FUNCTION)
> @requires(NicCapability.RX_OFFLOAD_SCATTER)
> class TestPmdBufferScatter(TestSuite):
> """DPDK PMD packet scattering test suite.
> diff --git a/dts/tests/TestSuite_port_control.py
> b/dts/tests/TestSuite_port_control.py
> index ad5a09c58e..58783f1d18 100644
> --- a/dts/tests/TestSuite_port_control.py
> +++ b/dts/tests/TestSuite_port_control.py
> @@ -13,11 +13,12 @@
> from scapy.packet import Packet, Raw
>
> from framework.params.testpmd import SimpleForwardingModes
> -from framework.remote_session.testpmd_shell import TestPmdShell
> +from framework.remote_session.testpmd_shell import NicCapability,
> TestPmdShell
> from framework.test_suite import TestSuite, func_test
> from framework.testbed_model.capability import TopologyType, requires
>
>
> + at requires(NicCapability.PHYSICAL_FUNCTION)
> @requires(topology_type=TopologyType.two_links)
> class TestPortControl(TestSuite):
> """DPDK Port Control Testing Suite."""
> diff --git a/dts/tests/TestSuite_port_stats.py
> b/dts/tests/TestSuite_port_stats.py
> index 2bb8747399..ddd28623b3 100644
> --- a/dts/tests/TestSuite_port_stats.py
> +++ b/dts/tests/TestSuite_port_stats.py
> @@ -19,6 +19,7 @@
>
> from framework.params.testpmd import SimpleForwardingModes
> from framework.remote_session.testpmd_shell import (
> + NicCapability,
> RtePTypes,
> TestPmdShell,
> TestPmdVerbosePacket,
> @@ -27,6 +28,7 @@
> from framework.testbed_model.capability import TopologyType, requires
>
>
> + at requires(NicCapability.PHYSICAL_FUNCTION)
> @requires(topology_type=TopologyType.two_links)
> class TestPortStats(TestSuite):
> """DPDK Port statistics testing suite.
> diff --git a/dts/tests/TestSuite_promisc_support.py
> b/dts/tests/TestSuite_promisc_support.py
> index 445f6e1d69..8a7a7efb57 100644
> --- a/dts/tests/TestSuite_promisc_support.py
> +++ b/dts/tests/TestSuite_promisc_support.py
> @@ -11,10 +11,12 @@
> from scapy.layers.l2 import Ether
> from scapy.packet import Raw
>
> -from framework.remote_session.testpmd_shell import TestPmdShell
> +from framework.remote_session.testpmd_shell import NicCapability,
> TestPmdShell
> from framework.test_suite import TestSuite, func_test
> +from framework.testbed_model.capability import requires
>
>
> + at requires(NicCapability.PHYSICAL_FUNCTION)
> class TestPromiscSupport(TestSuite):
> """Promiscuous mode support test suite."""
>
> diff --git a/dts/tests/TestSuite_rte_flow.py
> b/dts/tests/TestSuite_rte_flow.py
> index e70f7ea8d1..4855e4261d 100644
> --- a/dts/tests/TestSuite_rte_flow.py
> +++ b/dts/tests/TestSuite_rte_flow.py
> @@ -316,6 +316,7 @@ def test_queue_action_IP(self) -> None:
> test_queue=2,
> )
>
> + @requires(NicCapability.PHYSICAL_FUNCTION)
> @func_test
> def test_queue_action_L4(self) -> None:
> """Validate flow rules with queue actions and TCP/UDP patterns.
> diff --git a/dts/tests/TestSuite_softnic.py
> b/dts/tests/TestSuite_softnic.py
> index c1873dca4c..27754c08e7 100644
> --- a/dts/tests/TestSuite_softnic.py
> +++ b/dts/tests/TestSuite_softnic.py
> @@ -9,7 +9,7 @@
> from pathlib import Path, PurePath
>
> from framework.params.testpmd import EthPeer
> -from framework.remote_session.testpmd_shell import TestPmdShell
> +from framework.remote_session.testpmd_shell import NicCapability,
> TestPmdShell
> from framework.test_suite import TestSuite, func_test
> from framework.testbed_model.capability import requires
> from framework.testbed_model.topology import TopologyType
> @@ -17,6 +17,7 @@
> from framework.utils import generate_random_packets
>
>
> + at requires(NicCapability.PHYSICAL_FUNCTION)
> @requires(topology_type=TopologyType.two_links)
> class TestSoftnic(TestSuite):
> """Softnic test suite."""
> diff --git a/dts/tests/TestSuite_uni_pkt.py
> b/dts/tests/TestSuite_uni_pkt.py
> index fdb9c29059..690c5d4fd1 100644
> --- a/dts/tests/TestSuite_uni_pkt.py
> +++ b/dts/tests/TestSuite_uni_pkt.py
> @@ -20,6 +20,7 @@
> from scapy.packet import Packet, Raw
>
> from framework.remote_session.testpmd_shell import (
> + NicCapability,
> RtePTypes,
> SimpleForwardingModes,
> TestPmdShell,
> @@ -258,6 +259,7 @@ def test_nsh_packet_detect(self) -> None:
> with TestPmdShell() as testpmd:
> self.setup_session(testpmd=testpmd, expected_flags=flag_list,
> packet_list=packet_list)
>
> + @requires(NicCapability.PHYSICAL_FUNCTION)
> @func_test
> def test_vxlan_tunnel_packet_detect(self) -> None:
> """Ensure the correct flags are shown in the verbose output when
> sending VXLAN packets.
> --
> 2.49.0
>
>
In principle some of the functions performed in these testsuites should be
possible via VFs.
As a follow up task in 25.11 we should assess this and see if the total
list of VF compatible testsuites can be extended.
Reviewed-by: Patrick Robb <probb at iol.unh.edu>
Tested-by: Patrick Robb <probb at iol.unh.edu>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mails.dpdk.org/archives/dev/attachments/20250704/a0613aa3/attachment-0001.htm>
More information about the dev
mailing list