1. DPDK Release 22.11
1.1. New Features
Added initial LoongArch architecture support.
Added EAL implementation for LoongArch architecture. The initial devices the porting was tested on included Loongson 3A5000, Loongson 3C5000 and Loongson 3C5000L. In theory this implementation should work with any target based on
LoongArch
ISA.Added support for multiple mbuf pools per ethdev Rx queue.
The capability allows application to provide many mempools of different size, and PMD and/or NIC to choose a memory pool based on the packet’s length and/or Rx buffers availability.
Added support for congestion management in ethdev.
Added new API functions
rte_eth_cman_config_init()
,rte_eth_cman_config_get()
,rte_eth_cman_config_set()
,rte_eth_cman_info_get()
to support congestion management.Added protocol header based buffer split.
Added
rte_eth_buffer_split_get_supported_hdr_ptypes()
to get supported header protocols to split at.Supported protocol-based buffer split using added
proto_hdr
in structurerte_eth_rxseg_split
.
Added proactive error handling mode for ethdev.
Added proactive error handling mode for ethdev, and three events were introduced:
RTE_ETH_EVENT_ERR_RECOVERING
to report that the port is recovering from an error,RTE_ETH_EVENT_RECOVER_SUCCESS
andRTE_ETH_EVENT_RECOVER_FAILED
.Added ethdev Rx/Tx descriptor dump API.
Added the ethdev Rx/Tx descriptor dump API which provides functions for querying descriptor from device. The descriptor information differs in different NICs. The information demonstrates I/O process which is important for debug. The dump format is vendor-specific.
Added ethdev hairpin memory configuration options.
Added new configuration flags for hairpin queues in
rte_eth_hairpin_conf
:use_locked_device_memory
use_rte_memory
force_memory
Each flag has a corresponding capability flag in
struct rte_eth_hairpin_queue_cap
.Added configuration for asynchronous flow connection tracking.
Added connection tracking action number hint to
rte_flow_configure
andrte_flow_info_get
. PMD can prepare the connection tracking resources according to the hint.Added support for queue-based async query in flow API.
Added new function
rte_flow_async_action_handle_query()
, to query the action asynchronously.Extended metering and marking support in the flow API.
Added METER_COLOR item to match color marker set by a meter.
Added ability to set color marker via modify field flow API.
Added meter API to get a pointer to profile/policy by their ID.
Added METER_MARK action for metering with lockless profile/policy access.
Added flow offload action to route packets to kernel.
Added new flow action which allows application to re-route packets directly to the kernel without software involvement.
Updated AF_XDP driver.
Made compatible with libbpf v0.8.0 (when used with libxdp).
Updated AMD Pensando ionic driver.
Updated to reflect that Pensando has been acquired by AMD.
Enhanced data path to provide substantial performance improvements.
Added support for mbuf fast free.
Added support for advertising packet types.
Added support for descriptor status functions.
Added Q-in-CMB feature controlled by device option
ionic_cmb
.Added optimized handlers for non-scattered Rx and Tx.
Added GVE net PMD
Added the new
gve
net driver for Google Virtual Ethernet devices.See the GVE poll mode driver NIC guide for more details on this new driver.
Updated Intel iavf driver.
Added flow subscription support.
Updated Intel ice driver.
Added protocol based buffer split support in scalar path.
Added Intel idpf driver.
Added the new
idpf
net driver for Intel® Infrastructure Processing Unit (Intel® IPU) E2000. See the IDPF Poll Mode Driver NIC guide for more details on this new driver.Updated Marvell cnxk driver.
Added support for flow action REPRESENTED_PORT.
Added support for congestion management.
Added Microsoft mana driver.
Disabled by default because of missing dependency.
Updated Netronome nfp driver.
Added flow API support:
Added the support of flower firmware.
Added the flower service infrastructure.
Added the control message interactive channels between PMD and firmware.
Added the support of representor port.
Updated NVIDIA mlx5 driver.
Added full support for queue-based async HW steering. - Support of FDB. - Support of control flow and isolate mode. - Support of conntrack. - Support of counter. - Support of meter. - Support of modify fields.
Updated NXP dpaa2 driver.
Added support for flow action REPRESENTED_PORT.
Updated Wangxun ngbe driver.
Added support to set device link down/up.
Added DMA vChannel unconfiguration for async vhost.
Added support to unconfigure DMA vChannel that is no longer used by the vhost library.
Added non-blocking notify API to vhost library.
Added
rte_vhost_vring_call_nonblock
API to notify the guest that used descriptors have been added to the vring in non-blocking way. User should check the return value of this API and try again if needed.Added support for MACsec in rte_security.
Added MACsec transform for rte_security session and added new API to configure security associations (SA) and secure channels (SC).
Added new algorithms to cryptodev.
Added symmetric hash algorithm ShangMi 3 (SM3).
Added symmetric cipher algorithm ShangMi 4 (SM4) in ECB, CBC and CTR modes.
Updated Intel QuickAssist Technology (QAT) crypto driver.
Added support for SM3 hash algorithm.
Added support for SM4 encryption algorithm in ECB, CBC and CTR modes.
Added support for ECDH key exchange algorithm.
Updated Marvell cnxk crypto driver.
Added AES-CCM support in lookaside protocol (IPsec) for CN9K & CN10K.
Added AES & DES DOCSIS algorithm support in lookaside crypto for CN9K.
Updated aesni_mb crypto driver.
Added support for 8-byte and 16-byte tags for ZUC-EIA3-256.
Added support for in-place SGL, out-of-place SGL in SGL out, out-of-place LB in SGL out, and out-of-place SGL in LB out.
Added UADK crypto driver.
Added a new crypto driver for the UADK library. See the UADK Crypto Poll Mode Driver guide for more details on this new driver.
Added bbdev operation for FFT processing.
Added a new operation type in bbdev for FFT processing with new functions
rte_bbdev_enqueue_fft_ops
,rte_bbdev_dequeue_fft_ops
, and related structures.Added Intel ACC200 bbdev driver.
Added a new
acc200
bbdev driver for the Intel® ACC200 accelerator integrated on SPR-EE. See the Intel® ACC200 vRAN Dedicated Accelerator Poll Mode Driver guide for more details on this new driver.Added eventdev adapter instance get API.
Added
rte_event_eth_rx_adapter_instance_get
to get Rx adapter instance ID for specified ethernet device ID and Rx queue index.Added
rte_event_eth_tx_adapter_instance_get
to get Tx adapter instance ID for specified ethernet device ID and Tx queue index.
Added eventdev Tx adapter queue start/stop API.
Added
rte_event_eth_tx_adapter_queue_start
to start enqueueing packets to the Tx queue by Tx adapter.Added
rte_event_eth_tx_adapter_queue_stop
to stop the Tx Adapter from enqueueing any packets to the Tx queue.
Added event crypto adapter vectorization support.
Added support to aggregate crypto operations processed by event crypto adapter into single event containing
rte_event_vector
whose event type isRTE_EVENT_TYPE_CRYPTODEV_VECTOR
.Added NitroSketch in membership library.
Added a new data structure called sketch into membership library, to profile the traffic efficiently. NitroSketch provides high-fidelity approximate measurements and appears as a promising alternative to traditional approaches such as packet sampling.
Added Intel uncore frequency control API to the power library.
Added API to allow uncore frequency adjustment. This is done through manipulating related uncore frequency control sysfs entries to adjust the minimum and maximum uncore frequency values, which works on Linux with Intel hardware only.
Updated IPsec sample application.
Added support for lookaside sessions in event mode. See the IPsec Security Gateway Sample Application for more details.
Updated FIPS validation sample application.
Added support for asymmetric crypto algorithms. See the Federal Information Processing Standards (FIPS) CryptoDev Validation for more details.
Rewritten pmdinfo script.
The
dpdk-pmdinfo.py
script was rewritten to produce valid JSON only. PCI-IDs parsing has been removed. To get a similar output to the (now removed)-r/--raw
flag, the following command may be used:strings $dpdk_binary_or_driver | sed -n 's/^PMD_INFO_STRING= //p'
1.2. Removed Items
mem: Removed not implemented and deprecated
rte_malloc_set_limit
.ethdev: removed
RTE_FLOW_ITEM_TYPE_PF
; useRTE_FLOW_ITEM_TYPE_REPRESENTED_PORT
.ethdev: removed
RTE_FLOW_ITEM_TYPE_VF
; useRTE_FLOW_ITEM_TYPE_REPRESENTED_PORT
.ethdev: removed
RTE_FLOW_ITEM_TYPE_PHY_PORT
; useRTE_FLOW_ITEM_TYPE_REPRESENTED_PORT
.ethdev: removed
RTE_FLOW_ACTION_TYPE_PHY_PORT
; useRTE_FLOW_ACTION_TYPE_REPRESENTED_PORT
.ethdev: removed
OF_SET_MPLS_TTL
,OF_DEC_MPLS_TTL
,OF_SET_NW_TTL
,OF_COPY_TTL_OUT
andOF_COPY_TTL_IN
which are not actually supported by any PMD.MODIFY_FIELD
action should be used to do packet edits via flow API.vhost: Removed deprecated
rte_vhost_gpa_to_vva
andrte_vhost_get_queue_num
helpers.
1.3. API Changes
eal: RTE_FUNC_PTR_OR_* macros have been marked deprecated and will be removed in the future. Applications can use
devtools/cocci/func_or_ret.cocci
to update their code.eal: Updated
rte_eal_remote_launch
so it returns -EPIPE in case of a read or write error on the pipe, instead of callingrte_panic
.eal: Updated return types for rte_{bsf,fls} inline functions to be consistently
uint32_t
.mempool: Deprecated helper macro
MEMPOOL_HEADER_SIZE()
is removed. The replacement macroRTE_MEMPOOL_HEADER_SIZE()
is internal only.mempool: Deprecated macro to register mempool driver
MEMPOOL_REGISTER_OPS()
is removed. Use replacement macroRTE_MEMPOOL_REGISTER_OPS()
instead.mempool: Deprecated macros
MEMPOOL_PG_NUM_DEFAULT
andMEMPOOL_PG_SHIFT_MAX
are removed. These macros are not used and not required any more.mbuf: Removed deprecated
PKT_*
flags. Use corresponding flags withRTE_MBUF_F_
prefix instead. Application can usedevtools/cocci/prefix_mbuf_offload_flags.cocci
to replace all occurrences of old mbuf flags in C code.bus: Changed the device numa node to -1 when NUMA information is unavailable. The
dev->device.numa_node
field is set by each bus driver for every device it manages to indicate on which NUMA node this device lies. When this information is unknown, the assigned value was not consistent across the bus drivers. This similarly impactsrte_eth_dev_socket_id()
.bus: Registering a bus has been marked as an internal API. External users may still register their bus using the
bus_driver.h
driver header (seeenable_driver_sdk
meson option). Therte_bus
object is now opaque and must be manipulated through added accessors.drivers: Registering a driver on the
auxiliary
,ifpga
,pci
,vdev
,vmbus
buses has been marked as an internal API. External users may still register their driver using the associated driver headers (seeenable_driver_sdk
meson option). Therte_driver
andrte_device
objects are now opaque and must be manipulated through added accessors.ethdev: Removed deprecated macros. Applications can use
devtools/cocci/namespace_ethdev.cocci
to update their code.Removed deprecated
ETH_LINK_SPEED_*
,ETH_SPEED_NUM_*
andETH_LINK_*
(duplex-related) defines. Use corresponding defines withRTE_
prefix instead.Removed deprecated
ETH_MQ_RX_*
andETH_MQ_TX_*
defines. Use corresponding defines withRTE_
prefix instead.Removed deprecated
ETH_RSS_*
defines for hash function and RETA size specification. Use corresponding defines withRTE_
prefix instead.Removed deprecated
DEV_RX_OFFLOAD_*
andDEV_TX_OFFLOAD_
defines. Use corresponding defines withRTE_ETH_RX_OFFLOAD_
andRTE_ETH_TX_OFFLOAD_
prefix instead.Removed deprecated
ETH_DCB_*
,ETH_VMDQ_
,ETH_*_TCS
,ETH_*_POOLS
andETH_MAX_VMDQ_POOL
defines. Use corresponding defines withRTE_
prefix instead.Removed deprecated
RTE_TUNNEL_*
defines. Use corresponding defines withRTE_ETH_TUNNEL_
prefix instead.Removed deprecated
RTE_FC_*
defines. Use corresponding defines withRTE_ETH_FC_
prefix instead.Removed deprecated
ETH_VLAN_*
andETH_QINQ_
defines. Use corresponding defines withRTE_
prefix instead.Removed deprecated
ETH_NUM_RECEIVE_MAC_ADDR
define. Use corresponding define withRTE_
prefix instead.Removed deprecated
PKT_{R,T}X_DYNF_METADATA
defines. Use corresponding definesRTE_MBUF_DYNFLAG_{R,T}X_METADATA
instead.
ethdev: Removed deprecated Flow Director configuration from device configuration (
dev_conf.fdir_conf
). Moved corresponding structures to internal API since some drivers still use it internally.ethdev: Removed the Rx offload flag
RTE_ETH_RX_OFFLOAD_HEADER_SPLIT
and fieldsplit_hdr_size
from the structurerte_eth_rxmode
used to configure header split. Instead, user can still useRTE_ETH_RX_OFFLOAD_BUFFER_SPLIT
for per-queue packet split offload, which is configured byrte_eth_rxseg_split
.ethdev: The
reserved
field in therte_eth_rxseg_split
structure is replaced withproto_hdr
to support protocol header based buffer split. User can choose length or protocol header to configure buffer split according to NIC’s capability.ethdev: Changed the type of the parameter
rate
of the functionrte_eth_set_queue_rate_limit()
fromuint16_t
touint32_t
to support more than 64 Gbps. Changed the type of the parametertx_rate
of the functionsrte_pmd_bnxt_set_vf_rate_limit()
andrte_pmd_ixgbe_set_vf_rate_limit()
in the same way for consistency.ethdev: Promoted
rte_eth_rx_metadata_negotiate()
from experimental to stable.ethdev: Promoted the following flow primitives from experimental to stable:
RTE_FLOW_ACTION_TYPE_PORT_REPRESENTOR
RTE_FLOW_ACTION_TYPE_REPRESENTED_PORT
RTE_FLOW_ITEM_TYPE_PORT_REPRESENTOR
RTE_FLOW_ITEM_TYPE_REPRESENTED_PORT
ethdev: Promoted
rte_flow_pick_transfer_proxy()
from experimental to stable.ethdev: Banned the use of attributes
ingress
/egress
in “transfer” flows, as the final step of deprecation process that had been started in DPDK 21.11. See itemsPORT_REPRESENTOR
,REPRESENTED_PORT
.vhost: Promoted
rte_vhost_vring_stats_get()
,rte_vhost_vring_stats_get_names()
andrte_vhost_vring_stats_reset()
from experimental to stable.cryptodev: The structure
rte_cryptodev_sym_session
was made internal. The APIrte_cryptodev_sym_session_init
andrte_cryptodev_sym_session_clear
were removed and user would only need to callrte_cryptodev_sym_session_create
andrte_cryptodev_sym_session_free
to create/destroy sessions. The APIrte_cryptodev_sym_session_create
was updated to take a single mempool with element size big enough to hold session data and session private data. All sample applications were updated to attach an opaque pointer for the session to therte_crypto_op
while enqueuing.security: The structure
rte_security_session
was made internal and corresponding functions were updated to take/return an opaque session pointer. The APIrte_security_session_create
was updated to take only one mempool which has enough space to hold session and driver private data.security: MACsec support is added which resulted in updates to structures
rte_security_macsec_xform
,rte_security_macsec_stats
and security capability structurerte_security_capability
to accommodate MACsec capabilities.security: The experimental API
rte_security_get_userdata
was being unused by most of the drivers and it was retrieving userdata from mbuf dynamic field. The API is now removed and the application can directly get the userdata from mbuf dynamic field.eventdev: The function
rte_event_crypto_adapter_queue_pair_add
was updated to accept configuration of typerte_event_crypto_adapter_queue_conf
instead ofrte_event
, similar torte_event_eth_rx_adapter_queue_add
signature. Event will be one of the configuration fields, together with additional vector parameters.eventdev: The function pointer definition
eventdev_stop_flush_t
is renamed torte_eventdev_stop_flush_t
to avoid conflicts with application symbols.eventdev: The data type of the ID parameter in the functions
rte_event_dev_xstats_names_get
,rte_event_dev_xstats_get
,rte_event_dev_xstats_by_name_get
andrte_event_dev_xstats_reset
is changed touint64_t
fromunsigned int
anduint32_t
.metrics: Updated
rte_metrics_init
so it returns an error code instead of callingrte_exit
.telemetry: The allowed characters in names for dictionary values are now limited to alphanumeric characters and a small subset of additional printable characters. This will ensure that all dictionary parameter names can be output without escaping in JSON - or in any future output format used. Names for the telemetry commands are now similarly limited. The parameters for telemetry commands are unaffected by this change.
raw/ifgpa: The function
rte_pmd_ifpga_get_pci_bus
has been removed.
1.4. ABI Changes
eal: Updated EAL thread names from
lcore-worker-<lcore_id>
torte-worker-<lcore_id>
so that DPDK can accommodate lcores higher than 99.mbuf: Replaced
buf_iova
field withnext
field and added a new fielddynfield2
at its place in second cacheline ifRTE_IOVA_AS_PA
is 0.ethdev: enum
RTE_FLOW_ITEM
was affected by deprecation procedure.ethdev: enum
RTE_FLOW_ACTION
was affected by deprecation procedure.bbdev: enum
rte_bbdev_op_type
was affected to removeRTE_BBDEV_OP_TYPE_COUNT
and to allow for futureproof enum insertion a paddedRTE_BBDEV_OP_TYPE_SIZE_MAX
macro is added.bbdev: Structure
rte_bbdev_driver_info
was updated to add new parameters for queue topology, device status usingrte_bbdev_device_status
.bbdev: Structure
rte_bbdev_queue_data
was updated to add new parameter for enqueue status usingrte_bbdev_enqueue_status
.eventdev: Added
evtim_drop_count
field torte_event_timer_adapter_stats
structure.eventdev: Added
weight
andaffinity
fields torte_event_queue_conf
structure.eventdev: The field
*u64s
in the structurerte_event_vector
is replaced withu64s
as the field is supposed to hold array of uint64_t values.eventdev: The structure
rte_event_vector
was updated to include a new bit fieldelem_offset:12
. The bits are taken from the bitfieldrsvd:15
.