| 
    ROHC compression/decompression library
    
   | 
 
ROHC compression routines. More...
#include "rohc_comp.h"#include "rohc_comp_internals.h"#include "rohc_packets.h"#include "rohc_traces.h"#include "rohc_traces_internal.h"#include "rohc_time_internal.h"#include "rohc_debug.h"#include "rohc_utils.h"#include "sdvl.h"#include "rohc_add_cid.h"#include "rohc_bit_ops.h"#include "ip.h"#include "crc.h"#include "protocols/ip.h"#include "schemes/ipv6_exts.h"#include "protocols/udp.h"#include "protocols/ip_numbers.h"#include "c_tcp_opts_list.h"#include "feedback_parse.h"#include "hashtable.h"#include "hashtable_cr.h"#include "config.h"#include <string.h>#include <inttypes.h>#include <stdlib.h>#include <stdbool.h>#include <assert.h>#include <stdarg.h>
Enumerations | |
| enum | rohc_ctxt_affinity_t { ROHC_AFFINITY_NONE = 0, ROHC_AFFINITY_LOW = 1, ROHC_AFFINITY_MED = 2, ROHC_AFFINITY_HIGH = 3 } | 
Functions | |
| static rohc_profile_t | rohc_comp_get_profile (const struct rohc_comp *const comp, const struct rohc_buf *const packet, struct rohc_fingerprint *const fingerprint, struct rohc_pkt_hdrs *const pkt_hdrs) | 
| Get the best compression profile for the given network packet.  More... | |
| static bool | rohc_comp_are_ip_hdrs_supported (const struct rohc_comp *const comp, const uint8_t *const packet, const size_t packet_len, struct rohc_fingerprint *const fingerprint, struct rohc_pkt_hdrs *const pkt_hdrs, size_t *const all_ip_hdrs_len, size_t *const all_ipv6_exts_len) | 
| Are the given IP headers supported?  More... | |
| static rohc_profile_t | rohc_comp_get_profile_l4 (const struct rohc_comp *const comp, const struct rohc_buf *const packet, const rohc_profile_t l3_profile, const size_t all_ipv6_exts_len, const uint8_t l4_proto, const uint8_t *const l4_data, const size_t l4_len, struct rohc_fingerprint *const fingerprint, struct rohc_pkt_hdrs *const pkt_hdrs) | 
| Get the best compression profile for the given network packet.  More... | |
| static bool | rohc_comp_is_tcp_hdr_supported (const struct rohc_comp *const comp, const uint8_t *const packet, const size_t packet_len, struct rohc_pkt_hdrs *const pkt_hdrs, size_t *const tcp_hdr_full_len) | 
| Is the given TCP header supported?  More... | |
| static bool | rohc_comp_is_rtp_hdr_supported (const struct rohc_comp *const comp, const uint8_t *const packet, const size_t packet_len, struct rohc_pkt_hdrs *const pkt_hdrs) | 
| Is the given RTP header supported?  More... | |
| static bool | rohc_comp_profile_enabled_nocheck (const struct rohc_comp *const comp, const rohc_profile_t profile) | 
| Is the given compression profile enabled for a compressor?  More... | |
| static bool | c_create_contexts (struct rohc_comp *const comp) | 
| Create the array of compression contexts.  More... | |
| static void | c_destroy_contexts (struct rohc_comp *const comp) | 
| Destroy all the compression contexts in the context array.  More... | |
| static struct rohc_comp_ctxt * | c_create_context (struct rohc_comp *const comp, const struct rohc_comp_profile *const profile, const struct rohc_fingerprint *const fingerprint, const struct rohc_pkt_hdrs *const pkt_hdrs, const struct rohc_ts pkt_time) | 
| Create a compression context.  More... | |
| static struct rohc_comp_ctxt * | rohc_comp_find_ctxt (struct rohc_comp *const comp, const struct rohc_comp_profile *const profile, const struct rohc_buf *const packet, const struct rohc_fingerprint *const pkt_fingerprint, const struct rohc_pkt_hdrs *const pkt_hdrs) | 
| Find a compression context given an IP packet.  More... | |
| static struct rohc_comp_ctxt * | c_get_context (struct rohc_comp *const comp, const rohc_cid_t cid) | 
| Find out a context given its CID.  More... | |
| static rohc_ctxt_affinity_t | rohc_comp_get_ctxt_affinity (const struct rohc_comp_ctxt *const ctxt, const struct rohc_fingerprint *const pkt_fingerprint, const struct rohc_pkt_hdrs *const pkt_hdrs) | 
| Compute the affinity between the given packet and context.  More... | |
| static void | rohc_comp_decide_state (struct rohc_comp_ctxt *const context, struct rohc_ts pkt_time) | 
| Decide the state that should be used for the next packet.  More... | |
| static void | rohc_comp_periodic_down_transition (struct rohc_comp_ctxt *const context, const struct rohc_ts pkt_time) | 
| Periodically change the context state after a certain number of packets.  More... | |
| static bool | __rohc_comp_deliver_feedback (struct rohc_comp *const comp, const uint8_t *const packet, const size_t size) | 
| Deliver a feedback packet to the compressor.  More... | |
| static bool | rohc_comp_feedback_parse_cid (const struct rohc_comp *const comp, const uint8_t *const feedback, const size_t feedback_len, rohc_cid_t *const cid, size_t *const cid_len) | 
| Parse ROHC feedback CID.  More... | |
| static bool | rohc_comp_feedback_parse_opt_sn (const struct rohc_comp_ctxt *const context, const uint8_t *const feedback_data, const size_t feedback_data_len, uint32_t *const sn_bits, size_t *const sn_bits_nr) | 
| Parse the FEEDBACK-2 SN option.  More... | |
| static bool | rohc_comp_feedback_check_opts (const struct rohc_comp_ctxt *const context, const size_t opts_present[ROHC_FEEDBACK_OPT_MAX]) | 
| Check FEEDBACK-2 options.  More... | |
| struct rohc_comp * | rohc_comp_new2 (const rohc_cid_type_t cid_type, const rohc_cid_t max_cid, const rohc_comp_random_cb_t rand_cb, void *const rand_priv) | 
| Create a new ROHC compressor.  More... | |
| void | rohc_comp_free (struct rohc_comp *const comp) | 
| Destroy the given ROHC compressor.  More... | |
| bool | rohc_comp_set_traces_cb2 (struct rohc_comp *const comp, rohc_trace_callback2_t callback, void *const priv_ctxt) | 
| Set the callback function used to manage traces in compressor.  More... | |
| rohc_status_t | rohc_compress4 (struct rohc_comp *const comp, const struct rohc_buf uncomp_packet, struct rohc_buf *const rohc_packet) | 
| Compress the given uncompressed packet into a ROHC packet.  More... | |
| rohc_status_t | rohc_comp_pad (struct rohc_comp *const comp, struct rohc_buf *const rohc_pkt, const size_t min_pkt_len) | 
| Pad the given ROHC compressed packet.  More... | |
| rohc_status_t | rohc_comp_get_segment2 (struct rohc_comp *const comp, struct rohc_buf *const segment) | 
| Get the next ROHC segment if any.  More... | |
| bool | rohc_comp_force_contexts_reinit (struct rohc_comp *const comp) | 
| Force the compressor to re-initialize all its contexts.  More... | |
| bool | rohc_comp_set_optimistic_approach (struct rohc_comp *const comp, const size_t repetitions_nr) | 
| Set the number of repetitions required to gain transmission confidence.  More... | |
| bool | rohc_comp_set_wlsb_window_width (struct rohc_comp *const comp, const size_t width) | 
| Set the window width for the W-LSB encoding scheme.  More... | |
| bool | rohc_comp_set_reorder_ratio (struct rohc_comp *const comp, const rohc_reordering_offset_t reorder_ratio) | 
| Set the reordering ratio for the W-LSB encoding scheme.  More... | |
| bool | rohc_comp_set_periodic_refreshes (struct rohc_comp *const comp, const size_t ir_timeout, const size_t fo_timeout) | 
| Set the timeouts in packets for IR and FO periodic refreshes.  More... | |
| bool | rohc_comp_set_periodic_refreshes_time (struct rohc_comp *const comp, const uint64_t ir_timeout, const uint64_t fo_timeout) | 
| Set the timeouts in ms for IR and FO periodic refreshes.  More... | |
| bool | rohc_comp_set_list_trans_nr (struct rohc_comp *const comp, const size_t list_trans_nr) | 
| Set the number of uncompressed transmissions for list compression.  More... | |
| bool | rohc_comp_set_rtp_detection_cb (struct rohc_comp *const comp, rohc_rtp_detection_callback_t callback, void *const rtp_private) | 
| Set the RTP detection callback function.  More... | |
| bool | rohc_comp_profile_enabled (const struct rohc_comp *const comp, const rohc_profile_t profile) | 
| Is the given compression profile enabled for a compressor?  More... | |
| bool | rohc_comp_enable_profile (struct rohc_comp *const comp, const rohc_profile_t profile) | 
| Enable a compression profile for a compressor.  More... | |
| bool | rohc_comp_disable_profile (struct rohc_comp *const comp, const rohc_profile_t profile) | 
| Disable a compression profile for a compressor.  More... | |
| bool | rohc_comp_enable_profiles (struct rohc_comp *const comp,...) | 
| Enable several compression profiles for a compressor.  More... | |
| bool | rohc_comp_disable_profiles (struct rohc_comp *const comp,...) | 
| Disable several compression profiles for a compressor.  More... | |
| bool | rohc_comp_set_mrru (struct rohc_comp *const comp, const size_t mrru) | 
| Set the Maximum Reconstructed Reception Unit (MRRU).  More... | |
| bool | rohc_comp_get_mrru (const struct rohc_comp *const comp, size_t *const mrru) | 
| Get the Maximum Reconstructed Reception Unit (MRRU).  More... | |
| bool | rohc_comp_get_max_cid (const struct rohc_comp *const comp, size_t *const max_cid) | 
| Get the maximal CID value the compressor uses.  More... | |
| bool | rohc_comp_get_cid_type (const struct rohc_comp *const comp, rohc_cid_type_t *const cid_type) | 
| Get the CID type that the compressor uses.  More... | |
| bool | rohc_comp_set_features (struct rohc_comp *const comp, const rohc_comp_features_t features) | 
| Enable/disable features for ROHC compressor.  More... | |
| bool | rohc_comp_deliver_feedback2 (struct rohc_comp *const comp, const struct rohc_buf feedback) | 
| Deliver a feedback packet to the compressor.  More... | |
| bool | rohc_comp_get_last_packet_info2 (const struct rohc_comp *const comp, rohc_comp_last_packet_info2_t *const info) | 
| Get some information about the last compressed packet.  More... | |
| bool | rohc_comp_get_general_info (const struct rohc_comp *const comp, rohc_comp_general_info_t *const info) | 
| Get some general information about the compressor.  More... | |
| const char * | rohc_comp_get_state_descr (const rohc_comp_state_t state) | 
| Give a description for the given ROHC compression context state.  More... | |
| void | rohc_comp_change_mode (struct rohc_comp_ctxt *const context, const rohc_mode_t new_mode) | 
| Change the mode of the context.  More... | |
| void | rohc_comp_change_state (struct rohc_comp_ctxt *const context, const rohc_comp_state_t new_state) | 
| Change the state of the context.  More... | |
| bool | rohc_comp_reinit_context (struct rohc_comp_ctxt *const context) | 
| Re-initialize the given context.  More... | |
| bool | rohc_comp_feedback_parse_opts (const struct rohc_comp_ctxt *const context, const uint8_t *const packet, const size_t packet_len, const uint8_t *const feedback_data, const size_t feedback_data_len, size_t opts_present[ROHC_FEEDBACK_OPT_MAX], uint32_t *const sn_bits, size_t *const sn_bits_nr, const rohc_feedback_crc_t crc_type, uint8_t crc_in_packet, size_t crc_pos_from_end) | 
| Parse FEEDBACK-2 options.  More... | |
Variables | |
| const struct rohc_comp_profile | c_rtp_profile | 
| Define the compression part of the RTP profile as described in the RFC 3095.  More... | |
| const struct rohc_comp_profile | c_udp_profile | 
| Define the compression part of the UDP profile as described in the RFC 3095.  More... | |
| const struct rohc_comp_profile | c_esp_profile | 
| Define the compression part of the ESP profile as described in the RFC 3095.  More... | |
| const struct rohc_comp_profile | c_tcp_profile | 
| Define the compression part of the TCP profile as described in the RFC 3095.  More... | |
| const struct rohc_comp_profile | c_ip_profile | 
| Define the compression part of the IP-only profile as described in the RFC 3843.  More... | |
| const struct rohc_comp_profile | c_uncompressed_profile | 
| Define the compression part of the Uncompressed profile as described in the RFC 3095.  More... | |
| const struct rohc_comp_profile | rohc_comp_rfc5225_ip_profile | 
| Define the compression part of the ROHCv2 IP-only profile as described in the RFC 5225.  More... | |
| const struct rohc_comp_profile | rohc_comp_rfc5225_ip_udp_profile | 
| Define the compression part of the ROHCv2 IP/UDP profile as described in the RFC 5225.  More... | |
| const struct rohc_comp_profile | rohc_comp_rfc5225_ip_esp_profile | 
| Define the compression part of the ROHCv2 IP/ESP profile as described in the RFC 5225.  More... | |
| const struct rohc_comp_profile | rohc_comp_rfc5225_ip_udp_rtp_profile | 
| Define the compression part of the ROHCv2 IP/UDP/RTP profile as described in the RFC 5225.  More... | |
| static const struct rohc_comp_profile *const | rohc_comp_profiles [ROHC_PROFILE_ID_MAJOR_MAX+1][ROHC_PROFILE_ID_MINOR_MAX+1] | 
ROHC compression routines.
| enum rohc_ctxt_affinity_t | 
      
  | 
  static | 
