1# SPDX-License-Identifier: BSD-3-Clause 2# Copyright(c) 2024 Arm Limited 3 4"""Module containing all the TestPmd-related parameter classes.""" 5 6from dataclasses import dataclass, field 7from enum import EnumMeta, Flag, auto, unique 8from pathlib import PurePath 9from typing import Literal, NamedTuple 10 11from framework.params import ( 12 Params, 13 Switch, 14 YesNoSwitch, 15 bracketed, 16 comma_separated, 17 hex_from_flag_value, 18 modify_str, 19 str_from_flag_value, 20) 21from framework.params.eal import EalParams 22from framework.utils import StrEnum 23 24 25class PortTopology(StrEnum): 26 """Enum representing the port topology.""" 27 28 #: In paired mode, the forwarding is between pairs of ports, e.g.: (0,1), (2,3), (4,5). 29 paired = auto() 30 31 #: In chained mode, the forwarding is to the next available port in the port mask, e.g.: 32 #: (0,1), (1,2), (2,0). 33 #: 34 #: The ordering of the ports can be changed using the portlist testpmd runtime function. 35 chained = auto() 36 37 #: In loop mode, ingress traffic is simply transmitted back on the same interface. 38 loop = auto() 39 40 41@modify_str(comma_separated, bracketed) 42class PortNUMAConfig(NamedTuple): 43 """DPDK port to NUMA socket association tuple.""" 44 45 #: 46 port: int 47 #: 48 socket: int 49 50 51@modify_str(str_from_flag_value) 52@unique 53class FlowDirection(Flag): 54 """Flag indicating the direction of the flow. 55 56 A bi-directional flow can be specified with the pipe: 57 58 >>> TestPmdFlowDirection.RX | TestPmdFlowDirection.TX 59 <TestPmdFlowDirection.TX|RX: 3> 60 """ 61 62 #: 63 RX = 1 << 0 64 #: 65 TX = 1 << 1 66 67 68@modify_str(comma_separated, bracketed) 69class RingNUMAConfig(NamedTuple): 70 """Tuple associating DPDK port, direction of the flow and NUMA socket.""" 71 72 #: 73 port: int 74 #: 75 direction: FlowDirection 76 #: 77 socket: int 78 79 80@modify_str(comma_separated) 81class EthPeer(NamedTuple): 82 """Tuple associating a MAC address to the specified DPDK port.""" 83 84 #: 85 port_no: int 86 #: 87 mac_address: str 88 89 90@modify_str(comma_separated) 91class TxIPAddrPair(NamedTuple): 92 """Tuple specifying the source and destination IPs for the packets.""" 93 94 #: 95 source_ip: str 96 #: 97 dest_ip: str 98 99 100@modify_str(comma_separated) 101class TxUDPPortPair(NamedTuple): 102 """Tuple specifying the UDP source and destination ports for the packets. 103 104 If leaving ``dest_port`` unspecified, ``source_port`` will be used for 105 the destination port as well. 106 """ 107 108 #: 109 source_port: int 110 #: 111 dest_port: int | None = None 112 113 114@dataclass 115class DisableRSS(Params): 116 """Disables RSS (Receive Side Scaling).""" 117 118 _disable_rss: Literal[True] = field( 119 default=True, init=False, metadata=Params.long("disable-rss") 120 ) 121 122 123@dataclass 124class SetRSSIPOnly(Params): 125 """Sets RSS (Receive Side Scaling) functions for IPv4/IPv6 only.""" 126 127 _rss_ip: Literal[True] = field(default=True, init=False, metadata=Params.long("rss-ip")) 128 129 130@dataclass 131class SetRSSUDP(Params): 132 """Sets RSS (Receive Side Scaling) functions for IPv4/IPv6 and UDP.""" 133 134 _rss_udp: Literal[True] = field(default=True, init=False, metadata=Params.long("rss-udp")) 135 136 137class RSSSetting(EnumMeta): 138 """Enum representing a RSS setting. Each property is a class that needs to be initialised.""" 139 140 #: 141 Disabled = DisableRSS 142 #: 143 SetIPOnly = SetRSSIPOnly 144 #: 145 SetUDP = SetRSSUDP 146 147 148class SimpleForwardingModes(StrEnum): 149 r"""The supported packet forwarding modes for :class:`~TestPmdShell`\s.""" 150 151 #: 152 io = auto() 153 #: 154 mac = auto() 155 #: 156 macswap = auto() 157 #: 158 rxonly = auto() 159 #: 160 csum = auto() 161 #: 162 icmpecho = auto() 163 #: 164 ieee1588 = auto() 165 #: 166 fivetswap = "5tswap" 167 #: 168 shared_rxq = "shared-rxq" 169 #: 170 recycle_mbufs = auto() 171 172 173@dataclass(kw_only=True) 174class TXOnlyForwardingMode(Params): 175 """Sets a TX-Only forwarding mode. 176 177 Attributes: 178 multi_flow: Generates multiple flows if set to True. 179 segments_length: Sets TX segment sizes or total packet length. 180 """ 181 182 _forward_mode: Literal["txonly"] = field( 183 default="txonly", init=False, metadata=Params.long("forward-mode") 184 ) 185 multi_flow: Switch = field(default=None, metadata=Params.long("txonly-multi-flow")) 186 segments_length: list[int] | None = field( 187 default=None, metadata=Params.long("txpkts") | Params.convert_value(comma_separated) 188 ) 189 190 191@dataclass(kw_only=True) 192class FlowGenForwardingMode(Params): 193 """Sets a flowgen forwarding mode. 194 195 Attributes: 196 clones: Set the number of each packet clones to be sent. Sending clones reduces host CPU 197 load on creating packets and may help in testing extreme speeds or maxing out 198 Tx packet performance. N should be not zero, but less than ‘burst’ parameter. 199 flows: Set the number of flows to be generated, where 1 <= N <= INT32_MAX. 200 segments_length: Set TX segment sizes or total packet length. 201 """ 202 203 _forward_mode: Literal["flowgen"] = field( 204 default="flowgen", init=False, metadata=Params.long("forward-mode") 205 ) 206 clones: int | None = field(default=None, metadata=Params.long("flowgen-clones")) 207 flows: int | None = field(default=None, metadata=Params.long("flowgen-flows")) 208 segments_length: list[int] | None = field( 209 default=None, metadata=Params.long("txpkts") | Params.convert_value(comma_separated) 210 ) 211 212 213@dataclass(kw_only=True) 214class NoisyForwardingMode(Params): 215 """Sets a noisy forwarding mode. 216 217 Attributes: 218 forward_mode: Set the noisy VNF forwarding mode. 219 tx_sw_buffer_size: Set the maximum number of elements of the FIFO queue to be created for 220 buffering packets. 221 tx_sw_buffer_flushtime: Set the time before packets in the FIFO queue are flushed. 222 lkup_memory: Set the size of the noisy neighbor simulation memory buffer in MB to N. 223 lkup_num_reads: Set the size of the noisy neighbor simulation memory buffer in MB to N. 224 lkup_num_writes: Set the number of writes to be done in noisy neighbor simulation 225 memory buffer to N. 226 lkup_num_reads_writes: Set the number of r/w accesses to be done in noisy neighbor 227 simulation memory buffer to N. 228 """ 229 230 _forward_mode: Literal["noisy"] = field( 231 default="noisy", init=False, metadata=Params.long("forward-mode") 232 ) 233 forward_mode: ( 234 Literal[ 235 SimpleForwardingModes.io, 236 SimpleForwardingModes.mac, 237 SimpleForwardingModes.macswap, 238 SimpleForwardingModes.fivetswap, 239 ] 240 | None 241 ) = field(default=SimpleForwardingModes.io, metadata=Params.long("noisy-forward-mode")) 242 tx_sw_buffer_size: int | None = field( 243 default=None, metadata=Params.long("noisy-tx-sw-buffer-size") 244 ) 245 tx_sw_buffer_flushtime: int | None = field( 246 default=None, metadata=Params.long("noisy-tx-sw-buffer-flushtime") 247 ) 248 lkup_memory: int | None = field(default=None, metadata=Params.long("noisy-lkup-memory")) 249 lkup_num_reads: int | None = field(default=None, metadata=Params.long("noisy-lkup-num-reads")) 250 lkup_num_writes: int | None = field(default=None, metadata=Params.long("noisy-lkup-num-writes")) 251 lkup_num_reads_writes: int | None = field( 252 default=None, metadata=Params.long("noisy-lkup-num-reads-writes") 253 ) 254 255 256@modify_str(hex_from_flag_value) 257@unique 258class HairpinMode(Flag): 259 """Flag representing the hairpin mode.""" 260 261 #: Two hairpin ports loop. 262 TWO_PORTS_LOOP = 1 << 0 263 #: Two hairpin ports paired. 264 TWO_PORTS_PAIRED = 1 << 1 265 #: Explicit Tx flow rule. 266 EXPLICIT_TX_FLOW = 1 << 4 267 #: Force memory settings of hairpin RX queue. 268 FORCE_RX_QUEUE_MEM_SETTINGS = 1 << 8 269 #: Force memory settings of hairpin TX queue. 270 FORCE_TX_QUEUE_MEM_SETTINGS = 1 << 9 271 #: Hairpin RX queues will use locked device memory. 272 RX_QUEUE_USE_LOCKED_DEVICE_MEMORY = 1 << 12 273 #: Hairpin RX queues will use RTE memory. 274 RX_QUEUE_USE_RTE_MEMORY = 1 << 13 275 #: Hairpin TX queues will use locked device memory. 276 TX_QUEUE_USE_LOCKED_DEVICE_MEMORY = 1 << 16 277 #: Hairpin TX queues will use RTE memory. 278 TX_QUEUE_USE_RTE_MEMORY = 1 << 18 279 280 281@dataclass(kw_only=True) 282class RXRingParams(Params): 283 """Sets the RX ring parameters. 284 285 Attributes: 286 descriptors: Set the number of descriptors in the RX rings to N, where N > 0. 287 prefetch_threshold: Set the prefetch threshold register of RX rings to N, where N >= 0. 288 host_threshold: Set the host threshold register of RX rings to N, where N >= 0. 289 write_back_threshold: Set the write-back threshold register of RX rings to N, where N >= 0. 290 free_threshold: Set the free threshold of RX descriptors to N, 291 where 0 <= N < value of ``-–rxd``. 292 """ 293 294 descriptors: int | None = field(default=None, metadata=Params.long("rxd")) 295 prefetch_threshold: int | None = field(default=None, metadata=Params.long("rxpt")) 296 host_threshold: int | None = field(default=None, metadata=Params.long("rxht")) 297 write_back_threshold: int | None = field(default=None, metadata=Params.long("rxwt")) 298 free_threshold: int | None = field(default=None, metadata=Params.long("rxfreet")) 299 300 301@modify_str(hex_from_flag_value) 302@unique 303class RXMultiQueueMode(Flag): 304 """Flag representing the RX multi-queue mode.""" 305 306 #: 307 RSS = 1 << 0 308 #: 309 DCB = 1 << 1 310 #: 311 VMDQ = 1 << 2 312 313 314@dataclass(kw_only=True) 315class TXRingParams(Params): 316 """Sets the TX ring parameters. 317 318 Attributes: 319 descriptors: Set the number of descriptors in the TX rings to N, where N > 0. 320 rs_bit_threshold: Set the transmit RS bit threshold of TX rings to N, 321 where 0 <= N <= value of ``--txd``. 322 prefetch_threshold: Set the prefetch threshold register of TX rings to N, where N >= 0. 323 host_threshold: Set the host threshold register of TX rings to N, where N >= 0. 324 write_back_threshold: Set the write-back threshold register of TX rings to N, where N >= 0. 325 free_threshold: Set the transmit free threshold of TX rings to N, 326 where 0 <= N <= value of ``--txd``. 327 """ 328 329 descriptors: int | None = field(default=None, metadata=Params.long("txd")) 330 rs_bit_threshold: int | None = field(default=None, metadata=Params.long("txrst")) 331 prefetch_threshold: int | None = field(default=None, metadata=Params.long("txpt")) 332 host_threshold: int | None = field(default=None, metadata=Params.long("txht")) 333 write_back_threshold: int | None = field(default=None, metadata=Params.long("txwt")) 334 free_threshold: int | None = field(default=None, metadata=Params.long("txfreet")) 335 336 337class Event(StrEnum): 338 """Enum representing a testpmd event.""" 339 340 #: 341 unknown = auto() 342 #: 343 queue_state = auto() 344 #: 345 vf_mbox = auto() 346 #: 347 macsec = auto() 348 #: 349 intr_lsc = auto() 350 #: 351 intr_rmv = auto() 352 #: 353 intr_reset = auto() 354 #: 355 dev_probed = auto() 356 #: 357 dev_released = auto() 358 #: 359 flow_aged = auto() 360 #: 361 err_recovering = auto() 362 #: 363 recovery_success = auto() 364 #: 365 recovery_failed = auto() 366 #: 367 all = auto() 368 369 370class SimpleMempoolAllocationMode(StrEnum): 371 """Enum representing simple mempool allocation modes.""" 372 373 #: Create and populate mempool using native DPDK memory. 374 native = auto() 375 #: Create and populate mempool using externally and anonymously allocated area. 376 xmem = auto() 377 #: Create and populate mempool using externally and anonymously allocated hugepage area. 378 xmemhuge = auto() 379 380 381@dataclass(kw_only=True) 382class AnonMempoolAllocationMode(Params): 383 """Create mempool using native DPDK memory, but populate using anonymous memory. 384 385 Attributes: 386 no_iova_contig: Enables to create mempool which is not IOVA contiguous. 387 """ 388 389 _mp_alloc: Literal["anon"] = field(default="anon", init=False, metadata=Params.long("mp-alloc")) 390 no_iova_contig: Switch = None 391 392 393@dataclass(slots=True, kw_only=True) 394class TestPmdParams(EalParams): 395 """The testpmd shell parameters. 396 397 Attributes: 398 interactive_mode: Run testpmd in interactive mode. 399 auto_start: Start forwarding on initialization. 400 tx_first: Start forwarding, after sending a burst of packets first. 401 stats_period: Display statistics every ``PERIOD`` seconds, if interactive mode is disabled. 402 The default value is 0, which means that the statistics will not be displayed. 403 404 .. note:: This flag should be used only in non-interactive mode. 405 display_xstats: Display comma-separated list of extended statistics every ``PERIOD`` seconds 406 as specified in ``--stats-period`` or when used with interactive commands 407 that show Rx/Tx statistics (i.e. ‘show port stats’). 408 nb_cores: Set the number of forwarding cores, where 1 <= N <= “number of cores” or 409 ``RTE_MAX_LCORE`` from the configuration file. 410 coremask: Set the bitmask of the cores running the packet forwarding test. The main 411 lcore is reserved for command line parsing only and cannot be masked on for packet 412 forwarding. 413 nb_ports: Set the number of forwarding ports, where 1 <= N <= “number of ports” on the board 414 or ``RTE_MAX_ETHPORTS`` from the configuration file. The default value is the 415 number of ports on the board. 416 port_topology: Set port topology, where mode is paired (the default), chained or loop. 417 portmask: Set the bitmask of the ports used by the packet forwarding test. 418 portlist: Set the forwarding ports based on the user input used by the packet forwarding 419 test. ‘-‘ denotes a range of ports to set including the two specified port IDs ‘,’ 420 separates multiple port values. Possible examples like –portlist=0,1 or 421 –portlist=0-2 or –portlist=0,1-2 etc. 422 numa: Enable/disable NUMA-aware allocation of RX/TX rings and of RX memory buffers (mbufs). 423 socket_num: Set the socket from which all memory is allocated in NUMA mode, where 424 0 <= N < number of sockets on the board. 425 port_numa_config: Specify the socket on which the memory pool to be used by the port will be 426 allocated. 427 ring_numa_config: Specify the socket on which the TX/RX rings for the port will be 428 allocated. Where flag is 1 for RX, 2 for TX, and 3 for RX and TX. 429 total_num_mbufs: Set the number of mbufs to be allocated in the mbuf pools, where N > 1024. 430 mbuf_size: Set the data size of the mbufs used to N bytes, where N < 65536. 431 If multiple mbuf-size values are specified the extra memory pools will be created 432 for allocating mbufs to receive packets with buffer splitting features. 433 mbcache: Set the cache of mbuf memory pools to N, where 0 <= N <= 512. 434 max_pkt_len: Set the maximum packet size to N bytes, where N >= 64. 435 eth_peers_configfile: Use a configuration file containing the Ethernet addresses of 436 the peer ports. 437 eth_peer: Set the MAC address XX:XX:XX:XX:XX:XX of the peer port N, 438 where 0 <= N < RTE_MAX_ETHPORTS. 439 tx_ip: Set the source and destination IP address used when doing transmit only test. 440 The defaults address values are source 198.18.0.1 and destination 198.18.0.2. 441 These are special purpose addresses reserved for benchmarking (RFC 5735). 442 tx_udp: Set the source and destination UDP port number for transmit test only test. 443 The default port is the port 9 which is defined for the discard protocol (RFC 863). 444 enable_lro: Enable large receive offload. 445 max_lro_pkt_size: Set the maximum LRO aggregated packet size to N bytes, where N >= 64. 446 disable_crc_strip: Disable hardware CRC stripping. 447 enable_scatter: Enable scatter (multi-segment) RX. 448 enable_hw_vlan: Enable hardware VLAN. 449 enable_hw_vlan_filter: Enable hardware VLAN filter. 450 enable_hw_vlan_strip: Enable hardware VLAN strip. 451 enable_hw_vlan_extend: Enable hardware VLAN extend. 452 enable_hw_qinq_strip: Enable hardware QINQ strip. 453 pkt_drop_enabled: Enable per-queue packet drop for packets with no descriptors. 454 rss: Receive Side Scaling setting. 455 forward_mode: Set the forwarding mode. 456 hairpin_mode: Set the hairpin port configuration. 457 hairpin_queues: Set the number of hairpin queues per port to N, where 1 <= N <= 65535. 458 burst: Set the number of packets per burst to N, where 1 <= N <= 512. 459 enable_rx_cksum: Enable hardware RX checksum offload. 460 rx_queues: Set the number of RX queues per port to N, where 1 <= N <= 65535. 461 rx_ring: Set the RX rings parameters. 462 no_flush_rx: Don’t flush the RX streams before starting forwarding. Used mainly with 463 the PCAP PMD. 464 rx_segments_offsets: Set the offsets of packet segments on receiving 465 if split feature is engaged. 466 rx_segments_length: Set the length of segments to scatter packets on receiving 467 if split feature is engaged. 468 multi_rx_mempool: Enable multiple mbuf pools per Rx queue. 469 rx_shared_queue: Create queues in shared Rx queue mode if device supports. Shared Rx queues 470 are grouped per X ports. X defaults to UINT32_MAX, implies all ports join 471 share group 1. Forwarding engine “shared-rxq” should be used for shared Rx 472 queues. This engine does Rx only and update stream statistics accordingly. 473 rx_offloads: Set the bitmask of RX queue offloads. 474 rx_mq_mode: Set the RX multi queue mode which can be enabled. 475 tx_queues: Set the number of TX queues per port to N, where 1 <= N <= 65535. 476 tx_ring: Set the TX rings params. 477 tx_offloads: Set the hexadecimal bitmask of TX queue offloads. 478 eth_link_speed: Set a forced link speed to the ethernet port. E.g. 1000 for 1Gbps. 479 disable_link_check: Disable check on link status when starting/stopping ports. 480 disable_device_start: Do not automatically start all ports. This allows testing 481 configuration of rx and tx queues before device is started 482 for the first time. 483 no_lsc_interrupt: Disable LSC interrupts for all ports, even those supporting it. 484 no_rmv_interrupt: Disable RMV interrupts for all ports, even those supporting it. 485 bitrate_stats: Set the logical core N to perform bitrate calculation. 486 latencystats: Set the logical core N to perform latency and jitter calculations. 487 print_events: Enable printing the occurrence of the designated events. 488 Using :attr:`TestPmdEvent.ALL` will enable all of them. 489 mask_events: Disable printing the occurrence of the designated events. 490 Using :attr:`TestPmdEvent.ALL` will disable all of them. 491 flow_isolate_all: Providing this parameter requests flow API isolated mode on all ports at 492 initialization time. It ensures all traffic is received through the 493 configured flow rules only (see flow command). Ports that do not support 494 this mode are automatically discarded. 495 disable_flow_flush: Disable port flow flush when stopping port. 496 This allows testing keep flow rules or shared flow objects across 497 restart. 498 hot_plug: Enable device event monitor mechanism for hotplug. 499 vxlan_gpe_port: Set the UDP port number of tunnel VXLAN-GPE to N. 500 geneve_parsed_port: Set the UDP port number that is used for parsing the GENEVE protocol 501 to N. HW may be configured with another tunnel Geneve port. 502 lock_all_memory: Enable/disable locking all memory. Disabled by default. 503 mempool_allocation_mode: Set mempool allocation mode. 504 record_core_cycles: Enable measurement of CPU cycles per packet. 505 record_burst_status: Enable display of RX and TX burst stats. 506 """ 507 508 interactive_mode: Switch = field(default=True, metadata=Params.short("i")) 509 auto_start: Switch = field(default=None, metadata=Params.short("a")) 510 tx_first: Switch = None 511 stats_period: int | None = None 512 display_xstats: list[str] | None = field( 513 default=None, metadata=Params.convert_value(comma_separated) 514 ) 515 nb_cores: int | None = None 516 coremask: int | None = field(default=None, metadata=Params.convert_value(hex)) 517 nb_ports: int | None = None 518 port_topology: PortTopology | None = PortTopology.paired 519 portmask: int | None = field(default=None, metadata=Params.convert_value(hex)) 520 portlist: str | None = None # TODO: can be ranges 0,1-3 521 522 numa: YesNoSwitch = None 523 socket_num: int | None = None 524 port_numa_config: list[PortNUMAConfig] | None = field( 525 default=None, metadata=Params.convert_value(comma_separated) 526 ) 527 ring_numa_config: list[RingNUMAConfig] | None = field( 528 default=None, metadata=Params.convert_value(comma_separated) 529 ) 530 total_num_mbufs: int | None = None 531 mbuf_size: list[int] | None = field( 532 default=None, metadata=Params.convert_value(comma_separated) 533 ) 534 mbcache: int | None = None 535 max_pkt_len: int | None = None 536 eth_peers_configfile: PurePath | None = None 537 eth_peer: list[EthPeer] | None = field(default=None, metadata=Params.multiple()) 538 tx_ip: TxIPAddrPair | None = None 539 tx_udp: TxUDPPortPair | None = None 540 enable_lro: Switch = None 541 max_lro_pkt_size: int | None = None 542 disable_crc_strip: Switch = None 543 enable_scatter: Switch = None 544 enable_hw_vlan: Switch = None 545 enable_hw_vlan_filter: Switch = None 546 enable_hw_vlan_strip: Switch = None 547 enable_hw_vlan_extend: Switch = None 548 enable_hw_qinq_strip: Switch = None 549 pkt_drop_enabled: Switch = field(default=None, metadata=Params.long("enable-drop-en")) 550 rss: RSSSetting | None = None 551 forward_mode: ( 552 SimpleForwardingModes 553 | FlowGenForwardingMode 554 | TXOnlyForwardingMode 555 | NoisyForwardingMode 556 | None 557 ) = None 558 hairpin_mode: HairpinMode | None = None 559 hairpin_queues: int | None = field(default=None, metadata=Params.long("hairpinq")) 560 burst: int | None = None 561 enable_rx_cksum: Switch = None 562 563 rx_queues: int | None = field(default=None, metadata=Params.long("rxq")) 564 rx_ring: RXRingParams | None = None 565 no_flush_rx: Switch = None 566 rx_segments_offsets: list[int] | None = field( 567 default=None, metadata=Params.long("rxoffs") | Params.convert_value(comma_separated) 568 ) 569 rx_segments_length: list[int] | None = field( 570 default=None, metadata=Params.long("rxpkts") | Params.convert_value(comma_separated) 571 ) 572 multi_rx_mempool: Switch = None 573 rx_shared_queue: Switch | int = field(default=None, metadata=Params.long("rxq-share")) 574 rx_offloads: int | None = field(default=None, metadata=Params.convert_value(hex)) 575 rx_mq_mode: RXMultiQueueMode | None = None 576 577 tx_queues: int | None = field(default=None, metadata=Params.long("txq")) 578 tx_ring: TXRingParams | None = None 579 tx_offloads: int | None = field(default=None, metadata=Params.convert_value(hex)) 580 581 eth_link_speed: int | None = None 582 disable_link_check: Switch = None 583 disable_device_start: Switch = None 584 no_lsc_interrupt: Switch = None 585 no_rmv_interrupt: Switch = None 586 bitrate_stats: int | None = None 587 latencystats: int | None = None 588 print_events: list[Event] | None = field( 589 default=None, metadata=Params.multiple() | Params.long("print-event") 590 ) 591 mask_events: list[Event] | None = field( 592 default_factory=lambda: [Event.intr_lsc], 593 metadata=Params.multiple() | Params.long("mask-event"), 594 ) 595 596 flow_isolate_all: Switch = None 597 disable_flow_flush: Switch = None 598 599 hot_plug: Switch = None 600 vxlan_gpe_port: int | None = None 601 geneve_parsed_port: int | None = None 602 lock_all_memory: YesNoSwitch = field(default=None, metadata=Params.long("mlockall")) 603 mempool_allocation_mode: SimpleMempoolAllocationMode | AnonMempoolAllocationMode | None = field( 604 default=None, metadata=Params.long("mp-alloc") 605 ) 606 record_core_cycles: Switch = None 607 record_burst_status: Switch = None 608