← Back to team overview

rohc team mailing list archive

ROHC 2.3.0: improved robustness, efficiency and performances

 

Hello everybody,

The major version 2.3.0 of the ROHC library was just released.

This release improves robustness, compression efficiency and
CPU/memory performances. It also introduces a partial ROHCv2
IP/UDP/RTP profile.

The improvement in CPU performances is impressive. If you use
the library with high bandwidth traffic, give it a try !


== About the ROHC library ==

The ROHC library provides an easy and robust way for applications to
reduce their bandwidth usage on network links with limited capacity
or expensive costs. Headers of network packets are compressed with the
ROHC protocol and algorithms.

The ROHC protocol is very efficient for compressing VoIP streams that
use RTP as transport protocol. ROHC is also suitable for compressing
IP-only (IPv4 or IPv6) flows, UDP flows and many others.

The library is published as Opensource under the license GNU LGPL
version 2.1 or later.

See https://rohc-lib.org/ and https://rohc-lib.org/presentation/rohc-protocol/
for more details.


== Release notes & changelogs ==

The 2.3.0 release includes:

* 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
    * TCP profile: IR-CR: implement CRC-7 over uncompressed headers
    * ROHCv2: add partial support for ROHCv2 IP/UDP/RTP profile
    * ROHCv2: allow context re-use for streams with max IP headers
    * ROHCv2: 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


== Compatibility with previous releases ==

From a ROHC protocol point of view, the 2.3.0 release is not compatible
with previous releases if you use the ROHCv1 TCP profile. This is due
to interoperability fixes (see changelog). In general, mixing major
versions for compressor and decompressor is not recommended.

The library API is compatible with versions 2.0.x and 2.1.x. One function
was however added to uniformize Optimistic Approach handling.
See https://rohc-lib.org/wiki/doku.php?id=library-migration for more details.


== Acknowledgements ==

Many thanks to people that helped making the 2.3.0 release:
* Developing Solutions for helping Viveris Technologies adding the
  partial ROHCv2 IP/UDP/RTP profile.
* Mehmet Sulak helped to increase max W-LSB window width up to 256
* Marek Majkowski for his MIT-licensed siphash24 implementation
  (https://github.com/majek/csiphash/)
* Mark Adler for his zlib-licensed CRC implementation
  (https://github.com/madler/crcany)
* Ole Gabriel Stein for asking me to release version 2.3.0 ;-)


== Download ==

The source archive is available for download [1]. A sha256 checksum
and a GPG signature are provided, be sure to check them [2].

[1] download files: https://rohc-lib.org/support/download/#supported-releases [2] check files: https://rohc-lib.org/support/download/#verify-downloaded-files


== Installation instructions & API documentation ==

The instructions to install the library and use it are available [3].
The API documentation is available in HTML [4] and man pages [5].

[3] Tutorial: https://rohc-lib.org/presentation/getting-started/
[4] API documentation (HTML): https://rohc-lib.org/support/documentation/API/rohc-doc-2.3.0/ [5] API documentation (man): https://rohc-lib.org/support/documentation/API/rohc-man-2.3.0/


== Feedback ==

Any feedback on the 2.3.0 release will be appreciated. You may use
the mailing list to ask questions [6] and the bug tracker to report
problems [7].

[6] mailing list: https://rohc-lib.org/support/mailing-list/
[7] bug tracker: https://rohc-lib.org/developer/bugtracker/


Regards,
Didier Barvaux