ROHC compression/decompression library
|
Generic framework for RFC3095-based compression profiles such as IP-only, UDP, UDP-Lite, ESP, and RTP profiles. More...
#include "rohc_comp_rfc3095.h"
#include "c_rtp.h"
#include "rohc_traces.h"
#include "rohc_traces_internal.h"
#include "rohc_debug.h"
#include "rohc_packets.h"
#include "rohc_utils.h"
#include "rohc_bit_ops.h"
#include "schemes/cid.h"
#include "schemes/ip_id_offset.h"
#include "schemes/comp_list_ipv6.h"
#include "sdvl.h"
#include "crc.h"
#include <stdint.h>
#include <string.h>
#include <assert.h>
#include "config.h"
Functions | |
static bool | ip_header_info_new (struct ip_header_info *const header_info, const struct rohc_pkt_ip_hdr *const ip, const size_t oa_repetitions_nr, const int profile_id, rohc_trace_callback2_t trace_cb, void *const trace_cb_priv) |
Initialize the IP header info stored in the context. More... | |
static void | ip_header_info_free (struct ip_header_info *const header_info) |
Reset the given IP header info. More... | |
static void | c_init_tmp_variables (struct generic_tmp_vars *const tmp_vars) |
Initialize all temporary variables stored in the context. More... | |
static rohc_packet_t | decide_packet (struct rohc_comp_ctxt *const context) |
Decide which packet to send when in the different states. More... | |
static rohc_ext_t | decide_extension_uor2 (const struct rohc_comp_ctxt *const context, const bool innermost_ip_id_changed, const bool innermost_ip_id_3bits_possible, const bool innermost_ip_id_8bits_possible, const bool innermost_ip_id_11bits_possible, const bool outermost_ip_id_changed, const bool outermost_ip_id_11bits_possible) |
Decide what extension shall be used in the UOR-2 packet (non-RTP). More... | |
static rohc_ext_t | decide_extension_uor2rtp (const struct rohc_comp_ctxt *const context, const bool innermost_ip_id_changed, const bool outermost_ip_id_changed) |
Decide what extension shall be used in the UOR-2 packet (RTP). More... | |
static rohc_ext_t | decide_extension_uor2ts (const struct rohc_comp_ctxt *const context, const bool innermost_ip_id_changed, const bool innermost_ip_id_8bits_possible, const bool outermost_ip_id_changed) |
Decide what extension shall be used in the UO-1-ID/UOR-2 packet. More... | |
static rohc_ext_t | decide_extension_uor2id (const struct rohc_comp_ctxt *const context, const bool innermost_ip_id_5bits_possible, const bool innermost_ip_id_8bits_possible, const bool outermost_ip_id_changed) |
Decide what extension shall be used in the UOR-2-ID packet. More... | |
static rohc_ext_t | decide_extension_uo1id (const struct rohc_comp_ctxt *const context, const bool innermost_ip_id_5bits_possible, const bool innermost_ip_id_8bits_possible, const bool outermost_ip_id_changed) |
Decide what extension shall be used in the UO-1-ID packet. More... | |
static int | code_packet (struct rohc_comp_ctxt *const context, const struct rohc_pkt_hdrs *const uncomp_pkt_hdrs, uint8_t *const rohc_pkt, const size_t rohc_pkt_max_len, const rohc_packet_t packet_type) |
Build the ROHC packet to send. More... | |
static int | code_IR_packet (struct rohc_comp_ctxt *const context, const struct rohc_pkt_hdrs *const uncomp_pkt_hdrs, uint8_t *const rohc_pkt, const size_t rohc_pkt_max_len, const rohc_packet_t packet_type) |
Build the IR packet. More... | |
static int | code_IR_DYN_packet (struct rohc_comp_ctxt *const context, const struct rohc_pkt_hdrs *const uncomp_pkt_hdrs, uint8_t *const rohc_pkt, const size_t rohc_pkt_max_len, const rohc_packet_t packet_type) |
Build the IR-DYN packet. More... | |
static int | rohc_code_static_part (const struct rohc_comp_ctxt *const context, const struct rohc_pkt_hdrs *const uncomp_pkt_hdrs, uint8_t *const rohc_pkt, int counter) |
Build the static part of the IR packet. More... | |
static int | rohc_code_static_ip_part (const struct rohc_comp_ctxt *const context, struct ip_header_info *const header_info, const struct rohc_pkt_ip_hdr *const ip, uint8_t *const dest, int counter) |
Build the static part of one IP header for the IR packet. More... | |
static int | code_ipv4_static_part (const struct rohc_comp_ctxt *const context, struct ip_header_info *const header_info, const struct rohc_pkt_ip_hdr *const ip, uint8_t *const dest, int counter) |
Build the IPv4 static part of the IR packet. More... | |
static int | code_ipv6_static_part (const struct rohc_comp_ctxt *const context, struct ip_header_info *const header_info, const struct rohc_pkt_ip_hdr *const ip, uint8_t *const dest, int counter) |
Build the IPv6 static part of the IR packet. More... | |
static int | rohc_code_dynamic_part (const struct rohc_comp_ctxt *const context, const struct rohc_pkt_hdrs *const uncomp_pkt_hdrs, uint8_t *const rohc_pkt, int counter) |
Build the dynamic part of the IR and IR-DYN packets. More... | |
static int | rohc_code_dynamic_ip_part (const struct rohc_comp_ctxt *const context, struct ip_header_info *const header_info, const bool ext_list_changed, const struct rohc_pkt_ip_hdr *const ip, uint8_t *const dest, int counter) |
Build the dynamic part of one IP header for the IR/IR-DYN packets. More... | |
static int | code_ipv4_dynamic_part (const struct rohc_comp_ctxt *const context, struct ip_header_info *const header_info, const struct rohc_pkt_ip_hdr *const ip, uint8_t *const dest, int counter) |
Build the IPv4 dynamic part of the IR and IR-DYN packets. More... | |
static int | code_ipv6_dynamic_part (const struct rohc_comp_ctxt *const context, struct ip_header_info *const header_info, const bool ext_list_changed, const struct rohc_pkt_ip_hdr *const ip, uint8_t *const dest, int counter) |
Build the IPv6 dynamic part of the IR and IR-DYN packets. More... | |
static int | code_uo_remainder (struct rohc_comp_ctxt *const context, const struct rohc_pkt_hdrs *const uncomp_pkt_hdrs, uint8_t *const dest, int counter) |
Build the tail of the UO packet. More... | |
static int | code_UO0_packet (struct rohc_comp_ctxt *const context, const struct rohc_pkt_hdrs *const uncomp_pkt_hdrs, uint8_t *const rohc_pkt, const size_t rohc_pkt_max_len, const rohc_packet_t packet_type) |
Build the UO-0 packet. More... | |
static int | rohc_comp_rfc3095_build_uo1_pkt (struct rohc_comp_ctxt *const context, const struct rohc_pkt_hdrs *const uncomp_pkt_hdrs, uint8_t *const rohc_pkt, const size_t rohc_pkt_max_len, const rohc_packet_t packet_type) |
Build the UO-1 packet for the non-RTP profiles. More... | |
static int | rohc_comp_rfc3095_build_uo1rtp_pkt (struct rohc_comp_ctxt *const context, const struct rohc_pkt_hdrs *const uncomp_pkt_hdrs, uint8_t *const rohc_pkt, const size_t rohc_pkt_max_len, const rohc_packet_t packet_type) |
Build the UO-1 packet for the RTP profiles. More... | |
static int | rohc_comp_rfc3095_build_uo1ts_pkt (struct rohc_comp_ctxt *const context, const struct rohc_pkt_hdrs *const uncomp_pkt_hdrs, uint8_t *const rohc_pkt, const size_t rohc_pkt_max_len, const rohc_packet_t packet_type) |
Build the UO-1-TS packet. More... | |
static int | rohc_comp_rfc3095_build_uo1id_pkt (struct rohc_comp_ctxt *const context, const struct rohc_pkt_hdrs *const uncomp_pkt_hdrs, uint8_t *const rohc_pkt, const size_t rohc_pkt_max_len, const rohc_packet_t packet_type) |
Build the UO-1-ID packet. More... | |
static int | code_UO2_packet (struct rohc_comp_ctxt *const context, const struct rohc_pkt_hdrs *const uncomp_pkt_hdrs, uint8_t *const rohc_pkt, const size_t rohc_pkt_max_len, const rohc_packet_t packet_type) |
Build the UO-2 packet. More... | |
static int | code_UOR2_bytes (const struct rohc_comp_ctxt *const context, const rohc_packet_t packet_type, uint8_t *const f_byte, uint8_t *const s_byte, uint8_t *const t_byte) |
Code some fields of the UOR-2 packet. More... | |
static int | code_UOR2_RTP_bytes (const struct rohc_comp_ctxt *const context, const rohc_packet_t packet_type, uint8_t *const f_byte, uint8_t *const s_byte, uint8_t *const t_byte) |
Code some fields of the UOR-2-RTP packet. More... | |
static int | code_UOR2_TS_bytes (const struct rohc_comp_ctxt *const context, const rohc_packet_t packet_type, uint8_t *const f_byte, uint8_t *const s_byte, uint8_t *const t_byte) |
Code some fields of the UOR-2-TS packet. More... | |
static int | code_UOR2_ID_bytes (const struct rohc_comp_ctxt *const context, const rohc_packet_t packet_type, uint8_t *const f_byte, uint8_t *const s_byte, uint8_t *const t_byte) |
Code some fields of the UOR-2-ID packet. More... | |
static int | code_EXT0_packet (const struct rohc_comp_ctxt *const context, uint8_t *const dest, int counter, const rohc_packet_t packet_type) |
Build the extension 0 of the UO-2 packet. More... | |
static int | code_EXT1_packet (const struct rohc_comp_ctxt *const context, uint8_t *const dest, int counter, const rohc_packet_t packet_type) |
Build the extension 1 of the UO-2 packet. More... | |
static int | code_EXT2_packet (const struct rohc_comp_ctxt *const context, uint8_t *const dest, int counter, const rohc_packet_t packet_type) |
Build the extension 2 of the UO-2 packet. More... | |
static int | code_EXT3_packet (struct rohc_comp_ctxt *const context, const struct rohc_pkt_hdrs *const uncomp_pkt_hdrs, uint8_t *const dest, int counter, const rohc_packet_t packet_type) |
Build the extension 3 of the UO* packet types. More... | |
static int | code_EXT3_rtp_packet (struct rohc_comp_ctxt *const context, const struct rohc_pkt_hdrs *const uncomp_pkt_hdrs, uint8_t *const dest, int counter, const rohc_packet_t packet_type) |
Build the extension 3 of the UO-2 packet. More... | |
static int | code_EXT3_nortp_packet (struct rohc_comp_ctxt *const context, const struct rohc_pkt_hdrs *const uncomp_pkt_hdrs, uint8_t *const dest, int counter, const rohc_packet_t packet_type) |
Build the extension 3 of the UO-2 packet. More... | |
static int | rtp_header_flags_and_fields (const struct rohc_comp_ctxt *const context, const struct rohc_pkt_hdrs *const uncomp_pkt_hdrs, uint8_t *const dest, int counter) |
static int | header_flags (const struct rohc_comp_ctxt *const context, struct ip_header_info *const header_info, const struct rohc_pkt_ip_hdr *const ip, const struct rfc3095_ip_hdr_changes *const changes, const int ip2_or_I2, uint8_t *const dest, int counter) |
Build inner or outer IP header flags. More... | |
static int | header_fields (const struct rohc_comp_ctxt *const context, struct ip_header_info *const header_info, const struct rohc_pkt_ip_hdr *const ip, const struct rfc3095_ip_hdr_changes *const changes, const int I, const ip_header_pos_t ip_hdr_pos, uint8_t *const dest, int counter) |
Build inner or outer IP header fields. More... | |
static uint8_t | compute_uo_crc (struct rohc_comp_ctxt *const context, const struct rohc_pkt_hdrs *const uncomp_pkt_hdrs, const rohc_crc_type_t crc_type, const uint8_t crc_init) |
Compute the CRC for a UO* packet. More... | |
static void | update_context (struct rohc_comp_ctxt *const context, const struct rohc_pkt_hdrs *const uncomp_pkt_hdrs) |
Update the compression context with the successfully compressed packet. More... | |
static void | update_context_ip_hdr (const struct rohc_comp_ctxt *const context, struct ip_header_info *const ip_flags, const struct rohc_pkt_ip_hdr *const ip) |
Update the IP information with the IP header. More... | |
static void | rohc_comp_rfc3095_detect_changes (struct rohc_comp_ctxt *const context, const struct rohc_pkt_hdrs *const uncomp_pkt_hdrs) |
Detect changes between packet and context. More... | |
static void | detect_ip_changes (const struct rohc_comp_ctxt *const context, struct ip_header_info *const header_info, const struct rohc_pkt_ip_hdr *const ip, struct rfc3095_ip_hdr_changes *const changes) |
Find the IP fields that changed between the profile and a new IP packet. More... | |
static void | detect_ip_id_behaviours (struct rohc_comp_ctxt *const context, const struct rohc_pkt_hdrs *const uncomp_pkt_hdrs) |
Detect the behaviour of the IP-ID fields of the IPv4 headers. More... | |
static void | detect_ip_id_behaviour (const struct rohc_comp_ctxt *const context, struct ip_header_info *const header_info, const struct rohc_pkt_ip_hdr *const uncomp_pkt_ip_hdr) |
Detect the behaviour of the IP-ID field of the given IPv4 header. More... | |
static bool | encode_uncomp_fields (struct rohc_comp_ctxt *const context, const struct rohc_pkt_hdrs *const uncomp_pkt_hdrs) |
Encode uncompressed fields with the corresponding encoding scheme. More... | |
static void | rohc_get_innermost_ipv4_non_rnd (const struct rohc_comp_ctxt *const context, ip_header_pos_t *const pos, bool *const is_5bits_possible, uint16_t *const offset) |
Determine the number of IP-ID bits and the IP-ID offset of the innermost IPv4 header with non-random IP-ID. More... | |
static void | rohc_comp_rfc3095_get_ext3_I_flags (const struct rohc_comp_ctxt *const context, const struct rohc_pkt_hdrs *const uncomp_pkt_hdrs, const rohc_packet_t packet_type, ip_header_pos_t *const innermost_ipv4_non_rnd, uint8_t *const I, uint8_t *const I2) |
Determine the values of the I and I2 flags for UO* extension 3. More... | |
static bool | rohc_comp_rfc3095_feedback_2 (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) |
Update the profile when FEEDBACK-2 is received. More... | |
static void | rohc_comp_rfc3095_feedback_ack (struct rohc_comp_ctxt *const context, const uint32_t sn_bits, const size_t sn_bits_nr, const bool sn_not_valid) |
Perform the required actions after the reception of a positive ACK. More... | |
bool | rohc_comp_rfc3095_create (struct rohc_comp_ctxt *const context, const struct rohc_pkt_hdrs *const uncomp_pkt_hdrs) |
Create a new context and initialize it thanks to the given IP packet. More... | |
void | rohc_comp_rfc3095_destroy (struct rohc_comp_ctxt *const context) |
Destroy the context. More... | |
int | rohc_comp_rfc3095_encode (struct rohc_comp_ctxt *const context, const struct rohc_pkt_hdrs *const uncomp_pkt_hdrs, uint8_t *const rohc_pkt, const size_t rohc_pkt_max_len, rohc_packet_t *const packet_type) |
Encode an IP packet according to a pattern decided by several different factors. More... | |
bool | rohc_comp_rfc3095_feedback (struct rohc_comp_ctxt *const context, const enum rohc_feedback_type feedback_type, const uint8_t *const packet, const size_t packet_len, const uint8_t *const feedback_data, const size_t feedback_data_len) |
Update the profile when feedback is received. More... | |
rohc_ext_t | decide_extension (const struct rohc_comp_ctxt *const context, const rohc_packet_t packet_type) |
Decide what extension shall be used in the UO-1-ID/UOR-2 packet. More... | |
void | rohc_get_ipid_bits (const struct rohc_comp_ctxt *const context, bool *const innermost_ip_id_changed, bool *const innermost_ip_id_3bits_possible, bool *const innermost_ip_id_5bits_possible, bool *const innermost_ip_id_8bits_possible, bool *const innermost_ip_id_11bits_possible, bool *const outermost_ip_id_changed, bool *const outermost_ip_id_11bits_possible) |
Get the number of non-random outer/inner IP-ID bits. More... | |
Generic framework for RFC3095-based compression profiles such as IP-only, UDP, UDP-Lite, ESP, and RTP profiles.
|
static |
Initialize all temporary variables stored in the context.
tmp_vars | The temporary variables to initialize |
|
static |
Build the extension 0 of the UO-2 packet.
Extension 0 for non-RTP profiles (5.11.4): +---+---+---+---+---+---+---+---+ 1 | 0 0 | SN | IP-ID | +---+---+---+---+---+---+---+---+ Extension 0 for RTP profile (5.7.5): +---+---+---+---+---+---+---+---+ 1 | 0 0 | SN | +T | +---+---+---+---+---+---+---+---+ if T = 0 -> +T = IP-ID -> -T = TS if T = 1 -> +T = TS -> -T = IP-ID no T bit -> +T = -T = TS
context | The compression context |
dest | The ROHC buffer |
counter | The current position in the ROHC buffer |
packet_type | The type of ROHC packet that is created |
|
static |
Build the extension 1 of the UO-2 packet.
Extension 1 for non-RTP profiles (5.11.4): +---+---+---+---+---+---+---+---+ 1 | 0 1 | SN | IP-ID | +---+---+---+---+---+---+---+---+ 2 | IP-ID | +---+---+---+---+---+---+---+---+ Extension 1 for RTP profile (5.7.5): +---+---+---+---+---+---+---+---+ 1 | 0 1 | SN | +T | +---+---+---+---+---+---+---+---+ 2 | -T | +---+---+---+---+---+---+---+---+ if T = 0 -> +T = IP-ID -> -T = TS if T = 1 -> +T = TS -> -T = IP-ID no T bit -> +T = -T = TS
context | The compression context |
dest | The ROHC buffer |
counter | The current position in the ROHC buffer |
packet_type | The type of ROHC packet that is created |
|
static |
Build the extension 2 of the UO-2 packet.
Extension 2 for non-RTP profiles (5.11.4): +---+---+---+---+---+---+---+---+ 1 | 1 0 | SN | IP-ID2 | +---+---+---+---+---+---+---+---+ 2 | IP-ID2 | +---+---+---+---+---+---+---+---+ 3 | IP-ID | +---+---+---+---+---+---+---+---+ IP-ID2 is for outer IP-ID field Extension 2 for RTP profile (5.7.5): +---+---+---+---+---+---+---+---+ 1 | 1 0 | SN | +T | +---+---+---+---+---+---+---+---+ 2 | +T | +---+---+---+---+---+---+---+---+ 3 | -T | +---+---+---+---+---+---+---+---+ if T = 0 -> +T = IP-ID -> -T = TS if T = 1 -> +T = TS -> -T = IP-ID no T bit -> +T = -T = TS
context | The compression context |
dest | The ROHC buffer |
counter | The current position in the ROHC buffer |
packet_type | The type of ROHC packet that is created |
|
static |
Build the extension 3 of the UO-2 packet.
Extension 3 for non-RTP profiles (5.7.5 & 5.11.4): 0 1 2 3 4 5 6 7 +-----+-----+-----+-----+-----+-----+-----+-----+ 1 | 1 1 | S | Mode | I | ip | ip2 | +-----+-----+-----+-----+-----+-----+-----+-----+ 2 | Inner IP header flags | | if ip = 1 +-----+-----+-----+-----+-----+-----+-----+-----+ 3 | Outer IP header flags | if ip2 = 1 +-----+-----+-----+-----+-----+-----+-----+-----+ 4 | SN | if S = 1 +-----+-----+-----+-----+-----+-----+-----+-----+ | | 5 / Inner IP header fields / variable, | | if ip = 1 +-----+-----+-----+-----+-----+-----+-----+-----+ 6 | IP-ID | 2 octets, if I = 1 +-----+-----+-----+-----+-----+-----+-----+-----+ | | 7 / Outer IP header fields / variable, | | if ip2 = 1 +-----+-----+-----+-----+-----+-----+-----+-----+
context | The compression context |
uncomp_pkt_hdrs | The uncompressed headers to encode |
dest | The ROHC buffer |
counter | The current position in the ROHC buffer |
packet_type | The type of ROHC packet that is created |
|
static |
Build the extension 3 of the UO* packet types.
context | The compression context |
uncomp_pkt_hdrs | The uncompressed headers to encode |
dest | The ROHC buffer |
counter | The current position in the ROHC buffer |
packet_type | The type of ROHC packet that is created |
|
static |
Build the extension 3 of the UO-2 packet.
Extension 3 for RTP profile (5.7.5): 0 1 2 3 4 5 6 7 +-----+-----+-----+-----+-----+-----+-----+-----+ 1 | 1 1 | S |R-TS | Tsc | I | ip | rtp | +-----+-----+-----+-----+-----+-----+-----+-----+ 2 | Inner IP header flags | ip2 | if ip = 1 +-----+-----+-----+-----+-----+-----+-----+-----+ 3 | Outer IP header flags | if ip2 = 1 +-----+-----+-----+-----+-----+-----+-----+-----+ 4 | SN | if S = 1 +-----+-----+-----+-----+-----+-----+-----+-----+ | | 5 / TS / 1-4 octets, if R-TS = 1 | | +-----+-----+-----+-----+-----+-----+-----+-----+ | | 6 / Inner IP header fields / variable, | | if ip = 1 +-----+-----+-----+-----+-----+-----+-----+-----+ 7 | IP-ID | 2 octets, if I = 1 +-----+-----+-----+-----+-----+-----+-----+-----+ | | 8 / Outer IP header fields / variable, | | if ip2 = 1 +-----+-----+-----+-----+-----+-----+-----+-----+ | | variable, 9 / RTP Header flags and fields / if rtp = 1 | | +-----+-----+-----+-----+-----+-----+-----+-----+
context | The compression context |
uncomp_pkt_hdrs | The uncompressed headers to encode |
dest | The ROHC buffer |
counter | The current position in the ROHC buffer |
packet_type | The type of ROHC packet that is created |
|
static |
Build the IPv4 dynamic part of the IR and IR-DYN packets.
Dynamic part IPv4 (5.7.7.4): +---+---+---+---+---+---+---+---+ 1 | Type of Service | +---+---+---+---+---+---+---+---+ 2 | Time to Live | +---+---+---+---+---+---+---+---+ 3 / Identification / 2 octets, sent verbatim +---+---+---+---+---+---+---+---+ 4 | DF|RND|NBO|SID| 0 | +---+---+---+---+---+---+---+---+ 5 / Generic extension header list / variable length +---+---+---+---+---+---+---+---+
context | The compression context |
header_info | The IP header info stored in the profile |
ip | The IPv4 header the dynamic part is built for |
dest | The ROHC buffer |
counter | The current position in the ROHC buffer |
|
static |
Build the IPv4 static part of the IR packet.
Static part IPv4 (5.7.7.4): +---+---+---+---+---+---+---+---+ 1 | Version = 4 | 0 | +---+---+---+---+---+---+---+---+ 2 | Protocol | +---+---+---+---+---+---+---+---+ 3 / Source Address / 4 octets +---+---+---+---+---+---+---+---+ 4 / Destination Address / 4 octets +---+---+---+---+---+---+---+---+
context | The compression context |
header_info | The IP header info stored in the profile |
ip | The IPv4 header the static part is built for |
dest | The ROHC buffer |
counter | The current position in the ROHC buffer |
|
static |
Build the IPv6 dynamic part of the IR and IR-DYN packets.
Dynamic part IPv6 (5.7.7.3): +---+---+---+---+---+---+---+---+ 1 | Traffic Class | 1 octet +---+---+---+---+---+---+---+---+ 2 | Hop Limit | 1 octet +---+---+---+---+---+---+---+---+ 3 / Generic extension header list / variable length +---+---+---+---+---+---+---+---+
context | The compression context |
header_info | The IP header info stored in the profile |
ext_list_changed | Whether extension header list changed |
ip | The IPv6 header the dynamic part is built for |
dest | The ROHC buffer |
counter | The current position in the ROHC buffer |
|
static |
Build the IPv6 static part of the IR packet.
Static part IPv6 (5.7.7.3): +---+---+---+---+---+---+---+---+ 1 | Version = 6 |Flow Label(msb)| 1 octet +---+---+---+---+---+---+---+---+ 2 / Flow Label (lsb) / 2 octets +---+---+---+---+---+---+---+---+ 3 | Next Header | 1 octet +---+---+---+---+---+---+---+---+ 4 / Source Address / 16 octets +---+---+---+---+---+---+---+---+ 5 / Destination Address / 16 octets +---+---+---+---+---+---+---+---+
context | The compression context |
header_info | The IP header info stored in the profile |
ip | The IPv6 header the static part is built for |
dest | The ROHC buffer |
counter | The current position in the ROHC buffer |
|
static |
Build the IR-DYN packet.
IR-DYN packet (5.7.7.2): 0 1 2 3 4 5 6 7 --- --- --- --- --- --- --- --- 1 : Add-CID octet : if for small CIDs and CID != 0 +---+---+---+---+---+---+---+---+ 2 | 1 1 1 1 1 0 0 0 | IR-DYN packet type +---+---+---+---+---+---+---+---+ : : 3 / 0-2 octets of CID info / 1-2 octets if for large CIDs : : +---+---+---+---+---+---+---+---+ 4 | Profile | 1 octet +---+---+---+---+---+---+---+---+ 5 | CRC | 1 octet +---+---+---+---+---+---+---+---+ | | 6 / Dynamic chain / variable length | | +---+---+---+---+---+---+---+---+ 7 | SN | 2 octets if not RTP nor ESP +---+---+---+---+---+---+---+---+ : : / Payload / variable length : : - - - - - - - - - - - - - - - -
context | The compression context |
uncomp_pkt_hdrs | The uncompressed headers to encode |
rohc_pkt | OUT: The ROHC packet |
rohc_pkt_max_len | The maximum length of the ROHC packet |
packet_type | The type of ROHC packet that is created |
|
static |
Build the IR packet.
IR packet (5.7.7.1): 0 1 2 3 4 5 6 7 --- --- --- --- --- --- --- --- 1 | Add-CID octet | if for small CIDs and CID != 0 +---+---+---+---+---+---+---+---+ 2 | 1 1 1 1 1 1 0 | D | +---+---+---+---+---+---+---+---+ | | 3 / 0-2 octets of CID info / 1-2 octets if for large CIDs | | +---+---+---+---+---+---+---+---+ 4 | Profile | 1 octet +---+---+---+---+---+---+---+---+ 5 | CRC | 1 octet +---+---+---+---+---+---+---+---+ | | 6 | Static chain | variable length | | +---+---+---+---+---+---+---+---+ | | 7 | Dynamic chain | present if D = 1, variable length | | +---+---+---+---+---+---+---+---+ 8 | SN | 2 octets if not RTP nor ESP +---+---+---+---+---+---+---+---+ | | | Payload | variable length | | - - - - - - - - - - - - - - - -
context | The compression context |
uncomp_pkt_hdrs | The uncompressed headers to encode |
rohc_pkt | OUT: The ROHC packet |
rohc_pkt_max_len | The maximum length of the ROHC packet |
packet_type | The type of ROHC packet that is created |
|
static |
Build the ROHC packet to send.
context | The compression context |
uncomp_pkt_hdrs | The uncompressed headers to encode |
rohc_pkt | OUT: The ROHC packet |
rohc_pkt_max_len | The maximum length of the ROHC packet |
packet_type | The type of ROHC packet to create |
|
static |
Build the UO-0 packet.
0 1 2 3 4 5 6 7 --- --- --- --- --- --- --- --- 1 : Add-CID octet : +---+---+---+---+---+---+---+---+ 2 | first octet of base header | +---+---+---+---+---+---+---+---+ : : 3 / 0, 1, or 2 octets of CID / : : +---+---+---+---+---+---+---+---+ UO-0 (5.7.1) 0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ 2 | 0 | SN | CRC | +===+===+===+===+===+===+===+===+
context | The compression context |
uncomp_pkt_hdrs | The uncompressed headers to encode |
rohc_pkt | OUT: The ROHC packet |
rohc_pkt_max_len | The maximum length of the ROHC packet |
packet_type | The type of ROHC packet that is created |
|
static |
Build the UO-2 packet.
0 1 2 3 4 5 6 7 --- --- --- --- --- --- --- --- 1 : Add-CID octet : +---+---+---+---+---+---+---+---+ 2 | first octet of base header | +---+---+---+---+---+---+---+---+ : : 3 / 0, 1, or 2 octets of CID / : : +---+---+---+---+---+---+---+---+ UOR-2 (5.11.3): 0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ 2 | 1 1 0 | SN | +===+===+===+===+===+===+===+===+ 5 | X | CRC | +---+---+---+---+---+---+---+---+ UOR-2-RTP (5.7.4): 0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ 2 | 1 1 0 | TS | +===+===+===+===+===+===+===+===+ 4 | TS| M | SN | +---+---+---+---+---+---+---+---+ 5 | X | CRC | +---+---+---+---+---+---+---+---+ UOR-2-TS (5.7.4): 0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ 2 | 1 1 0 | TS | +===+===+===+===+===+===+===+===+ 4 |T=1| M | SN | +---+---+---+---+---+---+---+---+ 5 | X | CRC | +---+---+---+---+---+---+---+---+ UOR-2-ID (5.7.4): 0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ 2 | 1 1 0 | IP-ID | +===+===+===+===+===+===+===+===+ 4 |T=0| M | SN | +---+---+---+---+---+---+---+---+ 5 | X | CRC | +---+---+---+---+---+---+---+---+ +---+---+---+---+---+---+---+---+ : : 6 / Extension / : : --- --- --- --- --- --- --- --- X: X = 0 indicates that no extension is present; X = 1 indicates that an extension is present. T: T = 0 indicates format UOR-2-ID; T = 1 indicates format UOR-2-TS.
context | The compression context |
uncomp_pkt_hdrs | The uncompressed headers to encode |
rohc_pkt | OUT: The ROHC packet |
rohc_pkt_max_len | The maximum length of the ROHC packet |
packet_type | The type of ROHC packet that is created |
|
static |
Build the tail of the UO packet.
The general format for the UO packets is: 0 1 2 3 4 5 6 7 --- --- --- --- --- --- --- --- 1 : Add-CID octet : | +---+---+---+---+---+---+---+---+ | 2 | first octet of base header | | +---+---+---+---+---+---+---+---+ | : : | 3 / 0, 1, or 2 octets of CID / | : : | +---+---+---+---+---+---+---+---+ | 4 / remainder of base header / | +---+---+---+---+---+---+---+---+ | : : | 5 / Extension / | : : | --- --- --- --- --- --- --- --- | : : | 6 + IP-ID of outer IPv4 header + : : (see section 5.7 or [RFC-3095]) --- --- --- --- --- --- --- --- 7 / AH data for outer list / | --- --- --- --- --- --- --- --- | : : | 8 + GRE checksum + | : : | --- --- --- --- --- --- --- --- | : : | 9 + IP-ID of inner IPv4 header + | : : | --- --- --- --- --- --- --- --- | 10 / AH data for inner list / | --- --- --- --- --- --- --- --- | : : | 11 + GRE checksum + | : : | --- --- --- --- --- --- --- --- : List of : 12 / Dynamic chains / variable, given by static chain : for additional IP headers : (includes no SN) --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- : : RTP/UDP profiles only [RFC-3095] 13 + UDP Checksum + 2 octets, : : if context(UDP Checksum) != 0 --- --- --- --- --- --- --- ---
Parts 7, 8, 10, 11 and 12 are not supported. Parts 1, 2, 3, 4 and 5 are built in packet-specific functions. Parts 6 and 9 are built in this function. Part 13 is built in profile-specific function.
context | The compression context |
uncomp_pkt_hdrs | The uncompressed headers to encode |
dest | The ROHC buffer |
counter | The current position in the ROHC buffer |
|
static |
Code some fields of the UOR-2 packet.
This function is called by code_UO2_packet. It should not be called directly.
UOR-2 (5.11.3): 0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ 2 | 1 1 0 | SN | +===+===+===+===+===+===+===+===+ 5 | X | CRC | +---+---+---+---+---+---+---+---+
context | The compression context |
packet_type | The packet type to build |
f_byte | IN/OUT: The first byte of the UOR-2 packet |
s_byte | IN/OUT: Not used by the UOR-2 packet |
t_byte | IN/OUT: The second byte of the UOR-2 packet |
|
static |
Code some fields of the UOR-2-ID packet.
This function is called by code_UO2_packet. It should not be called directly.
UOR-2-ID (5.7.4): 0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ 2 | 1 1 0 | IP-ID | +===+===+===+===+===+===+===+===+ 4 |T=0| M | SN | +---+---+---+---+---+---+---+---+ 5 | X | CRC | +---+---+---+---+---+---+---+---+
context | The compression context |
packet_type | The packet type to build |
f_byte | IN/OUT: The first byte of the UOR-2-ID packet |
s_byte | IN/OUT: The second byte of the UOR-2-ID packet |
t_byte | IN/OUT: The third byte of the UOR-2-ID packet |
|
static |
Code some fields of the UOR-2-RTP packet.
This function is called by code_UO2_packet. It should not be called directly.
UOR-2-RTP (5.7.4): 0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ 2 | 1 1 0 | TS | +===+===+===+===+===+===+===+===+ 4 | TS| M | SN | +---+---+---+---+---+---+---+---+ 5 | X | CRC | +---+---+---+---+---+---+---+---+
context | The compression context |
packet_type | The packet type to build |
f_byte | IN/OUT: The first byte of the UOR-2-RTP packet |
s_byte | IN/OUT: The second byte of the UOR-2-RTP packet |
t_byte | IN/OUT: The third byte of the UOR-2-RTP packet |
|
static |
Code some fields of the UOR-2-TS packet.
This function is called by code_UO2_packet. It should not be called directly.
UOR-2-TS (5.7.4): 0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ 2 | 1 1 0 | TS | +===+===+===+===+===+===+===+===+ 4 |T=1| M | SN | +---+---+---+---+---+---+---+---+ 5 | X | CRC | +---+---+---+---+---+---+---+---+
context | The compression context |
packet_type | The packet type to build |
f_byte | IN/OUT: The first byte of the UOR-2-TS packet |
s_byte | IN/OUT: The second byte of the UOR-2-TS packet |
t_byte | IN/OUT: The third byte of the UOR-2-TS packet |
|
static |
Compute the CRC for a UO* packet.
context | The compression context to update |
uncomp_pkt_hdrs | The uncompressed headers to encode |
crc_type | The type of CRC to compute |
crc_init | The initial value of the CRC |
rohc_ext_t decide_extension | ( | const struct rohc_comp_ctxt *const | context, |
const rohc_packet_t | packet_type | ||
) |
Decide what extension shall be used in the UO-1-ID/UOR-2 packet.
Extensions 0, 1 & 2 are IPv4 only because of the IP-ID.
context | The compression context |
packet_type | The type of ROHC packet that is created |
|
static |
Decide what extension shall be used in the UO-1-ID packet.
Extensions 0, 1 & 2 are IPv4 only because of the IP-ID.
context | The compression context |
innermost_ip_id_5bits_possible | Whether the innermost IP-ID may be encoded on 5 bits |
innermost_ip_id_8bits_possible | Whether the innermost IP-ID may be encoded on 8 bits |
outermost_ip_id_changed | Whether the outermost IP-ID changed |
|
static |
Decide what extension shall be used in the UOR-2 packet (non-RTP).
Extensions 0, 1 & 2 are IPv4 only because of the IP-ID.
context | The compression context |
innermost_ip_id_changed | Whether the innermost IP-ID changed |
innermost_ip_id_3bits_possible | Whether the innermost IP-ID may be encoded on 3 bits |
innermost_ip_id_8bits_possible | Whether the innermost IP-ID may be encoded on 8 bits |
innermost_ip_id_11bits_possible | Whether the innermost IP-ID may be encoded on 11 bits |
outermost_ip_id_changed | Whether the outermost IP-ID changed |
outermost_ip_id_11bits_possible | Whether the outermost IP-ID may be encoded on 11 bits |
|
static |
Decide what extension shall be used in the UOR-2-ID packet.
Extensions 0, 1 & 2 are IPv4 only because of the IP-ID.
context | The compression context |
innermost_ip_id_5bits_possible | Whether the innermost IP-ID may be encoded on 5 bits |
innermost_ip_id_8bits_possible | Whether the innermost IP-ID may be encoded on 8 bits |
outermost_ip_id_changed | Whether the outermost IP-ID changed |
|
static |
Decide what extension shall be used in the UOR-2 packet (RTP).
Extensions 0, 1 & 2 are IPv4 only because of the IP-ID.
context | The compression context |
innermost_ip_id_changed | Whether the innermost IP-ID changed |
outermost_ip_id_changed | Whether the outermost IP-ID changed |
|
static |
Decide what extension shall be used in the UO-1-ID/UOR-2 packet.
Extensions 0, 1 & 2 are IPv4 only because of the IP-ID.
context | The compression context |
innermost_ip_id_changed | Whether the innermost IP-ID changed |
innermost_ip_id_8bits_possible | Whether the innermost IP-ID may be encoded on 8 bits |
outermost_ip_id_changed | Whether the outermost IP-ID changed |
|
static |
Decide which packet to send when in the different states.
In IR state, IR packets are used. In FO and SO, the profile-specific functions are called if they are defined, otherwise IR packets are used.
context | The compression context |
|
static |
Find the IP fields that changed between the profile and a new IP packet.
context | The compression context | |
header_info | The header info stored in the profile | |
ip | The header of the new IP packet | |
[out] | changes | The detected changes |
|
static |
Detect the behaviour of the IP-ID field of the given IPv4 header.
Detect how the IP-ID field behave:
context | The compression context |
header_info | The header info stored in the profile |
uncomp_pkt_ip_hdr | The uncompressed IP header to encode |
|
static |
Detect the behaviour of the IP-ID fields of the IPv4 headers.
Detect how the IP-ID fields behave:
context | The compression context |
uncomp_pkt_hdrs | The uncompressed headers to encode |
|
static |
Encode uncompressed fields with the corresponding encoding scheme.
context | The compression context |
uncomp_pkt_hdrs | The uncompressed headers to encode |
|
static |
Build inner or outer IP header fields.
This function is used to code the IP header fields of the extension 3 of the UO-2 packet. The function is called twice (one for inner IP header and one for outer IP header) with different arguments.
+-----+-----+-----+-----+-----+-----+-----+-----+ 1 | Type of Service/Traffic Class | if TOS = 1 ..... ..... ..... ..... ..... ..... ..... ..... 2 | Time to Live/Hop Limit | if TTL = 1 ..... ..... ..... ..... ..... ..... ..... ..... 3 | Protocol/Next Header | if PR = 1 ..... ..... ..... ..... ..... ..... ..... ..... 4 / IP extension headers / variable, if IPX = 1 ..... ..... ..... ..... ..... ..... ..... ..... For outer IP-ID: ..... ..... ..... ..... ..... ..... ..... ..... 5 | IP-ID | 2 octets, ..... ..... ..... ..... ..... ..... ..... ..... if I2 = 1
Part 4 is not supported.
context | The compression context |
header_info | The header info stored in the profile |
ip | One inner or outer IP header |
changes | The IP fields that changed |
I | The I flag of the IP header |
ip_hdr_pos | The position of the IP header |
dest | The ROHC buffer |
counter | The current position in the ROHC buffer |
|
static |
Build inner or outer IP header flags.
This function is used to code the IP header fields of the extension 3 of the UO-2 packet. The function is called twice (one for inner IP header and one for outer IP header) with different arguments.
Header flags for IP and UDP profiles (5.11.4): For inner flags: +-----+-----+-----+-----+-----+-----+-----+-----+ 1 | Inner IP header flags | | if ip = 1 | TOS | TTL | DF | PR | IPX | NBO | RND | ip2 | ip2 = 0 if non-RTP +-----+-----+-----+-----+-----+-----+-----+-----+ or for outer flags: +-----+-----+-----+-----+-----+-----+-----+-----+ 2 | Outer IP header flags | | TOS2| TTL2| DF2 | PR2 |IPX2 |NBO2 |RND2 | I2 | if ip2 = 1 +-----+-----+-----+-----+-----+-----+-----+-----+
context | The compression context |
header_info | The header info stored in the profile |
ip | One inner or outer IP header |
changes | The IP fields that changed |
ip2_or_I2 | Whether the ip2 (inner, RTP only) or I2 (outer) flag is set or not |
dest | The ROHC buffer |
counter | The current position in the ROHC buffer |
|
static |
Reset the given IP header info.
header_info | The IP header info to reset |
|
static |
Initialize the IP header info stored in the context.
header_info | The IP header info to initialize |
ip | The IP header |
oa_repetitions_nr | The number of repetitions for Optimistic Approach |
profile_id | The ID of the associated compression profile |
trace_cb | The function to call for printing traces |
trace_cb_priv | An optional private context, may be NULL |
|
static |
Build the dynamic part of one IP header for the IR/IR-DYN packets.
context | The compression context |
header_info | The IP header info stored in the profile |
ext_list_changed | Whether extension header list changed |
ip | The IP header the dynamic part is built for |
dest | The ROHC buffer |
counter | The current position in the ROHC buffer |
|
static |
Build the dynamic part of the IR and IR-DYN packets.
context | The compression context |
uncomp_pkt_hdrs | The uncompressed headers to encode |
rohc_pkt | The ROHC buffer |
counter | The current position in the ROHC buffer |
|
static |
Build the static part of one IP header for the IR packet.
context | The compression context |
header_info | The IP header info stored in the profile |
ip | The IP header the static part is built for |
dest | The ROHC buffer |
counter | The current position in the ROHC buffer |
|
static |
Build the static part of the IR packet.
context | The compression context |
uncomp_pkt_hdrs | The uncompressed headers to encode |
rohc_pkt | The ROHC buffer |
counter | The current position in the ROHC buffer |
|
static |
Build the UO-1 packet for the non-RTP profiles.
The UO-1 packet type cannot be used if there is no IPv4 header in the context or if value(RND) and value(RND2) are both 1.
0 1 2 3 4 5 6 7 --- --- --- --- --- --- --- --- 1 : Add-CID octet : +---+---+---+---+---+---+---+---+ 2 | first octet of base header | +---+---+---+---+---+---+---+---+ : : 3 / 0, 1, or 2 octets of CID / : : +---+---+---+---+---+---+---+---+ UO-1 (5.11.3): 0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ 2 | 1 0 | IP-ID | +===+===+===+===+===+===+===+===+ 4 | SN | CRC | +---+---+---+---+---+---+---+---+
context | The compression context | |
uncomp_pkt_hdrs | The uncompressed headers to encode | |
[out] | rohc_pkt | The ROHC packet |
rohc_pkt_max_len | The maximum length of the ROHC packet | |
packet_type | The type of ROHC packet that is created |
|
static |
Build the UO-1-ID packet.
The UO-1-ID packet type cannot be used if there is no IPv4 header in the context or if value(RND) and value(RND2) are both 1.
0 1 2 3 4 5 6 7 --- --- --- --- --- --- --- --- 1 : Add-CID octet : +---+---+---+---+---+---+---+---+ 2 | first octet of base header | +---+---+---+---+---+---+---+---+ : : 3 / 0, 1, or 2 octets of CID / : : +---+---+---+---+---+---+---+---+ UO-1-ID (5.7.3): 0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ 2 | 1 0 |T=0| IP-ID | +===+===+===+===+===+===+===+===+ 4 | X | SN | CRC | +---+---+---+---+---+---+---+---+ X: X = 0 indicates that no extension is present; X = 1 indicates that an extension is present. T: T = 0 indicates format UO-1-ID; T = 1 indicates format UO-1-TS.
context | The compression context | |
uncomp_pkt_hdrs | The uncompressed headers to encode | |
[out] | rohc_pkt | The ROHC packet |
rohc_pkt_max_len | The maximum length of the ROHC packet | |
packet_type | The type of ROHC packet that is created |
|
static |
Build the UO-1 packet for the RTP profiles.
The UO-1 packet type cannot be used if there is no IPv4 header in the context or if value(RND) and value(RND2) are both 1.
0 1 2 3 4 5 6 7 --- --- --- --- --- --- --- --- 1 : Add-CID octet : +---+---+---+---+---+---+---+---+ 2 | first octet of base header | +---+---+---+---+---+---+---+---+ : : 3 / 0, 1, or 2 octets of CID / : : +---+---+---+---+---+---+---+---+ UO-1 (5.7.3): 0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ 2 | 1 0 | TS | +===+===+===+===+===+===+===+===+ 4 | M | SN | CRC | +---+---+---+---+---+---+---+---+
context | The compression context | |
uncomp_pkt_hdrs | The uncompressed headers to encode | |
[out] | rohc_pkt | The ROHC packet |
rohc_pkt_max_len | The maximum length of the ROHC packet | |
packet_type | The type of ROHC packet that is created |
|
static |
Build the UO-1-TS packet.
0 1 2 3 4 5 6 7 --- --- --- --- --- --- --- --- 1 : Add-CID octet : +---+---+---+---+---+---+---+---+ 2 | first octet of base header | +---+---+---+---+---+---+---+---+ : : 3 / 0, 1, or 2 octets of CID / : : +---+---+---+---+---+---+---+---+ UO-1-TS (5.7.3): 0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ 2 | 1 0 |T=1| TS | +===+===+===+===+===+===+===+===+ 4 | M | SN | CRC | +---+---+---+---+---+---+---+---+ T: T = 0 indicates format UO-1-ID; T = 1 indicates format UO-1-TS.
context | The compression context | |
uncomp_pkt_hdrs | The uncompressed headers to encode | |
[out] | rohc_pkt | The ROHC packet |
rohc_pkt_max_len | The maximum length of the ROHC packet | |
packet_type | The type of ROHC packet that is created |
bool rohc_comp_rfc3095_create | ( | struct rohc_comp_ctxt *const | context, |
const struct rohc_pkt_hdrs *const | uncomp_pkt_hdrs | ||
) |
Create a new context and initialize it thanks to the given IP packet.
context | The compression context |
uncomp_pkt_hdrs | The uncompressed headers to initialize the new context |
void rohc_comp_rfc3095_destroy | ( | struct rohc_comp_ctxt *const | context | ) |
Destroy the context.
This function is one of the functions that must exist in one profile for the framework to work.
context | The compression context |
|
static |
Detect changes between packet and context.
context | The compression context to compare |
uncomp_pkt_hdrs | The uncompressed headers to encode |
int rohc_comp_rfc3095_encode | ( | struct rohc_comp_ctxt *const | context, |
const struct rohc_pkt_hdrs *const | uncomp_pkt_hdrs, | ||
uint8_t *const | rohc_pkt, | ||
const size_t | rohc_pkt_max_len, | ||
rohc_packet_t *const | packet_type | ||
) |
Encode an IP packet according to a pattern decided by several different factors.
context | The compression context |
uncomp_pkt_hdrs | The uncompressed headers to encode |
rohc_pkt | OUT: The ROHC packet |
rohc_pkt_max_len | The maximum length of the ROHC packet |
packet_type | OUT: The type of ROHC packet that is created |
bool rohc_comp_rfc3095_feedback | ( | struct rohc_comp_ctxt *const | context, |
const enum rohc_feedback_type | feedback_type, | ||
const uint8_t *const | packet, | ||
const size_t | packet_len, | ||
const uint8_t *const | feedback_data, | ||
const size_t | feedback_data_len | ||
) |
Update the profile when feedback is received.
This function is one of the functions that must exist in one profile for the framework to work.
context | The compression context |
feedback_type | The feedback type |
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 |
|
static |
Update the profile when FEEDBACK-2 is received.
context | The compression 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 |
|
static |
Perform the required actions after the reception of a positive ACK.
context | The compression context that received a positive ACK |
sn_bits | The LSB bits of the acknowledged SN |
sn_bits_nr | The number of LSB bits of the acknowledged SN |
sn_not_valid | Whether the received SN may be considered as valid or not |
|
static |
Determine the values of the I and I2 flags for UO* extension 3.
context | The compression context | |
uncomp_pkt_hdrs | The uncompressed headers to encode | |
packet_type | The type of packet that is being built | |
[out] | innermost_ipv4_non_rnd | The position of the innermost IPv4 header with a non-random IP-ID field |
[out] | I | The value of the I flag in UO extension 3, ie. whether the innermost IPv4 header with a non-random IP-ID needs to transmit some IP-ID bits |
[out] | I2 | The value of the I2 flag in UO extension 3, ie. whether the 2nd innermost IPv4 header with a non-random IP-ID needs to transmit some IP-ID bits |
|
static |
Determine the number of IP-ID bits and the IP-ID offset of the innermost IPv4 header with non-random IP-ID.
context | The compression context | |
[out] | pos | The position of the innermost IP header |
[out] | is_5bits_possible | Whether the innermost IP-ID may be encoded on 5 bits |
[out] | offset | The IP-ID offset of the innermost IP header |
void rohc_get_ipid_bits | ( | const struct rohc_comp_ctxt *const | context, |
bool *const | innermost_ip_id_changed, | ||
bool *const | innermost_ip_id_3bits_possible, | ||
bool *const | innermost_ip_id_5bits_possible, | ||
bool *const | innermost_ip_id_8bits_possible, | ||
bool *const | innermost_ip_id_11bits_possible, | ||
bool *const | outermost_ip_id_changed, | ||
bool *const | outermost_ip_id_11bits_possible | ||
) |
Get the number of non-random outer/inner IP-ID bits.
context | The compression context | |
[out] | innermost_ip_id_changed | Whether the innermost IP-ID changed |
[out] | innermost_ip_id_3bits_possible | Whether the innermost IP-ID may be encoded on 3 bits |
[out] | innermost_ip_id_5bits_possible | Whether the innermost IP-ID may be encoded on 5 bits |
[out] | innermost_ip_id_8bits_possible | Whether the innermost IP-ID may be encoded on 8 bits |
[out] | innermost_ip_id_11bits_possible | Whether the innermost IP-ID may be encoded on 11 bits |
[out] | outermost_ip_id_changed | Whether the outermost IP-ID changed |
[out] | outermost_ip_id_11bits_possible | Whether the outermost IP-ID may be encoded on 11 bits |
|
static |
|
static |
Update the compression context with the successfully compressed packet.
context | The compression context to update |
uncomp_pkt_hdrs | The uncompressed headers to encode |
|
static |
Update the IP information with the IP header.
context | The compression context |
ip_flags | The IP context to update |
ip | The uncompressed IP header that updates the context |