.. SPDX-License-Identifier: BSD-3-Clause
   Copyright 2023 The DPDK contributors

.. include:: <isonum.txt>

DPDK Release 24.03
==================

New Features
------------

* **Added HiSilicon UACCE bus support.**

  Added UACCE (Unified/User-space-access-intended Accelerator Framework) bus
  driver so that the accelerator devices such as a compress, crypto,
  DMA and ethernet devices could be seen and registered in DPDK.

* **Introduced argument parsing library.**

  The argparse library was added to help writing user-friendly applications,
  replacing ``getopt()`` usage.

* **Improved RSS hash algorithm support.**

  Added new function ``rte_eth_find_rss_algo``
  to get RSS hash algorithm by its name.

* **Added query of used descriptors number in Tx queue.**

  * Added a fast path function ``rte_eth_tx_queue_count``
    to get the number of used descriptors for a Tx queue.

* **Added hash calculation of an encapsulated packet as done by the HW.**

  Added function to calculate hash when doing tunnel encapsulation:
  ``rte_flow_calc_encap_hash()``

* **Added flow matching items and action.**

  * Added ``RTE_FLOW_ITEM_TYPE_COMPARE`` to allow matching
    on comparison result between packet fields or value.
  * Added ``RTE_FLOW_ITEM_TYPE_RANDOM`` to match a random value,
    and ``RTE_FLOW_FIELD_RANDOM`` to represent it with a field ID.
  * Added ``RTE_FLOW_ACTION_TYPE_NAT64`` to offload header conversion
    between IPv4 and IPv6.

* **Added flow template table resizing.**

  * ``RTE_FLOW_TABLE_SPECIALIZE_RESIZABLE_TABLE`` table configuration bit.
    Set at table creation to allow future resizing.
  * ``rte_flow_template_table_resizable()``.
    Query whether template table can be resized.
  * ``rte_flow_template_table_resize()``.
    Reconfigure template table for new flows capacity.
  * ``rte_flow_async_update_resized()``.
    Reconfigure flows for the updated table configuration.
  * ``rte_flow_template_table_resize_complete()``.
    Complete table resize.

* **Updated Amazon ena (Elastic Network Adapter) net driver.**

  * Removed the reporting of ``rx_overruns`` errors from xstats
    and instead updated ``imissed`` counter with its value.
  * Added support for sub-optimal configuration notifications from the device.
  * Added ``normal_llq_hdr`` devarg that enforces normal LLQ header policy.
  * Added support for LLQ header size recommendation from the device.
  * Allowed large LLQ with 1024 entries when the device supports enlarged memory BAR.
  * Added `control_poll_interval` devarg that configures the control-path to work in poll-mode.
  * Added support for binding ports to `uio_pci_generic` kernel module.

* **Updated Atomic Rules' Arkville driver.**

  * Added support for Atomic Rules' TK242 packet-capture family of devices
    with PCI IDs: ``0x1024, 0x1025, 0x1026``.

* **Updated Broadcom bnxt driver.**

  * Added support for 5760X device family.

* **Updated HiSilicon hns3 ethdev driver.**

  * Added new device supporting RDMA/DCB/ROH with PCI IDs: ``0xa227, 0xa22c``.

* **Updated Marvell cnxk net driver.**

  * Added support for port representors.
  * Added support for ``RTE_FLOW_ITEM_TYPE_PPPOES`` flow item.
  * Added support for ``RTE_FLOW_ACTION_TYPE_SAMPLE`` flow item.
  * Added support for Rx inject.
  * Added support for ``rte_eth_tx_queue_count()``.
  * Optimized SW external mbuf free for better performance and avoid SQ corruption.

* **Updated Marvell OCTEON EP driver.**

  * Optimized mbuf rearm sequence.
  * Updated Tx queue mbuf free thresholds from 128 to 256 for better performance.
  * Updated Rx queue mbuf refill routine to use mempool alloc and reorder it
    to avoid mbuf write commits.
  * Added option to control ISM memory accesses which gives better performance
    for lower packet sizes when enabled.
  * Added optimized SSE Rx routines.
  * Added optimized AVX2 Rx routines.
  * Added optimized NEON Rx routines.

