From: jspewock@iol.unh.edu
To: yoan.picchi@foss.arm.com, npratte@iol.unh.edu,
juraj.linkes@pantheon.tech, probb@iol.unh.edu,
thomas@monjalon.net, paul.szczepanek@arm.com,
wathsala.vithanage@arm.com, alex.chapman@arm.com,
Luca.Vizzarro@arm.com, Honnappa.Nagarahalli@arm.com
Cc: dev@dpdk.org, Jeremy Spewock <jspewock@iol.unh.edu>
Subject: [PATCH v2 3/5] dts: add offload configuration querying to testpmd
Date: Tue, 3 Sep 2024 15:46:26 -0400 [thread overview]
Message-ID: <20240903194642.24458-4-jspewock@iol.unh.edu> (raw)
In-Reply-To: <20240903194642.24458-1-jspewock@iol.unh.edu>
From: Jeremy Spewock <jspewock@iol.unh.edu>
Testpmd offers methods for querying the runtime configuration of
offloads on a device that are useful for verification, but bindings to
reach these methods do not exist in the Testpmd API offered in the
framework. This patch creates methods that can query this configuration
and also generalizes the OffloadCapability class to allow it to account
for parsing the configuration output as well since the flag values will
be the same.
Signed-off-by: Jeremy Spewock <jspewock@iol.unh.edu>
---
dts/framework/remote_session/testpmd_shell.py | 92 ++++++++++++++++++-
1 file changed, 89 insertions(+), 3 deletions(-)
diff --git a/dts/framework/remote_session/testpmd_shell.py b/dts/framework/remote_session/testpmd_shell.py
index df4ed7ce5c..71859c63da 100644
--- a/dts/framework/remote_session/testpmd_shell.py
+++ b/dts/framework/remote_session/testpmd_shell.py
@@ -680,21 +680,45 @@ def from_string(cls, line: str) -> Self:
return flag
@classmethod
- def make_parser(cls, per_port: bool) -> ParserFn:
+ def from_list(cls, lines: list[str]) -> list[Self]:
+ """Make a list of instances from a list of strings that contain flag names.
+
+ The strings are expected to separate the flag names by whitespace.
+
+ Args:
+ lines: The list of strings to parse.
+
+ Returns:
+ A list of instances parsed from each string in `lines`.
+ """
+ return [cls.from_string(line) for line in lines]
+
+ @classmethod
+ def make_parser(cls, per_port: bool, find_multiple: bool = False) -> ParserFn:
"""Make a parser function.
Args:
per_port: If :data:`True`, will return capabilities per port. If :data:`False`,
will return capabilities per queue.
+ find_multiple: If :data:`True`, will use :func:`TextParser.find_all` to find all
+ matches for the regex query and return a list of instances based on those matches.
+ If :data:`False`, will return a single instance of the flag based off a single
+ match.
Returns:
ParserFn: A dictionary for the `dataclasses.field` metadata argument containing a
parser function that makes an instance of this flag from text.
"""
granularity = "Port" if per_port else "Queue"
+ parser_func: Callable[..., ParserFn] | Callable[..., ParserFn] = (
+ TextParser.find_all if find_multiple else TextParser.find
+ )
+ instance_func: Callable[..., list[OffloadCapability]] | Callable[..., OffloadCapability] = (
+ cls.from_list if find_multiple else cls.from_string
+ )
return TextParser.wrap(
- TextParser.find(rf"Per {granularity}\s+:(.*)$", re.MULTILINE),
- cls.from_string,
+ parser_func(rf"{granularity}[\s\[\]\d]+:(.*)$", re.MULTILINE),
+ instance_func,
)
@@ -822,6 +846,42 @@ class TxOffloadCapabilities(OffloadCapabilities):
per_port: TxOffloadCapability = field(metadata=TxOffloadCapability.make_parser(True))
+@dataclass
+class OffloadConfiguration(TextParser):
+ """The result of testpmd's ``show port <port_id> rx/tx_offload configuration`` command."""
+
+ #:
+ port_id: int = field(metadata=TextParser.find_int(r"Offloading Configuration of port (\d+) :"))
+ #: Queue offload configurations.
+ queues: list[RxOffloadCapability] | list[TxOffloadCapability]
+ #: Port offload configuration.
+ port: RxOffloadCapability | TxOffloadCapability
+
+
+@dataclass
+class RxOffloadConfiguration(OffloadConfiguration):
+ """Extends :class:`OffloadingConfiguration` with Rx specific functionality."""
+
+ #:
+ queues: list[RxOffloadCapability] = field(
+ metadata=RxOffloadCapability.make_parser(False, find_multiple=True)
+ )
+ #:
+ port: RxOffloadCapability = field(metadata=RxOffloadCapability.make_parser(True))
+
+
+@dataclass
+class TxOffloadConfiguration(OffloadConfiguration):
+ """Extends :class:`OffloadingConfiguration` with Tx specific functionality."""
+
+ #:
+ queues: list[TxOffloadCapability] = field(
+ metadata=TxOffloadCapability.make_parser(False, find_multiple=True)
+ )
+ #:
+ port: TxOffloadCapability = field(metadata=TxOffloadCapability.make_parser(True))
+
+
T = TypeVarTuple("T") # type: ignore[misc]
@@ -1590,6 +1650,32 @@ def show_port_tx_offload_capabilities(self, port_id: int) -> TxOffloadCapabiliti
offload_capabilities_out = self.send_command(command)
return TxOffloadCapabilities.parse(offload_capabilities_out)
+ def show_port_rx_offload_configuration(self, port_id: int) -> RxOffloadConfiguration:
+ """Get the Rx offload configuration on a given port.
+
+ Args:
+ port_id: The ID of the port to query the configuration of.
+
+ Returns:
+ An instance of :class:`RxOffloadConfiguration` containing the offload configuration of
+ the port.
+ """
+ output = self.send_command(f"show port {port_id} rx_offload configuration")
+ return RxOffloadConfiguration.parse(output)
+
+ def show_port_tx_offload_configuration(self, port_id: int) -> TxOffloadConfiguration:
+ """Get the Tx offload configuration on a given port.
+
+ Args:
+ port_id: The ID of the port to query the configuration of.
+
+ Returns:
+ An instance of :class:`TxOffloadConfiguration` containing the offload configuration of
+ the port.
+ """
+ output = self.send_command(f"show port {port_id} tx_offload configuration")
+ return TxOffloadConfiguration.parse(output)
+
def _stop_port(self, port_id: int, verify: bool = True) -> None:
"""Stop port with `port_id` in testpmd.
--
2.46.0
next prev parent reply other threads:[~2024-09-03 19:47 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-31 0:00 [RFC PATCH v1 0/5] dts: port over Rx/Tx offload suite jspewock
2024-08-31 0:00 ` [RFC PATCH v1 1/5] dts: add TX offload capabilities jspewock
2024-08-31 0:00 ` [RFC PATCH v1 2/5] dts: add a distinction between port and queue " jspewock
2024-08-31 0:00 ` [RFC PATCH v1 3/5] dts: add offload configuration querying to testpmd jspewock
2024-08-31 0:00 ` [RFC PATCH v1 4/5] dts: add methods for configuring offloads on a device in testpmd jspewock
2024-08-31 0:00 ` [RFC PATCH v1 5/5] dts: add test suite for RX and TX offloads jspewock
2024-09-03 19:46 ` [PATCH v2 0/5] dts: port over Rx/Tx offload suite jspewock
2024-09-03 19:46 ` [PATCH v2 1/5] dts: add TX offload capabilities jspewock
2024-09-03 19:46 ` [PATCH v2 2/5] dts: add a distinction between port and queue " jspewock
2024-09-03 19:46 ` jspewock [this message]
2024-09-03 19:46 ` [PATCH v2 4/5] dts: add methods for configuring offloads on a device in testpmd jspewock
2024-09-03 19:46 ` [PATCH v2 5/5] dts: add test suite for RX and TX offloads jspewock
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240903194642.24458-4-jspewock@iol.unh.edu \
--to=jspewock@iol.unh.edu \
--cc=Honnappa.Nagarahalli@arm.com \
--cc=Luca.Vizzarro@arm.com \
--cc=alex.chapman@arm.com \
--cc=dev@dpdk.org \
--cc=juraj.linkes@pantheon.tech \
--cc=npratte@iol.unh.edu \
--cc=paul.szczepanek@arm.com \
--cc=probb@iol.unh.edu \
--cc=thomas@monjalon.net \
--cc=wathsala.vithanage@arm.com \
--cc=yoan.picchi@foss.arm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).