A library for the RObust Header Compression (ROHC) protocol. It 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.
C Makefile Shell Lua Python M4 Other
Permalink
Failed to load latest commit information.
app doc: update man pages for version 2.2.0 Apr 24, 2018
contrib python: avoid outdated PCAP format Apr 24, 2018
doc doc: update man pages for version 2.2.0 Apr 24, 2018
examples codesonar: fix 'Coercion Alters Value' warnings Sep 15, 2017
linux ROHCv2: make IP/UDP profile conform to RFC5225 Apr 24, 2018
src TCP: correctly handle changing IPv6 DSCP and ECN fields May 14, 2018
test TCP: correctly handle changing IPv6 DSCP and ECN fields May 14, 2018
.gitignore Q&A: tell Git to ignore release tar.xz tarballs Apr 23, 2018
.travis.yml Travis CI: put 'make distcheck' in silent mode too Jan 10, 2018
AUTHORS convert README, INSTALL and AUTHORS file to Markdown format Jun 26, 2016
AUTHORS.md AUTHORS: add new contributors for version 2.2.0 Apr 24, 2018
COPYING Relicensing of the ROHC library to LGPLv2.1 or later Jun 21, 2014
ChangeLog ChangeLog: add changes for version 2.2.0 Apr 24, 2018
INSTALL convert README, INSTALL and AUTHORS file to Markdown format Jun 26, 2016
INSTALL.md Update RPM spec for ROHC 2.0.0 Dec 11, 2016
Makefile.am non-regression: add tests for RFC5225 (ROHCv2) Apr 24, 2018
NEWS Use HTTPS for project home page Sep 10, 2016
README convert README, INSTALL and AUTHORS file to Markdown format Jun 26, 2016
README.md Q&A: add all RFCs to README.md Apr 23, 2018
autogen.sh autogen.sh: fix autodetection for kernel module Oct 18, 2017
configure.ac configure: correctly detect Git tags Apr 25, 2018
git_ref.in Update build chain for GIT. Nov 10, 2014
rohc.pc.in Merge the 3 librohc_*.so libraries into one single librohc.so library. Jun 27, 2014

README.md

ROHC library - compress protocol headers

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), UDP or TCP flows and many others.

The ROHC library is intended for developers who want to reduce the bandwidth requirements of their applications. Supported platforms include Linux, BSD, Windows, and Android.

Useful links

License

The project is licensed under the GNU LGPL version 2.1 or later, see the COPYING and AUTHORS.md files for more details.

Some network captures or small scripts used for testing are under the GNU GPL version 2 or later.

Sources organization

The sources of the ROHC library are located in the src/ subdirectory. They are organized into subdirectories:

  • src/comp/ contains the sources of the ROHC compressor
    • src/comp/schemes/ contains the sources of the compression schemes used by the ROHC compressor
  • src/decomp/ contains the sources of the ROHC decompressor
    • src/decomp/schemes/ contains the sources of the compression schemes used by the ROHC decompressor
  • src/common/ contains the sources shared by the ROHC compressor and the ROHC decompressor
    • src/common/protocols/ contains the definitions of some network headers.

The doxygen documentation is the main source of information to use the ROHC library. The examples subdirectory also provides some examples.

See the INSTALL.md file to learn to build the ROHC library.

Applications

Several applications are available in the app/ subdirectory:

  • app/performance/ contains an application that allows developers to benchmark the (de)compression of the ROHC library
  • app/sniffer/ contains an application that allows developers to test the (de)compression of the ROHC library on any local network
  • app/stats/ contains an application that allows developers to compute some statistics about ROHC (de)compression of some network streams

See the INSTALL.md file to learn to build the ROHC applications.

Python binding

As of version 2.0.0, a Python binding was added. It is not as CPU performant as the C library, so it is only recommended for testing or rapid prototyping. See the INSTALL.md file to learn building and installing the Python binding.

The Python binding supports both Python 2.7 and Python 3.x.

Tests

The test/ subdirectory contains several test applications. See the INSTALL.md file to learn how to use these tools.

References

General:

  • ROHC library The Open Source ROHC library described by the README file you are reading
  • ROHC Linux A GPL-licensed implementation of ROHC over PPP for the 2.4 Linux kernel. The ROHC library was based on this software
  • UDP-Lite An UDP-Lite implementation for the Linux kernel

IETF RFC:

  • RFC 3095 ROHC: Framework and four profiles: RTP, UDP, ESP, and uncompressed
  • RFC 3096 Requirements for robust IP/UDP/RTP header compression
  • RFC 3241 ROHC over PPP
  • RFC 3242 ROHC: A Link-Layer Assisted Profile for IP/UDP/RTP
  • RFC 3243 ROHC: Requirements and Assumptions for 0-byte IP/UDP/RTP Compression
  • RFC 3408 ROHC: Zero-byte Support for R-mode in Extended Link-Layer Assisted ROHC Profile
  • RFC 3409 ROHC: Lower Layer Guidelines for Robust RTP/UDP/IP Header Compression
  • RFC 3759 ROHC: Terminology and Channel Mapping Examples
  • RFC 3816 ROHC: Definitions of Managed Objects (SNMP MIB) for ROHC
  • RFC 3828 The Lightweight User Datagram Protocol (UDP-Lite)
  • RFC 3843 ROHC: A Compression Profile for IP
  • RFC 4019 ROHC: Profiles for User Datagram Protocol (UDP) Lite
  • RFC 4163 ROHC: Requirements on TCP/IP Header Compression
  • RFC 4224 ROHC over Channels That Can Reorder Packets
  • RFC 4362 ROHC: A Link-Layer Assisted Profile for IP/UDP/RTP
  • RFC 4995 The RObust Header Compression (ROHC) Framework
  • RFC 4996 ROHC: A Profile for TCP/IP (ROHC-TCP)
  • RFC 4997 Formal Notation for RObust Header Compression (ROHC-FN)
  • RFC 5225 ROHCv2: Profiles for RTP, UDP, IP, ESP and UDP-Lite
  • RFC 5795 The RObust Header Compression (ROHC) Framework
  • RFC 5856 ROHC: Integration of ROHC over IPsec Security Associations
  • RFC 5857 ROHC: IKEv2 Extensions to Support ROHC over IPsec
  • RFC 5858 ROHC: IPsec Extensions to Support ROHC over IPsec
  • RFC 6846 ROHC: A Profile for TCP/IP (ROHC-TCP)