-
Notifications
You must be signed in to change notification settings - Fork 40
/
ChangeLog
904 lines (848 loc) · 42.5 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
04 August 2019 - release 2.3.0
Compatibility:
- Version 2.3.0 is not guaranteed to be 100% compatible with previous versions
with respect to TCP Context Replication: the CRC-7 field of the IR-CR packet
type is now computed.
- The library API is compatible with versions 2.0.x and 2.1.x. The
function rohc_comp_set_optimistic_approach() was added.
License/Authors:
- Developing Solutions helped Viveris Technologies to implement the partial
ROHCv2 RTP profile.
- Mehmet Sulak helped to increase max W-LSB window width up to 256
General behaviour:
- compression: do not fallback on the Uncompressed profile by default anymore
- robustness: W-LSB: increase max window width up to 256
Compression standards (be more conform):
- Uncompressed profile:
- correctly detect need for IR instead of Normal packet
- RFC3095 profiles:
- handle random IP-ID with NBO=0
- TCP profile:
- correctly handle changing IPv6 DSCP and ECN fields
- IR-CR: implement CRC-7 over uncompressed headers
- ROHCv2:
- add partial support for ROHCv2 IP/UDP/RTP profile
- allow context re-use for streams with max IP headers
- IP-Only: do not use sequential behavior for outer IP-IDs
Compression efficiency (save more bits):
- Uncompressed: do not transit to IR state if not IP version is not 4 or 6
- RFC3095: avoid Optimistic Approach transmissions if ACK was received
- RFC3095: improve packet decision for efficiency and robustness
- ROHCv1/RTP: UO-1-ID-EXT3 is possible if some IP fields changed
- ROHCv1/RTP: do not transit to FO state if RTP fields changed
- ROHCv1/UDP: use IR-DYN instead of IR if UDP checksum behavior changed
- ROHCv1/UDP: do not transit to IR state if UDP checksum behavior changed
- TCP: IPv6 extension headers: do not forget to reset detected changes
- TCP: do not transmit option items more than required
- TCP: do not transmit TS option in full when not required
- TCP: do not transmit options list more than required
- TCP: seq_8, rnd_8 and co_common may be used for large TS options
- ROHCv2: correctly detect innermost IP-ID/MSN offset changes
Compression robustness (be more robust to packet loss):
- introduce rohc_comp_set_optimistic_approach() to better configure the
Optimistic Approach mechanism defined in the ROHC standards
- add loss robustness test
- TCP: SACK option changed if ACK changed
- TCP: transmit TS option in full several times after a change
- TCP: repeat outer IP-ID changes several times
- TCP: repeat outer IP TTL/HL changes several times
Compression CPU performances:
- improve tools to help increasing CPU performances
- improve cache footprint
- improve CPU perfs of the the W-LSB algorithm
- improve the profile detection
- improve the context detection
- avoid parsing headers several times
- improve TCP profile CPU performances
- improve CRC-3 implementation
- use a hash table for efficiently searching contexts by fingerprint
- detect and remove Variable-Length Arrays (VLA)
Linux kernel module:
- fix the test script for the kernel mode
- fix checkpatch warnings
Tools:
- add loss robustness test
- improve tools to help increasing CPU performances
- non-regression: add option to change initial MSN
- non-regression: handle up to 20 network captures
- non-regression: add syslog traces for external non-regression tests
Q&A:
- fix some spelling mistakes detected by codespell
- enable compiler warning -Wimplicit-fallthrough if supported
- remove some dead code
24 April 2018 - release 2.2.0
Compatibility:
- Version 2.2.0 is not guaranteed to be 100% compatible with previous versions
with respect to IR packet format of the ROHCv1 IP-only, ESP, UDP,
UDP-Lite profiles because the behavior of the D flag was made conforme
to RFC 3095.
- The library API is compatible with versions 2.0.x and 2.1.x. The
following headers/types/functions were added/modified for ROHCv2:
- header <rohc/rohc_profiles.h> was added, it is included by
<rohc/rohc.h>, so no change is required by applications.
- rohc_profile_t to add the ROHCv2 profile identifiers
- rohc_comp_enable_profile() to accept ROHCv2 profiles
- rohc_comp_enable_profiles() to accept ROHCv2 profiles
- rohc_comp_disable_profile() to accept ROHCv2 profiles
- rohc_comp_disable_profiles() to accept ROHCv2 profiles
- rohc_decomp_enable_profile() to accept ROHCv2 profiles
- rohc_decomp_enable_profiles() to accept ROHCv2 profiles
- rohc_decomp_disable_profile() to accept ROHCv2 profiles
- rohc_decomp_disable_profiles() to accept ROHCv2 profiles
- rohc_comp_set_reorder_ratio() to set the ROHCv2 reordering ratio
- rohc_profile_is_rohcv1() to determine if profile is ROHCv1
- rohc_profile_is_rohcv2() to determine if profile is ROHCv2
- rohc_profile_get_other_version() to determine the related profile in
the other ROHC version
- The applications gained a --rohc-version parameter to use ROHCv1 or
ROHCv2 profiles. They defaults to ROHCv1 for compatibility reasons.
License/Authors:
- Developing Solutions helped Viveris Technologies to implement the ROHCv2
IP-only, ESP and UDP profiles.
- Developing Solutions helped Viveris Technologies about the Static Chain
Termination support.
- Mikhail Gruzdev contributed Linux kernel fixes.
- Selvaganesan Murugesan reported the conformance problem with the D flag.
- Bi-Ruei Chiu contribued GCC-7 fixes.
Main changes:
- ROHCv2 IP-only, IP/ESP and IP/UDP profiles,
- interoperability: improve conformance to ROHC standards:
- RFC3095: handle the IR D flag of IP-only, UDP, ESP, and UDP-Lite profiles
- RFC3843: add support for Static Chain Termination
- preliminary Wireshark dissector in Lua
Bug fixes:
- TCP profile: do not skip MSN 65535 at compressor
- Robustness of decompressor for TCP profile:
- Context Replication: check whether base context does exist before using it
- avoid assertion at decompressor with malformed TCP options:
- length of TCP options is not a multiple of 32-bit words
- large TCP options > 40 bytes
- handle length-changing generic TCP options
- kernel:
- fix 64-bit division
- fix nonnull warnings
- fix test application/script for Linux kernel module
- sniffer:
- handle packet timing so that context re-use works correctly
- detect layer-3 protocol from Ethernet protocol type
Q&A:
- fix compilation error when using gcc-7
- decrease code complexity
- fix some spelling mistakes detected by codespell
6 December 2017 - release 2.1.0
Compatibility:
- Version 2.1.0 is not guaranteed to be 100% compatible with previous versions
with respect to packet format of the TCP profile because of several fixes
related to IETF RFCs that change the format of ROHC/TCP packets.
- The library API is fully compatible with versions 2.0.x.
License/Authors:
- Didier Barvaux for Context Replication, ACK(0), CPU performances and
Gentoo/RPM packaging
- Viveris Technologies for ROHC padding, periodic refreshes based on time,
and performance tools
Acknowledgments for bug reports and/or bug fixes:
Klaus Warnke, Mohammad Abyan Abdullah, Mikhail Gruzdev.
Main changes:
- TCP profile:
- add support for context replication
- all profiles:
- use ACK(O) to speed the move to a higher compression state
- add support for ROHC padding
- add periodic refreshes based on inter-packet time
- greatly improve CPU performances:
- improve tools for performance analysis
- improve performances of RFC3095 and RFC6846 profiles
- improve performances of the W-LSB algorithm
Packaging:
- update RPM spec file
- update Gentoo ebuild
Q&A:
- refactor the TCP compression profile
- fix kernel build with up-to-date Linux kernels
- fix warnings from GCC 7.2 and Clang 4.0
- fix warnings from Clang Static Analyzer, cppcheck, CodeSonar and Coverity
27 August 2016 - release 2.0.0
Compatibility:
- Version 2.0.0 is not compatible with versions < 2.0.0 with respect to
packet format of the TCP profile because of several fixes related to
IETF RFCs that change the format of ROHC/TCP packets.
- The library API is not compatible with earlier versions. Deprecated API
functions were removed. Optional compatibility with 1.6.x releases was
also removed.
- Remove the profile callback for matching UDP ports. The preferred way to
detect RTP streams among UDP streams is the detection callback.
License/Authors:
- Klaus Warnke for his fixes on the TCP profile,
- Steven Brown for his fix that reduces librohc.so size,
- Simon Paillard for small fixes on documentation and copyright.
Acknowledgments for bug reports and/or bug fixes:
- Klaus Warnke for his bug reports on the TCP profile,
- Jozsef Dudas,
- Mohammad Abyan Abdullah.
Main changes:
- More compliant and robust TCP profile,
- More robust library in general (with AFL fuzzer and public PCAP captures),
- Remove compatibility with the old deprecated public API,
- Add a Python binding,
- Improve Linux kernel support,
- Improve CPU performances.
Bug fixes:
- RFC 3095 profiles:
- Handle two IPv6 Destination Extension Headers.
- Avoid crash on empty inner IPv4 header.
- Context repair: use LSB ref-1 for IP-ID offset.
- RTP profile:
- Enable back the periodic context refreshes.
- ESP profile:
- Fix wrong logic to determine if CCE packet is required.
- Uncompressed profile:
- Only FEEDBACK-1 is supported.
- Add upward mode and state transitions.
- IR state required for ambiguous packets.
- Enforce rules from RFC2460 about IPv6 extension headers.
- Use Uncompressed profile for empty inner IP header.
- Compressor: ignore unsupported mode transitions.
- Handle corner cases of W-LSB encoding with variable p parameter.
- Decompression: ignore received feedback if user buffer is too small.
- Fix feedback support.
- RFC3095 list compression:
- Handle anonymous lists.
- fix wrong bit shifts.
- Fix Linux kernel support.
- From bugtracker:
Bug # 408982: performance: the library is too slow for production use
Bug # 801563: Improve code by using function attributes when possible
Bug # 804542: Provide python2 binding for ROHC library
Bug # 809031: Remove deprecated public API
Bug # 902465: Algorithm for rate-limiting Negative ACKs is confusing
Bug #1095678: uor2 packet in rnd=1 mode asserts on extension
Bug #1213410: Linux kernel module: cleanup kmod_test.c with checkpatch.pl
Bug #1213411: Linux kernel module: NULL pointer dereferences
Bug #1213412: Linux kernel module: missing install/uninstall/clean/distclean
targets
Bug #1213449: IR/FO periodic refreshes should not be used in O-Mode
Bug #1219419: TCP profile: fuzzer makes the decompressor crash
Bug #1263693: uncompressed profile: feedback behavior does not conform to
RFC 3095
Bug #1296297: Remove deprecated ROHC over UDP tunnel
Bug #1296846: TCP profile: problems with streams generated by ISIC
Bug #1310682: Test with all publicly available PCAP files
Bug #1320442: configure options --with-libpcap-* not taken into account
Bug #1351927: Linux kernel: non regression tests fail because of new
feedback API
Bug #1351930: TCP profile: decompression failures reported as decompression
successes
Bug #1400690: Assert while decompression on TCP profile
Bug #1407084: TCP profile: DSCP not correctly handled
Bug #1407271: TCP profile: decompressor fails to decode duplicate SYN/ACK
Bug #1439727: iprohc assertion failure
Bug #1465007: Provide python3 binding for ROHC library
Bug #1465011: cppcheck: search problems and fix them
Bug #1465012: spellcheck: search problems and fix them
Bug #1493361: Wrong debug message in d_tcp.c:1559
Bug #1494727: TCP EOL option pad_len is in bits, not bytes
Bug #1495527: TCP: parse generic stable irregular: wrong discriminator
handling
Bug #1496023: TCP: sack_unchanged_irregular handling wrong
Bug #1502170: d_tcp_decode_opt_sack() wrong
Bug #1506540: IP_ID_BEHAVIOR_SEQ_SWAP decode issue
Bug #1507675: TCP ACK number scaling
Bug #1511685: IPv6 flowlabel context update missing
Bug #1587011: The decomp feature ROHC_DECOMP_FEATURE_CRC_REPAIR is not
working
Q&A:
- Fix Clang Static Analyzer warnings.
- Fix Coverity warnings.
- Fix cppchecks warnings.
- Fix codespell warnings.
- Decrease code cyclomatic complexity.
- Code coverage:
- replace zcov by lcov,
- improve line and branch coverage.
- Simplify and factorize RFC3095 list compression.
- Simplify and factorize the RFC3095 profiles.
- Improve unit testing.
Performances:
- Avoid memory allocation for ACK delivering.
- Avoid passing large parameters by value.
Applications:
ROHC-over-UDP tunnel:
- Remove the ROHC over UDP tunnel. Use the IP/ROHC tunnel instead.
ROHC sniffer:
- UDP destination port for RTP is even, UDP source port may not.
- Add --stat option to display statistics on console/logs.
- Add header compression ratio.
ROHC fuzzer:
- Remove the ROHC fuzzer. Use AFL instead.
Performances test:
- Misc cleanups and cppcheck fixes.
ROHC stream generator:
- Misc cleanups and cppcheck fixes.
Stats:
- Fix build for GCC 4.5, GCC 4.6 and Clang.
- Add --verbose option and hides library logs by default.
- Handle network packets up to 65535 bytes.
- Generate statistics about TCP packet types.
- Misc cleanups and cppcheck fixes.
21 June 2014 - release 1.7.0
Compatibility:
- Version 1.7.0 is not compatible with versions < 1.7.0 with respect to
packet format because of several fixes related to IETF RFCs that change
the format of ROHC packets. Compatibility may however be required with
the library feature ROHC_COMP_FEATURE_COMPAT_1_6_x.
- The library API is fully compatible with earlier versions.
License/Authors:
- Viveris Technologies for the packet/context repair upon CRC failure.
- Viveris Technologies for better conformance to ROHC standards.
- FWX for ROHCv1 TCP profile.
- Remove the Lulea University of Technology from the authors: code changed
so much since fork that nothing remains from the initial code.
- Remove fuzzer's co-author: he gave ownership and copyright to Didier
Barvaux.
- Add copyright information to all source files.
- Change license from GPLv2+ to LGPLv2.1+
Acknowledgments for bug reports and/or bug fixes:
- Thanks to Friedrich for his help designing the new API function
rohc_feedback_avail_bytes().
- Thanks to Fabrice Bellard for finding several non-conformances to ROHC
standards.
Main changes:
- ROHC protocol:
- Add support for packet/context repair upon CRC failure.
- Add support for extensions on UO-1-ID packets.
- Add support for the ROHCv1 TCP profile (beta quality).
- RTP profile: avoid the Tsc = 0 and no TS bit situation
- Use the Uncompressed profile if IPv4 checksum is incorrect
- Add a compatibility mode with ROHC library 1.6.x.
- Major rework of the API (compatibility preserved), see
https://rohc-lib.org/wiki/doku.php?id=library-migration#api_changes_between_16x_and_17x
- Improve library documentation
- Man pages are now available for public API and tools
- Install ROHC public headers in a rohc/ subdirectory
- New librohc.so available: it gathers all librohc_*.so (old libs still
available)
- Update public headers to be compatible with C++
Build system:
- Refresh HTML and man documentation only if source code changed.
- Remove zcov result files and directories on distclean.
Q&A:
- Parse IP headers/extensions once, factorize many related code
- Rework list compression, especially IPv6 extension headers.
- Add test_lsb_decode unit test
- Add new non-regression test for list compression and context re-use.
- Improve library documentation.
- Reduce graph of header dependencies.
- Many, many small cleanup everywhere.
- Non-regression test: get rid of XML output
- Fix warnings found by the Clang static analyzer.
- Fix warnings found by the Smatch.
- Fix bashisms in non-regression shell script.
- Build library with -Wextra, -Wunreachable-code, -Wshadow,
-Wunused-function and -Wunused-variable compiler flags
- Export only public symbols for libraries.
- Introduce interoperability tests of the ROHC library with other
implementations.
- Make feedback parsing at compressor more robust
Performances:
- Greatly improve the performances of the W-LSB decoding algorithm for
large windows and lossy streams.
- Avoid memory allocation when prepending CID to feedback.
- In case of failure, dump the content of packets only if
--enable-rohc-debug was specified
Applications:
ROHC-over-UDP tunnel:
- Deprecate the ROHC over UDP tunnel. Use the IP/ROHC tunnel instead.
ROHC sniffer:
- Run in background mode and use syslog.
- add --daemon/-d option to make daemon mode optional.
- Add option --pidfile/-p to write the child PID in a file.
- Add --disable option to disable one or more ROHC profiles.
- Add Gentoo init script.
- Do not set MAX_CID > ROHC_SMALL_CID_MAX before changing CID type.
- Update statistics output for the TCP profile.
- Fix IPv4 packets with the non-standard 0xffff checksum.
- Do not compare TCP packets with extra padding after TCP options.
- Enable all decompression profiles.
- Correctly close the PCAP dumps upon segfault
ROHC fuzzer:
- Enable all decompression profiles.
- Use correct length for array traces
- Mention truncated traces
- Install in bin/ instead of sbin/
ROHC fuzzer for RTP traffic:
- new application: same as RTP fuzzer but targets RTP streams
- Install in bin/ instead of sbin/
Performances test:
- Use perf to compute elapsed time, no need to be root anymore
- Use 'comp' and 'decomp' as action parameters.
- Enable all decompression profiles.
- Fix build on x86_64
- Install in bin/ instead of sbin/
ROHC stream generator:
- Add a new tool named 'rohc_gen_stream' that generates large
(un)compressed stream for performance testing.
Stats:
- The statistics tests are now an app in app/stats/
Bug fixes:
Bug # 809028: Write man pages for public API
Bug # 896842: Add extension support for UO-1-ID packet
Bug #1075922: Alignment problem with Timestamp TCP option on ARM
Bug #1208900: RTP profile: unscaled TS shall always be encoded with W-LSB
in UO* packets
Bug #1209260: Wrong W-LSB decoding if interpretation interval straddles
the field boundaries
Bug #1210498: IP-ID shall be transmitted verbatim in IR and IR-DYN packets
Bug #1212769: Fail to unlock/remove feedbacks if ring is full of locked
feedbacks
Bug #1244990: gen_id optional for lists of IPv6 extension headers
Bug #1265304: RTP decompression failure with repeated constant TS
Bug #1301518: Interoperability problems with Aeroflex TM500(LTE)
Bug #1319889: missing 'extern "C"' closure in header
Bug #1321398: "please define a callback for random numbers" printed even
if callback is set
09 Jun 2013 - release 1.6.0
Compatibility:
- Version 1.6.0 is not compatible with versions < 1.6.0 because of several
fixes related to IETF RFCs that change the format of ROHC packets.
- The library API is mainly compatible with earlier versions: some private
entities that were made public by mistake are not public anymore. It
might break some programs that were using them by mistake.
License/Authors:
- Mikhail Gruzdev, Thales Communications, and Viveris Technologies for
Linux kernel support.
- Audric Schiltknecht and Julien Bernard from Viveris Technologies for
constant IP-ID support, the new RTP profile detection mechanism, and
the new trace framework.
- Yura for the ROHC fuzzer.
- Raman Gupta for ROHC-over-Ethernet tunnel support.
Acknowledgments for bug reports and/or bug fixes:
Audric Schiltknecht, FWX, Elisabeth, Julien Bernard, Raman Gupta,
Viveris Technologies, Yura.
Main changes:
- ROHC protocol:
- Support for constant IP-ID as specified by §3.3 of RFC 3843.
- Support for ROHC segment as specified by §5.2.5 of RFC 3095.
- Improve handling of TS, TS_STRIDE, TS_OFFSET and TS_SCALED values.
- Protect STATIC-NACK feedback with CRC. CRC is required if changing
operation mode.
- Several compression/decompression bugs (see below).
- Library API/usage:
- Improve RTP profile detection with a new user callback or with new
API functions to add/remove/reset UDP ports dedicated to RTP traffic.
- Add new trace framework with user-defined callbacks.
- Portability:
- Support for Linux kernel.
- Support for OpenBSD (tested on 5.3 thanks to Audric Schiltknecht).
- Support for mingw64.
- Support for CYGWIN.
- Support for GCC 4.8, Clang 3.2, and TCC.
- RPM spec file for CentOS 5/6, Fedora 17/18 and RHEL 5.
API changes:
- Add rohc_compress2(), rohc_comp_get_segment() and return code
ROHC_NEED_SEGMENT to handle ROHC segments.
- Update rohc_decompress() to return ROHC_NON_FINAL_SEGMENT to handle ROHC
segments.
- rohc_compress() is deprecated by rohc_compress2().
- Add rohc_comp_set_rtp_detection_cb() to define the user-defined RTP
detection callback.
- Add rohc_comp_add_rtp_port(), rohc_comp_remove_rtp_port(), and
rohc_comp_reset_rtp_ports() to manage the UDP ports dedicated to RTP
streams.
- Add rohc_comp_set_traces_cb() and rohc_decomp_set_traces_cb() to manage
library traces with user-defined callbacks.
- Add rohc_feedback_remove_locked() (remove feedbacks once transmitted),
rohc_feedback_unlock() (restore feedbacks if transmission failed).
- Add rohc_comp_get_last_packet_info2() to get compression statistics.
- rohc_comp_get_last_packet_info() is deprecated by
rohc_comp_get_last_packet_info2().
- Add rohc_decomp_get_last_packet_info() to get decompression statistics.
- Add functions rohc_comp_get_general_info(), rohc_comp_get_mrru(),
rohc_comp_get_max_cid() and rohc_comp_get_cid_type() to replace
functions rohc_c_info(), rohc_c_statistics() and rohc_c_context() that
are now deprecated.
- Add rohc_comp_force_contexts_reinit() to re-initialize compression
contexts.
- Remove nonnull as function attribute for public API.
- public header cleanup: move some private definitions from rohc.h to
private headers.
- public header cleanup: move all private decompressor definitions from
rohc_decomp.h to rohc_decomp_internals.h
Build system:
- Append bzr revision number to library version if built from bzr.
- Split --enable-rohc-apps into several different options (see below).
- Add --disable-deprecated-api to disable deprecated code (testing only).
- Change the behavior of the --enable-rohc-debug configure option:
Old behavior: --enable-rohc-debug={1,2,3} configured as build time the
level of debug of the library.
New behavior: --enable-rohc-debug={yes,no} configures only extra debug
for the library.
Debug traces are managed by the new trace framework. Extra debug traces
that may reduce the library performances are only enabled if
--enable-rohc-debug or --enable-rohc-debug=yes are specified. The extra
debug traces are off by default.
- Use CPPFLAGS for -I options instead of CFLAGS.
- Do not override CFLAGS, CPPFLAGS, and LDFLAGS in configure.
- Support out-of-sources builds.
- Support Clang 3.2.
- Support GCC 4.8.
Q&A:
- Add const keywords in several function prototypes.
- Fix warnings emitted by the static code analyzer of the Clang compiler.
- Improve the robustness of the compressor API.
- Improve test coverage.
- Improve API documentation.
- Move all private definitions out from public headers.
- Define many private functions as static in UDP and UDP-Lite profiles.
Performances:
- Simplify the rohc_f_32bits() function.
- Introduce a context key to quickly match packets and contexts.
- Stop search for the compression context if all used contexts were
already checked.
- Create all compression contexts at init instead of at runtime.
- Dump compressed and uncompressed packets only in extra debug mode.
- Avoid using zfree() when free() is enough.
Applications:
General:
- Split --enable-rohc-apps into several different options:
--enable-app-fuzzer --enable-app-performance
--enable-app-sniffer --enable-app-tunnel
ROHC-over-UDP tunnel:
- Handle decompression.
- Handle small/large CIDs and MAX_CID.
- Add ROHC-over-Ethernet support (Raman Gupta).
- Avoid using internal information from the library.
- Fix the usage description.
ROHC sniffer:
- New tool that permits to easily test the library on a real network
without affecting it. The program sniffs IP packets from a given
network interface, and tests the ROHC library with them. The packets
are compressed, then decompressed, and finally compared with the
original IP packets.
ROHC fuzzer:
- New tool that checks the robustness of the ROHC decompressor with
random ROHC packets. Contributed by Yura.
Performances test:
- Increase test duration for CPU frequency.
Bug fixes:
Bug #799206: Build ROHC library with tcc
Bug #804565: Measure test coverage
Bug #813128: Build fails with CYGWIN on Windows
Bug #1038637: RTP profile: RTP header with extension flag set not
correctly handled
Bug #1050980: Add fuzz testing
Bug #1051619: Check library build and tests on OpenBSD
Bug #1069411: Support Linux kernel
Bug #1071413: Tests build failure related to pcap.h
Bug #1080035: Decompression failure with simultaneous TS_STRIDE changes
and packet loss
Bug #1080055: Decompression failure caused by RTP stream with lost packet
but irregular IP-ID
Bug #1083294: Crash while decompressing RTP stream with large TS jump and
UOR-2 disambiguation
Bug #1087682: decompressor: zero-length packet causes a crash
Bug #1087683: decompressor: compressed list with 8-bit XI fields (PS=1)
cause a crash
Bug #1087979: Test failure on FreeBSD 7
Bug #1088004: Decompression failure of specific IPv4 stream with changing
RND
Bug #1089106: Compressor asserts because of non-RTP traffic with 14 SN
bits to transmit
Bug #1090069: Decompressor: crash caused by malformed (too short) IR and
IR-DYN packets
Bug #1092660: Problem with RTP streams with Padding bit set
Bug #1093836: Decompressor crash because of lossy RTP stream with SN
wraparound
Bug #1093846: Possible decompressor crash with malformed extension header
list
Bug #1094452: Decompressor contexts incorrectly preserved if MAX_CID is
changed
Bug #1094710: Build failure on CentOS 6
Bug #1094712: Tests fail to build on FreeBSD 7.4
Bug #1096358: Decompression fails if IPv6 extensions list is not present
anymore
Bug #1096586: Tests use an unsupported option for Valgrind <= 3.6.0
Bug #1105935: Malformed uncompressed packets may crash the ROHC compressor
Bug #1105963: Uncompressed profile: Normal packet cannot be used for
non-IPv4/v6 packets
Bug #1115091: Crash when decompressing list types 1/2/3 if no reference
list was already set
Bug #1166618: UOR-2 extension options for IPv6
Bug #1178441: Malformed IP packet used in code example
Bug #1181829: decompressor crash with truncated UOR-2 packets of the RTP
profile
21 Oct 2012 - release 1.5.0
Compatibility:
Version 1.5.0 is not compatible with versions < 1.5.0 because of several
fixes related to IETF RFCs that change the format of ROHC packets.
The library API is however compatible with earlier versions.
License/Authors:
Add FWX for his ESP profile.
Change website URI for http://rohc-lib.org/
Acknowledgments for bug reports and/or bug fixes:
Ahmed Fathy, Arne, Audric Schiltknecht, FWX, Keith Harry, Mikhail Gruzdev,
Olivier Bonhomme, qingbaibai, Viveris Technologies.
Main changes:
ROHC ESP profile.
Support for FreeBSD and Microsoft Windows (through MinGW) systems.
Better support for ARM and PowerPC platforms.
Enhance stream classifier efficiency: use next header to classify streams
for IP-only profile.
Handle context re-use gracefully.
Do our best not to alter the decompression context before we are sure the
packet could be successfully decompressed.
Do not force the transmission of several IR-DYN packets when dynamic
fields changed. Packets of type UOR-2* may also be used.
Make sure IP-ID bits located in base headers are always for the innermost
IPv4 header with non-random IP-ID, except if stated otherwise.
Fix the disambiguation algorithm for RTP UOR-2* packets.
Handle TS wraprounds as stated in RFC 4815.
New API for user to specify a callback that generates random numbers.
New API for user to configure the size of the WLSB window.
New API for user to configure the timeouts for periodic refreshes.
New API for user to configure the CID type and the MAX_CID value.
Deprecate rohc_decompress_both() API function.
Remove the jamming algorithm (because of bad implementation).
The test_performance app is now installed by make install.
Build system:
Add inter-library dependencies.
Use library versioning through libtool.
Check whether the compiler computes bit-field lengths as expected or not
(added because of TCC).
Valgrind can be used to check for memory problems while running tests:
configure option --enable-rohc-tests-valgrind added.
Rename rohc.c into rohc_common.c to avoid problems when building code for
Linux kernel.
Add option --enable-fortify_sources to add -D_FORTIFY_SOURCE=2 to CFLAGS.
Use the grep, sed, awk, sort, and tr tools found by autoconf in the
different shell scripts.
Remove -lm from LDFLAGS, as the library does not use math functions
anymore.
Use the newer pcap/pcap.h instead of the deprecated pcap.h include.
Enable parallel tests.
Q&A:
Enhance LSB encoding/decoding test.
Add several new enums to make code clearer.
Replace several int by bool.
Remove useless members in some structs.
Remove some useless functions from LSB decoding module.
Make several structs private.
Make several functions private and static.
Shorten the names of several variables/functions for better code clarity.
Add the rohc_dump_packet() function to log the content of a packet.
Add many const keywords on the function parameters of the ip module.
Rework the detection of IP-ID behaviour to make code clearer.
Factorize code with new sdvl_decode() and sdvl_get_min_len() functions.
Move algorithm for packet type decision into profile-specific files.
Introduce new get_next_sn() callback for IP-based profiles.
Introduce new decide_extension() callback for IP-based profiles.
Split decode_uo*() functions to make them clearer and factorize code.
New helper functions to clarify code about IPv4 headers and their IP-ID.
Rework Offset IP-ID decoding module.
Update Doxygen and INSTALL.
Performances:
Remove useless calls to bzero or calloc.
Optimize memory allocation in the wlsb module.
Avoid several calls to strlen() in functions that return statistics.
Remove useless ceil() calls.
Improve W-LSB speed.
Allocate the array of decompression contexts to its full size to avoid
re-allocations during packet processing.
Bug fixes:
Bug #792801: packet decision: extension 2 not considered for UOR-2-TS
packet
Bug #799204: ROHC library does not build on BSD systems
Bug #799205: Build ROHC library with LLVM / Clang
Bug #801561: Add support for valgrind in tests
Bug #804552: UOR-2 packets cannot be used if bits(SN) > 14
Bug #952134: Add support for ESP profile (0x0003)
Bug #953947: WLSB problems
Bug #970770: Build ROHC library with mingw for Windows
Bug #995644: Run regression tests between little endian and big-endian
systems
Bug #1001435: LSB encoding/decoding fails with shift parameter -1
Bug #1001440: LSB decoding of SN should use shift parameter -1 for
IP-only, UDP and UDP-Lite profiles
Bug #1001611: Handle TS wraprounds
Bug #1001614: Do not send RTP TS scaled if TS_STRIDE=0
Bug #1005800: when decoding uor-2-id packet, timestamp is wrong.
Bug #1014056: Changes of behaviour for UDP checksum not correctly
supported
Bug #1014109: IPv4 packets with options not correctly handled
Bug #1014374: IPv4(RND=0)/IPv4(RND=0)/UDP/RTP stream with regular
incrementing IP-ID causes segfault
Bug #1014405: Decompression failure with IPv4(RND=0)/IPv4(RND=1)/UDP/RTP
stream
Bug #1017198: Compression fails if bits(TS_STRIDE) > 29
Bug #1030054: SN is a 16-bit unsigned value for IP/UDP and IP-only profiles
Bug #1030084: TS_SCALED shall be W-LSB encoded on 32 bits
Bug #1035918: STATIC field 'IPv6 Next Header' always detected as changed
with IPv6 extension headers.
Bug #1041146: Release archives do not contain some test files
Bug #1047460: Test failure on PowerPC
Bug #1068998: Compression errors on ARM 9 TDMI
17 May 2012 - release 1.4.0
Compatibility:
Version 1.4.0 is not compatible with versions < 1.4.0 because of several
fixes related to IETF RFCs that change the format of ROHC packets.
License/Authors:
Add Didier Barvaux's personal email address in addition to Viveris one.
Acknowledgments for bug reports and/or bug fixes:
Ahmed Fathy, Arne, François W., hzkjdxwktx, Klaus Warnke, laAnna Hao,
qingbaibai, Viveris Technologies.
Main changes:
Make the library completely thread-aware.
Add new API method rohc_comp_get_last_packet_info() to retrieve some
information about the last compressed packet.
Add several new API functions for getting descriptions on packet types,
extension types, mode and states.
Deprecate crc_init_table(), crc_get_polynom() and crc_table_X from API
(they are still available, but emit a warning).
Rework list compression in a more understandable and robust way.
Add a simple example program in subdir examples/.
Remove the outdated "measures" directory.
Remove context repair (maybe added again later).
Update main and features pages in API documentation.
Add new application and script to generate ROHC compression statistics
(old broken statistics scripts removed).
Add new application for testing compression computing performance.
Build system:
Install README, INSTALL, COPYING, AUTHORS, ChangeLog files.
Update the way API documentation is generated: configure option
--enable-doc and 'make install' replace 'make doc'.
Avoid installing private ROHC headers on the system during install.
Make 'make' less verbose to get output like Linux kernel build.
Remove useless or deprecated checks from configure.ac.
Remove support for 'make report', 'make check' supersedes it.
Configure: avoid adding -lpcap to LDFLAGS several times.
Configure: add support for PACKAGE_URL.
Fix build with CFLAGS="-DNDEBUG".
Q&A:
Move private functions/definitions from public headers to private headers.
Clearly separate public and private functions in several files.
Avoid useless system/internal header inclusions in order to reduce header
interdependencies.
Create enums for packet types, extension types, CID types and SDVL types.
Remove the ugly internal boolean type.
Remove duplicated checks for non-IPv4/IPv6 and fragmented packets.
Check pointers against NULL instead of 0.
Add many const and static keywords when appropriate.
Add many nonnull and warn_unused_result attributes when appropriate.
Use uint8_t, uint16_t, uint32_t and size_t instead of int or unsigned int
when appropriate.
Remove the 'version' fields in compression/decompression profiles.
Fix print formats: use %u instead of %d if type is unsigned.
Avoid modifying input parameters (data and length) in several functions.
Add debug traces to help debugging.
Add many assertion to ease debugging.
Improve code style (uncrustify config file stored in contrib/).
Improve English spelling.
Remove some dead code.
Improve the non-regression test application.
Add new network captures for the non-regression test.
Add unit test for LSB encoding/decoding at wraparound.
Add functional test for FEEDBACK-2 packets.
Add robustness test for feedback-only packets.
Add robustness test for damaged packet handling.
Add robustness test for empty payload handling.
Bug fixes:
Bug #409562: failed to run the statistics tool
Bug #549619: rohctunnel not installed in /usr/sbin
Bug #555695: GCC warnings on x86-64
Bug #555875: ROHC library mishandles RTP Payload Type (PT) changes
Bug #556049: rohc0 creation failed for rohc 1.3.0 library
Bug #560589: ROHC library mishandles non-IPv4/IPv6 packets
Bug #560994: inaccurate help printed by non-regression application
Bug #565470: Compression/decompression failure with large IPv6 extension
Bug #580462: Incorrect test for Uncompressed profile with non-IPv4/v6
packets
Bug #580491: ROHC library fails to handle a specific ICMP stream
Bug #604517: Error in Decompressor for RTP profile
Bug #606919: Function rohc_feedback_flush() not referenced in the
compression API
Bug #622128: FEEDBACK-2 without option contains 12 bits of SN, not 8 bits
Bug #622329: ROHC library fails to decompress ROHC packets with empty
payloads
Bug #622402: Incorrect format for UO-1-ID packet
Bug #622736: coding sequence number in Extension 3
Bug #642850: The ROHC PCAP captures do not use the Ethertype assigned to
ROHC
Bug #759460: don't compress a packet only with feedback
Bug #761955: IP-ID in extension-3 not compressed as it shall be
Bug #763496: Large CIDs shall be bound to the [0-16383] range
Bug #764707: R-TS = 0, Tsc = 0 in EXT3 no allowed
Bug #766277: crc calc outer ip hdr wrong
Bug #767354: Wrong packet decision in FO state
Bug #776482: RTP Marker (M) bit must be transmitted if set
Bug #777852: Wrong Next Header field in compressed IPv6 extension headers
Bug #778541: wrong bitmask format for insertion/removal schemes of list
compression
Bug #799856: failure reported when decoding feedback-only packets
Bug #800829: No check for doxygen
Bug #800830: No check for gnuplot
Bug #800835: ROHC library build emits warnings on x86-64
Bug #800841: Setup buildbots for continuous integration
Bug #803648: Decompression failure for IPv4 stream with empty payload
Bug #804552: UOR-2 packets cannot be used if bits(SN) > 14
Bug #808475: Correctly handle the LSB wraparound
Bug #886523: Build of tests and apps fails with support for shared libs
disabled
Bug #888287: tests fail on ARM
Bug #897831: Library fails to build with GCC < 4.5
Bug #897849: Library fails to build with GCC 4.6
Bug #948711: mode field not correctly parsed from RTP dynamic chain
Bug #970762: Wrong SN in feedback
22 Mar 2010 - release 1.3.0
Compatibility:
Version 1.3.0 is not compatible with versions < 1.3.0 because of several
fixes related to IETF RFCs that change the format of ROHC packets.
License/Authors:
Make clear that code is released under GPL version 2 or later.
Add CNES, the French space agency, as author.
Add Julien Bernard of Viveris Technologies as author.
Add Julien Peyrade of Viveris Technologies as author.
Build system:
Do not force automake version.
Disable static libraries by default.
Remove useless check for C++ compiler.
Change contact address to website instead of email address.
Add "make check" support for non-regression tests.
Make trace level configurable through ./configure script.
Add pkg-config support.
Do not force -Werror CFLAG by default.
Add --enable-fail-on-warning to use -Werror CFLAG.
Fix make dist and make distcheck.
Bug fixes:
Fix bug #409428 entitled "autogen.sh fails on Ubuntu 8.04".
Fix bug #414032 entitled "rohctunnel: cannot see compression/decompression
statistics".
Fix bug #481572 entitled "incorrect CRC computation".
Fix bug #482559 entitled "incorrect generic extension header list".
Fix bug #490752 entitled "ROHC decompressor crashes on Blackfin 561".
Fix bug #518796 entitled "TS_Stride field not encoded with SDVL".
Fix several endianness problems.
Fix large CID support.
Fix the decision algorithm to be able to choose UO-1-ID packet.
Fix integer overflow.
Fix a bug with state transitions at decompressor in unidirectional mode.
Fix non-regression tests for cases where RTP bit type is enabled.
Fix many doxygen errors.
Many more...
ROHC tunnel:
Re-work option parsing of ROHC tunnel application.
Install ROHC tunnel application in 'sbin' instead of 'bin'.
04 Aug 2009 - release 1.2.0
Clean the build chain.
Update source code for building with GCC 4.3.
Update documentation and copyright.
18 Feb 2008 - release 1.1.0
Support for IPv6 list compression
RTP bugfixes
fix build failure of the tunnel application
fix doxygen documentation
27 Nov 2007 - release 1.0.0
first release of ROHC library
IPv4/v6 profiles
UDP profile
UDP-Lite profile
RTP profile
some non-standard improvements (use of jamming, new RTP bit type)