Deliver a feedback packet to the compressor.
When feedback is received by the decompressor, this function is called and delivers the feedback to the right profile/context of the compressor.
| comp | The ROHC compressor | 
| packet | The feedback data | 
| size | The length of the feedback packet | 
      
  | 
  static | 
Create a compression context.
| comp | The ROHC compressor | 
| profile | The profile to associate the context with | 
| fingerprint | The packet/context fingerprint | 
| pkt_hdrs | The information collected about packet headers | 
| pkt_time | The arrival time of the packet | 
      
  | 
  static | 
Create the array of compression contexts.
| comp | The ROHC compressor | 
      
  | 
  static | 
Destroy all the compression contexts in the context array.
The profile-specific contexts are also destroyed.
| comp | The ROHC compressor | 
      
  | 
  static | 
Find out a context given its CID.
| comp | The ROHC compressor | 
| cid | The CID of the context to find | 
      
  | 
  static | 
Are the given IP headers supported?
| comp | The ROHC compressor to compress the packet with | |
| packet | The packet to search the best compression profile for | |
| packet_len | The length (in bytes) of the uncompressed packet | |
| [out] | fingerprint | The fingerprint computed on the packet to later help finding the best compression context | 
| [out] | pkt_hdrs | The information collected about the packet headers, may be used later during the detection of changes with the compression context, thus avoiding another packet parsing | 
| [out] | all_ip_hdrs_len | The length (in bytes) of the parsed IP headers | 
| [out] | all_ipv6_exts_len | The length (in bytes) of the parsed IP extension headers | 
| void rohc_comp_change_mode | ( | struct rohc_comp_ctxt *const | context, | 
| const rohc_mode_t | new_mode | ||
| ) | 
Change the mode of the context.
| context | The compression context | 
| new_mode | The new mode the context must enter in | 
| void rohc_comp_change_state | ( | struct rohc_comp_ctxt *const | context, | 
| const rohc_comp_state_t | new_state | ||
| ) | 
Change the state of the context.
| context | The compression context | 
| new_state | The new state the context must enter in | 
      
  | 
  static | 
