ROHC compression/decompression library
Data Structures | Defines | Enumerations | Functions
ip.h File Reference

IP-agnostic packet. More...

#include "dllexport.h"
#include "protocols/ipv4.h"
#include "protocols/ipv6.h"
#include <stdlib.h>
#include <stdint.h>
#include <stdbool.h>
Include dependency graph for ip.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  ip_packet
 Defines an IP-agnostic packet that can handle an IPv4 or IPv6 packet. More...
struct  ip6_ahhdr

Defines

#define IPV6_EXT_HOP_BY_HOP   0
#define IPV6_EXT_DESTINATION   60
#define IPV6_EXT_ROUTING   43
#define IPV6_EXT_AUTH   51
#define IP_GET_16_SUBFIELD(field, bitmask, offset)   ((ntohs(field) & (bitmask)) >> (offset))
 Get a subpart of a 16-bit IP field.
#define IP_GET_32_SUBFIELD(field, bitmask, offset)   ((ntohl(field) & (bitmask)) >> (offset))
 Get a subpart of a 32-bit IP field.
#define IP_SET_16_SUBFIELD(field, bitmask, offset, value)   (field) = (((field) & htons(~(bitmask))) | htons(((value) << (offset)) & (bitmask)))
 Set a subpart of a 16-bit IP field.
#define IP_SET_32_SUBFIELD(field, bitmask, offset, value)   (field) = (((field) & htonl(~(bitmask))) | htonl(((value) << (offset)) & (bitmask)))
 Set a subpart of a 32-bit IP field.
#define IPV4_DF_OFFSET   14
 The offset for the DF flag in an ipv4_hdr->frag_off variable.
#define IPV4_GET_DF(ip4)   IP_GET_16_SUBFIELD((ip4).frag_off, IP_DF, IPV4_DF_OFFSET)
 Get the IPv4 Don't Fragment (DF) bit from an ipv4_hdr object.
#define IPV4_SET_DF(ip4, value)   IP_SET_16_SUBFIELD((ip4)->frag_off, IP_DF, IPV4_DF_OFFSET, (value))
 Set the IPv4 Don't Fragment (DF) bit in an ipv4_hdr object.
#define IPV4_ADDR_FORMAT   "%02x%02x%02x%02x (%u.%u.%u.%u)"
 The format to print an IPv4 address.
#define IPV4_ADDR_RAW(x)
 The data to print an IPv4 address in raw format.
#define IPV6_VERSION_MASK   0xf0000000
 The bitmask for the Version field in an ipv6_hdr->ip6_flow variable.
#define IPV6_VERSION_OFFSET   28
 The offset for the Version field in an ipv6_hdr->ip6_flow variable.
#define IPV6_TC_MASK   0x0ff00000
 The bitmask for the Traffic Class (TC) field in an ipv6_hdr->ip6_flow variable.
#define IPV6_TC_OFFSET   20
 The offset for the Traffic Class (TC) field in an ipv6_hdr->ip6_flow variable.
#define IPV6_FLOW_LABEL_MASK   0x000fffff
 The bitmask for the FLow Label field in an ipv6_hdr->ip6_flow variable.
#define IPV6_GET_VERSION(ip6)   IP_GET_32_SUBFIELD((ip6).ip6_flow, IPV6_VERSION_MASK, IPV6_VERSION_OFFSET)
 Get the IPv6 Version 4-bit field from ipv6_hdr object.
#define IPV6_SET_VERSION(ip6, value)   IP_SET_32_SUBFIELD((ip6)->ip6_flow, IPV6_VERSION_MASK, IPV6_VERSION_OFFSET, (value))
 Set the IPv6 Version 4-bit field in an ipv6_hdr object.
#define IPV6_GET_TC(ip6)   IP_GET_32_SUBFIELD((ip6).ip6_flow, IPV6_TC_MASK, IPV6_TC_OFFSET)
 Get the IPv6 Traffic Class (TC) byte from an ipv6_hdr object.
#define IPV6_SET_TC(ip6, value)   IP_SET_32_SUBFIELD((ip6)->ip6_flow, IPV6_TC_MASK, IPV6_TC_OFFSET, (value))
 Set the IPv6 Traffic Class (TC) byte in an ipv6_hdr object.
#define IPV6_GET_FLOW_LABEL(ip6)   IP_GET_32_SUBFIELD((ip6).ip6_flow, IPV6_FLOW_LABEL_MASK, 0)
 Get the IPv6 Flow Label 20-bit field from an ipv6_hdr object.
#define IPV6_SET_FLOW_LABEL(ip6, value)   IP_SET_32_SUBFIELD((ip6)->ip6_flow, IPV6_FLOW_LABEL_MASK, 0, (value))
 Set the IPv6 Flow Label 20-bit field in an ipv6_hdr variable.
