ROHC compression/decompression library
Functions
c_tcp_irregular.c File Reference

Handle the irregular chain of the TCP compression profile. More...

#include "c_tcp_irregular.h"
#include "c_tcp_defines.h"
#include "protocols/ip_numbers.h"
#include "protocols/ip.h"
#include <assert.h>
Include dependency graph for c_tcp_irregular.c:

Functions

int tcp_code_irreg_chain (struct rohc_comp_ctxt *const context, const struct ip_packet *const ip, const uint8_t ip_inner_ecn, const struct tcphdr *const tcp, uint8_t *const rohc_pkt, const size_t rohc_pkt_max_len)
 Code the irregular chain of one CO packet. More...
 
static int tcp_code_irregular_ipv4_part (const struct rohc_comp_ctxt *const context, const ip_context_t *const ip_context, const struct ipv4_hdr *const ipv4, const bool is_innermost, const bool ecn_used, const uint8_t ip_inner_ecn, const bool ttl_irreg_chain_flag, uint8_t *const rohc_data, const size_t rohc_max_len)
 Build the irregular part of the IPv4 header. More...
 
static int tcp_code_irregular_ipv6_part (const struct rohc_comp_ctxt *const context, const ip_context_t *const ip_context, const struct ipv6_hdr *const ipv6, const bool is_innermost, const bool ecn_used, const uint8_t ip_inner_ecn, const bool ttl_irreg_chain_flag, uint8_t *const rohc_data, const size_t rohc_max_len)
 Build the irregular part of the IPv6 header. More...
 
static int tcp_code_irregular_ipv6_opt_part (struct rohc_comp_ctxt *const context, ip_option_context_t *const opt_ctxt, const struct ipv6_opt *const ipv6_opt, const uint8_t protocol, uint8_t *const rohc_data, const size_t rohc_max_len)
 Build the irregular part of the IPv6 option header. More...
 
static int tcp_code_irregular_tcp_part (const struct rohc_comp_ctxt *const context, const struct tcphdr *const tcp, const uint8_t ip_inner_ecn, uint8_t *const rohc_data, const size_t rohc_max_len)
 Build the irregular part of the TCP header. More...
 

Detailed Description

Handle the irregular chain of the TCP compression profile.

Author
FWX rohc_.nosp@m.team.nosp@m.@dial.nosp@m.ine..nosp@m.fr
Didier Barvaux didie.nosp@m.r@ba.nosp@m.rvaux.nosp@m..org
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

Function Documentation

◆ tcp_code_irreg_chain()

int tcp_code_irreg_chain ( struct rohc_comp_ctxt *const  context,
const struct ip_packet *const  ip,
const uint8_t  ip_inner_ecn,
const struct tcphdr *const  tcp,
uint8_t *const  rohc_pkt,
const size_t  rohc_pkt_max_len 
)

Code the irregular chain of one CO packet.

Parameters
contextThe compression context
ipThe outer IP header
ip_inner_ecnThe ECN flags of the innermost IP header
tcpThe uncompressed TCP header
rohc_pktOUT: The ROHC packet
rohc_pkt_max_lenThe maximum length of the ROHC packet
Returns
The length of the ROHC packet if successful, -1 otherwise

◆ tcp_code_irregular_ipv4_part()

static int tcp_code_irregular_ipv4_part ( const struct rohc_comp_ctxt *const  context,
const ip_context_t *const  ip_context,
const struct ipv4_hdr *const  ipv4,
const bool  is_innermost,
const bool  ecn_used,
const uint8_t  ip_inner_ecn,
const bool  ttl_irreg_chain_flag,
uint8_t *const  rohc_data,
const size_t  rohc_max_len 
)
static

Build the irregular part of the IPv4 header.

See RFC 4996 page 63

Parameters
contextThe compression context
ip_contextThe specific IP compression context
ipv4The IPv4 header
is_innermostTrue if IP header is the innermost of the packet
ecn_usedThe indicator of ECN usage
ip_inner_ecnThe ECN flags of the IP innermost header
ttl_irreg_chain_flagWhether the TTL of an outer header changed
[out]rohc_dataThe ROHC packet being built
rohc_max_lenThe max remaining length in the ROHC buffer
Returns
The length appended in the ROHC buffer if positive, -1 in case of error

◆ tcp_code_irregular_ipv6_opt_part()

static int tcp_code_irregular_ipv6_opt_part ( struct rohc_comp_ctxt *const  context,
ip_option_context_t *const  opt_ctxt,
const struct ipv6_opt *const  ipv6_opt,
const uint8_t  protocol,
uint8_t *const  rohc_data,
const size_t  rohc_max_len 
)
static

Build the irregular part of the IPv6 option header.

Parameters
contextThe compression context
opt_ctxtThe compression context of the IPv6 option
ipv6_optThe IPv6 extension header
protocolThe protocol of the IPv6 extension header
[out]rohc_dataThe ROHC packet being built
rohc_max_lenThe max remaining length in the ROHC buffer
Returns
The length appended in the ROHC buffer if positive, -1 in case of error

◆ tcp_code_irregular_ipv6_part()

static int tcp_code_irregular_ipv6_part ( const struct rohc_comp_ctxt *const  context,
const ip_context_t *const  ip_context,
const struct ipv6_hdr *const  ipv6,
const bool  is_innermost,
const bool  ecn_used,
const uint8_t  ip_inner_ecn,
const bool  ttl_irreg_chain_flag,
uint8_t *const  rohc_data,
const size_t  rohc_max_len 
)
static

Build the irregular part of the IPv6 header.

See RFC 4996 page 63

Parameters
contextThe compression context
ip_contextThe specific IP compression context
ipv6The IPv6 header
is_innermostTrue if IP header is the innermost of the packet
ecn_usedThe indicator of ECN usage
ip_inner_ecnThe ECN flags of the IP innermost header
ttl_irreg_chain_flagWhether the TTL of an outer header changed
[out]rohc_dataThe ROHC packet being built
rohc_max_lenThe max remaining length in the ROHC buffer
Returns
The length appended in the ROHC buffer if positive, -1 in case of error

◆ tcp_code_irregular_tcp_part()

static int tcp_code_irregular_tcp_part ( const struct rohc_comp_ctxt *const  context,
const struct tcphdr *const  tcp,
const uint8_t  ip_inner_ecn,
uint8_t *const  rohc_data,
const size_t  rohc_max_len 
)
static

Build the irregular part of the TCP header.

Parameters
contextThe compression context
tcpThe TCP header
ip_inner_ecnThe ECN flags of the innermost IP header
[out]rohc_dataThe ROHC packet being built
rohc_max_lenThe max remaining length in the ROHC buffer
Returns
The length appended in the ROHC buffer if positive, -1 in case of error