d_ip.c File Reference
ROHC decompression context for the IP-only profile.
More...
#include "d_ip.h"
#include "rohc_traces_internal.h"
#include "rohc_bit_ops.h"
#include "rohc_packets.h"
#include "rohc_debug.h"
#include "rohc_utils.h"
#include "rohc_decomp_detect_packet.h"
#include <assert.h>
Functions |
| static bool | d_ip_create (const struct rohc_decomp_ctxt *const context, struct rohc_decomp_rfc3095_ctxt **const persist_ctxt, struct rohc_decomp_volat_ctxt *const volat_ctxt) |
| | Create the IP decompression context.
|
| static void | d_ip_destroy (struct rohc_decomp_rfc3095_ctxt *const rfc3095_ctxt, const struct rohc_decomp_volat_ctxt *const volat_ctxt) |
| | Destroy the given IP-only context.
|
| rohc_packet_t | ip_detect_packet_type (const struct rohc_decomp_ctxt *const context, const uint8_t *const rohc_packet, const size_t rohc_length, const size_t large_cid_len) |
| | Detect the type of ROHC packet for IP-based non-RTP profiles.
|
| int | ip_parse_dynamic_ip (const struct rohc_decomp_ctxt *const context, const uint8_t *packet, const size_t length, struct rohc_extr_bits *const bits) |
| | Parse the IP dynamic part of the ROHC packet.
|
| int | ip_parse_ext3 (const struct rohc_decomp_ctxt *const context, const uint8_t *const rohc_data, const size_t rohc_data_len, const rohc_packet_t packet_type, struct rohc_extr_bits *const bits) |
| | Parse the extension 3 of the UOR-2 packet.
|
| int | parse_inner_header_flags (const struct rohc_decomp_ctxt *const context, const uint8_t *const flags, const uint8_t *fields, const size_t length, struct rohc_extr_ip_bits *const bits) |
| | Parse the inner IP header flags and fields.
|
| int | parse_outer_header_flags (const struct rohc_decomp_ctxt *const context, const uint8_t *const flags, const uint8_t *fields, const size_t length, struct rohc_extr_ip_bits *const bits) |
| | Parse the outer IP header flags and fields.
|
Variables |
| struct rohc_decomp_profile | d_ip_profile |
| | Define the decompression part of the IP-only profile as described in the RFC 3843.
|
Detailed Description
ROHC decompression context for the IP-only profile.
- Author:
- Didier Barvaux <didier.barvaux@toulouse.viveris.com>
-
Didier Barvaux <didier@barvaux.org>
Function Documentation
Create the IP decompression context.
This function is one of the functions that must exist in one profile for the framework to work.
- Parameters:
-
| context | The decompression context |
| [out] | persist_ctxt | The persistent part of the decompression context |
| [out] | volat_ctxt | The volatile part of the decompression context |
- Returns:
- true if the UDP context was successfully created, false if a problem occurred
Destroy the given IP-only context.
This function is one of the functions that must exist in one profile for the framework to work.
- Parameters:
-
| rfc3095_ctxt | The persistent decompression context for the RFC3095 profiles |
| volat_ctxt | The volatile decompression context |
| rohc_packet_t ip_detect_packet_type |
( |
const struct rohc_decomp_ctxt *const |
context, |
|
|
const uint8_t *const |
rohc_packet, |
|
|
const size_t |
rohc_length, |
|
|
const size_t |
large_cid_len | |
|
) |
| | |
Detect the type of ROHC packet for IP-based non-RTP profiles.
- Parameters:
-
| context | The decompression context |
| rohc_packet | The ROHC packet |
| rohc_length | The length of the ROHC packet |
| large_cid_len | The length of the optional large CID field |
- Returns:
- The packet type
| int ip_parse_dynamic_ip |
( |
const struct rohc_decomp_ctxt *const |
context, |
|
|
const uint8_t * |
packet, |
|
|
const size_t |
length, |
|
|
struct rohc_extr_bits *const |
bits | |
|
) |
| | |
Parse the IP dynamic part of the ROHC packet.
- Parameters:
-
| context | The decompression context |
| packet | The ROHC packet to parse |
| length | The length of the ROHC packet |
| bits | OUT: The bits extracted from the ROHC header |
- Returns:
- The number of bytes read in the ROHC packet, -1 in case of failure
Parse the extension 3 of the UOR-2 packet.
Extension 3 for non-RTP profiles (5.7.5 & 5.11.4):
0 1 2 3 4 5 6 7
+-----+-----+-----+-----+-----+-----+-----+-----+
1 | 1 1 | S | Mode | I | ip | ip2 |
+-----+-----+-----+-----+-----+-----+-----+-----+
2 | Inner IP header flags | | if ip = 1
+-----+-----+-----+-----+-----+-----+-----+-----+
3 | Outer IP header flags | if ip2 = 1
+-----+-----+-----+-----+-----+-----+-----+-----+
4 | SN | if S = 1
+-----+-----+-----+-----+-----+-----+-----+-----+
| |
5 / Inner IP header fields / variable,
| | if ip = 1
+-----+-----+-----+-----+-----+-----+-----+-----+
6 | IP-ID | 2 octets, if I = 1
+-----+-----+-----+-----+-----+-----+-----+-----+
| |
7 / Outer IP header fields / variable,
| | if ip2 = 1
+-----+-----+-----+-----+-----+-----+-----+-----+
- Parameters:
-
| context | The decompression context |
| rohc_data | The ROHC data to parse |
| rohc_data_len | The length of the ROHC data to parse |
| packet_type | The type of ROHC packet to parse |
| bits | IN: the bits already found in base header OUT: the bits found in the extension header 3 |
- Returns:
- The data length read from the ROHC packet, -1 in case of error
| int parse_inner_header_flags |
( |
const struct rohc_decomp_ctxt *const |
context, |
|
|
const uint8_t *const |
flags, |
|
|
const uint8_t * |
fields, |
|
|
const size_t |
length, |
|
|
struct rohc_extr_ip_bits *const |
bits | |
|
) |
| | |
Parse the inner IP header flags and fields.
Store the values in an IP header info structure.
Inner IP header flags (5.7.5):
0 1 2 3 4 5 6 7
..... ..... ..... ..... ..... ..... ..... .....
| TOS | TTL | DF | PR | IPX | NBO | RND | ip2 | if ip = 1
..... ..... ..... ..... ..... ..... ..... .....
Inner IP header fields (5.7.5):
..... ..... ..... ..... ..... ..... ..... .....
| Type of Service/Traffic Class | if TOS = 1
..... ..... ..... ..... ..... ..... ..... .....
| Time to Live/Hop Limit | if TTL = 1
..... ..... ..... ..... ..... ..... ..... .....
| Protocol/Next Header | if PR = 1
..... ..... ..... ..... ..... ..... ..... .....
/ IP extension headers / variable,
..... ..... ..... ..... ..... ..... ..... ..... if IPX = 1
- Parameters:
-
| context | The decompression context |
| flags | The ROHC flags that indicate which IP fields are present in the packet |
| fields | The ROHC packet part that contains some IP header fields |
| length | The length of the ROHC packet part that contains some IP header fields |
| bits | OUT: The bits extracted from extension 3 |
- Returns:
- The data length read from the ROHC packet, -1 in case of error
| int parse_outer_header_flags |
( |
const struct rohc_decomp_ctxt *const |
context, |
|
|
const uint8_t *const |
flags, |
|
|
const uint8_t * |
fields, |
|
|
const size_t |
length, |
|
|
struct rohc_extr_ip_bits *const |
bits | |
|
) |
| | |
Parse the outer IP header flags and fields.
Store the values in an IP header info structure.
Outer IP header flags (5.7.5):
0 1 2 3 4 5 6 7
..... ..... ..... ..... ..... ..... ..... .....
| TOS2| TTL2| DF2 | PR2 |IPX2 |NBO2 |RND2 | I2 | if ip2 = 1
..... ..... ..... ..... ..... ..... ..... .....
Outer IP header fields
..... ..... ..... ..... ..... ..... ..... .....
| Type of Service/Traffic Class | if TOS2 = 1
..... ..... ..... ..... ..... ..... ..... .....
| Time to Live/Hop Limit | if TTL2 = 1
..... ..... ..... ..... ..... ..... ..... .....
| Protocol/Next Header | if PR2 = 1
..... ..... ..... ..... ..... ..... ..... .....
/ IP extension header(s) / variable,
..... ..... ..... ..... ..... ..... ..... ..... if IPX2 = 1
| IP-ID | 2 octets,
..... ..... ..... ..... ..... ..... ..... ..... if I2 = 1
- Parameters:
-
| context | The decompression context |
| flags | The ROHC flags that indicate which IP fields are present in the packet |
| fields | The ROHC packet part that contain some IP header fields |
| length | The length of the ROHC packet part that contains some IP header fields |
| bits | OUT: The bits extracted from extension 3 |
- Returns:
- The data length read from the ROHC packet, -1 in case of error
Variable Documentation
Initial value:
{
.id = ROHC_PROFILE_IP,
.msn_max_bits = 16,
.new_context = (rohc_decomp_new_context_t) d_ip_create,
.free_context = (rohc_decomp_free_context_t) d_ip_destroy,
.detect_pkt_type = ip_detect_packet_type,
.parse_pkt = (rohc_decomp_parse_pkt_t) rfc3095_decomp_parse_pkt,
.decode_bits = (rohc_decomp_decode_bits_t) rfc3095_decomp_decode_bits,
.build_hdrs = (rohc_decomp_build_hdrs_t) rfc3095_decomp_build_hdrs,
.update_ctxt = (rohc_decomp_update_ctxt_t) rfc3095_decomp_update_ctxt,
.attempt_repair = (rohc_decomp_attempt_repair_t) rfc3095_decomp_attempt_repair,
.get_sn = rohc_decomp_rfc3095_get_sn,
}
Define the decompression part of the IP-only profile as described in the RFC 3843.