|
ROHC compression/decompression library
|
ROHC compression context for the UDP-Lite profile. More...
#include "c_udp.h"#include "c_ip.h"#include "rohc_traces_internal.h"#include "rohc_packets.h"#include "rohc_utils.h"#include "crc.h"#include "rohc_comp_rfc3095.h"#include "protocols/udp_lite.h"#include <stdlib.h>#include <string.h>#include <assert.h>
Data Structures | |
| struct | udp_lite_tmp_vars |
| Define the UDP-Lite-specific temporary variables in the profile compression context. More... | |
| struct | sc_udp_lite_context |
| Define the UDP-Lite part of the profile compression context. More... | |
Macros | |
| #define | MAX_LITE_COUNT 2 |
| The maximal number of times the checksum coverage dit not change or may be inferred. More... | |
Functions | |
| static bool | c_udp_lite_create (struct rohc_comp_ctxt *const context, const struct net_pkt *const packet) |
| Create a new UDP-Lite context and initialize it thanks to the given IP/UDP-Lite packet. More... | |
| static bool | c_udp_lite_check_profile (const struct rohc_comp *const comp, const struct net_pkt *const packet) |
| Check if the given packet corresponds to the UDP-Lite profile. More... | |
| static bool | c_udp_lite_check_context (const struct rohc_comp_ctxt *const context, const struct net_pkt *const packet, size_t *const cr_score) |
| Check if the IP/UDP-Lite packet belongs to the context. More... | |
| static int | c_udp_lite_encode (struct rohc_comp_ctxt *const context, const struct net_pkt *const uncomp_pkt, uint8_t *const rohc_pkt, const size_t rohc_pkt_max_len, rohc_packet_t *const packet_type, size_t *const payload_offset) |
| Encode an IP/UDP-lite packet according to a pattern decided by several different factors. More... | |
| static size_t | udp_lite_code_dynamic_udplite_part (const struct rohc_comp_ctxt *const context, const uint8_t *const next_header, uint8_t *const dest, const size_t counter) |
| Build the dynamic part of the UDP-Lite header. More... | |
| static size_t | udp_lite_build_cce_packet (const struct rohc_comp_ctxt *const context, const uint8_t *const next_header, uint8_t *const dest, const size_t counter, size_t *const first_position) |
| Build the Checksum Coverage Extension (CCE) packet. More... | |
| static bool | udp_lite_send_cce_packet (const struct rohc_comp_ctxt *const context, const struct udphdr *const udp_lite) |
| Check whether a Checksum Coverage Extension (CCE) packet must be sent or not in order to compress the given UDP-Lite header. More... | |
| static size_t | udp_lite_code_uo_remainder (const struct rohc_comp_ctxt *const context, const uint8_t *const next_header, uint8_t *const dest, const size_t counter) |
| Build UDP-Lite-related fields in the tail of the UO packets. More... | |
| static void | udp_lite_init_cc (struct rohc_comp_ctxt *const context, const uint8_t *const next_header) |
| Initialize checksum coverage in the compression context with the given UDP-Lite header. More... | |
Variables | |
| const struct rohc_comp_profile | c_udp_lite_profile |
| Define the compression part of the UDP-Lite profile as described in the RFC 4019. More... | |
ROHC compression context for the UDP-Lite profile.
| #define MAX_LITE_COUNT 2 |
The maximal number of times the checksum coverage dit not change or may be inferred.
|
static |
Check if the IP/UDP-Lite packet belongs to the context.
Conditions are:
This function is one of the functions that must exist in one profile for the framework to work.
| context | The compression context | |
| packet | The IP/UDP-Lite packet to check | |
| [out] | cr_score | The score of the context for Context Replication (CR) |
|
static |
Check if the given packet corresponds to the UDP-Lite profile.
Conditions are:
This function is one of the functions that must exist in one profile for the framework to work.
| comp | The ROHC compressor |
| packet | The packet to check |
|
static |
Create a new UDP-Lite context and initialize it thanks to the given IP/UDP-Lite packet.
This function is one of the functions that must exist in one profile for the framework to work.
| context | The compression context |
| packet | The IP/UDP-Lite packet given to initialize the new context |
|
static |
Encode an IP/UDP-lite packet according to a pattern decided by several different factors.
| context | The compression context |
| uncomp_pkt | The uncompressed packet 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 |
| payload_offset | OUT: The offset for the payload in the IP packet |
|
static |
Build the Checksum Coverage Extension (CCE) packet.
The Checksum Coverage Extension is located at the very start of the UO packet (part 2 in the following figure).
0 1 2 3 4 5 6 7
--- --- --- --- --- --- --- ---
1 : Add-CID octet : If for small CIDs and CID 1 - 15
+---+---+---+---+---+---+---+---+
2 | 1 1 1 1 1 0 F | K | Outer packet type identifier
+---+---+---+---+---+---+---+---+
: :
3 / 0, 1, or 2 octets of CID / 1 - 2 octets if large CIDs
: :
+---+---+---+---+---+---+---+---+
: :
4 / UO-0, UO-1 or UO-2 packet /
: :
+---+---+---+---+---+---+---+---+Parts 1, 3 and 4 are coded by the generic code_UO0_packet, code_UO1_packet and code_UO2_packet functions. These functions call the code_UO_packet_head function which in case of UDP-Lite profile is the udp_lite_build_cce_packet function.
When the udp_lite_build_cce_packet is called, the parameter first_position points on the part 2 and the parameter counter points on the beginning of the part 4.
| context | The compression context |
| next_header | The UDP header |
| dest | The rohc-packet-under-build buffer |
| counter | The current position in the rohc-packet-under-build buffer |
| first_position | The position to place the first byte of packet |
|
static |
Build the dynamic part of the UDP-Lite header.
Dynamic part of UDP-Lite header (5.2.1 of RFC 4019):
+---+---+---+---+---+---+---+---+
1 / Checksum Coverage / 2 octets
+---+---+---+---+---+---+---+---+
2 / Checksum / 2 octets
+---+---+---+---+---+---+---+---+| context | The compression context |
| next_header | The UDP-Lite header |
| dest | The rohc-packet-under-build buffer |
| counter | The current position in the rohc-packet-under-build buffer |
|
static |
Build UDP-Lite-related fields in the tail of the UO packets.
--- --- --- --- --- --- --- ---
: : 2 octets,
1 + UDP-Lite Checksum Coverage + if context(CFP) = 1 or
: : if packet type = CCE
--- --- --- --- --- --- --- ---
: :
2 + UDP-Lite Checksum + 2 octets
: :
--- --- --- --- --- --- --- ---| context | The compression context |
| next_header | The UDP-Lite header |
| dest | The rohc-packet-under-build buffer |
| counter | The current position in the rohc-packet-under-build buffer |
|
static |
Initialize checksum coverage in the compression context with the given UDP-Lite header.
| context | The compression context |
| next_header | The UDP-Lite header |
|
static |
Check whether a Checksum Coverage Extension (CCE) packet must be sent or not in order to compress the given UDP-Lite header.
The function also updates the FK variable stored in the UDP-Lite context.
| context | The compression context |
| udp_lite | The UDP-Lite header |
| const struct rohc_comp_profile c_udp_lite_profile |
Define the compression part of the UDP-Lite profile as described in the RFC 4019.
1.8.13