Decide the state that should be used for the next packet.
The three states are:
| context | The compression context | 
| pkt_time | The time of packet arrival | 
      
  | 
  static | 
Check FEEDBACK-2 options.
sanity checks:
| context | The ROHC decompression context | 
| opts_present | Whether options are present or not | 
      
  | 
  static | 
Parse ROHC feedback CID.
| comp | The ROHC compressor | |
| feedback | The ROHC feedback data to parse | |
| feedback_len | The length of the ROHC feedback data | |
| [out] | cid | The CID of the ROHC feedback | 
| [out] | cid_len | The length of the CID of the ROHC feedback | 
      
  | 
  static | 
Parse the FEEDBACK-2 SN option.
| context | The ROHC decompression context | |
| feedback_data | The feedback data without the CID bits | |
| feedback_data_len | The length of the feedback data without the CID bits | |
| [out] | sn_bits | in: the SN bits collected in base header out: the SN bits collected in base header and options | 
| [out] | sn_bits_nr | in: the number of SN bits collected in base header out: the number of SN bits collected in base header and options | 
| bool rohc_comp_feedback_parse_opts | ( | const struct rohc_comp_ctxt *const | context, | 
| const uint8_t *const | packet, | ||
| const size_t | packet_len, | ||
| const uint8_t *const | feedback_data, | ||
| const size_t | feedback_data_len, | ||
| size_t | opts_present[ROHC_FEEDBACK_OPT_MAX], | ||
| uint32_t *const | sn_bits, | ||
| size_t *const | sn_bits_nr, | ||
| const rohc_feedback_crc_t | crc_type, | ||
| uint8_t | crc_in_packet, | ||
| size_t | crc_pos_from_end | ||
| ) | 
Parse FEEDBACK-2 options.
| context | The ROHC decompression context | |
| packet | The whole feedback packet with CID bits | |
| packet_len | The length of the whole feedback packet with CID bits | |
| feedback_data | The feedback data without the CID bits | |
| feedback_data_len | The length of the feedback data without the CID bits | |
| [out] | opts_present | Whether options are present or not | 
| [out] | sn_bits | in: the SN bits collected in base header out: the SN bits collected in base header and options | 
| [out] | sn_bits_nr | in: the number of SN bits collected in base header out: the number of SN bits collected in base header and options | 
| crc_type | Whether the CRC is present in base header or in option | |
| crc_in_packet | The CRC of the feedback packet | |
| crc_pos_from_end | The position of the CRC byte from the end of the feedback packet | 
      
  | 
  static | 
