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>
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. | |
ROHC compression context for the uncompressed profile.
| 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.
| context | The compression context | |
| packet | The packet to check |
| 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.
| comp | The ROHC compressor | |
| packet | The packet to check |
| 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.
| context | The compression context | |
| packet | The packet given to initialize the new context |
| 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.
| 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.
| 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 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.
| context | The compression 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 | |||
| ) | [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.
| 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 |
| 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.
| 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 |
| 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.
| 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 |
| 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.
| 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 |
| 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.
| context | The compression context | |
| ip_vers | The IP version of the packet among IPV4, IPV6, IP_UNKNOWN, IPV4_MALFORMED, or IPV6_MALFORMED. |
{
.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.
1.6.1