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 <[email protected]> --- 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