* **Updated NVIDIA mlx5 driver.**

  * Added support for VXLAN-GPE matching in DV and HWS flow engines.
  * Added support for GENEVE matching and modifying in HWS flow engine.
  * Added support for modifying IPv4 proto field in HWS flow engine.
  * Added support for modifying IPsec ESP fields in HWS flow engine.
  * Added support for modifying IPv6 traffic class field in HWS flow engine.
  * Added support for modifying IPv6 flow label field in HWS flow engine.
  * Added support for matching a random value.
  * Added support for comparing result between packet fields or value.
  * Added support for accumulating value of field into another one.
  * Added support for copying inner fields in HWS flow engine.
  * Added support for ``RTE_FLOW_ACTION_TYPE_NAT64`` flow action in HWS flow engine.
  * Added support for sharing indirect action objects
    of type ``RTE_FLOW_ACTION_TYPE_METER_MARK`` and ``RTE_FLOW_ACTION_TYPE_CONNTRACK``
    in HWS flow engine.

* **Updated Intel QuickAssist Technology driver.**

  * Enabled support for new QAT GEN3 (578a) and QAT GEN5 (4946)
    devices in QAT crypto driver.
  * Enabled ZUC256 cipher and auth algorithm for wireless slice
    enabled GEN3 and GEN5 devices.
  * Added support for GEN LCE (1454) device, for AES-GCM only.
  * Enabled support for virtual QAT - vQAT (0da5) devices in QAT crypto driver.

* **Updated Marvell cnxk crypto driver.**

  * Added support for Rx inject in crypto_cn10k.
  * Added support for TLS record processing in crypto_cn10k
    to support TLS v1.2, TLS v1.3 and DTLS v1.2.
  * Added PMD API to allow raw submission of instructions to CPT.

* **Added Marvell Nitrox compression driver.**

  Added a new compression driver for Marvell Nitrox devices to support
  the deflate compression and decompression algorithm.

* **Updated Marvell cnxk eventdev driver.**

  * Added power-saving during polling within the ``rte_event_dequeue_burst()`` API.
  * Added support for DMA adapter.

* **Added DMA producer mode in eventdev test.**

  Added DMA producer mode to measure performance of ``OP_FORWARD`` mode
  of event DMA adapter.


Removed Items
-------------

* log: Removed the statically defined logtypes that were used internally by DPDK.
  All code should be using the dynamic logtypes (see ``RTE_LOG_REGISTER()``).
  The application reserved statically defined logtypes ``RTE_LOGTYPE_USER1..RTE_LOGTYPE_USER8``
  are still defined.

* acc101: Removed obsolete code for non productized HW variant.


API Changes
-----------

* eal: Removed ``typeof(type)`` from the expansion of ``RTE_DEFINE_PER_LCORE``
  and ``RTE_DECLARE_PER_LCORE`` macros aligning them with their intended design.
  If use with an expression is desired applications can adapt by supplying
  ``typeof(e)`` as an argument.

* eal: Improved ``RTE_BUILD_BUG_ON`` by using C11 ``static_assert``.
  Non-constant expressions are now rejected instead of being silently ignored.

* gso: ``rte_gso_segment`` now returns ``-ENOTSUP`` for unknown protocols.

* ethdev: Renamed structure ``rte_flow_action_modify_data`` to be
  ``rte_flow_field_data`` for more generic usage.


ABI Changes
-----------

* No ABI change that would break compatibility with 23.11.


Tested Platforms
----------------

* AMD platforms

  * CPU

    * AMD EPYC\ |trade| 7543 32-Core Processor @ 3.70GHz

      * BIOS 7.00.30.00

    * AMD EPYC\ |trade| 8534 64-Core Processor @ 3.10GHz

      * BIOS 7.00.00.00

  * OS:

    * Ubuntu 22.04.4 LTS

