Releases: OpenDataPlane/odp-dpdk
v1.31.0.1_DPDK_19.11
OpenDataPlane (1.31.0.1)
Implementation changes
Configuration
- Added support for blacklisting or whitelisting PCI devices in config file (
dpdk:pci_blacklist
anddpdk:pci_whitelist
)
Packet
- Implemented new packet disassemble and reassemble functions, and related packet buffer accessor functions
Pool
- Implemented the external memory pool API and related functions
v1.31.0.0_DPDK_19.11
OpenDataPlane (1.31.0.0)
Backward incompatible API changes
Traffic Manager
- Added new TM feature capabilities and an egress specific capability function
odp_tm_egress_capabilities()
- Deprecated
odp_tm_capabilities()
function which is replaced by
odp_tm_egress_capabilities()
- Added
odp_tm_capabilities_t.max_schedulers_per_node
capability to express
the maximum number of schedulers per TM node - Added support for non-global packet priority mode
Backward compatible API changes
Classifier
- Added queue specific statistics counters (
odp_cls_queue_stats()
)
IPsec
- Added ICV length into SA configuration parameters
(odp_ipsec_crypto_param_t.icv_len
)
Packet
- Moved packet type definitions into a separate
packet_types.h
header to
enable easier function inlining - Added
odp_packet_disassemble()
,odp_packet_reassemble()
, and other new
functions for packets allocated from external memory pools - Added packet protocol statistics functions
odp_packet_proto_stats_request()
andodp_packet_proto_stats()
Packet IO
- Added
odp_pktout_config_opt_t.bit.proto_stats_ena
option for enabling packet
protocol statistics updates
Pool
- Added new concept of external memory pools, which are populated with
application provided memory - Added new
odp_pool_type_t
enumeration - Moved pool type definitions into a separate
pool_types.h
header to enable
easier function inlining
Protocol Stats
- Added new generic protocol statistics framework
Queue
- Moved queue type definitions into a separate
queue_types.h
header to enable
easier function inlining
Std
- Renamed std_clib module to std and moved all generic ODP data types and functions
there
Traffic Manager
- Increased scheduling weight parameter size (
uint8_t
touint32_t
) - Added queue specific statistics counters (
odp_tm_queue_stats()
) - Added
odp_tm_enq_multi()
function for enqueueing multiple packets at a time - Added
odp_tm_queue_params_t.ordered_enqueue
option which can be used to
control if ordering is enabled
Helper library (1.1.1)
- Added
odph_ipsec_auth_icv_len_default()
function for returning the default
ICV length of an algorithm - Added support for
AES-CMAC
intoodph_ipsec_alg_check()
- Added default ICV length check into
odph_ipsec_alg_check()
v1.30.1.0_DPDK_19.11
OpenDataPlane (1.30.1.0)
Backward compatible API changes
- Modified packet IO
odp_pktio_stats_t.in_octets/out_octets
definitions to not include CRC - Added
odp_pktio_stats_capability_t
struct toodp_pktio_capability_t
to inform about supported statistics counters - Added new packet IO statistics counters and related capabilities for received/transmitted multicast and broadcast Ethernet packets (
in_mcast_pkts
,in_bcast_pkts
,out_mcast_pkts
,out_bcast_pkts
) - Added new pktio input/output queue specific statistics counters (
odp_pktin_queue_stats_t
andodp_pktout_queue_stats_t
) and related functions and capabilities - Added new functions for reading and printing ODP implementation specific custom packet IO statistics counters:
odp_pktio_extra_stat_info()
,odp_pktio_extra_stats()
,odp_pktio_extra_stats_print()
- Specified that the default value of
odp_pktio_config_t.enable_loop
option is false - Specified that the default values of the IPsec specific reassembly enables are false
- Added
odp_schedule_print()
function for printing debug information about scheduler status into the ODP log - Added
odp_fract_u64_t
type which can be used to define fractional numbers accurately - Added
odp_fract_u64_to_dbl()
function for convertingodp_fract_u64_t
fractional numbers into doubles - Added timer tick info as part of
odp_timer_pool_info_t
. This enables timer implementation to specify tick frequency and duration very accurately.
v1.30.0.0_DPDK_19.11
OpenDataPlane (1.30.0.0)
Backward incompatible API changes
- New mandatory traffic manager
odp_tm_start()
andodp_tm_stop()
calls for starting and stopping a traffic manager system - New traffic manager capabilities (
odp_tm_capabilities_t
) for supported dynamic configuration updates - Deprecated traffic manager shaper commit information rate bps (
odp_tm_shaper_params_t.commit_bps
) and peak information rate bps (odp_tm_shaper_params_t.peak_bps
) fields.odp_tm_shaper_params_t.commit_rate
andodp_tm_shaper_params_t.peak_rate
fields should be used instead.
Backward compatible API changes
- New traffic manager option to enable packet mode shaper (packets per second as opposed to bits per second)
- Clarified packet IO spec to specify explicitly that an application may enqueue to packet input side event queues, and cannot dequeue from output side event queues
- Added success bytes to IPsec stats (
odp_ipsec_stats_t.success_bytes
) - New time stamp read functions which read time stamp value more strictly in the program order:
odp_time_local_strict()
,odp_time_local_strict_ns()
,odp_time_global_strict()
,odp_time_global_strict_ns()
- Added timer default clock source enumeration
ODP_CLOCK_DEFAULT
(=ODP_CLOCK_SRC_0
) and support for multiple clock sources (ODP_CLOCK_SRC_1
,ODP_CLOCK_SRC_2
...). The oldODP_CLOCK_CPU
andODP_CLOCK_EXT
enumerations will be deprecated in the future. - Renamed timer set operation return codes (
odp_timer_set_t
) to better document expiration time position to current time:
ODP_TIMER_TOOEARLY
->ODP_TIMER_TOO_NEAR
ODP_TIMER_TOOLATE
->ODP_TIMER_TOO_FAR
- Renamed timer set operation failure code (
odp_timer_set_t
) to cover all error cases:
ODP_TIMER_NOEVENT
->ODP_TIMER_FAIL
Helper library
- Added new mandatory
odph_cli_init()
andodph_cli_term()
functions for initializing and terminating CLI helper - Added
odph_cli_register_command()
function for registering user defined CLI commands
v1.29.0.0_DPDK_19.11
OpenDataPlane (1.29.0.0)
Backward incompatible API changes
- Modified packet IO statistics counters (
odp_pktio_stats_t
) definitions - Deprecated packet IO statistics field
odp_pktio_stats_t.in_unknown_protos
Backward compatible API changes
- New APIs for inline IP reassembly offload for packet input and IPsec
- New
odp_log_thread_fn_set()
function for setting a thread specific log function - New packet IO statistics counters
odp_pktio_stats_t.in_packets/out_packets
Implementation changes
- ABI compatibility default value has been changed to disabled. User can enable ABI
compatibility with--enable-abi-compat
configure option.
v1.28.0.0_DPDK_19.11
OpenDataPlane (1.28.0.0)
Backward incompatible API changes
- New crypto capabilities for defining if a queue type (scheduled/plain) can be used as a crypto completion event destination
Backward compatible API changes
- New packet TX completion event type and related functions
- New packet APIs for requesting packet TX completion events
- New packet APIs for requesting packet TX drop based on packet age
- New
odp_cls_print_all()
function for printing implementation specific debug information about all classifier rules - New enumerations for ARMv8.7-A, ARMv9.0-A, ARMv9.1-A, and ARMv9.2-A ISA versions
v1.27.0.0_DPDK_19.11
OpenDataPlane (1.27.0.0)
Backward incompatible API changes
- IPsec post-processing happens in the
odp_ipsec_result()
function that must be called at least once before packet data or metadata may be accessed.
Backward compatible API changes
- New 128-bit atomic operations: init, store, load, and CAS
- Clarify that atomic CAS operations are strong type
- New
odp_ipsec_test_sa_update()
function for SA testing odp_ipsec_sa_info()
may return non-exact copy of SA parameters- Specify default values for more IPsec SA parameter fields
- Changed
odp_timer_alloc()
user context pointer argument to const - New
odp_timer_pool_print()
function for printing timer pool debug information - New
odp_timer_print()
function for printing timer debug information - New
odp_timeout_print()
function for printing timeout debug information - New
odp_queue_print_all()
function for printing debug information about all queues
Implementation changes
- New configuration option
--enable-dpdk-shared
to link with a shared DPDK library using pkg-config - New configuration file option
dpdk.process_mode_memory_mb
to preallocate DPDK memory for process mode usage
v1.26.0.0_DPDK_19.11
OpenDataPlane (1.26.0.0)
Backward incompatible API changes
- Only
ODP_SCHED_NO_WAIT
variants of schedule calls are allowed after callingodp_schedule_pause()
- IPsec config must have been completed before enabling inbound inline IPsec in pktio
Backward compatible API changes
- New
odp_pktio_maxlen_set()
function (and related capabilities) for configuring input/output maximum frame lengths - New Large Send Offload (LSO) APIs
- Clarify
odp_schedule_capability_t.max_groups
capability definition - Added configure option to enable/disable predefined scheduling groups
v1.25.2.0_DPDK_19.11
OpenDataPlane (1.25.2.0)
Increment API version number to reflect the additions of:
- New pool statistics functions
- New pool index functions:
odp_pool_index()
,odp_pool_max_index()
- New IPsec statistics functions
- New IPsec print functions:
odp_ipsec_print()
,odp_ipsec_sa_print()
- New IPsec API to retrieve SA info:
odp_ipsec_sa_info()
- New classification terms for IGMP, ICMP, SCTP, and GTPv1
- New protocols API header to accommodate protocol specific definitions
- Allow IPsec L2 header to be provided in packet
- Added supported destination queue types to
odp_timer_capability_t
v1.24.0.0_DPDK_18.11
OpenDataPlane (1.24.0.0)
Summary of Changes
This release introduces a new stash API module. The other main API additions are
pool buffer caching configuration and packet IO link information. The release
also includes several smaller API improvements and clarifications.
API
Common
- Added missing const qualifiers
Some API calls missed const qualifiers on read-only data pointers.
- Improved Doxygen module descriptions
- Use param_init functions for parameter defaults
When available, parameter init functions must be used to initialize parameters
into their default values.
Align
- Added
ODP_CACHE_LINE_ROUNDUP
macro
Added macro for rounding up a value to the next multiple of cache line size.
This round up is needed e.g. when selecting buffer sizes so that false sharing
is avoided.
CPU
- Make supporting CPU frequency and cycle counter optional
CPU frequencies or CPU cycle counter may not be available on all HW/SW
platforms. Zero is returned if those cannot be read.
Feature
- Added feature bits
stash
andcompress
intoodp_feature_t
.
Packet
- Clarify packet length function argument definitions
Modify documentations of functions, which decrease packet length, to clearly
state what are the allowed values for length argument. This is done to avoid
creating zero length packets which are not allowed by the packet API.
- Added
odp_packet_input_set()
function
An application may use this for testing or other purposes, when perception of
the packet input interface need to be changed.
Packet I/O
-
Added
odp_pktio_link_info()
function for reading link status information- Autonegotiation mode (unknown/enabled/disabled)
- Duplex mode (unknown/half duplex/full duplex)
- Flow control (unknown/on/off)
- Link status (unknown/up/down)
- Media (media type as string)
- Speed (unknown/Mbps)
-
Modified
odp_pktio_link_status()
to returnodp_pktio_link_status_t
enum
(backward compatible values)
Pool
- Added
cache_size
parameters toodp_pool_capability_t
andodp_pool_param_t
Added thread local cache size parameter and capability. This allows application
to control thread local caching and prepare large enough pool when
implementation caches events per thread. The default value is implementation
specific for backwards compatibility.
- Removed default value of packet
max_len
fromodp_pool_param_t
The default value is implementation specific and may not be equal to the maximum
capability.
- Added packet data
align
parameter toodp_pool_param_t
Added packet pool parameter to request minimum data alignment for user allocated
packets. When user allocates a new packet and fills in protocol headers, it's
convenient that data alignment does not need to be checked (and tuned) on each
allocated packet.
Queue
- Unify
max_size capa
specification for all plain queue types
Specify queue maximum size capability the same way for all non-blocking levels
(ODP_BLOCKING
, ODP_NONBLOCKING_LF
and ODP_NONBLOCKING_WF
). Max_size value
of zero means that there is no size limit.
- Clarify that queue operations include memory barriers
Clarify that queue enqueue operations include memory barrier of release
semantics and queue dequeue operations include acquire semantics.
Random
- Clarify how much data
odp_random_data()
andodp_random_test_data()
output on success.
It may not be possible for random generator functions to return requested number
of bytes. Clarify that implementation is not required to loop until len
bytes
are available. Instead application should contain such logic.
Scheduler
- Clarify synchronization of store operations during atomic context
Stores performed while holding an atomic scheduling context are seen correctly
by other thread when they hold the same context later on. This is guaranteed
also when queue enqueue is not used in between.
- Clarify that schedule operations include memory barriers
Clarify that event schedule operations include memory barrier of acquire
semantics.
Shared Memory
- Add
ODP_SHM_HW_ACCESS
flag
This can be used to memory allocations where both CPUs and HW accelerators
access the same memory area. These HW accelerators may be programmed outside of
ODP APIs, but the memory is reserved and shared normally inside/between ODP
applications.
Stash
- Added new stash API module
Application needs often store object handles for later usage. From current APIs,
e.g. buffers and queues could be used to store these handles, but buffers
consume more memory than is necessary and event queues are not needed for this
simple use case. This new API maybe implemented e.g. as a ring of object handles
in memory, or with a HW buffer manager.
Time
- Added
odp_time_local_ns()
andodp_time_global_ns()
functions for acquiring
current time stamp in nanoseconds
Added functions to get the current local/global
time stamp directly in nanoseconds. For example, odp_time_local_ns()
is
equivalent of calling odp_time_to_ns(odp_time_local())
. This simplifies use
cases where time will be always converted to nanoseconds. However, when time API
performance is important conversions to nanoseconds should be avoided or
minimized.
Timer
- Clarify that
odp_timeout_tick()
returns original expiration time
Specification was open if returned expiration time is the original or actual
expiration time. HW based implementations will not likely modify timeout event
with actual expiration time. Also original expiration time is more valuable to
an application as it can be used to calculate e.g. the next period.
- Add resolution in hertz parameter
res_hz
intoodp_timer_pool_param_t
Added option to specify timer pool resolution in hertz. High resolution values
in nanoseconds result small numbers and thus poor granularity. Hertz offers
better granularity with high resolution values. User gives resolution either in
nanoseconds or hertz, and sets the other parameter to zero.
Traffic Manager
- Add missing handle debug functions
Traffic Manager API defines all types as platform specific, yet unit tests
expect to be able to print them. Therefore introduce u64 debug print conversion
functions for all TM types: odp_tm_to_u64()
, odp_tm_queue_to_u64()
,
odp_tm_node_to_u64()
, odp_tm_shaper_to_u64()
, odp_tm_sched_to_u64()
,
odp_tm_threshold_to_u64()
, odp_tm_wred_to_u64()
- Info structures are written only on success
Clarify that info structures (odp_tm_node_info_t
, odp_tm_node_fanin_info_t
,
odp_tm_queue_info_t
, odp_tm_query_info_t
) are written only on success.
Version
- Added
ODP_VERSION_API
define andODP_VERSION_API_NUM
macro
Added a macro and version number defines for easier comparison of API version
numbers.