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.
static void c_uncompressed_destroy (struct rohc_comp_ctxt *const context)
 Destroy the Uncompressed context.
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.
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.
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.
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.
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.
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.
static bool c_uncompressed_reinit_context (struct rohc_comp_ctxt *const context)
 Re-initialize a given context.
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.
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.

Variables

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

Detailed Description

ROHC compression context for the uncompressed profile.

Author:
Didier Barvaux <didier.barvaux@toulouse.viveris.com>
Didier Barvaux <didier@barvaux.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:
context The compression context
packet The 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:
comp The ROHC compressor
packet The 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:
context The compression context
packet The 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:
context The 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:
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
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:
context The 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:
context The compression context
feedback_type The feedback type among ROHC_FEEDBACK_1 and ROHC_FEEDBACK_2
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
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:
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
payload_offset OUT: 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:
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
payload_offset OUT: 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:
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 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:
context The compression context
ip_vers The IP version of the packet among IPV4, IPV6, IP_UNKNOWN, IPV4_MALFORMED, or IPV6_MALFORMED.

Variable Documentation

Initial value:
{
        .id             = ROHC_PROFILE_UNCOMPRESSED, 
        .protocol       = 0,                         
        .create         = c_uncompressed_create,     
        .destroy        = c_uncompressed_destroy,
        .check_profile  = c_uncompressed_check_profile,
        .check_context  = c_uncompressed_check_context,
        .encode         = c_uncompressed_encode,
        .reinit_context = c_uncompressed_reinit_context,
        .feedback       = uncomp_feedback,
}

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


Generated on 4 Jul 2018 for ROHC compression/decompression library by  doxygen 1.6.1