#define IPV6_ADDR_FORMAT   "%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x"
 The format to print an IPv6 address.
#define IPV6_ADDR_IN6(x)   IPV6_ADDR_RAW((x)->s6_addr)
 The data to print an IPv6 address in (struct ipv6_addr *) format.
#define IPV6_ADDR_RAW(x)
 The data to print an IPv6 address in raw format.
#define IPV6_ADDR_CMP(x, y)
 Compare two IPv6 addresses in (struct ipv6_addr *) format.

Enumerations

enum  ip_header_pos_t { ROHC_IP_HDR_NONE = 0, ROHC_IP_HDR_FIRST = 1, ROHC_IP_HDR_SECOND = 2 }
enum  ip_version { IPV4 = 4, IPV6 = 6, IP_UNKNOWN }
 IP version. More...

Functions

int ROHC_EXPORT ip_create (struct ip_packet *const ip, const unsigned char *packet, const unsigned int size)
 Create an IP packet from raw data.
int ROHC_EXPORT ip_get_inner_packet (const struct ip_packet *const outer, struct ip_packet *const inner)
 Get the inner IP packet (IP in IP)
const unsigned char *ROHC_EXPORT ip_get_raw_data (const struct ip_packet *const ip)
 Get the IP raw data (header + payload)
unsigned char *ROHC_EXPORT ip_get_next_header (const struct ip_packet *const ip, uint8_t *const type)
 Get the IP next header.
unsigned char *ROHC_EXPORT ip_get_next_layer (const struct ip_packet *const ip)
 Get the next header (but skip IP extensions)
unsigned char *ROHC_EXPORT ip_get_next_ext_from_ip (const struct ip_packet *const ip, uint8_t *const type)
 Get the next extension header of IPv6 packets from an IPv6 header.
unsigned char *ROHC_EXPORT ip_get_next_ext_from_ext (const unsigned char *const ext, uint8_t *const type)
 Get the next extension header of IPv6 packets from another extension.
unsigned int ROHC_EXPORT ip_get_totlen (const struct ip_packet *const ip)
 Get the total length of an IP packet.
unsigned int ROHC_EXPORT ip_get_hdrlen (const struct ip_packet *const ip)
 Get the length of an IP header.
unsigned int ROHC_EXPORT ip_get_plen (const struct ip_packet *const ip)
 Get the length of an IPv4/IPv6 payload.
int ROHC_EXPORT ip_is_fragment (const struct ip_packet *const ip)
 Whether the IP packet is an IP fragment or not.
ip_version ROHC_EXPORT ip_get_version (const struct ip_packet *const ip)
 Get the IP version of an IP packet.
unsigned int ROHC_EXPORT ip_get_protocol (const struct ip_packet *const ip)
 Get the protocol transported by an IP packet.
unsigned int ROHC_EXPORT ext_get_protocol (const unsigned char *const ext)
 Get the protocol transported by the last IPv6 extension.
unsigned int ROHC_EXPORT ip_get_tos (const struct ip_packet *const ip)
 Get the IPv4 Type Of Service (TOS) or IPv6 Traffic Class (TC) of an IP packet.
unsigned int ROHC_EXPORT ip_get_ttl (const struct ip_packet *const ip)
 Get the IPv4 Time To Live (TTL) or IPv6 Hop Limit (HL) of an IP packet.
void ROHC_EXPORT ip_set_version (struct ip_packet *const ip, const ip_version value)
 Set the IP version of an IP packet.
void ROHC_EXPORT ip_set_protocol (struct ip_packet *const ip, const uint8_t value)
 Set the protocol transported by an IP packet.
void ROHC_EXPORT ip_set_tos (struct ip_packet *const ip, const uint8_t value)
 Set the IPv4 Type Of Service (TOS) or IPv6 Traffic Class (TC) of an IP packet.
void ROHC_EXPORT ip_set_ttl (struct ip_packet *const ip, const uint8_t value)
 Set the IPv4 Time To Live (TTL) or IPv6 Hop Limit (HL) of an IP packet.
void ROHC_EXPORT ip_set_saddr (struct ip_packet *const ip, const unsigned char *value)
 Set the Source Address of an IP packet.
void ROHC_EXPORT ip_set_daddr (struct ip_packet *const ip, const unsigned char *value)
 Set the Destination Address of an IP packet.
struct ipv4_hdr *ROHC_EXPORT ipv4_get_header (const struct ip_packet *const ip)
 Get the IPv4 header.
uint16_t ROHC_EXPORT ipv4_get_id (const struct ip_packet *const ip)
 Get the IP-ID of an IPv4 packet.
uint16_t ROHC_EXPORT ipv4_get_id_nbo (const struct ip_packet *const ip, const unsigned int nbo)
 Get the IP-ID of an IPv4 packet in Network Byte Order.
