ROHC compression/decompression library
Functions | Variables
c_uncompressed.c File Reference

ROHC compression context for the uncompressed profile. More...

#include "rohc_comp_internals.h"
#include "rohc_traces.h"
#include "rohc_traces_internal.h"
#include "rohc_debug.h"
#include "schemes/cid.h"
#include "crc.h"
#include <assert.h>
Include dependency graph for c_uncompressed.c:

Functions

static bool c_uncompressed_create (struct rohc_comp_ctxt *const context, const struct net_pkt *const packet)
 Create a new Uncompressed context and initialize it thanks to the given IP packet. More...
 
static void c_uncompressed_destroy (struct rohc_comp_ctxt *const context)
 Destroy the Uncompressed context. More...
 
static bool c_uncompressed_check_profile (const struct rohc_comp *const comp, const struct net_pkt *const packet)
 Check if the given packet corresponds to the Uncompressed profile. More...
 
static bool c_uncompressed_check_context (const struct rohc_comp_ctxt *const context, const struct net_pkt *const packet)
 Check if an IP packet belongs to the Uncompressed context. More...
 
static int c_uncompressed_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 packet according to a pattern decided by several different factors. More...
 
static int uncompressed_code_packet (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)
 Build the ROHC packet to send. More...
 
static int uncompressed_code_IR_packet (const struct rohc_comp_ctxt *context, const struct net_pkt *const uncomp_pkt, uint8_t *const rohc_pkt, const size_t rohc_pkt_max_len, size_t *const payload_offset)
 Build the IR packet. More...
 
static int uncompressed_code_normal_packet (const struct rohc_comp_ctxt *context, const struct net_pkt *const uncomp_pkt, uint8_t *const rohc_pkt, const size_t rohc_pkt_max_len, size_t *const payload_offset)
 Build the Normal packet. More...
 
static bool c_uncompressed_reinit_context (struct rohc_comp_ctxt *const context)
 Re-initialize a given context. More...
 
static bool uncomp_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...
 
static void uncompressed_decide_state (struct rohc_comp_ctxt *const context, const ip_version ip_vers)
 Decide the state that should be used for the next packet. More...
 

Variables

const struct rohc_comp_profile c_uncompressed_profile
 Define the compression part of the Uncompressed profile as described in the RFC 3095. More...
 

Detailed Description

ROHC compression context for the uncompressed profile.

Author
Didier Barvaux didie.nosp@m.r.ba.nosp@m.rvaux.nosp@m.@tou.nosp@m.louse.nosp@m..viv.nosp@m.eris..nosp@m.com
Didier Barvaux didie.nosp@m.r@ba.nosp@m.rvaux.nosp@m..org

Function Documentation

static bool c_uncompressed_check_context ( const struct rohc_comp_ctxt *const  context,
const struct net_pkt *const  packet 
)
static

Check if an IP packet belongs to the Uncompressed context.

This function is one of the functions that must exist in one profile for the framework to work.

Parameters
contextThe compression context
packetThe packet to check
Returns
Always return true to tell that the packet belongs to the context
static bool c_uncompressed_check_profile ( const struct rohc_comp *const  comp,
const struct net_pkt *const  packet 
)
static

Check if the given packet corresponds to the Uncompressed profile.

There are no condition. If this function is called, the packet always matches the Uncompressed profile.

This function is one of the functions that must exist in one profile for the framework to work.

Parameters
compThe ROHC compressor
packetThe packet to check
Returns
Whether the packet corresponds to the profile:
  • true if the packet corresponds to the profile,
  • false if the packet does not correspond to the profile
static bool c_uncompressed_create ( struct rohc_comp_ctxt *const  context,
const struct net_pkt *const  packet 
)
static

Create a new Uncompressed context and initialize it thanks to the given IP packet.

This function is one of the functions that must exist in one profile for the framework to work.

Parameters
contextThe compression context
packetThe packet given to initialize the new context
Returns
true if successful, false otherwise
static void c_uncompressed_destroy ( struct rohc_comp_ctxt *const  context)
static

Destroy the Uncompressed context.

This function is one of the functions that must exist in one profile for the framework to work.

Parameters
contextThe compression context
static int c_uncompressed_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 
)
static

Encode an IP packet according to a pattern decided by several different factors.

  1. Decide state
  2. Code packet

    This function is one of the functions that must exist in one profile for the framework to work.
Parameters
contextThe compression context
uncomp_pktThe uncompressed packet to encode
rohc_pktOUT: The ROHC packet
rohc_pkt_max_lenThe maximum length of the ROHC packet
packet_typeOUT: The type of ROHC packet that is created
payload_offsetOUT: The offset for the payload in the IP packet
Returns
The length of the ROHC packet if successful, -1 otherwise
static bool c_uncompressed_reinit_context ( struct rohc_comp_ctxt *const  context)
static

Re-initialize a given context.

This function is one of the functions that must exist in one profile for the framework to work.

Parameters
contextThe compression context
Returns
true in case of success, false otherwise
static bool uncomp_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 
)
static

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.

