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, size_t *const cr_score)
 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 struct rohc_ts pkt_time, 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

◆ c_uncompressed_check_context()

static bool c_uncompressed_check_context ( const struct rohc_comp_ctxt *const  context,
const struct net_pkt *const  packet,
size_t *const  cr_score 
)
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
[out]cr_scoreThe score of the context for Context Replication (CR)
Returns
Always return true to tell that the packet belongs to the context

◆ c_uncompressed_check_profile()

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

◆ c_uncompressed_create()

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

◆ c_uncompressed_destroy()

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

◆ c_uncompressed_encode()

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

◆ c_uncompressed_reinit_context()

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

◆ 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 
)
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

◆ uncompressed_code_IR_packet()

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

◆ uncompressed_code_normal_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 
)
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

◆ uncompressed_code_packet()

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

◆ uncompressed_decide_state()

static void uncompressed_decide_state ( struct rohc_comp_ctxt *const  context,
const struct rohc_ts  pkt_time,
const ip_version  ip_vers 
)
static

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

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

Variable Documentation

◆ c_uncompressed_profile

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:270
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:121
static void c_uncompressed_destroy(struct rohc_comp_ctxt *const context)
Destroy the Uncompressed context.
Definition: c_uncompressed.c:142
static bool c_uncompressed_check_context(const struct rohc_comp_ctxt *const context, const struct net_pkt *const packet, size_t *const cr_score)
Check if an IP packet belongs to the Uncompressed context.
Definition: c_uncompressed.c:184
static bool c_uncompressed_reinit_context(struct rohc_comp_ctxt *const context)
Re-initialize a given context.
Definition: c_uncompressed.c:243
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:212
Definition: rohc.h:213
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:165

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