int ROHC_EXPORT ipv4_get_df (const struct ip_packet *const ip)
 Get the Don't Fragment (DF) bit of an IPv4 packet.
uint32_t ROHC_EXPORT ipv4_get_saddr (const struct ip_packet *const ip)
 Get the source address of an IPv4 packet.
uint32_t ROHC_EXPORT ipv4_get_daddr (const struct ip_packet *const ip)
 Get the destination address of an IPv4 packet.
void ROHC_EXPORT ipv4_set_id (struct ip_packet *const ip, const int value)
 Set the IP-ID of an IPv4 packet.
void ROHC_EXPORT ipv4_set_df (struct ip_packet *const ip, const int value)
 Set the Don't Fragment (DF) bit of an IPv4 packet.
struct ipv6_hdr *ROHC_EXPORT ipv6_get_header (const struct ip_packet *const ip)
 Get the IPv6 header.
uint32_t ROHC_EXPORT ipv6_get_flow_label (const struct ip_packet *const ip)
 Get the flow label of an IPv6 packet.
struct ipv6_addr *ROHC_EXPORT ipv6_get_saddr (const struct ip_packet *const ip)
 Get the source address of an IPv6 packet.
struct ipv6_addr *ROHC_EXPORT ipv6_get_daddr (const struct ip_packet *const ip)
 Get the destination address of an IPv6 packet.
void ROHC_EXPORT ipv6_set_flow_label (struct ip_packet *const ip, const uint32_t value)
 Set the flow label of an IPv6 packet.
unsigned short ROHC_EXPORT ip_get_extension_size (const unsigned char *const ext)
 Get the size of an IPv6 extension.
unsigned short ROHC_EXPORT ip_get_total_extension_size (const struct ip_packet *const ip)
 Get the size of the extension list.
int get_ip_version (const unsigned char *const packet, const unsigned int size, ip_version *const version)

Detailed Description

IP-agnostic packet.

Author:
Didier Barvaux <didier.barvaux@toulouse.viveris.com>

Define Documentation

#define IP_GET_16_SUBFIELD (   field,
  bitmask,
  offset 
)    ((ntohs(field) & (bitmask)) >> (offset))

Get a subpart of a 16-bit IP field.

#define IP_GET_32_SUBFIELD (   field,
  bitmask,
  offset 
)    ((ntohl(field) & (bitmask)) >> (offset))

Get a subpart of a 32-bit IP field.

#define IP_SET_16_SUBFIELD (   field,
  bitmask,
  offset,
  value 
)    (field) = (((field) & htons(~(bitmask))) | htons(((value) << (offset)) & (bitmask)))

Set a subpart of a 16-bit IP field.

#define IP_SET_32_SUBFIELD (   field,
  bitmask,
  offset,
  value 
)    (field) = (((field) & htonl(~(bitmask))) | htonl(((value) << (offset)) & (bitmask)))

Set a subpart of a 32-bit IP field.

#define IPV4_ADDR_FORMAT   "%02x%02x%02x%02x (%u.%u.%u.%u)"

The format to print an IPv4 address.

Referenced by code_ipv4_static_part().

#define IPV4_ADDR_RAW (   x)
Value:
(x)[0], (x)[1], (x)[2], (x)[3], \
        (x)[0], (x)[1], (x)[2], (x)[3]

The data to print an IPv4 address in raw format.

Referenced by code_ipv4_static_part().

#define IPV4_DF_OFFSET   14

The offset for the DF flag in an ipv4_hdr->frag_off variable.

#define IPV4_GET_DF (   ip4)    IP_GET_16_SUBFIELD((ip4).frag_off, IP_DF, IPV4_DF_OFFSET)

Get the IPv4 Don't Fragment (DF) bit from an ipv4_hdr object.

Referenced by changed_dynamic_one_hdr(), and ipv4_get_df().

#define IPV4_SET_DF (   ip4,
  value 
)    IP_SET_16_SUBFIELD((ip4)->frag_off, IP_DF, IPV4_DF_OFFSET, (value))

Set the IPv4 Don't Fragment (DF) bit in an ipv4_hdr object.

Referenced by ipv4_set_df().

#define IPV6_ADDR_CMP (   x,
 
)
Value:
((x)->s6_addr32[0] == (y)->s6_addr32[0] && \
         (x)->s6_addr32[1] == (y)->s6_addr32[1] && \
         (x)->s6_addr32[2] == (y)->s6_addr32[2] && \
         (x)->s6_addr32[3] == (y)->s6_addr32[3])

Compare two IPv6 addresses in (struct ipv6_addr *) format.

Referenced by c_ip_check_context(), c_udp_check_context(), and c_udp_lite_check_context().

#define IPV6_ADDR_FORMAT   "%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x"