Find a compression context given an IP packet.
| comp | The ROHC compressor | 
| profile | The profile to use | 
| packet | The packet to find a compression context for | 
| pkt_fingerprint | The packet fingerprint | 
| pkt_hdrs | The information collected about packet headers | 
      
  | 
  static | 
Compute the affinity between the given packet and context.
| ctxt | The context to compute the affinity with | 
| pkt_fingerprint | The fingerprint of the packet to compute the affinity with | 
| pkt_hdrs | The information collected about packet headers | 
      
  | 
  static | 
Get the best compression profile for the given network packet.
| comp | The ROHC compressor to compress the packet with | |
| packet | The packet to search the best compression profile for | |
| [out] | fingerprint | The computed fingerprint of the packet to later help finding the best compression context | 
| [out] | pkt_hdrs | The information collected about the packet headers, may be used later during the detection of changes with the compression context, thus avoiding another packet parsing | 
      
  | 
  static | 
Get the best compression profile for the given network packet.
| comp | The ROHC compressor to compress the packet with | |
| packet | The packet to search the best compression profile for | |
| l3_profile | The best ROHC profile identified for layer-3 headers | |
| all_ipv6_exts_len | The length of the IPv6 extension headers | |
| l4_proto | The IP protocol type of the layer-4 header | |
| l4_data | The layer-4 header to search the best profile for | |
| l4_len | The length of the layer-4 header | |
| [out] | fingerprint | The computed fingerprint of the packet to later help finding the best compression context | 
| [out] | pkt_hdrs | The information collected about the packet headers, may be used later during the detection of changes with the compression context, thus avoiding another packet parsing | 
      
  | 
  static | 
