[PATCH v9 09/10] dts: use specific types for Rx/Tx offloads
Thomas Monjalon
thomas at monjalon.net
Sat Jun 6 01:33:49 CEST 2026
Testpmd Rx and Tx offload parameters only accepted integer masks.
This forced tests to pass enum values through .value
when using RxOffloadCapability or TxOffloadCapability.
Allow these parameters to take either typed offload flags
or raw integer masks,
and convert both forms to the hexadecimal mask
expected by the testpmd command line.
Signed-off-by: Thomas Monjalon <thomas at monjalon.net>
---
dts/api/testpmd/config.py | 11 +++++++++--
dts/framework/params/__init__.py | 14 ++++++++++++++
dts/framework/params/types.py | 5 +++--
3 files changed, 26 insertions(+), 4 deletions(-)
diff --git a/dts/api/testpmd/config.py b/dts/api/testpmd/config.py
index 1e59bccd08..f0581843ca 100644
--- a/dts/api/testpmd/config.py
+++ b/dts/api/testpmd/config.py
@@ -19,6 +19,7 @@
YesNoSwitch,
bracketed,
comma_separated,
+ hex_from_flag_or_int,
hex_from_flag_value,
modify_str,
str_from_flag_value,
@@ -26,6 +27,8 @@
from framework.params.eal import EalParams
from framework.utils import StrEnum
+from .types import RxOffloadCapability, TxOffloadCapability
+
class PortTopology(StrEnum):
"""Enum representing the port topology."""
@@ -577,12 +580,16 @@ class TestPmdParams(EalParams):
)
multi_rx_mempool: Switch = None
rx_shared_queue: Switch | int = field(default=None, metadata=Params.long("rxq-share"))
- rx_offloads: int | None = field(default=None, metadata=Params.convert_value(hex))
+ rx_offloads: RxOffloadCapability | int | None = field(
+ default=None, metadata=Params.convert_value(hex_from_flag_or_int)
+ )
rx_mq_mode: RXMultiQueueMode | None = None
tx_queues: int | None = field(default=None, metadata=Params.long("txq"))
tx_ring: TXRingParams | None = None
- tx_offloads: int | None = field(default=None, metadata=Params.convert_value(hex))
+ tx_offloads: TxOffloadCapability | int | None = field(
+ default=None, metadata=Params.convert_value(hex_from_flag_or_int)
+ )
eth_link_speed: int | None = None
disable_link_check: Switch = None
diff --git a/dts/framework/params/__init__.py b/dts/framework/params/__init__.py
index e6a2d3c903..b5bae9dad9 100644
--- a/dts/framework/params/__init__.py
+++ b/dts/framework/params/__init__.py
@@ -130,6 +130,20 @@ def hex_from_flag_value(flag: Flag) -> str:
return hex(flag.value)
+def hex_from_flag_or_int(value: Flag | int) -> str:
+ """Returns a :class:`enum.Flag` or integer value converted to hexadecimal.
+
+ Args:
+ value: An instance of :class:`Flag` or an integer.
+
+ Returns:
+ The value in hexadecimal representation.
+ """
+ if isinstance(value, Flag):
+ return hex_from_flag_value(value)
+ return hex(value)
+
+
class ParamsModifier(TypedDict, total=False):
"""Params modifiers dict compatible with the :func:`dataclasses.field` metadata parameter."""
diff --git a/dts/framework/params/types.py b/dts/framework/params/types.py
index 3c7650474c..a9f3749083 100644
--- a/dts/framework/params/types.py
+++ b/dts/framework/params/types.py
@@ -53,6 +53,7 @@ def create_testpmd(**kwargs: Unpack[TestPmdParamsDict]):
TXRingParams,
TxUDPPortPair,
)
+from api.testpmd.types import RxOffloadCapability, TxOffloadCapability
from framework.params import Switch, YesNoSwitch
from framework.testbed_model.cpu import LogicalCoreList
from framework.testbed_model.port import Port
@@ -175,11 +176,11 @@ class TestPmdParamsDict(EalParamsDict, total=False):
rx_segments_length: list[int] | None
multi_rx_mempool: Switch
rx_shared_queue: Switch | int
- rx_offloads: int | None
+ rx_offloads: RxOffloadCapability | int | None
rx_mq_mode: RXMultiQueueMode | None
tx_queues: int | None
tx_ring: TXRingParams | None
- tx_offloads: int | None
+ tx_offloads: TxOffloadCapability | int | None
eth_link_speed: int | None
disable_link_check: Switch
disable_device_start: Switch
--
2.54.0
More information about the dev
mailing list