The format to print an IPv6 address.

Referenced by code_ipv6_static_part().

#define IPV6_ADDR_IN6 (   x)    IPV6_ADDR_RAW((x)->s6_addr)

The data to print an IPv6 address in (struct ipv6_addr *) format.

Referenced by code_ipv6_static_part().

#define IPV6_ADDR_RAW (   x)
Value:
(x)[0], (x)[1], (x)[2], (x)[3], (x)[4], (x)[5], (x)[6], (x)[7], \
        (x)[8], (x)[9], (x)[10], (x)[11], (x)[12], (x)[13], (x)[14], (x)[15]

The data to print an IPv6 address in raw format.

#define IPV6_EXT_AUTH   51

Next header code for Authentification Header

Referenced by ext_get_protocol(), ip_get_next_ext_from_ext(), ip_get_next_ext_from_ip(), ip_get_next_layer(), and ip_get_protocol().

#define IPV6_EXT_DESTINATION   60

Next header code for Destination options

Referenced by ext_get_protocol(), ip_get_next_ext_from_ext(), ip_get_next_ext_from_ip(), ip_get_next_layer(), and ip_get_protocol().

#define IPV6_EXT_HOP_BY_HOP   0
#define IPV6_EXT_ROUTING   43
#define IPV6_FLOW_LABEL_MASK   0x000fffff

The bitmask for the FLow Label field in an ipv6_hdr->ip6_flow variable.

Get the IPv6 Flow Label 20-bit field from an ipv6_hdr object.

Referenced by c_ip_check_context(), c_udp_check_context(), c_udp_lite_check_context(), and ipv6_get_flow_label().

Get the IPv6 Traffic Class (TC) byte from an ipv6_hdr object.

Referenced by changed_fields(), and ip_get_tos().

Get the IPv6 Version 4-bit field from ipv6_hdr object.

#define IPV6_SET_FLOW_LABEL (   ip6,
  value 
)    IP_SET_32_SUBFIELD((ip6)->ip6_flow, IPV6_FLOW_LABEL_MASK, 0, (value))

Set the IPv6 Flow Label 20-bit field in an ipv6_hdr variable.

Referenced by ipv6_set_flow_label().

#define IPV6_SET_TC (   ip6,
  value 
)    IP_SET_32_SUBFIELD((ip6)->ip6_flow, IPV6_TC_MASK, IPV6_TC_OFFSET, (value))

Set the IPv6 Traffic Class (TC) byte in an ipv6_hdr object.

Referenced by ip_set_tos().

#define IPV6_SET_VERSION (   ip6,
  value 
)    IP_SET_32_SUBFIELD((ip6)->ip6_flow, IPV6_VERSION_MASK, IPV6_VERSION_OFFSET, (value))

Set the IPv6 Version 4-bit field in an ipv6_hdr object.

#define IPV6_TC_MASK   0x0ff00000

The bitmask for the Traffic Class (TC) field in an ipv6_hdr->ip6_flow variable.

#define IPV6_TC_OFFSET   20

The offset for the Traffic Class (TC) field in an ipv6_hdr->ip6_flow variable.

#define IPV6_VERSION_MASK   0xf0000000

The bitmask for the Version field in an ipv6_hdr->ip6_flow variable.

#define IPV6_VERSION_OFFSET   28

The offset for the Version field in an ipv6_hdr->ip6_flow variable.


Enumeration Type Documentation

The selected IP header

Enumerator:
ROHC_IP_HDR_NONE 

No IP header selected

ROHC_IP_HDR_FIRST 

The first IP header is selected

ROHC_IP_HDR_SECOND 

The second IP header is selected

enum ip_version

IP version.

Enumerator:
IPV4 

IP version 4.

IPV6 

IP version 6.

IP_UNKNOWN 

not IP


Function Documentation

unsigned int ROHC_EXPORT ext_get_protocol ( const unsigned char *const  ext)

Get the protocol transported by the last IPv6 extension.

Parameters:
extThe first extension
Returns:
The protocol number that identify the protocol transported by the given IP extension

References ext_get_protocol(), IPV6_EXT_AUTH, IPV6_EXT_DESTINATION, IPV6_EXT_HOP_BY_HOP, and IPV6_EXT_ROUTING.

Referenced by ext_get_protocol(), and ip_get_protocol().

int get_ip_version ( const unsigned char *const  packet,
const unsigned int  size,
ip_version *const  version 
)

Private functions used by the IP module: (please do not use directly)

References IP_UNKNOWN, IPV4, and IPV6.

Referenced by compute_crc_dynamic(), compute_crc_static(), and ip_create().

int ROHC_EXPORT ip_create ( struct ip_packet *const  ip,
const unsigned char *  packet,
const unsigned int  size 
)

Create an IP packet from raw data.