* Intel\ |reg| platforms with Intel\ |reg| NICs combinations

  * CPU

    * Intel Atom\ |reg| P5342 processor
    * Intel\ |reg| Atom\ |trade| CPU C3758 @ 2.20GHz
    * Intel\ |reg| Xeon\ |reg| CPU D-1553N @ 2.30GHz
    * Intel\ |reg| Xeon\ |reg| CPU E5-2699 v4 @ 2.20GHz
    * Intel\ |reg| Xeon\ |reg| D-1747NTE CPU @ 2.50GHz
    * Intel\ |reg| Xeon\ |reg| D-2796NT CPU @ 2.00GHz
    * Intel\ |reg| Xeon\ |reg| Gold 6139 CPU @ 2.30GHz
    * Intel\ |reg| Xeon\ |reg| Gold 6140M CPU @ 2.30GHz
    * Intel\ |reg| Xeon\ |reg| Gold 6252N CPU @ 2.30GHz
    * Intel\ |reg| Xeon\ |reg| Gold 6348 CPU @ 2.60GHz
    * Intel\ |reg| Xeon\ |reg| Platinum 8180 CPU @ 2.50GHz
    * Intel\ |reg| Xeon\ |reg| Platinum 8280M CPU @ 2.70GHz
    * Intel\ |reg| Xeon\ |reg| Platinum 8380 CPU @ 2.30GHz
    * Intel\ |reg| Xeon\ |reg| Platinum 8490H

  * OS:

    * CBL Mariner 2.0
    * Fedora 39
    * FreeBSD 14.0
    * OpenAnolis OS 8.8
    * openEuler 22.03 (LTS-SP2)
    * Red Hat Enterprise Linux Server release 8.7
    * Red Hat Enterprise Linux Server release 9.0
    * Red Hat Enterprise Linux Server release 9.2
    * Ubuntu 22.04.3

  * NICs:

    * Intel\ |reg| Ethernet Controller E810-C for SFP (4x25G)

      * Firmware version: 4.40 0x8001c982 1.3534.0
      * Device id (pf/vf): 8086:1593 / 8086:1889
      * Driver version(out-tree): 1.13.7 (ice)
      * Driver version(in-tree): 5.15.0-82-generic (Ubuntu22.04.3) /
        5.14.0-284.11.1.rt14.296.el9_2.x86_64 (RHEL9.2) (ice)
      * OS Default DDP: 1.3.35.0
      * COMMS DDP: 1.3.45.0
      * Wireless Edge DDP: 1.3.13.0

    * Intel\ |reg| Ethernet Controller E810-C for QSFP (2x100G)

      * Firmware version: 4.40 0x8001c967 1.3534.0
      * Device id (pf/vf): 8086:1592 / 8086:1889
      * Driver version(out-tree): 1.13.7 (ice)
      * Driver version(in-tree): 5.15.55.1-1.cm2-5464b22cac7+ (CBL Mariner 2.0) (ice)
      * OS Default DDP: 1.3.35.0
      * COMMS DDP: 1.3.45.0
      * Wireless Edge DDP: 1.3.13.0

    * Intel\ |reg| Ethernet Controller E810-XXV for SFP (2x25G)

      * Firmware version: 4.40 0x8001af86 1.3444.0
      * Device id (pf/vf): 8086:159b / 8086:1889
      * Driver version: 1.13.7 (ice)
      * OS Default DDP: 1.3.35.0
      * COMMS DDP: 1.3.45.0

    * Intel\ |reg| Ethernet Connection E823-C for QSFP

      * Firmware version: 3.33 0x8001b295 1.3443.0
      * Device id (pf/vf): 8086:188b / 8086:1889
      * Driver version: 1.13.7 (ice)
      * OS Default DDP: 1.3.35.0
      * COMMS DDP: 1.3.45.0
      * Wireless Edge DDP: 1.3.13.0

    * Intel\ |reg| Ethernet Connection E823-L for QSFP

      * Firmware version: 3.33 0x8001b4b0 1.3429.0
      * Device id (pf/vf): 8086:124c / 8086:1889
      * Driver version: 1.13.7 (ice)
      * OS Default DDP: 1.3.35.0
      * COMMS DDP: 1.3.45.0
      * Wireless Edge DDP: 1.3.13.0

    * Intel\ |reg| Ethernet Connection E822-L for backplane

      * Firmware version: 3.33 0x8001b4b6 1.3429.0
      * Device id (pf/vf): 8086:1897 / 8086:1889
      * Driver version: 1.13.7 (ice)
      * OS Default DDP: 1.3.35.0
      * COMMS DDP: 1.3.45.0
      * Wireless Edge DDP: 1.3.13.0

    * Intel\ |reg| 82599ES 10 Gigabit Ethernet Controller

      * Firmware version: 0x000161bf
      * Device id (pf/vf): 8086:10fb / 8086:10ed
      * Driver version(out-tree): 5.19.9 (ixgbe)
      * Driver version(in-tree): 5.15.0-82-generic (Ubuntu22.04.3) /
        5.14.0-284.11.1.el9_2.x86_64 (RHEL9.2)(ixgbe)

    * Intel\ |reg| Ethernet Converged Network Adapter X710-DA4 (4x10G)

      * Firmware version: 9.40 0x8000eca2 1.3429.0
      * Device id (pf/vf): 8086:1572 / 8086:154c
      * Driver version(out-tree): 2.24.6 (i40e)

    * Intel\ |reg| Corporation Ethernet Connection X722 for 10GbE SFP+ (2x10G)

      * Firmware version: 6.20 0x80003d82 1.3353.0
      * Device id (pf/vf): 8086:37d0 / 8086:37cd
      * Driver version(out-tree): 2.24.6 (i40e)
      * Driver version(in-tree): 5.14.0-284.11.1.el9_2.x86_64 (RHEL9.2)(i40e)

    * Intel\ |reg| Ethernet Converged Network Adapter XXV710-DA2 (2x25G)

      * Firmware version: 9.40 0x8000ed12 1.3429.0
      * Device id (pf/vf): 8086:158b / 8086:154c
      * Driver version(out-tree): 2.24.6 (i40e)
      * Driver version(in-tree): 5.15.0-82-generic (Ubuntu22.04.3) /
        5.14.0-284.11.1.el9_2.x86_64 (RHEL9.2)(i40e)

    * Intel\ |reg| Ethernet Converged Network Adapter XL710-QDA2 (2X40G)

      * Firmware version(PF): 9.40 0x8000ece4 1.3429.0
      * Device id (pf/vf): 8086:1583 / 8086:154c
      * Driver version(out-tree): 2.24.6 (i40e)

    * Intel\ |reg| Ethernet Controller I225-LM

      * Firmware version: 1.3, 0x800000c9
      * Device id (pf): 8086:15f2
      * Driver version(in-tree): 5.15.0-82-generic (Ubuntu22.04.3)(igc)

    * Intel\ |reg| Ethernet Controller I226-LM

      * Firmware version: 2.14, 0x8000028c
      * Device id (pf): 8086:125b
      * Driver version(in-tree): 5.15.0-82-generic (Ubuntu22.04.3)(igc)