Parameters
contextThe compression context
feedback_typeThe feedback type among ROHC_FEEDBACK_1 and ROHC_FEEDBACK_2
packetThe whole feedback packet with CID bits
packet_lenThe length of the whole feedback packet with CID bits
feedback_dataThe feedback data without the CID bits
feedback_data_lenThe length of the feedback data without the CID bits
Returns
true if the feedback was successfully handled, false if the feedback could not be taken into account
static int uncompressed_code_IR_packet ( const struct rohc_comp_ctxt context,
const struct net_pkt *const  uncomp_pkt,
uint8_t *const  rohc_pkt,
const size_t  rohc_pkt_max_len,
size_t *const  payload_offset 
)
static

Build the IR packet.

 IR packet (5.10.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 |res|
   +---+---+---+---+---+---+---+---+
   :                               :
 3 /    0-2 octets of CID info     / 1-2 octets if for large CIDs
   :                               :
   +---+---+---+---+---+---+---+---+
 4 |          Profile = 0          | 1 octet
   +---+---+---+---+---+---+---+---+
 5 |              CRC              | 1 octet
   +---+---+---+---+---+---+---+---+
   :                               : (optional)
 6 /           IP packet           / variable length
   :                               :
    --- --- --- --- --- --- --- ---

Part 6 is not managed by this function.

Parameters
contextThe compression context
uncomp_pktThe uncompressed packet to encode
rohc_pktOUT: The ROHC packet
rohc_pkt_max_lenThe maximum length of the ROHC packet
payload_offsetOUT: the offset of the payload in the buffer
Returns
The length of the ROHC packet if successful, -1 otherwise
static int uncompressed_code_normal_packet ( const struct rohc_comp_ctxt context,
const struct net_pkt *const  uncomp_pkt,
uint8_t *const  rohc_pkt,
const size_t  rohc_pkt_max_len,
size_t *const  payload_offset 
)
static

Build the Normal packet.

 Normal packet (5.10.2)

     0   1   2   3   4   5   6   7
    --- --- --- --- --- --- --- ---
 1 :         Add-CID octet         : if for small CIDs and (CID != 0)
   +---+---+---+---+---+---+---+---+
 2 |   first octet of IP packet    |
   +---+---+---+---+---+---+---+---+
   :                               :
 3 /    0-2 octets of CID info     / 1-2 octets if for large CIDs
   :                               :
   +---+---+---+---+---+---+---+---+
   |                               |
 4 /      rest of IP packet        / variable length
   |                               |
   +---+---+---+---+---+---+---+---+

Part 4 is not managed by this function.

Parameters
contextThe compression context
uncomp_pktThe uncompressed packet to encode
rohc_pktOUT: The ROHC packet
rohc_pkt_max_lenThe maximum length of the ROHC packet
payload_offsetOUT: the offset of the payload in the buffer
Returns
The length of the ROHC packet if successful, -1 otherwise
static int uncompressed_code_packet ( 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 
)
static

Build the ROHC packet to send.

Parameters
contextThe compression context
uncomp_pktThe uncompressed packet to encode
rohc_pktOUT: The ROHC packet
rohc_pkt_max_lenThe maximum length of the ROHC packet
packet_typeOUT: The type of ROHC packet that is created
payload_offsetOUT: the offset of the payload in the buffer
Returns
The length of the ROHC packet if successful, -1 otherwise
static void uncompressed_decide_state ( struct rohc_comp_ctxt *const  context,
const ip_version  ip_vers 
)
static

Decide the state that should be used for the next packet.

Parameters
contextThe compression context
ip_versThe IP version of the packet among IPV4, IPV6, IP_UNKNOWN, IPV4_MALFORMED, or IPV6_MALFORMED.

Variable Documentation

const struct rohc_comp_profile c_uncompressed_profile
Initial value:
=
{
.protocol = 0,
.check_profile = c_uncompressed_check_profile,
.check_context = c_uncompressed_check_context,
.reinit_context = c_uncompressed_reinit_context,
.feedback = uncomp_feedback,
}
static bool uncomp_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.
Definition: c_uncompressed.c:264
static bool c_uncompressed_create(struct rohc_comp_ctxt *const context, const struct net_pkt *const packet)
Create a new Uncompressed context and initialize it thanks to the given IP packet.
Definition: c_uncompressed.c:119
static void c_uncompressed_destroy(struct rohc_comp_ctxt *const context)
Destroy the Uncompressed context.
Definition: c_uncompressed.c:140
static bool c_uncompressed_reinit_context(struct rohc_comp_ctxt *const context)
Re-initialize a given context.
Definition: c_uncompressed.c:237
static bool c_uncompressed_check_context(const struct rohc_comp_ctxt *const context, const struct net_pkt *const packet)
Check if an IP packet belongs to the Uncompressed context.
Definition: c_uncompressed.c:181
static int c_uncompressed_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 packet according to a pattern decided by several different factors.
Definition: c_uncompressed.c:207
Definition: rohc.h:215
static bool c_uncompressed_check_profile(const struct rohc_comp *const comp, const struct net_pkt *const packet)
Check if the given packet corresponds to the Uncompressed profile.
Definition: c_uncompressed.c:163

Define the compression part of the Uncompressed profile as described in the RFC 3095.