Parameters:
ipOUT: The IP packet to create
packetThe IP packet data
sizeThe length of the IP packet data
Returns:
Whether the IP packet was successfully created or not

References ip_packet::data, get_ip_version(), ip_packet::header, ip_get_hdrlen(), ip_get_totlen(), IP_UNKNOWN, IPV4, IPV6, rohc_debugf, ip_packet::size, ip_packet::v4, ip_packet::v6, version, and ip_packet::version.

Referenced by ip_get_inner_packet(), and rohc_compress().

unsigned short ROHC_EXPORT ip_get_extension_size ( const unsigned char *const  ext)

Get the size of an IPv6 extension.

Parameters:
extThe extension
Returns:
The size of the extension

Referenced by c_init_header_info(), and ip_get_total_extension_size().

unsigned int ROHC_EXPORT ip_get_hdrlen ( const struct ip_packet *const  ip)

Get the length of an IP header.

The function does not handle ip_packet whose ip_packet::version is IP_UNKNOWN.

Parameters:
ipThe IP packet to analyze
Returns:
The length of the IP header if successful, 0 otherwise

References ip_packet::header, ipv4_hdr::ihl, IPV4, IPV6, ip_packet::v4, and ip_packet::version.

Referenced by c_generic_encode(), c_udp_lite_encode(), and ip_create().

int ROHC_EXPORT ip_get_inner_packet ( const struct ip_packet *const  outer,
struct ip_packet *const  inner 
)

Get the inner IP packet (IP in IP)

The function does not handle ip_packet whose ip_packet::version is IP_UNKNOWN.

Parameters:
outerThe outer IP packet to analyze
innerThe inner IP packet to create
Returns:
Whether the inner IP header is successfully created or not

References ip_create(), ip_get_next_layer(), ip_get_plen(), and rohc_debugf.

Referenced by c_generic_create(), c_generic_encode(), c_ip_check_context(), c_rtp_check_context(), c_rtp_create(), c_rtp_encode(), c_udp_check_context(), c_udp_create(), c_udp_encode(), c_udp_lite_check_context(), c_udp_lite_create(), c_udp_lite_encode(), and rohc_compress().

unsigned char* ROHC_EXPORT ip_get_next_ext_from_ext ( const unsigned char *const  ext,
uint8_t *const  type 
)

Get the next extension header of IPv6 packets from another extension.

Parameters:
extThe extension to analyse
typeOUT: The type of the next header If there is no next header the value must be ignored
Returns:
The next extension header, NULL if there is no more extension

References IPV6_EXT_AUTH, IPV6_EXT_DESTINATION, IPV6_EXT_HOP_BY_HOP, and IPV6_EXT_ROUTING.

Referenced by ip_get_total_extension_size().

unsigned char* ROHC_EXPORT ip_get_next_ext_from_ip ( const struct ip_packet *const  ip,
uint8_t *const  type 
)

Get the next extension header of IPv6 packets from an IPv6 header.

The function does not handle ip_packet whose ip_packet::version is IP_UNKNOWN.

Parameters:
ipThe IP packet to analyze
typeOUT: The type of the next header If there is no next header the value must be ignored
Returns:
The next extension header, NULL if there is no extension

References ip_get_next_header(), IP_UNKNOWN, IPV6, IPV6_EXT_AUTH, IPV6_EXT_DESTINATION, IPV6_EXT_HOP_BY_HOP, IPV6_EXT_ROUTING, and ip_packet::version.

Referenced by ip_get_total_extension_size().

unsigned char* ROHC_EXPORT ip_get_next_header ( const struct ip_packet *const  ip,
uint8_t *const  type 
)

Get the IP next header.

The function does not handle ip_packet whose ip_packet::version is IP_UNKNOWN.

Parameters:
ipThe IP packet to analyze
typeOUT: The type of the next header
Returns:
The next header if successful, NULL otherwise

References ip_packet::data, ip_packet::header, IPV4, IPV6, ipv4_hdr::protocol, ip_packet::v4, ip_packet::v6, and ip_packet::version.

Referenced by ip_get_next_ext_from_ip(), and ip_get_next_layer().

unsigned char* ROHC_EXPORT ip_get_next_layer ( const struct ip_packet *const  ip)
unsigned int ROHC_EXPORT ip_get_plen ( const struct ip_packet *const  ip)

Get the length of an IPv4/IPv6 payload.

The function does not handle ip_packet whose ip_packet::version is IP_UNKNOWN.

Parameters:
ipThe IPv4/IPv6 packet to analyze
Returns:
The length of the IPv4/IPv6 payload if successful, 0 otherwise

References ip_packet::header, ipv4_hdr::ihl, ip_get_total_extension_size(), IPV4, IPV6, ipv4_hdr::tot_len, ip_packet::v4, ip_packet::v6, and ip_packet::version.