* Intel\ |reg| platforms with NVIDIA\ |reg| NICs combinations

  * CPU:

    * Intel\ |reg| Xeon\ |reg| Gold 6154 CPU @ 3.00GHz
    * Intel\ |reg| Xeon\ |reg| CPU E5-2697A v4 @ 2.60GHz
    * Intel\ |reg| Xeon\ |reg| CPU E5-2697 v3 @ 2.60GHz
    * Intel\ |reg| Xeon\ |reg| CPU E5-2680 v2 @ 2.80GHz
    * Intel\ |reg| Xeon\ |reg| CPU E5-2670 0 @ 2.60GHz
    * Intel\ |reg| Xeon\ |reg| CPU E5-2650 v4 @ 2.20GHz
    * Intel\ |reg| Xeon\ |reg| CPU E5-2650 v3 @ 2.30GHz
    * Intel\ |reg| Xeon\ |reg| CPU E5-2640 @ 2.50GHz
    * Intel\ |reg| Xeon\ |reg| CPU E5-2650 0 @ 2.00GHz
    * Intel\ |reg| Xeon\ |reg| CPU E5-2620 v4 @ 2.10GHz

  * OS:

    * Red Hat Enterprise Linux release 9.1 (Plow)
    * Red Hat Enterprise Linux release 8.6 (Ootpa)
    * Red Hat Enterprise Linux release 8.4 (Ootpa)
    * Red Hat Enterprise Linux Server release 7.9 (Maipo)
    * Red Hat Enterprise Linux Server release 7.6 (Maipo)
    * Ubuntu 22.04
    * Ubuntu 20.04
    * SUSE Enterprise Linux 15 SP2

  * OFED:

    * MLNX_OFED 24.01-0.3.3.1 and above

  * upstream kernel:

    * Linux 6.8.0 and above

  * rdma-core:

    * rdma-core-50.0 and above

  * NICs

    * NVIDIA\ |reg| ConnectX\ |reg|-6 Dx EN 100G MCX623106AN-CDAT (2x100G)

      * Host interface: PCI Express 4.0 x16
      * Device ID: 15b3:101d
      * Firmware version: 22.40.1000 and above

    * NVIDIA\ |reg| ConnectX\ |reg|-6 Lx EN 25G MCX631102AN-ADAT (2x25G)

      * Host interface: PCI Express 4.0 x8
      * Device ID: 15b3:101f
      * Firmware version: 26.40.1000 and above

    * NVIDIA\ |reg| ConnectX\ |reg|-7 200G CX713106AE-HEA_QP1_Ax (2x200G)

      * Host interface: PCI Express 5.0 x16
      * Device ID: 15b3:1021
      * Firmware version: 28.40.1000 and above

