Skip to content
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
905 lines (848 sloc) 42.5 KB
04 August 2019 - release 2.3.0
- 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.
- 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
- 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
- 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
- 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.
- 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
- fix compilation error when using gcc-7
- decrease code complexity
- fix some spelling mistakes detected by codespell
6 December 2017 - release 2.1.0
- 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.
- 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
- update RPM spec file
- update Gentoo ebuild
- 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
- 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.
- Klaus Warnke for his fixes on the TCP profile,
- Steven Brown for his fix that reduces 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
Bug #1213411: Linux kernel module: NULL pointer dereferences
Bug #1213412: Linux kernel module: missing install/uninstall/clean/distclean
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
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
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
- 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.
- Avoid memory allocation for ACK delivering.
- Avoid passing large parameters by value.
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.
- 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
- 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.
- 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
- 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
- Thanks to Fabrice Bellard for finding several non-conformances to ROHC
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
- Improve library documentation
- Man pages are now available for public API and tools
- Install ROHC public headers in a rohc/ subdirectory
- New available: it gathers all librohc_*.so (old libs still
- 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.
- 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
- Make feedback parsing at compressor more robust
- 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
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.
- 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
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
- 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.
- 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
- 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
- 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
- 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
- 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.
- 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.
- 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.
- 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
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
Bug #1093846: Possible decompressor crash with malformed extension header
Bug #1094452: Decompressor contexts incorrectly preserved if MAX_CID is
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
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
21 Oct 2012 - release 1.5.0
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.
Add FWX for his ESP profile.
Change website URI for
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
Use the newer pcap/pcap.h instead of the deprecated pcap.h include.
Enable parallel tests.
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.
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
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
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
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
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
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.
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:
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
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".
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
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
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
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
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
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
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
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.
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 " fails on Ubuntu 8.04".
Fix bug #414032 entitled "rohctunnel: cannot see compression/decompression
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)
You can’t perform that action at this time.