Referenced by ip_get_inner_packet().

unsigned int ROHC_EXPORT ip_get_protocol ( const struct ip_packet *const  ip)

Get the protocol transported by an IP packet.

The protocol returned is the one transported by the last known IP extension header if any is found.

The function handles ip_packet whose ip_packet::version is IP_UNKNOWN. It always returns the special value 0.

Parameters:
ipThe IP packet to analyze
Returns:
The protocol number that identify the protocol transported by the given IP packet, 0 if the packet is not IPv4 nor IPv6

References ip_packet::data, ext_get_protocol(), ip_packet::header, IPV4, IPV6, IPV6_EXT_AUTH, IPV6_EXT_DESTINATION, IPV6_EXT_HOP_BY_HOP, IPV6_EXT_ROUTING, ipv4_hdr::protocol, ip_packet::v4, ip_packet::v6, and ip_packet::version.

Referenced by c_generic_create(), c_generic_encode(), c_ip_check_context(), c_rtp_check_context(), c_rtp_create(), c_rtp_encode(), c_udp_check_context(), c_udp_create(), c_udp_encode(), c_udp_lite_check_context(), c_udp_lite_create(), c_udp_lite_encode(), changed_fields(), code_ipv4_static_part(), code_ipv6_static_part(), header_fields(), and rohc_compress().

const unsigned char* ROHC_EXPORT ip_get_raw_data ( const struct ip_packet *const  ip)

Get the IP raw data (header + payload)

The function handles ip_packet whose ip_packet::version is IP_UNKNOWN.

Parameters:
ipThe IP packet to analyze
Returns:
The IP raw data (header + payload)

References ip_packet::data.

Referenced by code_UO0_packet(), code_UO1_packet(), code_UO2_packet(), and rohc_compress().

unsigned int ROHC_EXPORT ip_get_tos ( const struct ip_packet *const  ip)

Get the IPv4 Type Of Service (TOS) or IPv6 Traffic Class (TC) of an IP packet.

The function does not handle ip_packet whose ip_packet::version is IP_UNKNOWN.

Parameters:
ipThe IP packet to analyze
Returns:
The TOS or TC value if successful, 0 otherwise

References ip_packet::header, IPV4, IPV6, IPV6_GET_TC, ipv4_hdr::tos, ip_packet::v4, ip_packet::v6, and ip_packet::version.

Referenced by changed_fields(), code_ipv4_dynamic_part(), code_ipv6_dynamic_part(), and header_fields().

unsigned short ROHC_EXPORT ip_get_total_extension_size ( const struct ip_packet *const  ip)

Get the size of the extension list.

The function does not handle ip_packet whose ip_packet::version is IP_UNKNOWN.

Parameters:
ipThe packet to analyse
Returns:
The size of extension list

References ip_get_extension_size(), ip_get_next_ext_from_ext(), and ip_get_next_ext_from_ip().

Referenced by c_generic_encode(), and ip_get_plen().

unsigned int ROHC_EXPORT ip_get_totlen ( const struct ip_packet *const  ip)

Get the total length of an IP packet.

The function handles ip_packet whose ip_packet::version is IP_UNKNOWN.

Parameters:
ipThe IP packet to analyze
Returns:
The total length of the IP packet

References ip_packet::header, IPV4, IPV6, ip_packet::size, ipv4_hdr::tot_len, ip_packet::v4, and ip_packet::version.

Referenced by ip_create(), and rohc_compress().

unsigned int ROHC_EXPORT ip_get_ttl ( const struct ip_packet *const  ip)

Get the IPv4 Time To Live (TTL) or IPv6 Hop Limit (HL) of an IP packet.

The function does not handle ip_packet whose ip_packet::version is IP_UNKNOWN.

Parameters:
ipThe IP packet to analyze
Returns:
The TTL or HL value if successful, 0 otherwise

References ip_packet::header, IPV4, IPV6, ipv4_hdr::ttl, ip_packet::v4, ip_packet::v6, and ip_packet::version.

Referenced by changed_fields(), code_ipv4_dynamic_part(), code_ipv6_dynamic_part(), and header_fields().

ip_version ROHC_EXPORT ip_get_version ( const struct ip_packet *const  ip)
int ROHC_EXPORT ip_is_fragment ( const struct ip_packet *const  ip)

Whether the IP packet is an IP fragment or not.

The IP packet is a fragment if the MF (More Fragments) bit is set or the Fragment Offset field is non-zero.

The function does not handle ip_packet whose ip_packet::version is IP_UNKNOWN.

Parameters:
ipThe IP packet to analyze
Returns:
Whether the IP packet is an IP fragment or not if successful, 0 otherwise

References ipv4_hdr::frag_off, ip_packet::header, IP_DF, IPV4, IPV6, ip_packet::v4, and ip_packet::version.

