1# SPDX-License-Identifier: BSD-3-Clause 2# Copyright(c) 2024 Arm Limited 3 4"""Module representing the DPDK EAL-related parameters.""" 5 6from dataclasses import dataclass, field 7from typing import Literal 8 9from framework.params import Params, Switch 10from framework.testbed_model.cpu import LogicalCoreList 11from framework.testbed_model.port import Port 12from framework.testbed_model.virtual_device import VirtualDevice 13 14 15def _port_to_pci(port: Port) -> str: 16 return port.pci 17 18 19@dataclass(kw_only=True) 20class EalParams(Params): 21 """The environment abstraction layer parameters. 22 23 Attributes: 24 lcore_list: The list of logical cores to use. 25 memory_channels: The number of memory channels to use. 26 prefix: Set the file prefix string with which to start DPDK, e.g.: ``prefix="vf"``. 27 no_pci: Switch to disable PCI bus, e.g.: ``no_pci=True``. 28 vdevs: Virtual devices, e.g.:: 29 30 vdevs=[ 31 VirtualDevice('net_ring0'), 32 VirtualDevice('net_ring1') 33 ] 34 35 ports: The list of ports to allow. 36 other_eal_param: user defined DPDK EAL parameters, e.g.:: 37 38 ``other_eal_param='--single-file-segments'`` 39 """ 40 41 lcore_list: LogicalCoreList | None = field(default=None, metadata=Params.short("l")) 42 memory_channels: int | None = field(default=None, metadata=Params.short("n")) 43 prefix: str = field(default="dpdk", metadata=Params.long("file-prefix")) 44 no_pci: Switch = None 45 vdevs: list[VirtualDevice] | None = field( 46 default=None, metadata=Params.multiple() | Params.long("vdev") 47 ) 48 allowed_ports: list[Port] | None = field( 49 default=None, 50 metadata=Params.convert_value(_port_to_pci) | Params.multiple() | Params.short("a"), 51 ) 52 blocked_ports: list[Port] | None = field( 53 default=None, 54 metadata=Params.convert_value(_port_to_pci) | Params.multiple() | Params.short("b"), 55 ) 56 other_eal_param: Params | None = None 57 _separator: Literal[True] = field(default=True, init=False, metadata=Params.short("-")) 58