forked from OpenDataPlane/odp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CHANGELOG
5200 lines (4251 loc) · 219 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.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
* Clarify timer tick properties and especially that it may run with a higher
frequency than the requested timer pool resolution.
* Add new timer pool parameter (`odp_timer_pool_param_t.exp_mode`), which
application can use to select if timer expiration may happen before or only
after the specified time.
* Add new `odp_timer_start()` and `odp_timer_restart()` functions.
* Add support for periodic timers. New capabilities, parameters, and functions
are added to create/start/ack periodic timers.
==== Traffic Manager
* Add `odp_tm_enq_multi_lso()` function which does also LSO as part of the TM
output operation.
=== Remove deprecated APIs
==== Classifier
* Remove deprecated `ODP_PMR_INVAL` define.
==== Crypto
* Remove deprecated old style cipher algorithm enumerations
`ODP_CIPHER_ALG_AES128_CBC` and `ODP_CIPHER_ALG_AES128_GCM`.
* Remove deprecated old style authentication algorithm enumerations
`ODP_AUTH_ALG_MD5_96`, `ODP_AUTH_ALG_SHA256_128`, and `ODP_AUTH_ALG_AES128_GCM`.
* Remove deprecated fields `aes128_cbc` and `aes128_gcm` from
`odp_crypto_cipher_algos_t`.
* Remove deprecated fields `md5_96`, `sha256_128`, and `aes128_gcm` from
`odp_crypto_auth_algos_t`.
* Remove deprecated data range specifier `odp_crypto_data_range_t`.
* Remove deprecated `iv` field from `odp_crypto_session_param_t`.
* Remove deprecated `odp_crypto_session_params_t` type.
* Remove deprecated `override_iv_ptr` field from `odp_crypto_op_param_t`.
* Remove deprecated `override_iv_ptr` field from `odp_crypto_packet_op_param_t`.
* Remove deprecated `odp_crypto_op_params_t` type.
* Remove deprecated `odp_crypto_compl_status_t` type.
==== Packet IO
* Remove deprecated parser layer defines (`ODP_PKTIO_PARSER_LAYER_*`).
* Remove deprecated `odp_pktio_capability_t.loop_supported` capability.
* Remove deprecated `odp_pktio_mtu()` function.
==== Queue
* Remove deprecated scheduled queue capabilities from `odp_queue_capability_t`.
==== Miscellaneous
* Remove deprecated `odp.h` header file which has been replaced by `odp_api.h`.
== OpenDataPlane (1.34.0.0)
=== Backward incompatible API changes
==== Crypto
* Specify that hash result field is not cleared in hash generation in encode
sessions. Applications can do the clearing if needed if the hash result lies
within the authenticated range.
* Specify that the hash result field is left to an undefined value after
verification.
* Add a new session parameter
`odp_crypto_session_param_t.hash_result_in_auth_range` to indicate if the hash
result location may overlap the authenticated range. Leaving the flag unset may
enable optimizations in the implementation.
* Define new fields for cipher and auth IV lengths in the session parameter
structure `odp_crypto_session_param_t`. Deprecated the old fields for cipher and
auth IV lengths.
* Deprecate the mechanism of configuring initialization vectors in sessions
since reusing the same IV with the same key is almost always wrong. Require that
IV is provided for each packet in the operation parameters.
==== Traffic Manager
* Add capabilities to `odp_tm_level_capabilities_t` for platforms to express
shaper rate and burst min and max limits.
* Remove support for min and max shaper rate via platform defined macros
`ODP_TM_MIN_SHAPER_BW` and `ODP_TM_MAX_SHAPER_BW`. Min and Max shaper bandwidths
can be read from TM per level capabilities (`odp_tm_level_capabilities_t`).
=== Backward compatible API changes
==== Crypto
* Clarify that in case of AEAD algorithms the `odp_crypto_op_param_t.auth_range`
parameter is not used, except with AES-GMAC.
* Clarify `ODP_AUTH_ALG_AES_GMAC` API text to not sound as if ODP did not use
AAD as defined in the GMAC algorithm specification.
* Make the names of session creation errors (`odp_crypto_ses_create_err_t`) a
bit shorter but retain the old names for backward compatibility.
* Add crypto session creation error codes (`odp_crypto_ses_create_err_t`) for
cases where the requested combination of algorithms, order of algorithms or
other combination of creation parameters is not supported.
==== Random
* Explicitly state that the same series of `odp_random_test_data()` calls is
required to generate the same data.
==== Traffic Manager
* Clarify that peak rate and peak burst are ignored when dual rate is set to
false in `odp_tm_shaper_params_t`, indicating that the single rate is commit
rate.
* Define the default values for many parameters to be set by various init
functions.
=== ABI changes
* Removed mips64 architecture support. MIPS devices may still use ODP by
utilizing the generic default architecture.
== OpenDataPlane (1.33.0.0)
=== Backward incompatible API changes
==== Shared Memory
* Added a bit mask capability `odp_shm_capability_t.flags` for ODP_SHM_* flags
==== Timer
* Added initialization function `odp_timer_pool_param_init()` for timer pool
parameters. Application must use it to initialize parameters to their
default values.
=== Backward compatible API changes
==== Classifier
* Added missing default values for `odp_cls_cos_param_t.num_queue`,
`odp_cls_cos_param_t.red.enable`, `odp_cls_cos_param_t.bp.enable`, and
`odp_pmr_param_t.range_term`.
==== Crypto
* Clarified that `odp_crypto_session_create()` parameters, including the key and
IV data, can be freed after session creation.
==== DMA
* Added new DMA module which enables applications to offload memory transfers
(copies) to DMA hardware. See `include/odp/api/spec/dma.h` for more information.
==== IPsec
* Added possibility to request completed packets as packet vector events
instead of packet events. Packet vector capabilities are provided by
`odp_ipsec_capability_t.vector` and the configuration is done using
`odp_ipsec_config_t.vector`.
* Clarified that `odp_ipsec_sa_create()` parameters, including the various
memory buffers pointed to by the parameters, can be freed after SA creation.
==== Packet IO
* Clarified `odp_pktin_vector_config_t.enable` documentation to state that when
packet vectors are enabled, packets may be delivered both as packet vector
events and packet events. Packet vectors are disabled by default.
* Clarified that the type of input queues (scheduled versus plain) is deduced
from the pktio input mode in `odp_pktin_queue_config()`, and that the default
queue type value and the queue type value passed in
`odp_pktin_queue_param_t.queue_param` are ignored.
=== Pool
* Added new pool type for DMA completion event pools. These pools are created
with `odp_dma_pool_create()` and pool capability is included in
`odp_dma_capability_t`. Otherwise, pool APIs are used normally for these pools.
==== Shared Memory
* Added `ODP_SHM_NO_HP` flag which can be used to prevent the implementation
from allocating the shared memory block from huge pages
==== Std
* Added DMA flag to `odp_feature_t`
== OpenDataPlane (1.32.1.0)
=== Backward compatible API changes
==== Init
* Added `odp_instance()` function for reading the current ODP instance handle
==== IPsec
* Clarified bit field unions' `all` member intended usage
==== Packet
* Clarified `odp_proto_chksums_t.all_chksum` intended usage
==== Packet IO
* Clarified `odp_pktin_hash_proto_t.all_bits` intended usage
==== Pool
* Added `odp_pool_print_all()` function for printing implementation defined
information about all created pools to the ODP log
* Clarified `odp_pool_param_t.pkt.seg_len` documentation
==== Stash
* Added 32-bit only `odp_stash_put_u32()` and `odp_stash_get_u32()` functions
* Added 64-bit only `odp_stash_put_u64()` and `odp_stash_get_u64()` functions
* Added pointer only `odp_stash_put_ptr()` and `odp_stash_get_ptr()` functions
=== Helper (1.3.0)
==== Backward incompatible changes
===== CLI
* Removed unused `instance` parameter from `odph_cli_init()`
===== Deprecation Framework
Added a deprecation framework to enable controlled API deprecation.
When a helper API is deprecated, validation tests will be updated to use the
replacement API. By default, attempts to compile code with deprecated helper
APIs will fail. To make moving to a new API version easier, helper library
supports `--enable-helper-deprecated` `configure` option, which makes the
deprecated APIs visible again.
===== Linux
* Deprecated `odph_odpthreads_create()` function. Use `odph_thread_create()`
instead.
* Deprecated `odph_odpthreads_join()` function. Use `odph_thread_join()`
instead.
* Deprecated unused `odph_thread_param_t.instance` struct member
* Deprecated `odph_odpthread_t` and `odph_odpthread_params_t` types
== OpenDataPlane (1.32.0.0)
=== Backward incompatible API changes
==== IPsec
* Added destination queue capabilities `odp_ipsec_capability_t.queue_type_sched`
and `odp_ipsec_capability_t.queue_type_plain`
* Modified specification to not promise the original packet back after all error
cases
=== Backward compatible API changes
==== IPsec
* Added original ESP/AH packet length into IPsec packet result
(`odp_ipsec_packet_result_t.orig_ip_len`)
==== Packet
* Added `odp_packet_reass_info()` function for reading completed reassembly
details
==== Std
* Moved all contents of support and feature modules into ODP Std module
=== Helper (1.2.0)
==== Backward incompatible changes
===== CLI
* Replaced `odph_cli_start()` function with `odph_cli_run()`, which doesn't
automatically create a separate thread for running the CLI server.
===== Linux
* Deprecated `odph_odpthread_t` and `odph_odpthread_params_t` types
* Added `odph_thread_param_init()` function for initializing thread parameters
* Added `odph_thread_common_param_init()` function for initializing thread
common parameters
==== Backward compatible changes
===== CLI
* Added `odph_cli_param_t.hostname` parameter for providing a custom CLI prompt
hostname
* Added `odph_cli_log_va()` function for user defined CLI commands
===== Linux
* Added `odph_thread_param_t.stack_size` parameter for configuring minimum
thread stack size
* Added `odph_thread_common_param_t.sync_timeout` parameter for configuring
synchronized thread creation timeout
=== Implementation
==== Crypto
* AES-EEA2 and AES-EIA2 crypto algorithms that operate in bit mode interpret the
crypto/auth offset now as bits as specified in the ODP API. This correction
requires corresponding changes in applications that have relied on the old,
incorrect behavior that interpreted the offset in bytes.
== 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()`
and `odp_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 std and moved all generic ODP data types and functions
there
==== Traffic Manager
* Increased scheduling weight parameter size (`uint8_t` to `uint32_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 (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` into `odph_ipsec_alg_check()`
* Added default ICV length check into `odph_ipsec_alg_check()`
== OpenDataPlane (1.30.1.0)
=== API
==== Packet IO
* Modified `odp_pktio_stats_t.in_octets/out_octets` definitions to not include
CRC (4 bytes)
* Added `odp_pktio_stats_capability_t` struct to `odp_pktio_capability_t` to
inform about supported statistics counters
* Added new 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` and `odp_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
==== IPsec
* Specified that the default values of the IPsec specific reassembly enables
are false
==== Scheduler
* Added `odp_schedule_print()` function for printing debug information about
scheduler status into the ODP log
==== Standard Types
* Added `odp_fract_u64_t` type which can be used to define fractional numbers
accurately
* Added `odp_fract_u64_to_dbl()` function for converting `odp_fract_u64_t`
fractional numbers into doubles
==== Timer
* Added timer tick info as part of `odp_timer_pool_info_t`. This enables timer
implementation to specify tick frequency and duration very accurately.
== OpenDataPlane (1.30.0.0)
=== API
==== IPsec
* New success bytes field in stats (`odp_ipsec_stats_t.success_bytes`)
==== Packet IO
* Specify explicitly that an application may enqueue to packet input side event
queues, and cannot dequeue from output side event queues
==== Time
* Added 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()`
==== Timer
* Added new 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 old `ODP_CLOCK_CPU` and `ODP_CLOCK_EXT` enumerations
will be deprecated in the future.
* Renamed 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 set operation failure code (`odp_timer_set_t`) to cover all error
cases: `ODP_TIMER_NOEVENT` -> `ODP_TIMER_FAIL`
==== Traffic Manager
* Added option to enable packet mode shaper (packets per second as opposed to
bits per second)
* Added new mandatory `odp_tm_start()` and `odp_tm_stop()` calls for starting and
stopping traffic manager system
* Added capabilities (`odp_tm_capabilities_t`) for supported dynamic
configuration updates
* Deprecated 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`
and `odp_tm_shaper_params_t.peak_rate` fields should be used instead.
=== Helper (1.1.0)
* Added new mandatory `odph_cli_init()` and `odph_cli_term()` functions for
initializing and terminating the CLI helper
* Added `odph_cli_register_command()` function for registering user defined CLI
commands
== OpenDataPlane (1.29.0.0)
=== API
==== Packet IO
* Modified statistics counters (`odp_pktio_stats_t`) definitions
* Deprecated statistics counter `odp_pktio_stats_t.in_unknown_protos`
* New `odp_pktio_stats_t.in_packets` and `odp_pktio_stats_t.out_packets`
statistics counters
* New APIs for packet input inline IP reassembly offload
==== Packet
* New `odp_packet_reass_status()` function added for checking packet reassembly
status
* New `odp_packet_reass_partial_state()` function added for reading packet
partial reassembly state
==== IPsec
* New APIs for inline IP reassembly offload
==== Init
* New `odp_log_thread_fn_set()` function added for setting a thread specific log
function
=== Implementation
* ABI compatibility default value has been changed to disabled. User can enable
ABI compatibility with `--enable-abi-compat` configure option.
== OpenDataPlane (1.28.0.0)
=== API
==== Crypto
* New crypto capabilities for defining if a queue type (scheduled/plain) can be
used as a crypto completion event destination
==== Event
* New packet TX completion event type and related functions
==== Packet
* New packet APIs for requesting packet TX completion events
* New packet APIs for requesting packet TX drop based on packet age
==== Classifier
* New `odp_cls_print_all()` function for printing implementation specific
debug information about all classifier rules
==== System
* New enumerations for ARMv8.7-A, ARMv9.0-A, ARMv9.1-A, and ARMv9.2-A ISA
versions
== 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` and `compress` into `odp_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 return `odp_pktio_link_status_t` enum
(backward compatible values)
==== Pool
* Added `cache_size` parameters to `odp_pool_capability_t` and `odp_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` from `odp_pool_param_t`
The default value is implementation specific and may not be equal to the maximum
capability.
* Added packet data `align` parameter to `odp_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()` and `odp_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()` and `odp_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` into `odp_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 and `ODP_VERSION_API_NUM` macro
Added a macro and version number defines for easier comparison of API version
numbers.
=== Validation Tests
==== Buffer
* Rewrote buffer tests for improved coverage
* Allow allocated buffer size to be larger than requested
==== Classification
* Fix duplicate global variable definition
* Use `odp_schedule_wait_time()` correctly
==== Crypto
* Fix var len array scope
==== Init
* Add tests for new `compress` and `stash` feature bits
* Improved log prints
==== IPSec
* Fixed invalid allocation of zero length test packet
* Fixed invalid test for user pointer value
==== Packet
* Add max pools test
* Add packet alloc align test
* Fix max_num expectations
* Prevent test trying to allocate zero length packets
* Remove pools from suite init
* Remove reset test packet from suite init
* Rename default pool
* Use common pool capability
==== Packet I/O
* Check parser flags on receive
* Check pktio index
* Decrease timeout in `odp_pktin_recv_tmo()` test
* Make `pktio_check_start_stop()` test conditional
* Remove unnecessary test start-up input flushes
* Test `odp_packet_input_set()`
* Test user pointer on receive
* Do no attempt to continue with invalid queue handle
==== Pool
* Add pool cache size tests
* Add test for packet pool seg_len parameter
==== Queue
* Lockfree queue max_size may be zero
==== Scheduler
* Add new stress test
* Fix plain+sched test
* Test `odp_schedule_group_create()` with non-zero mask
==== Shared Memory
* Add reserve flag tests
* Fix printf format types for pointers
==== Stash
* Add tests for the new API
==== System
* Add test for `ODP_CACHE_LINE_ROUNDUP`
* Add version macro test
* Call version string functions
* Cpu cycle counter may not be supported
* Make `odp_cpu_hz_max()` tests conditional
==== Timer
* Timeout tick equals requested tick
* Always initialize `odp_timer_pool_param_t` contents
==== Traffic Manager
* Fix shaper profile parameter check
* Init structs between tests
=== Example Applications
==== Bench_packet
* Added tests for missing packet functions
==== Hello
* Removed `-c` command line option
==== L2fwd
* Added number of packets option `-n`
* Added packet copy option `-p`
* Added pool per interface option `-y`
==== Packet_dump
* Added VLAN support
==== Packet_gen
* Added new simple packet generator test application
==== Sched_latency
* Added option for selecting event forwarding mode `-f`
* Increased the number of warm-up and scheduling rounds
==== Sched_perf
* Added data touch options `-n` and `-m`
* Added queue context data touch options `-k` and `-l`
* Improved test reliability
==== Switch
* Added 5 minute aging time to MAC table entries
* Added signal handler for SIGINT
* Added support for detecting invalid and broadcast ethernet addresses
* Improved packet drop statistics printing
==== Timer_accuracy
* Added burst gap option `-g`
* Added mode option `-m`
* Added option `-e` to retry on too early error
* Added output file option `-o`
* Added timer burst option `-b`
=== Implementation Improvements
==== GCC 10 support
Fixed issues reported by GCC 10. The code base builds now with GCC 10
also when LTO is enabled.
==== Add configure option for setting path to the default config file
Added `--with-config-file=FILE` configuration option for setting path to the
default configuration file. The default configuration file has to include all
configuration options.
=== Bug Fixes
==== Numbered Bugs / Issues
* Fixed: https://github.com/OpenDataPlane/odp/issues/796[Issue 796]
seg[0].data MUST return to its initial value on odp_packet_reset
* Fixed: https://github.com/OpenDataPlane/odp/issues/826[Issue 826]
max_size requires clarification for ODP_NONBLOCKING_LF and ODP_NONBLOCKING_WF
* Fixed: https://github.com/OpenDataPlane/odp/issues/915[Issue 915]
SIGSEGV: example/sysinfo (raspberry Pi 3B+, arm7, odp-linux, gcc 8.2.0)
* Fixed: https://github.com/OpenDataPlane/odp/issues/930[Issue 930]
Build failing with GCC 9.2
* Fixed: https://github.com/OpenDataPlane/odp/issues/959[Issue 959]
ODP build fails with GCC 10.1
==== Unnumbered Bugs / Issues
* Fixed: crypto: fix session allocation when out of sessions
* Fixed: dpdk: DPDK renamed protocol structs
* Fixed: dpdk: fix rx/tx checksum offload
* Fixed: fix print failures on 32-bit systems
* Fixed: pool: fix overflow when creating a huge packet pool
* Fixed: pool: rename pool global variable
* Fixed: sched scalable: fix pktio ingress queue polling dead lock
* Fixed: test: fix global variables that are defined multiple times
* Fixed: timer: fix timer pool create sync with inline timer scan
== OpenDataPlane (1.23.0.0)
=== Summary of Changes
The ODP API changes in this release are related to the classifier module.
The implementation changes include bug fixes (classifier, socket pktio),
configurability improvements (inline timer), new packet segmentation
implementation, and performance improvements (pool).
=== API
==== Classifier
The PMR term documentation was not explicit about endianness of value and mask
fields. Most terms assumed CPU endian, but terms with larger data sizes assumed
big endian (MAC, IPv6 address and custom).