void ROHC_EXPORT ip_set_daddr ( struct ip_packet *const  ip,
const unsigned char *  value 
)

Set the Destination Address of an IP packet.

The function does not handle ip_packet whose ip_packet::version is IP_UNKNOWN.

Parameters:
ipThe IP packet to modify
valueThe IP address value

References ipv4_hdr::daddr, ip_packet::header, ipv6_hdr::ip6_dst, IPV4, IPV6, ip_packet::v4, ip_packet::v6, and ip_packet::version.

void ROHC_EXPORT ip_set_protocol ( struct ip_packet *const  ip,
const uint8_t  value 
)

Set the protocol transported by an IP packet.

The function does not handle ip_packet whose ip_packet::version is IP_UNKNOWN.

Parameters:
ipThe IP packet to modify
valueThe protocol value

References ip_packet::header, IPV4, IPV6, ipv4_hdr::protocol, ip_packet::v4, ip_packet::v6, and ip_packet::version.

void ROHC_EXPORT ip_set_saddr ( struct ip_packet *const  ip,
const unsigned char *  value 
)

Set the Source Address of an IP packet.

The function does not handle ip_packet whose ip_packet::version is IP_UNKNOWN.

Parameters:
ipThe IP packet to modify
valueThe IP address value

References ip_packet::header, ipv6_hdr::ip6_src, IPV4, IPV6, ipv4_hdr::saddr, ip_packet::v4, ip_packet::v6, and ip_packet::version.

void ROHC_EXPORT ip_set_tos ( struct ip_packet *const  ip,
const uint8_t  value 
)

Set the IPv4 Type Of Service (TOS) or IPv6 Traffic Class (TC) of an IP packet.

The function does not handle ip_packet whose ip_packet::version is IP_UNKNOWN.

Parameters:
ipThe IP packet to modify
valueThe TOS/TC value

References ip_packet::header, IPV4, IPV6, IPV6_SET_TC, ipv4_hdr::tos, ip_packet::v4, ip_packet::v6, and ip_packet::version.

void ROHC_EXPORT ip_set_ttl ( struct ip_packet *const  ip,
const uint8_t  value 
)

Set the IPv4 Time To Live (TTL) or IPv6 Hop Limit (HL) of an IP packet.

The function does not handle ip_packet whose ip_packet::version is IP_UNKNOWN.

Parameters:
ipThe IP packet to modify
valueThe TTL/HL value

References ip_packet::header, IPV4, IPV6, ipv4_hdr::ttl, ip_packet::v4, ip_packet::v6, and ip_packet::version.

void ROHC_EXPORT ip_set_version ( struct ip_packet *const  ip,
const ip_version  value 
)

Set the IP version of an IP packet.

Parameters:
ipThe IP packet to modify
valueThe version value

References ip_packet::version.

uint32_t ROHC_EXPORT ipv4_get_daddr ( const struct ip_packet *const  ip)

Get the destination address of an IPv4 packet.

The function does not handle ip_packet whose ip_packet::version is not IPV4.

Parameters:
ipThe IPv4 packet to analyze
Returns:
The source address of the given IPv4 packet

References ipv4_hdr::daddr, ip_packet::header, IPV4, ip_packet::v4, and ip_packet::version.

Referenced by c_ip_check_context(), c_udp_check_context(), c_udp_lite_check_context(), and code_ipv4_static_part().

int ROHC_EXPORT ipv4_get_df ( const struct ip_packet *const  ip)

Get the Don't Fragment (DF) bit of an IPv4 packet.

The function does not handle ip_packet whose ip_packet::version is not IPV4.

Parameters:
ipThe IP packet to analyze
Returns:
The DF bit

References ip_packet::header, IPV4, IPV4_GET_DF, ip_packet::v4, and ip_packet::version.

Referenced by changed_dynamic_one_hdr(), code_ipv4_dynamic_part(), and header_flags().

struct ipv4_hdr* ROHC_EXPORT ipv4_get_header ( const struct ip_packet *const  ip) [read]

Get the IPv4 header.

The function does not handle ip_packet whose ip_packet::version is not IPV4.

Parameters:
ipThe IP packet to analyze
Returns:
The IP header

References ip_packet::header, IPV4, ip_packet::v4, and ip_packet::version.

Referenced by c_generic_encode().

uint16_t ROHC_EXPORT ipv4_get_id ( const struct ip_packet *const  ip)

Get the IP-ID of an IPv4 packet.

The IP-ID value is returned as-is (ie. not automatically converted to the host byte order).

The function does not handle ip_packet whose ip_packet::version is not IPV4.

Parameters:
ipThe IP packet to analyze
Returns:
The IP-ID

References IPV4, ipv4_get_id_nbo(), and ip_packet::version.

