1. DPDK Release 26.11
1.1. New Features
Added division round up macro.
Added the
RTE_DIV_ROUND_UPmacro inrte_common.hto divide dividend by divisor, rounding up to the nearest integer.Improved pointer arithmetic macros.
Updated the macros
RTE_PTR_ADD,RTE_PTR_SUB,RTE_PTR_ALIGN,RTE_PTR_ALIGN_CEILandRTE_PTR_ALIGN_FLOORto preserve const/volatile qualifiers and use pointer arithmetic instead of integer casts to enable compiler optimizations. See API changes below.Added API to get CPU socket ID.
Added the experimental
rte_cpu_socket_id()function to map an OS logical CPU ID to the NUMA socket containing that CPU.Added pile stack and mempool driver.
Introduced pile, a lock-free, stack-like implementation, optimized for bulk operations. The pile is only LIFO on bulk level, not on object level; i.e. arrays of bulks are pushed and popped in LIFO manner, but objects within each bulk are not ordered as expected by a stack. Furthermore, it is not strictly bounded by its size, but might hold more objects.
Added TPID support to VLAN tag insertion.
Added
rte_vlan_insert_tpid()to the net library.Added VFIO cdev (IOMMUFD) mode.
Added support for the VFIO character device (cdev) API, also known as IOMMUFD. DPDK now supports both the group mode and the new cdev mode.
Added support for device-tree compatible matching in the platform bus.
The platform bus now matches DPDK drivers against the device-tree
compatiblesysfs strings exposed by each platform device, in addition to the existing kernel driver name and device name checks. This allows drivers to be probed by DT compatible string when the kernel driver is the genericvfio-platform, which carries no device identity in its name.Added module EEPROM decoding API to ethdev.
Added the experimental
rte_eth_module_eeprom_parse()function to decode pluggable module EEPROM data according to the SFF specifications. It can decode data read withrte_eth_dev_get_module_eeprom()or obtained from any other source with the same layout, such as the Linux ethtoolETHTOOL_GMODULEEEPROMioctl. The testpmd commandshow port (port_id) module_eeprom decodeuses it to display the decoded module EEPROM. The SFF-8636 decoder also reports the per-lane loss of signal, loss of lock and Tx fault flags. The SFF-8472 decoder also reports the Rx loss of signal and Tx fault state.Added flow item default mask lookup.
Added
RTE_FLOW_CONV_OP_ITEM_DEFAULT_MASK_PTRconversion operation torte_flow_conv()to retrieve the default mask of a flow item type.Added internal ethdev flow graph parser helper API.
Added internal
flow_graphAPI in ethdev for PMD drivers to build graph-based flow pattern parsers.Updated AF_XDP driver.
Changed the default device plugin endpoint path used when
use_cnioruse_pinned_mapis set withoutdp_path. See AF_XDP Poll Mode Driver for more details.Added support for Rx metadata hardware timestamping via vdev devargs
xdp_meta_rx_ts_offset,xdp_meta_valid_hint_offset, andxdp_meta_rx_ts_valid_mask.Added
read_clockoperation to query the PTP hardware clock.
Updated Broadcom bnxt driver.
Added
tx_dma_err_cmplstatistics to report Tx completions that the device flagged with a DMA error. This is a port-level counter, and is also folded into the standardoerrorscounter.Raised the maximum Tx and Rx ring descriptor counts from 4096/8192 to 16384 each.
Updated Intel iavf driver.
Runtime Rx/Tx queue setup is now automatically disabled while a per-queue bandwidth
rte_tmhierarchy is committed, to avoid corrupting queue state on E810 VFs.Renamed the
enable_ptype_lldpdevarg toenable_lldp. The old name is no longer accepted.Increased the maximum number of secondary unicast MAC addresses from 64 to 32k. This increases a VF port memory footprint by ~192kB.
Updated Intel ice driver.
Added Tx context descriptor support to the AVX2 and AVX512 vector Tx paths, enabling QinQ tag insertion and outer IPv4/UDP checksum offloads on those paths.
Added support for getting and setting link (802.3x) flow control.
Added support for Tx rate limiting per queue.
Updated Intel ixgbe driver.
Added
fdir_buffer_sizedevarg to select the Flow Director table size (64k,128kor256k) at probe time. The default remains64k.Updated NVIDIA mlx5 ethernet driver.
Increased the maximum number of secondary unicast MAC addresses from 128 to up to 4096 (depending on devlink configuration on the associated kernel netdevice).
Updated NXP DPAA2 ethernet driver.
Added the inner IP header to the RSS hash so tunneled traffic is distributed across the Rx queues.
Updated NXP ENETC4 PMD.
Updated the NXP ENETC4 poll mode driver for i.MX95:
Added
RTE_ETH_RX_OFFLOAD_KEEP_CRCsupport for the ENETC4 PMD to preserve the Ethernet FCS.Added TCP Segmentation Offload (TSO) support for the ENETC4 VF.
Added Receive Segment Coalesce (RSC / hardware LRO) support for ENETC4 PF and VF.
Extended the PF-to-VF link speed code field from 4-bit to 8-bit in ENETC4. Users running a PF kernel older than 6.18.37 must pass
vf_link_legacy=1as a device argument, otherwise link speed reporting will be incorrect.Added firmware version reporting for the ENETC4 VF.
Added register dump support for ENETC4 PF and VF.
Added ring parameters support for the ENETC4 VF (
rxq_info_get/txq_info_get).Refreshed VF link speed on the link-up interrupt in the ENETC4 VF driver.
Added stats reset for the ENETC4 VF using a software snapshot/delta approach.
Added per-queue MSI-X Rx interrupt support for the ENETC4 VF.
Added SI-based port VLAN insertion (Tx) and removal (Rx) for ENETC4 PF and VF.
Updated ENETC4 VF link status reporting to use bitmask encoding.
Added Tx pause support for the ENETC4 VF via Rx congestion mode.
Added WRR Tx scheduler devarg (
enetc4_txq_wrr) for ENETC4 VF ring weights.
Updated Solarflare network driver.
Added VF support on AMD Solarflare X45xx adapters.
Updated ZTE zxdh ethernet driver.
Added a fast single-segment Rx path (
zxdh_recv_single_pkts) that is selected when the MTU fits in a single buffer.Optimized the packed-ring Rx path.
Optimized the packed-ring Tx path with per-descriptor mbuf free (
rte_pktmbuf_free_seg) and prefetch hints.Changed the set of per-queue xstats counters.
Added RSA capability parameters in cryptodev.
Added
rte_crypto_rsa_capato report RSA modulus length, supported padding schemes, and MGF1 hash algorithms. Also addedpss_explicit_saltso a PMD can advertise support for an application-supplied RSA-PSS salt, along with the correspondingpss_saltfield inrte_crypto_rsa_op_paramto carry it per sign operation.Added AMD AE4DMA DMA PMD.
Added a new dmadev driver for the AMD AE4DMA hardware DMA engine. Each PCI function exposes 16 hardware command queues; the PMD registers one dmadev per channel with a single virtual channel and supports memory-to-memory copy operations.
Added NXP i.MX95 eDMA5 DMA driver.
Added a DMA driver for the NXP i.MX95 eDMA5 controller. The driver exposes each eDMA5 instance as a DPDK dmadev device and supports memory-to-memory copy and scatter-gather copy operations.
Added per-queue statistics API in bbdev.
Added
rte_bbdev_queue_stats_get()function to retrieve statistics for a specific queue, complementing the existing device-level statistics API.Supported auto-detection of uncore power driver.
The uncore power library got automatic probing of multiple uncore drivers when using
RTE_UNCORE_PM_ENV_AUTO_DETECT, instead of defaulting only to the Intel uncore driver.Added graph profiling.
Added build time configurable graph node profiling statistics via
RTE_GRAPH_PROFILEinrte_config.h(disabled by default). When enabled, tracks cycles spent processing various burst size ranges per node. The edges of the ranges are build time configurable viaRTE_GRAPH_PROFILE_BURST_SMALL,RTE_GRAPH_PROFILE_BURST_MEDIUM, andRTE_GRAPH_PROFILE_BURST_LARGEinrte_config.h.Changed graph internal scheduling mechanism.
The graph walk functions now process nodes in topological order using bitmap scanning instead of a circular buffer. This ensures that in fan-out-then-converge topologies, all branches feeding a converge node complete before that node is visited. Reducing the occurrence of double-visits.
Added BPF validation application.
Added
dpdk-validate-bpftool to pre-validate eBPF programs for compatibility with thelib/bpfexecution context.
1.2. Removed Items
Removed deprecated symbols:
eal:
__rte_packedfib:
RTE_FIB6_IPV6_ADDR_SIZE,RTE_FIB6_MAXDEPTHlpm:
RTE_LPM6_IPV6_ADDR_SIZE,RTE_LPM6_MAX_DEPTHnet:
RTE_IP_ICMP_ECHO_REPLY,RTE_IP_ICMP_ECHO_REQUESTpci:
PCI_ID_ANYrib:
RTE_RIB6_IPV6_ADDR_SIZE,get_msk_part,rte_rib6_copy_addr,rte_rib6_is_equaltable:
RTE_LPM_IPV6_ADDR_SIZE
Removed the
rte_atomicNN_ttypes and therte_atomicNN_*functions (16, 32 and 64 bit variants ofinit,read,set,add,sub,inc,dec,add_return,sub_return,inc_and_test,dec_and_test,test_and_set,clear,cmpsetandexchange). Use the C11rte_atomic_*_explicitoperations instead.Removed SMP memory barriers:
rte_smp_mb()replaced withrte_atomic_thread_fence(rte_memory_order_seq_cst)rte_smp_rmb()replaced withrte_atomic_thread_fence(rte_memory_order_acquire)rte_smp_wmb()replaced withrte_atomic_thread_fence(rte_memory_order_release)
Some call sites became release stores or acquire loads instead of a standalone fence. Barriers that order CPU accesses against a device, rather than against another CPU, should use
rte_io_wmb()andrte_io_rmb()instead.mempool: Removed the deprecated and obsolete
flushthreshfield from therte_mempool_cachestructure.net: Removed
version,ds,ecnandflow_labelbitfields fromstruct rte_ipv6_hdr. They accessed the wrong bits on little endian. Usevtc_flowwith theRTE_IPV6_HDR_*_MASKandRTE_IPV6_HDR_*_SHIFTmacros.ethdev: Removed support for ethdev queue stats mapping.
rte_eth_dev_set_tx_queue_stats_mappingandrte_eth_dev_set_rx_queue_stats_mappingwere deprecated and are now removed.ethdev: Removed the
RTE_ETHDEV_QUEUE_STAT_CNTRSbuild time limit. Per-queue xstats are now reported for all queues, not just the first 16. Therx_qN_errorsxstat is removed, drops are still counted inierrors.pipeline: Removed the legacy library API:
rte_pipeline_*,rte_table_*,rte_table_action_*,rte_port_*andrte_port_in_action_*functions. The SWX API (rte_swx_pipeline_*,rte_swx_table_*,rte_swx_port_*) remains. Removed thedpdk-test-pipelineapplication, and theip_pipelineexample application, which were based on the legacy pipeline library API. Thepipelineexample application covers the SWX pipeline API.sched: Removed the private random number generator used by RED: the inline function
rte_fast_rand().metrics: Removed the
rte_metrics_telemetry.hheader and the experimental telemetry helper API:rte_metrics_tel_reg_all_ethdev,rte_metrics_tel_encode_json_format,rte_metrics_tel_get_global_stats,rte_metrics_tel_get_port_stats_ids,rte_metrics_tel_get_ports_stats_jsonandrte_metrics_tel_extract_data. These had no users and exposed jansson types in the public header. The legacy telemetry commandsports_all_stat_values,global_stat_valuesandports_stats_values_by_nameare unchanged.net/iavf: Removed the
auto_reconfigdevarg.The restoration of the promiscuous and all-multicast settings after a VF reset is now unconditional.
net/iavf: Removed the dynamic mbuf field method for detecting LLDP packets on the transmit path, along with the
set tx lldp ontestpmd command. The only remaining method for detecting LLDP packets is by using the mbuf packet type in conjunction with theenable_lldpdevarg.net/bnxt: Removed VMDq support. Applications configuring VMDq pools on bnxt now get zero pools reported, matching no VMDq hardware support.
1.3. API Changes
eal: Improved pointer arithmetic macros.
RTE_PTR_ADD,RTE_PTR_SUB,RTE_PTR_ALIGN,RTE_PTR_ALIGN_CEIL, andRTE_PTR_ALIGN_FLOORnow preserve const/volatile qualifiers. These macros do not nest infinitely and may require intermediate variables.Passing NULL to
RTE_PTR_ADD,RTE_PTR_SUB,RTE_PTR_ALIGN,RTE_PTR_ALIGN_CEIL, orRTE_PTR_ALIGN_FLOORclarified as undefined behavior.RTE_PTR_ADDandRTE_PTR_SUBno longer accept integer types as the pointer argument; existing code should use native operators (e.g. + -).RTE_PTR_ALIGN,RTE_PTR_ALIGN_CEILandRTE_PTR_ALIGN_FLOORstill compile with an integer argument, but this is deprecated usage: existing code should useRTE_ALIGN,RTE_ALIGN_CEILorRTE_ALIGN_FLOORinstead.
eal: Unaligned integer types are now really unaligned.
unaligned_uint16_t,unaligned_uint32_tandunaligned_uint64_tare now declared with an alignment of 1 on all architectures. The compiler may generate narrower loads and stores than before.eal: The entire VFIO API (
rte_vfio_*) was made internal. These functions are now available only to EAL and drivers, and are no longer part of the public API.interrupts: Updated interrupt handle file descriptor management.
rte_intr_instance_alloc()now initializes file descriptors to invalid values instead of zero.Added
rte_intr_fd_close()andrte_intr_dev_fd_close()helpers to close file descriptors and reset them to -1.
mempool: When creating a mempool, the cache size can be freely specified (although still not exceed the number of elements), and is no longer limited by the
RTE_MEMPOOL_CACHE_MAX_SIZEbuild time configuration parameter. AlthoughRTE_MEMPOOL_CACHE_MAX_SIZEhas lost its original meaning, it was kept for compatibility purposes, as it is often used for thecache_sizeparameter when creating mempools.mempool: Updated the
rte_mempoolstructure as follows:Added the
sizeof_cache_per_lcorefield, for indexing into the per-lcore local cache.
mempool: Updated the
rte_mempool_cachestructure as follows:Removed the deprecated and obsolete
flushthreshfield.Removed the
unusedfield.Changed the
objsarray from fixed size to variable size.
ethdev: Updated VMDq related API.
At port configuration time, the number of VMDq pools advertised by a driver is now used to validate VMDq related Rx and Tx modes (
RTE_ETH_MQ_RX_VMDQ_FLAG,RTE_ETH_MQ_TX_VMDQ_DCB,RTE_ETH_MQ_TX_VMDQ_ONLY).A check was added in
rte_eth_dev_mac_addr_addto validate that thepoolparameter is 0 when VMDq is not configured.The
RTE_ETH_NUM_RECEIVE_MAC_ADDRandRTE_ETH_VMDQ_NUM_UC_HASH_ARRAYmacros are VMDq related and are sizes of internal arrays in ethdev that only drivers need to care about. Those macros are moved to the driver only ethdev API.
ethdev: Promoted the following API from experimental to stable:
device info:
rte_eth_dev_capability_name,rte_eth_dev_conf_get,rte_eth_macaddrs_get,rte_eth_dev_priv_dump,rte_eth_rx_descriptor_dump,rte_eth_tx_descriptor_dump,rte_eth_dev_rss_algo_name,rte_eth_find_rss_algoandrte_eth_dev_get_reg_info_extfast path inline functions:
rte_eth_recycle_mbufsandrte_eth_tx_queue_countlink speed:
rte_eth_link_speed_to_strandrte_eth_link_to_strspeed lanes:
rte_eth_speed_lanes_get,rte_eth_speed_lanes_setandrte_eth_speed_lanes_get_capabilitySFF:
rte_eth_dev_get_module_infoandrte_eth_dev_get_module_eepromhairpin queue:
rte_eth_rx_hairpin_queue_setup,rte_eth_tx_hairpin_queue_setup,rte_eth_dev_hairpin_capability_get,rte_eth_hairpin_bind,rte_eth_hairpin_unbind,rte_eth_hairpin_get_peer_portsqueue helpers:
rte_eth_rx_queue_is_valid,rte_eth_tx_queue_is_valid,rte_eth_rx_avail_thresh_set,rte_eth_rx_avail_thresh_query,rte_eth_recycle_rx_queue_info_get,rte_eth_dev_count_aggr_portsandrte_eth_dev_map_aggr_tx_affinityclock:
rte_eth_read_clockFEC:
rte_eth_fec_get_capability,rte_eth_fec_getandrte_eth_fec_setpriority flow:
rte_eth_dev_priority_flow_ctrl_queue_configureandrte_eth_dev_priority_flow_ctrl_queue_info_getmeter (MTR) and policing:
rte_mtr_*congestion management:
rte_eth_cman_config_init,rte_eth_cman_config_set,rte_eth_cman_config_getandrte_eth_cman_info_getIP reassembly:
rte_eth_ip_reassembly_capability_get,rte_eth_ip_reassembly_conf_getandrte_eth_ip_reassembly_conf_setutility functions:
rte_eth_get_monitor_addr,rte_eth_representor_info_get,rte_eth_buffer_split_get_supported_hdr_ptypes,rte_eth_timesync_adjust_freqandrte_tm_node_querybuffer split and error handling types:
rte_eth_rxseg_split,rte_eth_rxseg,rte_eth_rxseg_capaandrte_eth_err_handle_modeflow conversion and dump:
rte_flow_convandrte_flow_dev_dumpflow tunnel:
rte_flow_tunnel_decap_set,rte_flow_tunnel_match,rte_flow_tunnel_item_release,rte_flow_tunnel_action_decap_releaseandrte_flow_get_restore_infoflow age:
rte_flow_get_aged_flowsandrte_flow_get_q_aged_flowsflow action:
rte_flow_action_handle_*andrte_flow_action_list_handle_*flow flex:
rte_flow_flex_item_createandrte_flow_flex_item_releaseflow template:
rte_flow_configure,rte_flow_info_get,rte_flow_pattern_*,rte_flow_actions_*,rte_flow_template_*,rte_flow_async_*,rte_flow_push,rte_flow_pullremaining flow helpers:
rte_flow_actions_update,rte_flow_restore_info_dynflag,rte_flow_calc_table_hash,rte_flow_group_set_miss_actions, andrte_flow_calc_encap_hashall remaining
rte_flowitem, action and async operation structures
eventdev: Promoted the following API from experimental to stable:
Rx adapter:
rte_event_eth_rx_adapter_create_ext_with_params,rte_event_eth_rx_adapter_runtime_params_init,rte_event_eth_rx_adapter_runtime_params_setandrte_event_eth_rx_adapter_runtime_params_getTx adapter:
rte_event_eth_tx_adapter_runtime_params_init,rte_event_eth_tx_adapter_runtime_params_setandrte_event_eth_tx_adapter_runtime_params_getcrypto adapter:
rte_event_crypto_adapter_runtime_params_init,rte_event_crypto_adapter_runtime_params_setandrte_event_crypto_adapter_runtime_params_gettimer adapter:
rte_event_timer_remaining_ticks_getDMA adapter:
rte_event_dma_adapter_*link profiles:
rte_event_port_profile_links_set,rte_event_port_profile_links_getandrte_event_port_profile_unlink
reorder: Promoted the following API from experimental to stable:
rte_reorder_seqn,rte_reorder_drain_up_to_seqn,rte_reorder_min_seqn_setandrte_reorder_memory_footprint_get.vhost: Removed
get_vfio_group_fdfromstruct rte_vdpa_dev_ops. vDPA drivers should now use the VFIO container device assignment API.graph: The internal scheduling mechanism of
struct rte_graphhas changed. The circular buffer fields (head,tail,cir_mask,cir_start) have been replaced with a topological bitmap scheduler.struct rte_nodehas a new internal field to hold the scheduling order.bpf: Made the
bpf_def.hheader file private, so eBPF instruction opcodes are no longer publicly available (their numerical values follow the RFC and e.g. Linux headers). The definition of the instruction struct and number of program arguments were moved torte_bpf.hand gained the publicRTE_prefix:struct rte_ebpf_insnandRTE_BPF_FUNC_MAX_ARGS.telemetry: Promoted the following API from experimental to stable:
rte_tel_data_add_array_uint_hexrte_tel_data_add_dict_uint_hexrte_telemetry_register_cmd_arg
1.4. ABI Changes
cryptodev: The struct
rte_cryptodev_asymmetric_xform_capabilitywas updated to includersa_capa, a newrte_crypto_rsa_capafield.cryptodev: The struct
rte_crypto_rsa_op_paramwas updated to includepss_salt.