* NVIDIA\ |reg| BlueField\ |reg| SmartNIC

  * NVIDIA\ |reg| BlueField\ |reg|-2 SmartNIC MT41686 - MBF2H332A-AEEOT_A1 (2x25G)

    * Host interface: PCI Express 3.0 x16
    * Device ID: 15b3:a2d6
    * Firmware version: 24.40.1000 and above

  * NVIDIA\ |reg| BlueField\ |reg|-3 P-Series DPU MT41692 - 900-9D3B6-00CV-AAB (2x200G)

    * Host interface: PCI Express 5.0 x16
    * Device ID: 15b3:a2dc
    * Firmware version: 32.40.1000 and above

  * Embedded software:

    * Ubuntu 22.04
    * MLNX_OFED 24.01-0.3.3.0 and above
    * DOCA_2.6.0_BSP_4.6.0_Ubuntu_22.04-5.24-01
    * DPDK application running on ARM cores

* IBM Power 9 platforms with NVIDIA\ |reg| NICs combinations

  * CPU:

    * POWER9 2.2 (pvr 004e 1202)

  * OS:

    * Ubuntu 20.04

  * NICs:

    * NVIDIA\ |reg| ConnectX\ |reg|-6 Dx 100G MCX623106AN-CDAT (2x100G)

      * Host interface: PCI Express 4.0 x16
      * Device ID: 15b3:101d
      * Firmware version: 22.40.1000 and above

    * NVIDIA\ |reg| ConnectX\ |reg|-7 200G CX713106AE-HEA_QP1_Ax (2x200G)

      * Host interface: PCI Express 5.0 x16
      * Device ID: 15b3:1021
      * Firmware version: 28.40.1000 and above

  * OFED:

    * MLNX_OFED 24.01-0.3.3.1