-
Notifications
You must be signed in to change notification settings - Fork 141
Expand file tree
/
Copy pathCHANGELOG
More file actions
6557 lines (5369 loc) · 273 KB
/
CHANGELOG
File metadata and controls
6557 lines (5369 loc) · 273 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
# Changelog
## OpenDataPlane (1.50.0.0)
### Backward incompatible API changes
#### IPsec
* Change `odp_ipsec_out_inline()` function specification to state that packets
that share data with other packets may not be sent using this function unless
the pktout to be used has the relevant capability.
#### Packet
* Redefine the semantics of `odp_packet_ref()` in a way that makes it simpler to
support packet data sharing. Also, specify better rules for packet data layout
manipulation operations, allowing private packet data also in the tail of
packets that reference other packets.
* Change `odp_packet_ref_pkt()` function specification to match updated
`odp_packet_ref()` specification.
* Change `odp_packet_has_ref()` to indicate whether a packet is referenced by
another packet, not whether the packet shares data with another packet. In
particular, `odp_packet_ref()` returns a packet that shares data with the given
packet but is not itself referenced by other packets.
#### Packet IO
* Add `odp_pktio_capability_t.packet_ref` capability to indicate whether a pktio
supports sending packets with shared data without using the `dont_free` flag.
#### Timer
* Change periodic timer expiration event configuration. Instead of configuring a
single event to be sent for periodic timer expirations, application now
configures a timeout pool to be created as part of timer pool creation
(`odp_timer_pool_param_t.periodic`).
* Add `odp_timer_periodic_param_init()` function for initializing periodic timer
parameters (`odp_timer_periodic_param_t`).
* Add `odp_timer_periodic_alloc()` function for allocating periodic timers. Old
`odp_timer_alloc()` function is used only for single shot timers.
* Change `odp_timer_periodic_start_t` to only include first expiration tick. The
remaining previous parameters have been moved to `odp_timer_periodic_param_t`.
* Change `odp_timer_periodic_ack()` return values to not have a specific value
for events from a cancelled timer (not last).
* Add `ODP_TIMER_BUSY` return value to `odp_timer_start()`,
`odp_timer_restart()`, and `odp_timer_periodic_start()` functions.
* Add alternative method for configuring periodic timer frequency for timer
pools and timers. The new method introduces a new periodic timer type
`ODP_TIMER_TYPE_PERIODIC_FREQ` to be used with periodic timer capability checks
and timer pool creation. Old periodic timer type `ODP_TIMER_TYPE_PERIODIC` is
renamed to `ODP_TIMER_TYPE_PERIODIC_BASE_MUL` to better reflect the differences
between these two types.
#### Traffic Manager
* Add `odp_tm_capabilities_t.packet_ref` capability to indicate whether packets
that reference other packets or are referenced by other packets can be enqueued
to TM.
### Backward compatible API changes
#### Event Vector
* Add `odp_event_aggr_capability_t.stats` capability for supported statistics
counters.
#### Packet
* Add `odp_packet_is_referencing()` function for testing whether a packet
references another packet but is not a static reference.
* Clarify how `odp_packet_free()` function operates with packets that
participate in packet data sharing.
* Clarify how `odp_packet_concat()` function operates with packets that
participate in packet data sharing.
* Clarify that `odp_packet_copy()` function returns always a normal packet, even
if the source packet is a referencing packet.
* Change `odp_packet_free_ctrl_set()` function specification to allow usage with
packets that participate in packet data sharing.
* Clarify that even though `odp_packet_l2/l3/l4_offset_set()` functions require
the offset not exceed packet data length, later packet truncation and pulling
may result in the offset exceeding packet data length.
* Clarify that `odp_packet_l2/l3/l4_ptr()` pointer value is undefined when
l2/l3/l4 offset metadata of a packet is larger than the length of the packet
e.g. after truncating the packet.
* Fix `odp_packet_head()` specification to not refer to `odp_packet_l2_ptr()`
as data start.
#### Queue
* Add `odp_queue_len()` function for reading the number of events currently in
the queue, or in case of an aggregator queue handle, the number of events
currently waiting for vector generation.
* Add supported statistics counters (`odp_queue_stats_opt_t`) for each plain
queue type into `odp_queue_capability_t`.
#### Scheduler
* Add `odp_schedule_capability_t.queue_stats` capability for supported
statistics counters.
#### Timer
* Add `odp_timeout_is_periodic()` function for checking if a timeout is from a
periodic timer.
* Add new `odp_timer_pool_param_t.periodic.max_pending_tmo` parameter and
matching capabilities `odp_timer_capability_t.periodic.min/max_pending_tmo`
for configuring flow control for periodic timer pools.
### Implementation
* Optimize implementations for single event alloc functions (other event types
than packet).
* Optimize implementations for single event free functions (other event types
than packet).
### Performance Tests
#### bench_queue
* Match test results output to API function names also in throughput mode.
* Add missing test for `odp_schedule_multi_wait()` function.
#### bench_packet
* Add test for `odp_packet_is_referencing()` function.
#### bench_timer
* Add tests for `odp_timeout_is_periodic()` function.
#### pool_perf
* Add support for testing single event `odp_buffer_alloc/free()` and
`odp_packet_alloc/free()` functions by setting burst size to zero
(`--burst 0`).
* Change default burst size to 32.
#### sched_pktio
* Decrease packet pool size to 16k to reduce memory usage.
## OpenDataPlane (1.49.0.0)
### Backward compatible API changes
#### Barrier
* Clarify that a barrier must be initialized before first use and can be
reinitialized if not in use.
* Explicitly state that a barrier can be reused without initializing it again.
* Clarify that no more than N threads may be inside `odp_barrier_wait()`
for a barrier of N threads.
#### Classifier
* Clarify that event aggregation is performed automatically for classified
packets when aggregation is enabled in CoS parameters.
* Clarify that classifier accessor functions return always base queue handles,
not aggregator handles.
#### Crypto
* Add SNOW5G cipher and integrity algorithms `ODP_CIPHER_ALG_SNOW5G_NEA4` and
`ODP_AUTH_ALG_SNOW5G_NIA4`.
* Change the description of `odp_crypto_session_param_t.output_pool` parameter
to mention that the parameter is not used and will be deprecated. Specify that
the parameter must be left to the default value and that the default value
is `ODP_POOL_INVALID`.
#### Packet IO
* Clarify that event aggregation is performed automatically for incoming packets
when aggregation is enabled in packet input queue parameters.
* Clarify that `odp_pktin_event_queue()` returns always base input queue
handles, not aggregator handles.
#### Queue
* Add new `type` and `aggr_config` fields to `odp_queue_info_t` and document
struct contents better for event aggregator queues.
### Remove deprecated APIs
#### Crypto
* Remove deprecated `ODP_CRYPTO_OP_TYPE_LEGACY` op type.
#### Packet IO
* Remove deprecated `odp_pktio_capability_t.tx_compl.mode_all` field.
* Remove deprecated `odp_pktout_config_opt_t.bit.tx_compl_ena` field.
* Remove deprecated `ODP_PACKET_TX_COMPL_ALL` define.
#### Timer
* Remove deprecated `odp_timer_pool_start()` function.
### Performance Tests
#### bench_buffer
* Add `-m, --mode <mode>` option to control measurement mode
(throughput/latency).
#### bench_packet
* Add new variants of `odp_packet_parse()` tests with and without L4
checksumming.
* Add new variants of `odp_event_user_area()`, `odp_event_user_flag_set()`
and `odp_event_user_area_and_flag()` tests.
* Add tests for `odp_packet_l{2,3,4}_type()` functions and for the packet
flag getter functions.
* Use packets/events of multiple types in a pseudorandom order in the new tests.
#### bench_pktio_sp
* Add `-T, --time <opt>` option to choose measurement unit of benchmarked
latencies. By default, latencies are now measured in cycles instead of
nanoseconds.
#### bench_queue
* Add new microbenchmark for testing execution times of queue and related
functions.
#### bench_timer
* Add `-m, --mode <mode>` option to control measurement mode
(throughput/latency).
* Add tests for `odp_timer_start()` and `odp_timer_cancel()` functions.
#### dmafwd
* Add `-s, --seg_free` option to use DMA source segment free offload.
#### l2fwd
* Add `--wait_link <sec>` option to wait for the links to come up before
proceeding with the test.
* Add `--schedule_prefetch <num>` option to enable event prefetching.
* Add `--cache_stash <val>` option to enable cache stashing.
* Increase maximum supported input/output queue count to 2048.
#### l2fwd_perf
* Add `--wait_link <sec>` option to wait for the links to come up before
proceeding with the test.
* Increase maximum supported input/output queue count to 2048.
#### pipeline
* Add new pipeline test application, which takes a `libconfig` compatible
configuration file and based on the configuration builds an ODP
application.
#### queue_perf
* Add `-W, --wait_ns <ns>` option to wait a number of nanoseconds between events
being dequeued and enqueued.
* Add `-M, --memcpy <num>` option to perform memcpy of N bytes between events
being dequeued and enqueued.
#### sched_latency
* Add burst mode `-b/--burst <num>`, where events are enqueued and scheduled in
bursts with `odp_queue_enq_multi()` and `odp_schedule_multi()`.
* Add `-W, --wait-ns <num>` option to simulate application work between schedule
and queue enqueue calls.
#### sched_pktio
* Add `--wait_link <sec>` option to wait for the links to come up before
proceeding with the test.
## OpenDataPlane (1.48.0.0)
### Backward incompatible API changes
#### DMA
* Move `odp_dma_seg_t` struct's segment hints from an anonymous union to
`odp_dma_seg_t.hints` struct.
#### Event Vector
* Change `odp_event_vector_type()` function to not return the type of events
actually stored in the event vector, but the event type stored in event vector
metadata.
* Change `odp_event_vector_tbl()` function specification to require that
applications use `odp_event_vector_type_set()` to update the event type of
vector after vector table modifications.
### Backward compatible API changes
#### Classifier
* Add configurable priority `odp_pmr_create_opt_t.priority` to PMRs, so that
when multiple PMRs match a packet, a PMR with the highest priority is selected.
* Add `odp_cls_capability_t.max_pmr_priority` capability for the maximum
priority value.
#### CPU Mask
* Add missing documentation for `odp_cpumask_t` type.
#### Crypto
* Add `odp_crypto_session_print()` function for printing implementation defined
information about a crypto session to the ODP log.
#### DMA
* Add possibility to configure cache stashing for destination segments
using segment hints (`odp_dma_seg_t.hints`).
#### Event Vector
* Add `odp_event_vector_type_set()` function for setting the type of events
stored in an event vector.
* Clarify that event aggregators try to set the event type according to the
event types they put in the event vector.
#### ML
* Change ML API to support systems with multiple ML engines:
** Add `odp_ml_num_engines()` function for querying the number of supported ML
engines.
** Add `odp_ml_engine_capability()` function for exposing engine specific
capabilities.
** Change `odp_ml_config()` function specification to state that it must be
called once per used ML engine ID (`odp_ml_config_t.engine_id`).
** Add `ODP_ML_ENGINE_ANY` define for letting implementation pick the used
engine (enables backward compatibility).
** Add `engine_id` field to `odp_ml_config_t` struct.
** Add `engine_id` field to `odp_ml_model_param_t` struct.
** Add `engine_id` field to `odp_ml_model_info_t` struct.
#### Packet
* Move `odp_packet_parse_result_flag_t` struct definition from ABI to API
header to guarantee application portability between different platforms.
#### Scheduler
* Clarify that priority level `odp_schedule_prio_t` is always a non-negative
integer value.
* Add global (`odp_schedule_config_t`) and group level
(`odp_schedule_group_param_t`) scheduler configuration options and related
capabilities to signal maximum number of groups and priorities that need to be
supported.
#### Thread
* Add missing documentation for `odp_thrmask_t` type.
### Implementation
* Add extra padding to implementation internal ring struct to avoid false
sharing-like effects from hardware prefetchers. These rings are used within
pool, stash, and scheduler API implementations, so their performance may be
affected. The amount of added extra padding can be adjusted with
`CONFIG_CACHE_PAD_LINES` config option.
* Optimize single event `odp_queue_enq()` and `odp_queue_deq()` function
implementations for plain queues.
* Optimize single event `odp_queue_enq()` function implementation for scheduled
queues.
* Optimize queue implementation by storing pointers to events instead of
indices.
* Add support for DPDK v24.11 packet IO and drop support for EOL DPDK v21.11.
### Performance Tests
#### bench_event_vector
* Add new microbenchmark application for event vector fast path API functions.
#### bench_misc
* Add support for `odp_prefetch_x()` functions.
#### l2fwd
* Add option `-W, --wait_ns` for adding extra wait time
(`odp_time_wait_ns()`) per receive burst before forwarding the packets.
* Add option `-E, --memcpy` for performing extra memcpy per receive burst
before forwarding the packets.
#### queue_perf
* Add option `-b 0` for testing `odp_queue_enq()` and `odp_queue_deq()`
functions.
#### sched_perf
* Add new event forwarding mode `-f N`, where N > 1, for forwarding events
within N identical queue groups.
* Change `-q` parameter to be the number of default priority queues.
* Add option `-T, --thr_type` for running the application with control threads
instead of worker threads.
* Add option `-p 2` for using event vector pool.
* Add option `-P, --prefetch` for prefetching a selected number of events.
* Add option `-C, --cache-stash` for enabling cache stashing.
## OpenDataPlane (1.47.0.0)
### Backward incompatible API changes
#### System
* Allow implementations to return zero in `odp_system_meminfo_t.total_overhead`
field if tracking memory usage overhead is not supported.
### Backward compatible API changes
#### General
* Add a paragraph in the API principles section in `include/README` to describe
parameter lifetimes of ODP API functions: Structures passed by reference
(and structures referred by them) do not need to outlive the API call,
unless otherwise noted in the API.
#### Classifier
* Clarify the presumed intent of back pressure API by specifying how exactly the
back pressure threshold for any given pktio + pool/queue + pfc_level -tuple is
derived from the configuration.
* Add CoS parameter `odp_cls_cos_param_t.aggr_enq_profile` for selecting
aggregator enqueuing profile (`odp_aggr_enq_profile_t`), which can generate
hints to an event aggregator. Support is advertised through
`odp_cls_capability_t.aggr` capability. The hints can affect e.g. the boundaries
of vector events generated by an event aggregator.
#### CPU
* Add `odp_cpu_cycles_strict()` function for reading current CPU cycle count
value more strictly in the program order.
#### DMA
* Add necessary fields to `odp_dma_transfer_param_t` for freeing DMA source
segments of data format `ODP_DMA_FORMAT_PACKET`. Support is advertised through
`odp_dma_capability_t.src_seg_free` capability.
* Add necessary fields to `odp_dma_seg_t`, `odp_dma_transfer_param_t`, and
`odp_dma_result_t` for allocating DMA destination segments of data format
`ODP_DMA_FORMAT_PACKET`. Support is advertised through
`odp_dma_capability_t.dst_seg_alloc` capability.
#### Event
* Add `ODP_EVENT_VECTOR` event type.
* Add special `ODP_EVENT_ANY` event type, which does not match to any particular
event type and can only be used when explicitly documented by the API.
* Change `odp_event_free()` specification to state that in case of vector
events (`ODP_EVENT_VECTOR` or `ODP_EVENT_PACKET_VECTOR`) it frees the vector and
all events or packets stored inside it.
#### Event Vector
* Add new generic event vector APIs. Event vectors can contain events of any
type, as opposed to the existing packet vectors, which can contain only packets.
#### ML
* Add quantization parameters to input (`odp_ml_input_info_t.quant_info`) and
output (`odp_ml_output_info_t.quant_info`) info. Implementation may optionally
provide these parameters, if they are available for a given model.
#### Pool
* Add `ODP_POOL_EVENT_VECTOR` pool type for allocating event vectors.
#### Queue
* Clarify that `odp_queue_sched_type()`, `odp_queue_sched_prio()`,
`odp_queue_sched_group()`, and `odp_queue_lock_count()` functions can be used
only with queues of `ODP_QUEUE_TYPE_SCHED` type.
* Add event aggregators that are associated with queues and have the same life
time. Event aggregators are queues which try to aggregate multiple events into
event vectors, which are then enqueued to the underlying queue. Event
aggregators are configured through queue parameters
(`odp_queue_param_t.num_aggr` and `odp_queue_param_t.aggr`) and the related
capabilities are advertised using `odp_event_aggr_capability_t` struct. Event
aggregators cannot be used simultaneously with the existing packet vector config
in the same ODP application.
* Add `ODP_QUEUE_TYPE_AGGR` queue type.
* Add `odp_queue_aggr()` function for getting a queue handle of an event
aggregator associated with a queue.
* Add `odp_aggr_enq_param_init()` function for initializing event aggregator
enqueuing parameters.
* Add `odp_queue_enq_aggr()` function that can be used for passing hints to an
event aggregator.
#### Scheduler
* Add `odp_schedule_group_param_init()` function for initializing schedule group
parameters.
* Add `odp_schedule_group_create_2()` function, which is otherwise like
`odp_schedule_group_create()`, but additionally accepts a set of parameters
(`odp_schedule_group_param_t`). Parameters for predefined scheduling groups can
be configured in `odp_schedule_config()`.
* Add possibility to configure cache stashing
(`odp_schedule_group_param_t.cache_stash_hints`) at schedule group and/or
priority levels. Stashing data of to-be-scheduled events and queues may improve
performance in some workloads.
#### Timer
* Add new timer pool parameter `odp_timer_pool_param_t.priority` and related
capabilities. Timers allocated from pools with a higher priority value are
served with higher priority than timers allocated from pools with a lower
priority value.
#### Traffic Manager
* Add `odp_tm_node_stats()` function for reading TM node specific statistics
counters. The supported counters are advertised in
`odp_tm_level_capabilities_t.node_stats` capability.
### ABI changes
* Increase `ODP_SHM_NAME_LEN` default value to 64.
### Helper (1.7.1)
#### Backward compatible changes
* Add `ODPH_DIV_ROUNDUP()` macro for dividing two numbers and rounding up the
result to the closest integer.
* Add `ODPH_ROUNDUP_MULTIPLE()` macro for rounding up a value to a multiple of
another value.
### Implementation
* Disable basic scheduler implementation's ordered queue reorder stash config
file option (`sched_basic:order_stash_size`) by default.
* Simplify `odp_version_impl_str()` output and include commit hash (if
available) in it.
* Optimize `odp_packet_free_sp()` and `odp_event_free_sp()` implementations.
### Performance Tests
#### stress
* Add new `-t` option for selecting timer mode (shared/private).
#### timer_accuracy
* Add a new "concurrency" mode (`-m 4`) that performs timer starts and cancels
across multiple threads. This mode aims to uncover concurrency issues in the
timer implementation, particularly with a short period, where timer expirations,
starts, and cancels frequently occur close to each other.
#### timer_stress
* Add new tool for benchmarking timer handling performance in different
scenarios. Tester currently supports modes for single-shot (with and without
cancelling) and periodic timers.
## OpenDataPlane (1.46.0.0)
### Backward incompatible API changes
#### Crypto
* Change the default crypto op type written by `odp_crypto_session_param_init()`
to `ODP_CRYPTO_OP_TYPE_BASIC`.
* Deprecate old default crypto op type `ODP_CRYPTO_OP_TYPE_LEGACY`.
#### Packet IO
* Modify certain details of IP and TCP Large Send Offload (LSO), specify missing
details, add restrictions, and clarify the API in general.
* Deprecate `ODP_PACKET_TX_COMPL_ALL` define. Use `ODP_PACKET_TX_COMPL_EVENT`
instead.
* Deprecate `odp_pktio_capability_t.tx_compl.mode_all` field. Use `mode_event`
instead.
* Deprecate `odp_pktout_config_opt_t.bit.tx_compl_ena` field. Use
`odp_pktio_config_t.mode_event` instead.
#### Timer
* Deprecate `odp_timer_pool_start()` function. Use
`odp_timer_pool_start_multi()` instead.
### Backward compatible API changes
#### Event
* Clarify `odp_event_free()` documentation by stating that it frees also the
packets stored inside packet vectors.
#### Init
* Add printf format check to `odp_override_log()` and `odp_log_func_t`
declarations.
* Add `odp_log_fn_get()` function, which returns the current log function.
* Add `odp_abort_fn_get()` function, which returns the abort function.
#### Packet IO
* Add a new custom LSO operation (`ODP_LSO_WRITE_BITS`) for setting and clearing
selected bits in first/middle/last segment when segmentation occurs.
* Specify that all segments, except the last one, have the maximum payload
length with the custom LSO protocol (`ODP_LSO_PROTO_CUSTOM`).
### Remove deprecated APIs
#### Timer
* Remove deprecated `odp_timeout_fresh()` function.
* Remove deprecated `odp_timer_set_t` type.
### Helper (1.7.0)
#### Backward incompatible changes
* Deprecate `odph_linux_pthread_create()` and `odph_linux_pthread_join()`
functions which have been replaced by generic `odph_thread_create()` and
`odph_thread_join()` functions.
* Deprecate `odph_linux_process_fork()`, `odph_linux_process_fork_n()`,
and `odph_linux_process_wait_n()` functions which have been replaced by
generic `odph_thread_create()` and `odph_thread_join()` functions.
#### Backward compatible API changes
* Explicitly state that ODP must be initialized before calling helper functions
and document exceptions to this rule individually.
* Improve debug macro documentation.
### Implementation
* Remove scalable scheduler implementation.
* Remove `system:cpu_id_static` config file option.
* Add support for DPDK v23.11 packet IO.
### Example Applications
* Remove `odp_l2fwd_simple` application.
### Performance Tests
#### crypto
* Use the basic crypto operation type instead of now deprecated legacy operation
type.
* Remove explicit encrypt in-place operation option (`-n`).
#### l2fwd_perf
* New minimal performance optimized L2 forwarding benchmark application. Aim is
to keep the tester as simple as possible in order to provide a stable
benchmarking utility with comparable results across releases.
#### ml_perf
* New machine learning (ML) performance test application. The application
measures nanoseconds used for various ML operations, such as creating and
destroying a model, loading and unloading a model, and inferencing.
#### packet_gen
* Add new option (`-X`) for L4 checksum offloading.
* Add new option (`-T`) for transmitting packets with LSO.
#### queue_perf
* Add possibility to export test results into a .csv file by using
`--test-common-export` option or `TEST_COMMON_EXPORT` environment variable.
* Add new option (`-p`) for using private queues per worker.
* Add pair test mode (`-m 1`) where events are moved between queue pairs
connecting two or more workers.
## OpenDataPlane (1.45.1.0)
### Backward compatible API changes
#### Atomic
* Add new `odp_atomic_fetch_min_u32()` and `odp_atomic_fetch_min_u64()`
functions for fetching and updating minimum values of atomic `uint32_t` or
`uint64_t` variables.
* Add new `odp_atomic_fetch_max_u32()` and `odp_atomic_fetch_max_u64()`
functions for fetching and updating maximum values of atomic `uint32_t` or
`uint64_t` variables.
* Add functions for atomically setting and clearing bits in 32-bit atomic
variables: `odp_atomic_bit_set_u32()`, `odp_atomic_bit_fetch_set_u32()`,
`odp_atomic_bit_clr_u32()`, `odp_atomic_bit_fetch_clr_u32()`,
`odp_atomic_bit_set_rel_u32()`, `odp_atomic_bit_clr_rel_u32()`
* Add functions for atomically setting and clearing bits in 64-bit atomic
variables: `odp_atomic_bit_set_u64()`, `odp_atomic_bit_fetch_set_u64()`,
`odp_atomic_bit_clr_u64()`, `odp_atomic_bit_fetch_clr_u64()`,
`odp_atomic_bit_set_rel_u64()`, `odp_atomic_bit_clr_rel_u64()`
* Add flags for the new atomic functions into `odp_atomic_op_t`.
#### CPU
* Add instruction prefetch function `odp_prefetch_l1i()`.
#### DMA
* Add debug function `odp_dma_transfer_id_to_u64()` for getting a printable
value for a DMA transfer identifier.
#### Init
* Add debug function `odp_instance_to_u64()` for getting a printable value for
an ODP instance handle.
#### ML
* Add functions for supporting quantization of `int16_t` and `uint16_t` data
types: `odp_ml_fp32_to_uint16()`, `odp_ml_fp32_from_uint16()`,
`odp_ml_fp32_to_int16()`, `odp_ml_fp32_from_int16()`
#### Packet
* Add debug function `odp_packet_tx_compl_to_u64()` for getting a printable
value for a Tx completion handle.
* Clarify `odp_packet_reset_max_len()` documentation to state that the returned
length may be less than the current packet data length if data length has been
increased by utilizing head- or tailroom.
#### Scheduler
* Add debug function `odp_schedule_group_to_u64()` for getting a printable
value for a schedule group handle.
#### Std
* Clarify `odp_bool_t` documentation by stating how the data type can by used
with standard C booleans and what is considered true/false.
* Add a field of type `\__uint128_t` in the union in `odp_u128_t` when the
type is available, so that users that use `__uint128_t` or a compatible type do
not need to type pun.
### ABI changes
* Change ABI type for `odp_bool_t` from `int` to `bool` to comply with the
clarified API documentation.
### Implementation
* Add new config file option `system:cpu_id_static` for selecting whether the
implementation reads CPU identifier value from OS during every `odp_cpu_id()`
call or only once during thread initialization (default).
* Enable the `-fno-strict-aliasing` compiler option. Some sections of code in
ODP deliberately access the same data via pointers to different types, which is
undefined behavior in C. The `-fno-strict-aliasing` option prevents the compiler
from making assumptions about aliasing in these instances.
### Example Applications
#### ml_run
* Add new example application, which loads a given ML model file, runs inference
using a given input file and compares the output to a given reference file.
### Performance Tests
* Add the possibility to export test results into a .csv file by using
`--test-common-export` option or `TEST_COMMON_EXPORT` environment variable.
Exporting results is supported by the following applications: `atomic_perf`,
`bench_buffer`, `bench_misc`, `bench_timer`, `bench_packet`, `bench_pktio_sp`,
`dma_perf`, `lock_perf`, `pool_perf`, `sched_latency`, `sched_perf`,
`stash_perf`, `timer_accuracy`
#### bench_packet
* Add tests for new `odp_packet_reset_meta()` and `odp_packet_reset_max_len()`
functions.
* Add tests for event API fast path functions on packets.
#### icache_perf
* Add new performance test application to measure CPU performance when
application code size exceeds L1 instruction cache size.
#### packet_gen
* Add new `-U` option to define custom L3 headers.
* Add new `none` selection to the L4 protocol -N option.
## OpenDataPlane (1.45.0.0)
### Backward incompatible API changes
#### Crypto
* Increase size of `all_bits` fields of `odp_crypto_cipher_algos_t` and
`odp_crypto_auth_algos_t` algorithm capability unions.
#### Packet
* Change `odp_packet_reset()` specification to use new
`odp_packet_reset_max_len()` function for maximum packet data length value.
#### Protocol Stats
* Limit length of `odp_proto_stats_create()` object name parameter to a new
`ODP_PROTO_STATS_NAME_LEN` define.
#### Traffic Manager
* Limit lengths of traffic manager object names to a new `ODP_TM_NAME_LEN`
define.
### Backward compatible API changes
#### Common
* Make mentions of maximum string lengths clear and consistent and always state
that the null character is included.
#### CPU
* Add more specific data prefetch variants: `odp_prefetch_l1()`,
`odp_prefetch_l2()`, and `odp_prefetch_l3()`.
* Add more specific data prefetch variants for store: `odp_prefetch_store_l1()`,
`odp_prefetch_store_l2()`, and `odp_prefetch_store_l3()`.
* Add streaming prefetch functions `odp_prefetch_strm_l1()` and
`odp_prefetch_store_strm_l1()`.
#### Crypto
* Add SHA-3 based cryptographic hash functions and HMACs based on them.
* Add SNOW-V cipher algorithm and SNOW-V-GCM AEAD algorithm.
* Add SM3 cryptographic hash function and a HMAC based on it.
* Add SM4 cipher in ECB, CBC, CTR, GCM, CCM and GMAC modes.
#### Event
* Add `odp_event_user_flag_set()` function for setting/clearing event's user
flag value.
#### Packet
* Clarify `odp_packet_buf_len()` specification to state that total packet buffer
length includes also headroom and tailroom lengths.
* Clarify `odp_packet_reset()` specification to state that packet data start is
adjusted according to pool parameters, user area content is maintained, and
packet data persistence is not guaranteed.
* Add `odp_packet_reset_meta()` function for resetting only packet metadata
without modifying packet data.
#### Pool
* Clarify in `odp_pool_param_t.buf.size` specification that the actual buffer
size may be rounded up by the implementation. Also, remove the limitation that
an application will never store more than 'size' bytes in each buffer, which
conflicted with `odp_buffer_size()` API.
### Helper (1.6.0)
#### Backward incompatible changes
* Remove unused cuckoo table API.
* Remove unused hash table API.
* Remove unused linear table API.
* Remove unused IP lookup table API.
* Remove unused table interface API.
#### Backward compatible changes
##### Stress
* Add CPU stress functions (`odph_stress_pow2_u32()`, `odph_stress_log2_u32()`,
`odph_stress_sqrt_u32()`, `odph_stress_sqrt_f32()`) which may be used in test
applications to create dummy CPU load. Functions are not highly optimized but
try to stress various parts of CPU instruction set.
##### String
* Add `odph_strcpy()` function, which guarantees termination of the destination
string.
##### Thread
* Add `odph_thread_join_result()` function which is similar to the existing
`odph_thread_join()` but outputs results of joined threads.
* Clarify in `odph_thread_create()` specification that the output thread table
elements must not be modified during the lifetime of the threads if
`odph_thread_join()` is used to wait for thread exit.
### Example Applications
* Remove `odp_generator` application which has been made redundant by
`odp_packet_gen`.
* Remove `odp_timer_test` application which has been made redundant by
`odp_timer_accuracy`.
### Miscellaneous Tests
#### dyn_workers
* Add a simple dynamic worker tester that can be used to verify the ability of
an ODP implementation to dynamically add and remove workers from one ODP
application to another.
### Performance Tests
#### l2fwd
* Add `-O, --output_map` option for changing the default output port mappings
for interfaces.
* Add `-C, --tx_compl` option for configuring packet transmit completion.
* Add `-X, --flow_control` option for enabling reception and/or transmission of
Ethernet pause frames.
#### packet_gen
* Enable running the application with only RX or TX threads.
* Add support for transmitting TCP packets (`-N, --proto`). The application
doesn't implement actual TCP protocol, but simply transmits packets with valid
TCP headers at a selected rate.
#### pool_latency
* Enable running the application indefinitely with special round count (`-r`)
value `0`.
#### sched_perf
* Add `-S, --stress` option for selecting stress function(s) to be used on event
data. Functions add various amount of CPU load to each event to simulate
application data processing.
* Rename `-a` option (`--fairness`) to `-F` for better match of short and long
option names.
#### stress
* Add simple memory copy loop and square root calculation test modes
(`-m, --mode`) to generate CPU load.
## OpenDataPlane (1.44.0.0)
### Backward compatible API changes
#### ML
* Add new API module for Machine Learning offload.
### Implementation
#### ML
* Implement the API using ONNX Runtime. A non-standard ONNX install path can be
passed with `--with-ort-path` configure option. See `DEPENDENCIES` for
additional information.
### Example Applications
#### debug
* Print packet IO link information.
* Add packet IO interface name option (`-i`).
#### packet_dump
* Add support for measuring packet input delay.
### Performance Tests
#### l2fwd
* Add packet input timestamping option (`-T`).
* Add packet data prefetch option (`-F`).
* Add packet data read option (`-R`).
* Add packet print option (`-V`).
#### pool_latency
* New pool latency tester application for profiling pool allocation and free
latencies under different load patterns.
#### sched_perf
* Add options to read (`-u`) and modify (`-U`) event user area contents per
event reception.
* Run application indefinitely when the number of events to schedule option
(`-s`) is set to zero.
## OpenDataPlane (1.43.0.0)
### Backward incompatible API changes
#### Classifier
* Add new `odp_cls_capability_t.max_pmr` and
`odp_cls_capability_t.max_pmr_per_cos` packet matching rule capabilities.
* Rename `odp_cls_capability_t.max_pmr_terms` field to
`odp_cls_capability_t.max_terms_per_pmr`.
#### Time
* Change local/global time specification to allow timestamp values to start from
an implementation defined value, instead of always starting from zero.
#### Timer
* Deprecate `odp_timer_set_t` type. Use `odp_timer_retval_t` instead.
* Deprecate `odp_timer_pool_start()` function in comments. Will be properly
deprecated in an upcoming release. Use `odp_timer_pool_start_multi()` instead.
* Deprecate `odp_timeout_fresh()` function.
* Change `odp_timer_free()` specification to remove the possibility to free a
timer that is running.
* Change `odp_timer_pool_create()` specification to state that timer pool
handles must not be used by other APIs, except `odp_timer_pool_to_u64()`,
before being started.
### Backward compatible API changes
#### Event
* Add `odp_event_pool()` function, which returns a handle to the pool where the
event was allocated from.
#### Hints
* Fix a type conversion issue in `odp_unlikely()` implementation.
#### Packet
* Clarify that `ODP_PACKET_FREE_CTRL_DONT_FREE` option does not affect direct
packet free calls.
* Clarify that packet IO time is specific to the packet IO interface.
#### Pool
* Clarify that disabled/unused per thread statistics counters will not
necessarily be zeroed by `odp_pool_stats()`.
#### Scheduler
* Clarify event ordering in ordered scheduling contexts.
#### Thread
* Add new functions `odp_thread_control_count_max()` and
`odp_thread_worker_count_max()` for reading the maximum number of control and
worker threads.
* Add new functions `odp_thread_control_count()` and `odp_thread_worker_count()`
for reading the current number of control and worker threads.
#### Time
* Add `odp_time_add_ns()` function for adding nanoseconds into a time value.
* Add `odp_time_startup()` function for requesting ODP instance startup time.
* Clarify `odp_time_sum()` specification by adding a notification that resulting
timestamp may wrap around if large timestamp values are summed up.
#### Timer
* Add `odp_timer_pool_start_multi()` function for starting timer pools, which
takes the to-be-started pool handles as arguments.
* Clarify that timer ticks and related nanosecond values are specific to a timer
pool. Also, state explicitly that those may not start from zero.
### Remove deprecated APIs
#### Classifier
* Remove deprecated `odp_cls_drop_t` enum.
* Remove deprecated `odp_cos_drop_set()` function.
* Remove deprecated `odp_cos_drop()` function.
* Remove deprecated `odp_cos_with_l2_priority()` function.
* Remove deprecated `odp_cos_with_l3_qos()` function.
#### Crypto
* Remove deprecated `ODP_CRYPTO_SES_CREATE_ERR_NONE`,
`ODP_CRYPTO_SES_CREATE_ERR_ENOMEM`, `ODP_CRYPTO_SES_CREATE_ERR_INV_CIPHER`, and
`ODP_CRYPTO_SES_CREATE_ERR_INV_AUTH` defines.
* Remove deprecated `odp_crypto_alg_err_t.ODP_CRYPTO_ALG_ERR_KEY_SIZE` and
`odp_crypto_alg_err_t.ODP_CRYPTO_ALG_ERR_IV_INVALID` enums.
* Remove deprecated `odp_crypto_hw_err_t` enum.
* Remove deprecated `odp_crypto_packet_result_t.ok` field.
#### Scheduler
* Remove deprecated `ODP_SCHED_PRIO_HIGHEST`, `ODP_SCHED_PRIO_NORMAL`,
`ODP_SCHED_PRIO_LOWEST`, and `ODP_SCHED_PRIO_DEFAULT` defines.
#### Timer
* Remove deprecated `ODP_CLOCK_CPU` and `ODP_CLOCK_EXT` defines.
* Remove deprecated `ODP_TIMER_TOOEARLY`, `ODP_TIMER_TOOLATE` and
`ODP_TIMER_NOEVENT` defines.
* Remove deprecated `odp_timer_set_abs()` function.
* Remove deprecated `odp_timer_set_rel()` function.
### Helper (1.5.0)
#### Backward incompatible changes
* Remove deprecated `odph_odpthread_t` and `odph_odpthread_params_t` types.
* Remove deprecated `odph_thread_param_t.instance` field.
* Remove deprecated `odph_odpthreads_create()` and `odph_odpthreads_join()`
functions.
### Implementation
#### Ticketlock
* Add WFE based aarch64 ticketlock implementation (`--enable-wfe-locks`) for
power saving.
### Performance Tests
#### dma_perf
* Add option for using software memory copy in addition to DMA transfers.
* Add options for using sparse packets and memory as the transfer segment type.
## OpenDataPlane (1.42.1.0)
### Backward compatible API changes
#### Classifier
* Add new `odp_cls_pmr_create_multi()` function for creating multiple packet
matching rules with a single call.
* Add new `odp_cls_pmr_destroy_multi()` function for destroying multiple PMRs
with a single call.
* Add new `odp_cls_cos_create_multi()` function for creating multiple class-of-
services with a single call.
* Add new `odp_cos_destroy_multi()` function for destroying multiple CoSes with
a single call.
#### Crypto
* Clarify packet ordering of async crypto ops (`odp_crypto_op_enq()`).
* Add `odp_crypto_packet_op_param_t.null_crypto` parameter that tells that a
packet should be processed as if the configured algorithms were null cipher and
null auth algorithm.
* Add `ODP_CRYPTO_OP_TYPE_BASIC_AND_OOP` crypto operation type that allows both
basic and out-of-place operations in the same session.
#### Packet IO
* Add new API define `ODP_PKTIO_MAX_INDEX` for maximum packet IO interface
index.
#### Queue
* Add new `odp_queue_create_multi()` function for creating multiple queues with
a single call.
* Add new `odp_queue_destroy_multi()` function for destroying multiple queues
with a single call.
* Clarify `odp_queue_param_t` default value specification.
#### System
* Add enumerations for ARM ISA versions ARMv8.8-A, ARMv8.9-A, and ARMv9.3-A.
#### Timer
* Change `odp_timer_pool_param_t.num_timers` description to allow applications
to attempt to allocate more timers than there are in a timer pool.
* Add new `odp_timeout_alloc_multi()` function for allocating multiple timeouts
with a single call.
* Add new `odp_timeout_free_multi()` function for freeing multiple timeouts with
a single call.
### Helper (1.4.0)
#### Backward incompatible changes
##### Protocols
* Rename `ODP_GTP_HLEN` define to `ODPH_GTP_HLEN`.
* Rename `ODP_IGMP_HLEN` define to `ODPH_IGMP_HLEN`.
* Remove unused ICMP defines and add missing `ODPH_` prefix to the remaining
ones.
#### Backward compatible changes
##### Macros
* Add new `ODPH_MIN()` and `ODPH_MAX()` helper macros for comparison operations.
* Add new `ODPH_ARRAY_SIZE()` helper macro for calculating array size.
* Add new `ODPH_ABS()` helper macro for calculating the absolute value of a
signed variable.
### Implementation