Referenced by c_generic_encode(), and code_uo_remainder().

uint16_t ROHC_EXPORT ipv4_get_id_nbo ( const struct ip_packet *const  ip,
const unsigned int  nbo 
)

Get the IP-ID of an IPv4 packet in Network Byte Order.

The function does not handle ip_packet whose ip_packet::version is not IPV4.

Parameters:
ipThe IP packet to analyze
nboThe NBO flag (if RND = 1, use NBO = 1)
Returns:
The IP-ID

References ip_packet::header, ipv4_hdr::id, IPV4, ip_packet::v4, and ip_packet::version.

Referenced by code_ipv4_dynamic_part(), and ipv4_get_id().

uint32_t ROHC_EXPORT ipv4_get_saddr ( const struct ip_packet *const  ip)

Get the source address of an IPv4 packet.

The function does not handle ip_packet whose ip_packet::version is not IPV4.

Parameters:
ipThe IPv4 packet to analyze
Returns:
The source address of the given IPv4 packet

References ip_packet::header, IPV4, ipv4_hdr::saddr, ip_packet::v4, and ip_packet::version.

Referenced by c_ip_check_context(), c_udp_check_context(), c_udp_lite_check_context(), and code_ipv4_static_part().

void ROHC_EXPORT ipv4_set_df ( struct ip_packet *const  ip,
const int  value 
)

Set the Don't Fragment (DF) bit of an IPv4 packet.

The function does not handle ip_packet whose ip_packet::version is not IPV4.

Parameters:
ipThe IP packet to modify
valueThe value of the DF bit

References ip_packet::header, IPV4, IPV4_SET_DF, ip_packet::v4, and ip_packet::version.

void ROHC_EXPORT ipv4_set_id ( struct ip_packet *const  ip,
const int  value 
)

Set the IP-ID of an IPv4 packet.

The IP-ID value is set as-is (ie. not automatically converted to the host byte order).

The function does not handle ip_packet whose ip_packet::version is not IPV4.

Parameters:
ipThe IP packet to modify
valueThe IP-ID value

References ip_packet::header, ipv4_hdr::id, IPV4, ip_packet::v4, and ip_packet::version.

struct ipv6_addr* ROHC_EXPORT ipv6_get_daddr ( const struct ip_packet *const  ip) [read]

Get the destination address of an IPv6 packet.

The function does not handle ip_packet whose ip_packet::version is not IPV6.

Parameters:
ipThe IPv6 packet to analyze
Returns:
The source address of the given IPv6 packet

References ip_packet::header, ipv6_hdr::ip6_dst, IPV6, ip_packet::v6, and ip_packet::version.

Referenced by c_ip_check_context(), c_udp_check_context(), c_udp_lite_check_context(), and code_ipv6_static_part().

uint32_t ROHC_EXPORT ipv6_get_flow_label ( const struct ip_packet *const  ip)

Get the flow label of an IPv6 packet.

The function does not handle ip_packet whose ip_packet::version is not IPV6.

Parameters:
ipThe IPv6 packet to analyze
Returns:
The flow label of the given IPv6 packet

References ip_packet::header, IPV6, IPV6_GET_FLOW_LABEL, ip_packet::v6, and ip_packet::version.

Referenced by c_ip_check_context(), c_udp_check_context(), c_udp_lite_check_context(), and code_ipv6_static_part().

struct ipv6_hdr* ROHC_EXPORT ipv6_get_header ( const struct ip_packet *const  ip) [read]

Get the IPv6 header.

The function does not handle ip_packet whose ip_packet::version is not IPV6.

Parameters:
ipThe IP packet to analyze
Returns:
The IP header if IPv6

References ip_packet::header, IPV6, ip_packet::v6, and ip_packet::version.

Referenced by c_generic_encode().

struct ipv6_addr* ROHC_EXPORT ipv6_get_saddr ( const struct ip_packet *const  ip) [read]

Get the source address of an IPv6 packet.

The function does not handle ip_packet whose ip_packet::version is not IPV6.

Parameters:
ipThe IPv6 packet to analyze
Returns:
The source address of the given IPv6 packet

References ip_packet::header, ipv6_hdr::ip6_src, IPV6, ip_packet::v6, and ip_packet::version.

Referenced by c_ip_check_context(), c_udp_check_context(), c_udp_lite_check_context(), and code_ipv6_static_part().

void ROHC_EXPORT ipv6_set_flow_label ( struct ip_packet *const  ip,
const uint32_t  value 
)

Set the flow label of an IPv6 packet.

The function does not handle ip_packet whose ip_packet::version is not IPV6.

Parameters:
ipThe IPv6 packet to modify
valueThe flow label value

References ip_packet::header, IPV6, IPV6_SET_FLOW_LABEL, ip_packet::v6, and ip_packet::version.