|
ROHC compression/decompression library
|
IP-agnostic packet. More...
#include "dllexport.h"#include "protocols/ipv4.h"#include "protocols/ipv6.h"#include <stdlib.h>#include <stdint.h>#include <stdbool.h>

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) ((rohc_ntoh16(field) & (bitmask)) >> (offset)) |
| Get a subpart of a 16-bit IP field. | |
| #define | IP_GET_32_SUBFIELD(field, bitmask, offset) ((rohc_ntoh32(field) & (bitmask)) >> (offset)) |
| Get a subpart of a 32-bit IP field. | |
| #define | IP_SET_16_SUBFIELD(field, bitmask, offset, value) |
| Set a subpart of a 16-bit IP field. | |
| #define | IP_SET_32_SUBFIELD(field, bitmask, offset, value) |
| 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)->addr.u8) |
| 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 = 0, IPV4_MALFORMED = 1, IPV6_MALFORMED = 2 } |
| 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) |
IP-agnostic packet.
| #define IP_GET_16_SUBFIELD | ( | field, | |
| bitmask, | |||
| offset | |||
| ) | ((rohc_ntoh16(field) & (bitmask)) >> (offset)) |
Get a subpart of a 16-bit IP field.
| #define IP_GET_32_SUBFIELD | ( | field, | |
| bitmask, | |||
| offset | |||
| ) | ((rohc_ntoh32(field) & (bitmask)) >> (offset)) |
Get a subpart of a 32-bit IP field.
| #define IP_SET_16_SUBFIELD | ( | field, | |
| bitmask, | |||
| offset, | |||
| value | |||
| ) |
(field) = (((field) & rohc_hton16(~(bitmask))) | \ rohc_hton16(((value) << (offset)) & (bitmask)))
Set a subpart of a 16-bit IP field.
| #define IP_SET_32_SUBFIELD | ( | field, | |
| bitmask, | |||
| offset, | |||
| value | |||
| ) |
(field) = (((field) & rohc_hton32(~(bitmask))) | \ rohc_hton32(((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 | ) |
(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, | |
| y | |||
| ) |
| #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)->addr.u8) |
The data to print an IPv6 address in (struct ipv6_addr *) format.
Referenced by code_ipv6_static_part().
| #define IPV6_ADDR_RAW | ( | x | ) |
(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 |
Next header code for Hop-by-Hop 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_ROUTING 43 |
Next header code for Routing extension
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_FLOW_LABEL_MASK 0x000fffff |
The bitmask for the FLow Label field in an ipv6_hdr->ip6_flow variable.
| #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.
Referenced by c_udp_check_context(), and ipv6_get_flow_label().
| #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.
Referenced by changed_fields(), and ip_get_tos().
| #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_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.
| enum ip_header_pos_t |
| enum ip_version |
| unsigned int ROHC_EXPORT ext_get_protocol | ( | const unsigned char *const | ext | ) |
Get the protocol transported by the last IPv6 extension.
| ext | The first extension |
References ext_get_protocol(), IPV6_EXT_AUTH, IPV6_EXT_DESTINATION, IPV6_EXT_HOP_BY_HOP, IPV6_EXT_ROUTING, and protocol.
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.
| ip | OUT: The IP packet to create |
| packet | The IP packet data |
| size | The length of the IP packet data |
References ip_packet::data, get_ip_version(), ip_packet::header, ip_get_hdrlen(), ip_get_totlen(), IP_UNKNOWN, IPV4, IPV4_MALFORMED, IPV6, IPV6_MALFORMED, ip_packet::size, ip_packet::v4, ip_packet::v6, version, and ip_packet::version.
Referenced by ip_get_inner_packet(), and rohc_compress2().
| unsigned short ROHC_EXPORT ip_get_extension_size | ( | const unsigned char *const | ext | ) |
Get the size of an IPv6 extension.
| ext | 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.
| ip | The IP packet to analyze |
References ip_packet::header, ipv4_hdr::ihl, IPV4, IPV6, len, ip_packet::v4, and ip_packet::version.
Referenced by c_generic_check_profile(), c_generic_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.
| outer | The outer IP packet to analyze |
| inner | The inner IP packet to create |
References ip_create(), ip_get_next_layer(), and ip_get_plen().
Referenced by c_generic_create(), c_generic_encode(), c_udp_check_context(), and rohc_compress2().
| 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.
| ext | The extension to analyse |
| type | OUT: The type of the next header If there is no next header the value must be ignored |
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.
| ip | The IP packet to analyze |
| type | OUT: The type of the next header If there is no next header the value must be ignored |
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.
| ip | The IP packet to analyze |
| type | OUT: The type of the next header |
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 | ) |
Get the next header (but skip IP extensions)
The function does not handle ip_packet whose ip_packet::version is IP_UNKNOWN.
| ip | The IP packet to analyze |
References ip_get_next_header(), IPV6, IPV6_EXT_AUTH, IPV6_EXT_DESTINATION, IPV6_EXT_HOP_BY_HOP, IPV6_EXT_ROUTING, and ip_packet::version.
Referenced by c_esp_check_profile(), c_generic_encode(), c_udp_check_context(), c_udp_check_profile(), ip_get_inner_packet(), and rtp_header_flags_and_fields().
| 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.
| ip | The IPv4/IPv6 packet to analyze |
References ip_packet::header, ipv4_hdr::ihl, ip_get_total_extension_size(), IPV4, IPV6, len, rohc_ntoh16(), ipv4_hdr::tot_len, ip_packet::v4, ip_packet::v6, and ip_packet::version.
Referenced by c_esp_check_profile(), c_udp_check_profile(), and 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.
| ip | The IP packet to analyze |
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, protocol, ip_packet::v4, ip_packet::v6, and ip_packet::version.
Referenced by c_generic_create(), c_generic_encode(), c_udp_check_context(), changed_fields(), code_ipv4_static_part(), code_ipv6_static_part(), header_fields(), and rohc_compress2().
| 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.
| ip | The IP packet to analyze |
References ip_packet::data.
Referenced by code_UO0_packet(), code_UO1_packet(), code_UO2_packet(), and rohc_compress2().
| 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.
| ip | The IP packet to analyze |
References ip_packet::header, IPV4, IPV6, IPV6_GET_TC, ipv4_hdr::tos, 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.
| ip | The packet to analyse |
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.
| ip | The IP packet to analyze |
References ip_packet::header, IPV4, IPV6, len, rohc_ntoh16(), ip_packet::size, ipv4_hdr::tot_len, ip_packet::v4, and ip_packet::version.
Referenced by ip_create(), and rohc_compress2().
| 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.
| ip | The IP packet to analyze |
References ip_packet::header, IPV4, IPV6, ipv4_hdr::ttl, 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 | ) |
Get the IP version of an IP packet.
The function handles ip_packet whose ip_packet::version is IP_UNKNOWN.
| ip | The IP packet to analyze |
References ip_packet::version.
Referenced by c_generic_check_profile(), c_generic_encode(), c_init_header_info(), c_udp_check_context(), changed_dynamic_one_hdr(), changed_fields(), code_EXT3_packet(), code_generic_dynamic_part(), code_generic_static_part(), code_IR_packet(), and code_uo_remainder().
| 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.
| ip | The IP packet to analyze |
References ipv4_hdr::frag_off, ip_packet::header, IP_DF, IPV4, IPV6, rohc_ntoh16(), ip_packet::v4, and ip_packet::version.
Referenced by c_generic_check_profile().
| 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.
| ip | The IP packet to modify |
| value | The 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.
| ip | The IP packet to modify |
| value | The 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.
| ip | The IP packet to modify |
| value | The 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.
| ip | The IP packet to modify |
| value | The 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.
| ip | The IP packet to modify |
| value | The 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.
| ip | The IP packet to modify |
| value | The 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.
| ip | The IPv4 packet to analyze |
References ipv4_hdr::daddr, ip_packet::header, IPV4, ip_packet::v4, and ip_packet::version.
Referenced by c_generic_check_profile(), c_udp_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.
| ip | The IP packet to analyze |
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.
| ip | The IP packet to analyze |
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.
| ip | The IP packet to analyze |
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.
| ip | The IP packet to analyze |
| nbo | The NBO flag (if RND = 1, use NBO = 1) |
References ip_packet::header, ipv4_hdr::id, 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.
| ip | The IPv4 packet to analyze |
References ip_packet::header, IPV4, ipv4_hdr::saddr, ip_packet::v4, and ip_packet::version.
Referenced by c_generic_check_profile(), c_udp_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.
| ip | The IP packet to modify |
| value | The 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.
| ip | The IP packet to modify |
| value | The 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.
| ip | The IPv6 packet to analyze |
References ip_packet::header, ipv6_hdr::ip6_dst, IPV6, ip_packet::v6, and ip_packet::version.
Referenced by c_generic_check_profile(), c_udp_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.
| ip | The IPv6 packet to analyze |
References ip_packet::header, IPV6, IPV6_GET_FLOW_LABEL, ip_packet::v6, and ip_packet::version.
Referenced by c_udp_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.
| ip | The IP packet to analyze |
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.
| ip | The IPv6 packet to analyze |
References ip_packet::header, ipv6_hdr::ip6_src, IPV6, ip_packet::v6, and ip_packet::version.
Referenced by c_generic_check_profile(), c_udp_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.
| ip | The IPv6 packet to modify |
| value | The flow label value |
References ip_packet::header, IPV6, IPV6_SET_FLOW_LABEL, ip_packet::v6, and ip_packet::version.
1.7.6.1