-
Notifications
You must be signed in to change notification settings - Fork 39
/
CHANGELOG
5978 lines (4897 loc) · 250 KB
/
CHANGELOG
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
== 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
==== CPU
* Optimize `odp_cpu_cycles()` performance on aarch64 by implementing the
function using `cntvct_el0` virtual counter register.
==== Packet IO
* Transmitting packet vectors is not supported by the current API, so remove
the code from the implementation. This may improve performance when transmitting
packets through event queues.
* Add support for packet transmit completion check through polling
(`ODP_PACKET_TX_COMPL_POLL`).
=== Example Applications
==== sysinfo
* Add prints for various missing capabilities (e.g. pool, packet IO, timer).
==== timer_accuracy
* Add new (`-c, --count`) option to set the CPU count.
* Add new (`-t, --queue_type`) option to set the queue sync type.
* Add new (`-q, --num_queue`) option to set the number of queues.
* Add new (`-G, --sched_groups`) option to use a dedicated schedule group for
each queue.
=== Performance Tests
==== bench_pktio_sp
* Add new `odp_bench_pktio_sp` application for measuring delays of ODP packet IO
slow path functions.
==== dmafwd
* Add new `odp_dmafwd` application for comparing packet forwarding throughput
when received packets are first copied either with software memory copy
or with DMA offload and then echoed back to sender(s).
==== packet_gen
* Add new (`-m, --tx_mode`) option for selecting how packets are transmitted.
==== stash_perf
* Add new `odp_stash_perf` application for measuring ODP stash fast path API
performance.
==== timer_perf
* Add new mode (`-m 2`) for measuring `odp_schedule()` overhead while
continuously restarting expiring timers.
== OpenDataPlane (1.42.0.0)
=== Backward incompatible API changes
==== Crypto
* Add `odp_crypto_session_param_t.cipher_range_in_bits` and
`odp_crypto_session_param_t.auth_range_in_bits` session parameters that control
whether cipher/auth range is given in bits or bytes.
* Change `odp_crypto_cipher_capability_t.bit_mode` cipher/auth capability flag
to indicate whether bit mode is supported in addition to byte mode that is
always supported.
=== Backward compatible API changes
==== Barrier
* Add memory barriers (`odp_mb_sync()`, `odp_mb_sync_load()`,
`odp_mb_sync_store()`) which ensure that load/store instructions started before
the barrier are complete, before load/store instructions after the barrier are
started.
==== Crypto
* Allow non-zero-length cipher and auth ranges
(`odp_crypto_packet_op_param_t.cipher_range/auth_range`) for the null cipher and
auth algorithms in the OOP operation type.
==== DMA
* Add new `odp_dma_pool_capability_t.uarea_persistence` pool capability to
signal if implementation is able to maintain the content of pool user areas
across frees and allocations.
* Add new `odp_dma_pool_param_t.uarea_init` pool parameters `init_fn` and
`args` that can be used to initialize event user areas of a pool at pool
creation time.
* Move `odp_dma_seg_t` structure fields so that `addr/packet` field is directly
followed by `len` and `offset` fields. After this change all commonly used
fields are located in the first 16 bytes of the structure.
==== Event
* Add new `odp_event_types_multi()` function for reading event types and
subtypes (optional) from all given events.
* Add new `odp_event_user_area_and_flag()` function for reading both event
user area pointer and user flag value.
==== Init
* Add new `ODP_LOG_WARN` log level to `odp_log_level_t`.
==== Packet
* Change `odp_packet_user_flag()` and `odp_packet_vector_user_flag()`
documentations to specify that the return values are positive if user flag is
set.
==== Pool
* Add new `uarea_persistence` pool capability to signal if implementation is
able to maintain the content of pool user areas across frees and allocations.
* Add new `uarea_init` pool parameters `init_fn` and `args` that can be used to
initialize event user areas of a pool at pool creation time.
==== Timer
* Add new `odp_timeout_from_event_multi()` function for converting multiple
events of type `ODP_EVENT_TIMEOUT` to timeout handles.
* Clarify `odp_timer_alloc()` and `odp_timer_restart()` documentation.
=== Implementation
==== Time
* Refactor time codebase to enable more optimized architecture specific
implementations. x86 and aarch64 architectures are assumed to always have
support for HW time and fallback to POSIX time functions has been removed for
improved performance.
== OpenDataPlane (1.41.1.0)
=== Backward compatible API changes
==== DMA
* Add `odp_dma_compl_user_area()` function which returns pointer to the user
area configured with DMA completion event pool parameters.
* Clarify that DMA session names don't need to be unique.
==== Event
* Add `odp_event_user_area()` function which returns a pointer to the user area
associated with the event.
==== Init
* Add `odp_term_abnormal()` function that can be used to abnormally terminate
an ODP application after a non-recoverable error. Depending on the
implementation, this function may attempt to dump stack and other memory areas,
clean up and stop HW operations and/or perform other actions helpful in
postmortem analysis.
==== Packet
* Extend packet transmit completion (`odp_packet_tx_compl_request()`) with poll
mode. When enabled, packet transmit completion status can be checked with
`odp_packet_tx_compl_done()`.
* Add `odp_packet_free_ctrl_set()` function for controlling packet output
interface to not free a packet after transmitting it.
* Add `odp_packet_free_ctrl()` function for reading packet's free control
option value.
==== Pool
* Relax `odp_pool_stats()` specification to allow implementations to have some
delay until pool statistics are updated.
* Add new function `odp_pool_stats_selected()` for reading only selected pool
statistic(s).
==== Timer
* Split `odp_timer_cancel()` failure reason into timing related and other
failures.
* Rename `odp_timer_set_t` to `odp_timer_retval_t` as it is used now for start,
restart, and cancel operations. `odp_timer_set_t` remains as a typedef for
backward compatibility.
* Add `odp_timer_sample_ticks()` function that samples tick value of multiple
timer pools simultaneously.
* Allow implementation to place the first timer as close as it can to one period
when starting a periodic timer with `first_tick` set to 0.
* Clarify that periodic timer base frequency uses fractional numbers the same
way as timer tick info (`odp_timer_tick_info_t`). Integer part specifies full
hertz and fractional part specifies parts of a hertz.
* Clarify that `odp_timer_periodic_capability()` call does not overwrite the
base frequency value when 1 is returned.
* Clarify that some implementations may support only certain periodic timer base
frequencies and those depend on source clock frequency.
=== Performance Tests
==== bench_timer
* Add new test application for measuring call latency of small functions in the
timer API.
==== dma_perf
* Refactor DMA test application to support multiple worker threads. The number
of in-flight transfers can be configured and workers will always try to keep
that many transfers active through single or per-worker DMA session.
==== ipsecfwd
* Add support for running the application in process mode.
== OpenDataPlane (1.41.0.0)
=== Backward incompatible API changes
==== Classifier
* Require that PMRs must be destroyed before the CoS they refer to is destroyed.
==== Crypto
* Deprecate the old session creation error names
(`ODP_CRYPTO_SES_CREATE_ERR_NONE`, `ODP_CRYPTO_SES_CREATE_ERR_ENOMEM`,
`ODP_CRYPTO_SES_CREATE_ERR_INV_CIPHER`, `ODP_CRYPTO_SES_CREATE_ERR_INV_AUTH`)
that have been replaced by shorter error names.
* Change return value of `odp_crypto_result()` to indicate crypto operation
success/failure.
* Deprecate `odp_crypto_packet_result_t.ok` field. Replaced by
`odp_crypto_result()` return value.
* Specify that the status fields of `odp_crypto_packet_result_t` are valid
only when the operation failed (`odp_crypto_result()` returned -1).
* Deprecate `odp_crypto_hw_err_t` type and `odp_crypto_op_status_t.hw_err`
field. All errors are now reported through `alg_err` field.
* Deprecate `ODP_CRYPTO_ALG_ERR_KEY_SIZE` and `ODP_CRYPTO_ALG_ERR_IV_INVALID`
error codes.
* Require that cipher range (`odp_crypto_packet_op_param_t.cipher_range`) and
auth range (`odp_crypto_packet_op_param_t.auth_range`) have zero offset and zero
length when used with null cipher and null auth algorithm, respectively, with
the out-of-place operation type.
==== Errno
* Remove mention about errno values specified in the API spec. Setting errno has
been removed from all ODP APIs outside errno module.
==== Packet IO
* Remove legacy reference to errno from `odp_pktio_open()` function.
==== Stash
* Remove special meaning of `odp_stash_capability_t.max_num_obj` value zero.
==== Timer
* Remove legacy references to errno from `odp_timer_pool_create()` and
`odp_timer_alloc()` functions.
=== Backward compatible API changes
==== Classifier
* Clarify that the CoS to be destroyed with `odp_cos_destroy()` must not be in
use.
* Clarify that `odp_cos_queue()` returns `ODP_QUEUE_INVALID` if the queue is not
set.
* Allow CoS pool (`odp_cls_cos_param_t.pool`) to be set to `ODP_POOL_INVALID`,
in which case the originating pktin pool is used.
* Clarify when CoS queue may and may not be invalid.
==== Crypto
* Change IV (`odp_crypto_packet_op_param_t.cipher_iv_ptr`,
`odp_crypto_packet_op_param_t.auth_iv_ptr`) and AAD (
`odp_crypto_packet_op_param_t.aad_ptr`) pointers to pointers to constants.
* Clarify that algorithm order (`odp_crypto_session_param_t.auth_cipher_text`)
is ignored with null algorithms.
* Clarify when cipher (`odp_crypto_packet_op_param_t.cipher_range`) and auth
(`odp_crypto_packet_op_param_t.auth_range`) ranges are ignored.
* Allow the result pointer for `odp_crypto_result()` to be null, making filling
the result structure optional.
* Clarify the description of `ODP_CRYPTO_ALG_ERR_DATA_SIZE`.
* Add a new crypto operation error `ODP_CRYPTO_ALG_ERR_OTHER` to cover cases
for which the other errors do not fit.
* Clarify that null cipher and auth algorithms ignore key length, IV length,
digest length, etc. session parameters.
* Clarify that crypto operations do not affect parse flags in packet metadata
and thus `odp_packet_has_error()` cannot be used for checking operation result.
==== Packet IO
* Allow the default CoS to be removed by passing `ODP_COS_INVALID` to
`odp_pktio_default_cos_set()`.
==== Pool
* Clarify that the pool to be destroyed with `odp_pool_destroy()` must not be in
use.
* Clarify that `odp_pool_capability_t.max_pools` is used for all pool types
defined in `odp_pool_type_t`.
==== Stash
* Add new stash create parameter `odp_stash_param_t.strict_size` for performance
optimization. The new option is disabled by default and the total object count
limitation is removed from stash put functions.
* Add new capabilities for maximum number of object handles per stash for
each object size (`odp_stash_capability_t.max_num`).
==== Timer
* Clarify that zero `odp_timer_periodic_start_t.first_tick` means that the first
expiration time is one period after the current time, not at the current time.
=== Remove deprecated APIs
==== Crypto
* Remove deprecated `odp_crypto_compl_t` crypto completion event.
* Remove deprecated `odp_crypto_op_param_t` type.
* Remove deprecated `odp_crypto_op_result_t` type.
* Remove deprecated `odp_crypto_session_param_t.pref_mode` field.
* Remove deprecated `odp_crypto_compl_from_event()` function.
* Remove deprecated `odp_crypto_compl_to_event()` function.
* Remove deprecated `odp_crypto_compl_free()` function.
* Remove deprecated `odp_crypto_operation()` function.
* Remove deprecated `odp_crypto_compl_result()` function.
* Remove deprecated `odp_crypto_compl_to_u64()` function.
==== Event
* Remove deprecated `ODP_EVENT_CRYPTO_COMPL` event type.
=== Implementation
==== Packet IO
* Remove netmap pktio device.
* Change recommended DPDK version for DPDK pktio device to v22.11.
==== Stash
* Change implementation to use overflow safe MPMC rings by default. Previous
strict size ring-based implementation can be used by enabling
`odp_stash_param_t.strict_size` parameter.
== OpenDataPlane (1.40.0.0)
=== Backward incompatible API changes
==== Packet
* Specify which packet metadata flags cannot be set simultaneously using
`odp_packet_has_XX_set()` functions.
==== Timer
* Use `ODP_DEPRECATE()` macro for `odp_timer_set_abs()` and
`odp_timer_set_rel()` functions. Previously, the deprecation was only mentioned
in the function documentation.
* Deprecate old timer pool clock sources `ODP_CLOCK_CPU` and `ODP_CLOCK_EXT`,
which have been replaced by `ODP_CLOCK_DEFAULT` and `ODP_CLOCK_SRC_1`.
* Deprecate old timer set return values `ODP_TIMER_TOOEARLY`,
`ODP_TIMER_TOOLATE`, and `ODP_TIMER_NOEVENT`, which have been replaced by
`ODP_TIMER_TOO_NEAR`, `ODP_TIMER_TOO_FAR`, and `ODP_TIMER_FAIL`.
=== Backward compatible API changes
==== Crypto
* Add new operation type session parameter
(`odp_crypto_session_param_t.op_type`) that controls how crypto operations
interpret their parameters and handle output packets. Defaults to backward
compatible `ODP_CRYPTO_OP_TYPE_LEGACY` mode.
* Add `ODP_CRYPTO_OP_TYPE_BASIC` operation type with simplified interface
compared to `ODP_CRYPTO_OP_TYPE_LEGACY`.
* Add `ODP_CRYPTO_OP_TYPE_OOP` operation type that writes the output of the
crypto operation into a caller provided output packet and does not consume the
input packet.
* Clarify that `odp_crypto_op()` copies all packet data and metadata from the
input packet to the output packet in `ODP_CRYPTO_OP_TYPE_LEGACY` and
`ODP_CRYPTO_OP_TYPE_BASIC` modes.
* Require that `odp_crypto_result()` is called before packet data of
asynchronously processed packets can be assumed to be valid in non-legacy modes.
* Fix EIA2 IV length in API documentation. EIA2 uses 64-bit IV, not 128-bit as
previously mentioned in the API text.
==== Packet
* Clarify `odp_packet_has_vlan()` and `odp_packet_has_vlan_qinq()`
specifications.
=== Remove deprecated APIs
==== Crypto
* Remove deprecated per-session IV configuration.
==== Packet IO
* Remove deprecated `in_unknown_protos` field from `odp_pktio_stats_t`.
* Remove deprecated `odp_pktin_ts_res()` function.
* Remove deprecated `odp_pktin_ts_from_ns()` function.
==== Shared Memory
* Remove deprecated `ODP_SHM_SW_ONLY` define.
==== Traffic Manager
* Remove deprecated `odp_tm_capabilities()` function.
* Remove deprecated `commit_bps` field from `odp_tm_shaper_params_t`.
* Remove deprecated `peak_bps` field from `odp_tm_shaper_params_t`.
=== Implementation
==== Crypto
* Add Multi-Buffer Crypto for IPsec library (Arm optimized) based crypto
implementation. See `DEPENDENCIES` for additional information.
==== Debug
* Add support for runtime event validation (buffer endmark checking). Event
validation can be enabled during configure with
`--enable-event-validation [warn/abort]` or with `--enabled-debug=full`. See
`README` for additional information.
== OpenDataPlane (1.39.0.0)
=== Backward incompatible API changes
==== Classifier
* Deprecate `odp_cos_with_l2_priority()` function. Use `ODP_PMR_VLAN_PCP_0`
instead.
* Deprecate packet drop policy option (`odp_cls_cos_param_t.drop_policy`) and
related functions `odp_cos_drop()` and `odp_cos_drop_set()`.
==== Shared Memory
* Change `odp_shm_info()` specification to disallow usage of invalid SHM
handles.
=== Backward compatible API changes
==== Buffer
* Add multi variants of event conversion functions
(`odp_buffer_from_event_multi()` and `odp_buffer_to_event_multi()`).
==== Classifier
* Add PFC priority level (`odp_bp_param_t.pfc_level`) to back pressure
parameters.
* Clarify PMR specification to state that in case of multiple PMRs matching
within a CoS, it is implementation specific which PMR is selected.
==== Crypto
* Fix a stale reference to the renamed `hash_result_not_in_auth_range`
session parameter to use the correct name (`hash_result_in_auth_range`)
in the comment text of `hash_result_offset`.
==== Packet
* Add support for additional L3 and L4 protocol types.
==== Packet IO
* Add `ODP_PKTIN_MAX_QUEUES` define for maximum number of packet input queues.
* Add new packet input queue size configuration option
`odp_pktin_queue_param_t.queue_size` and matching capabilities
`odp_pktio_capability_t.min_input_queue_size` and
`odp_pktio_capability_t.max_input_queue_size`.
* Add missing documentation to `odp_pktio_link_status_t`,
`odp_pktio_link_duplex_t`, and `odp_pktio_link_pause_t` enumerations.
* Add `ODP_PKTIO_LINK_PFC_ON` enumeration for PFC flow control mode.
* Add capabilities (`odp_pktio_capability_t.flow_control`) and configuration
parameters to control reception (`odp_pktio_config_t.flow_control.pause_rx`) and
transmission (`odp_pktio_config_t.flow_control.pause_tx`) of Ethernet pause
frames.
==== Shared Memory
* Add `odp_shm_segment_info()` function for retrieving information about each
memory segment of an SHM block.
* Clarified `odp_shm_reserve()` operation with the default options (no flags).
==== System
* Add `odp_system_meminfo()` function for retrieving information about ODP
memory usage.
== OpenDataPlane (1.38.0.0)
=== Backward incompatible API changes
==== Pool
* Change `odp_pool_capability_t.pkt.max_uarea_size` specification to state
that the value of zero means user area is not supported.
* Specify that the default value of `odp_pool_param_t.pkt.uarea_size` is zero
and implementation may round up the given value.
=== Backward compatible API changes
==== Buffer
* Add `odp_buffer_user_area()` function which returns pointer to the user area
configured with pool create parameters.
==== Crypto
* Add experimental ZUC-256 support.
==== Packet
* Add `odp_packet_vector_user_area()` function which returns pointer to the user
area configured with pool create parameters.
* Add new user flag metadata to packets (`odp_packet_user_flag()`,
`odp_packet_user_flag_set()`) and packet vectors
(`odp_packet_vector_user_flag()`, `odp_packet_vector_user_flag_set()`).
==== Pool
* Add user area size capability and parameter into buffer, timeout, and vector
event pools.
==== Stash
* Add batch variants of all put/get functions and capabilities for maximum
supported batch sizes.
==== Thread
* Clarify `odp_thread_id()` specification to state that thread IDs are assigned
sequentially starting from 0 in the order threads call `odp_init_local()`.
==== Timer
* Add `odp_timeout_user_area()` function which returns pointer to the user area
configured with pool create parameters.
== OpenDataPlane (1.37.2.0)
=== Backward compatible API changes
==== CPU Mask
* Allow usage of NULL pointer with `odp_cpumask_default_worker()` and
`odp_cpumask_default_control()` calls. This enables applications to check the
number of worker/control CPUs without allocating a temporary mask.
* Clarify `odp_cpumask_default_worker()` and `odp_cpumask_default_control()`
specifications to mention that system may allow usage of other CPUs as well.
==== Packet IO
* Specify that interfaces that support promiscuous mode set operation have
promiscuous mode disabled by default.
==== Pool
* Add new statistics counters (`odp_pool_stats_t.thread.cache_available`) for
reading per thread pool cache usage.
==== Stash
* Add `odp_stash_print()` function for printing implementation specific debug
information to the ODP log.
* Add statistics counters to stash API. Counter support is defined by stash
capabilities (`odp_stash_capability_t.stats`). Supported counters can be enabled
in `odp_stash_create()` and read with `odp_stash_stats()`.
== OpenDataPlane (1.37.1.0)
=== Backward compatible API changes
==== Packet IO
* Clarify that `odp_pktout_send_lso()` can be used also for packets that have
payload less than `max_payload_len` bytes.
==== Stash
* Change 32-bit and 64-bit specific get/put functions' parameter names to avoid
name conflicts.
==== Traffic Manager
* Add option to do rate limiting instead of rate shaping in TM nodes and queues.
== OpenDataPlane (1.37.0.0)
=== Backward incompatible API changes
==== Classifier
* Deprecate `odp_cos_with_l3_qos()` function. Use new `ODP_PMR_IP_DSCP` PMR
term instead.
=== Backward compatible API changes
==== Classifier
* Add new PMR term enumeration `ODP_PMR_IP_DSCP` for Differentiated Services
Code Point (DSCP) bits in IP header.
* Add new PMR term enumeration `ODP_PMR_VLAN_PCP_0` for Priority Code Point
(PCP) bits in VLAN header.
* Clarify `ODP_PMR_ETHTYPE_0`, `ODP_PMR_VLAN_ID_0`, and `ODP_PMR_VLAN_ID_X`
PMR term specifications.
* Remove unused `odp_cos_hdr_flow_fields_t` enumeration.
==== Scheduler
* Add new `odp_schedule_order_wait()` function which waits until the currently
held scheduling context is the first in order.
=== Implementation
==== Packet IO
* Add new experimental AF_XDP socket based packet IO device.
== OpenDataPlane (1.36.0.0)
=== Backward incompatible API changes
==== Classifier
* Add an action parameter `odp_cos_action_t` to CoS parameters
(`odp_cls_cos_param_t`). Action may be to enqueue or drop the packet classified
to the CoS. The old methods of creating a drop CoS have been replaced by the
new drop action.
==== Crypto
* Deprecate `odp_crypto_operation()`, the associated data structures, and the
completion event. Use `odp_crypto_op()` or `odp_crypto_op_enq()` instead.
==== Traffic Manager
* Split `odp_tm_capabilities_t.tm_queue_threshold` capability into byte and
packet modes.
* Split `odp_tm_level_capabilities_t.tm_node_threshold` capability into byte and
packet modes.
=== Backward compatible API changes
==== Classifier
* Add CoS specific statistics counters (`odp_cls_cos_stats_t`) and
matching capabilities (`odp_cls_stats_capability_t`). Statistics counters can be
read with `odp_cls_cos_stats()`.
==== Common
* Convert `unsigned int` types to `uint32_t`.
==== Traffic Manager
* Remove unused TM shaper color enum `odp_tm_shaper_color_t` and
`ODP_NUM_SHAPER_COLORS` define.
== OpenDataPlane (1.35.0.0)
=== Backward incompatible API changes
==== Scheduler
* Deprecate scheduling priority level defines `ODP_SCHED_PRIO_HIGHEST`,
`ODP_SCHED_PRIO_NORMAL`, `ODP_SCHED_PRIO_LOWEST`, and `ODP_SCHED_PRIO_DEFAULT`.
These defines have been replaced by matching functions.
==== Traffic Manager
* Change meaning of `odp_tm_enq_multi()` return value of zero from failure code
to part of normal operation.
=== Backward compatible API changes
==== Packet
* Remove references to deprecated `odp_pktin_ts_res()` and
`odp_pktin_ts_from_ns()` functions.
==== Packet IO
* Add `ODP_PKTOUT_MAX_QUEUES` define for the maximum number of packet output
queues.
* Add new packet output queue size configuration option
`odp_pktout_queue_param_t.queue_size` and matching capabilities
`odp_pktio_capability_t.min_output_queue_size` and
`odp_pktio_capability_t.max_output_queue_size`.
* Clarify `odp_pktio_config()` usage in the interface setup sequence.
* Allow large send offload (LSO) usage with traffic manager
(`odp_pktio_config_t.enable_lso`).
==== Timer