Is the given RTP header supported?
| comp | The ROHC compressor to compress the packet with | |
| packet | The uncompressed packet to search the best compression profile for | |
| packet_len | The length (in bytes) of the uncompressed packet | |
| [out] | pkt_hdrs | The information collected about the packet headers, may be used later during the detection of changes with the compression context, thus avoiding another packet parsing | 
      
  | 
  static | 
Is the given TCP header supported?
| comp | The ROHC compressor to compress the packet with | |
| packet | The TCP packet to search the best compression profile for | |
| packet_len | The length (in bytes) of the uncompressed packet | |
| [out] | pkt_hdrs | The information collected about the packet headers, may be used later during the detection of changes with the compression context, thus avoiding another packet parsing | 
| [out] | tcp_hdr_full_len | The length of the TCP header including options | 
      
  | 
  static | 
Periodically change the context state after a certain number of packets.
| context | The compression context | 
| pkt_time | The time of packet arrival | 
      
  | 
  static | 
Is the given compression profile enabled for a compressor?
| comp | The ROHC compressor, shall be valid | 
| profile | The profile to ask status for | 
| bool rohc_comp_reinit_context | ( | struct rohc_comp_ctxt *const | context | ) | 
Re-initialize the given context.
Make the context restart its initialization with decompressor, ie. it goes in the lowest compression state.
| context | The compression context to re-initialize | 
| const struct rohc_comp_profile c_esp_profile | 
Define the compression part of the ESP profile as described in the RFC 3095.
| const struct rohc_comp_profile c_ip_profile | 
Define the compression part of the IP-only profile as described in the RFC 3843.
| const struct rohc_comp_profile c_rtp_profile | 
Define the compression part of the RTP profile as described in the RFC 3095.
| const struct rohc_comp_profile c_tcp_profile | 
Define the compression part of the TCP profile as described in the RFC 3095.
| const struct rohc_comp_profile c_udp_profile | 
Define the compression part of the UDP profile as described in the RFC 3095.
| const struct rohc_comp_profile c_uncompressed_profile | 
Define the compression part of the Uncompressed profile as described in the RFC 3095.
      
  | 
  static | 
The ROHC compression profiles
| const struct rohc_comp_profile rohc_comp_rfc5225_ip_esp_profile | 
Define the compression part of the ROHCv2 IP/ESP profile as described in the RFC 5225.
| const struct rohc_comp_profile rohc_comp_rfc5225_ip_profile | 
Define the compression part of the ROHCv2 IP-only profile as described in the RFC 5225.
| const struct rohc_comp_profile rohc_comp_rfc5225_ip_udp_profile | 
Define the compression part of the ROHCv2 IP/UDP profile as described in the RFC 5225.
| const struct rohc_comp_profile rohc_comp_rfc5225_ip_udp_rtp_profile | 
Define the compression part of the ROHCv2 IP/UDP/RTP profile as described in the RFC 5225.
 1.8.14