[PATCH v2 1/2] dts: add fwd restart decorator to rx capabilities
Nicholas Pratte
npratte at iol.unh.edu
Fri Jan 24 21:44:32 CET 2025
Some testpmd runtime functions require that forwarding be stopped before
attempting to execute them, depending on the NIC and vendor. Adding a
decorator to these testpmdshell methods to stop, execute, and then start
forwarding again abstracts this concern away for test suite developers,
and makes for cleaner, easier to read code.
Signed-off-by: Nicholas Pratte <npratte at iol.unh.edu>
---
dts/framework/remote_session/testpmd_shell.py | 26 ++++++++++++++++++-
1 file changed, 25 insertions(+), 1 deletion(-)
diff --git a/dts/framework/remote_session/testpmd_shell.py b/dts/framework/remote_session/testpmd_shell.py
index c01ee74b21..c008cb3792 100644
--- a/dts/framework/remote_session/testpmd_shell.py
+++ b/dts/framework/remote_session/testpmd_shell.py
@@ -1390,6 +1390,28 @@ def _wrapper(self: "TestPmdShell", *args: P.args, **kwargs: P.kwargs):
return _wrapper
+def requires_forwarding_restart(func: TestPmdShellMethod) -> TestPmdShellMethod:
+ """Decorator for :class:`TestPmdShell` commands methods that requires forwarding restart.
+
+ If the decorated method is called while a :class:`TestPmdShell` is actively forwarding, then
+ forwarding is ceased, the wrapped function is executed, and forwarding is started again.
+
+ Args:
+ func: The :class:`TestPmdShell` method to decorate.
+ """
+
+ @functools.wraps(func)
+ def _wrapper(self: "TestPmdShell", *args: P.args, **kwargs: P.kwargs):
+ if self.currently_forwarding:
+ self._logger.debug("Forwarding needs to be restarted to continue.")
+ self.stop()
+ retval = func(self, *args, **kwargs)
+ self.start()
+ return retval
+
+ return _wrapper
+
+
def add_remove_mtu(mtu: int = 1500) -> Callable[[TestPmdShellMethod], TestPmdShellMethod]:
"""Configure MTU to `mtu` on all ports, run the decorated function, then revert.
@@ -1438,6 +1460,7 @@ class TestPmdShell(DPDKShell):
_command_extra_chars: ClassVar[str] = "\n"
ports_started: bool
+ currently_forwarding: bool
def __init__(
self,
@@ -1462,6 +1485,7 @@ def __init__(
name,
)
self.ports_started = not self._app_params.disable_device_start
+ self.currently_forwarding = not self._app_params.auto_start
self._ports = None
@property
@@ -1836,7 +1860,7 @@ def csum_set_hw(
{port_id}:\n{csum_output}"""
)
- @requires_started_ports
+ @requires_forwarding_restart
@requires_stopped_ports
def set_port_mtu(self, port_id: int, mtu: int, verify: bool = True) -> None:
"""Change the MTU of a port using testpmd.
--
2.47.1
More information about the dev
mailing list