|
ROHC compression/decompression library
|
IP-agnostic packet. More...
#include "ip.h"#include "rohc_utils.h"#include "protocols/ip_numbers.h"#include "protocols/ip.h"#include "protocols/ipv4.h"#include "protocols/ipv6.h"#include <string.h>#include <assert.h>
Functions | |
| static bool | ip_find_next_layer (const struct ip_packet *const ip, struct net_hdr *const nh, struct net_hdr *const nl) |
| Find the next header and next layer transported by an IP packet. More... | |
| static bool | ext_get_next_layer (const struct net_hdr *const nh, struct net_hdr *const nl) |
| Find the next layer transported by an IP extension. More... | |
| static bool | ext_get_next_header (const uint8_t *const ext, const size_t ext_len, struct net_hdr *const nh) |
| Find the next header transported by an IP extension. More... | |
| bool | ip_create (struct ip_packet *const ip, const uint8_t *const packet, const size_t size) |
| Create an IP packet from raw data. More... | |
| const uint8_t * | ip_get_raw_data (const struct ip_packet *const ip) |
| Get the IP raw data (header + payload) More... | |
| bool | ip_get_inner_packet (const struct ip_packet *const outer, struct ip_packet *const inner) |
| Get the inner IP packet (IP in IP) More... | |
| uint8_t * | ip_get_next_header (const struct ip_packet *const ip, uint8_t *const type) |
| Get the IP next header. More... | |
| uint8_t * | ip_get_next_layer (const struct ip_packet *const ip) |
| Get the next header (but skip IP extensions) More... | |
| uint8_t * | 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. More... | |
| uint8_t * | ip_get_next_ext_from_ext (const uint8_t *const ext, uint8_t *const type) |
| Get the next extension header of IPv6 packets from another extension. More... | |
| unsigned short | ip_get_extension_size (const uint8_t *const ext) |
| Get the size of an IPv6 extension. More... | |
| unsigned short | ip_get_total_extension_size (const struct ip_packet *const ip) |
| Get the size of the extension list. More... | |
| bool | ip_is_fragment (const struct ip_packet *const ip) |
| Whether the IP packet is an IP fragment or not. More... | |
| unsigned int | ip_get_totlen (const struct ip_packet *const ip) |
| Get the total length of an IP packet. More... | |
| unsigned int | ip_get_hdrlen (const struct ip_packet *const ip) |
| Get the length of an IP header. More... | |
| ip_version | ip_get_version (const struct ip_packet *const ip) |
| Get the IP version of an IP packet. More... | |
| void | ip_set_version (struct ip_packet *const ip, const ip_version value) |
| Set the IP version of an IP packet. More... | |
| uint8_t | ip_get_protocol (const struct ip_packet *const ip) |
| Get the protocol transported by an IP packet. More... | |
| void | ip_set_protocol (struct ip_packet *const ip, const uint8_t value) |
| Set the protocol transported by an IP packet. More... | |
| unsigned int | 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. More... | |
| void | 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. More... | |
| unsigned int | 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. More... | |
| void | 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. More... | |
| void | ip_set_saddr (struct ip_packet *const ip, const uint8_t *value) |
| Set the Source Address of an IP packet. More... | |
| void | ip_set_daddr (struct ip_packet *const ip, const uint8_t *value) |
| Set the Destination Address of an IP packet. More... | |
| const struct ipv4_hdr * | ipv4_get_header (const struct ip_packet *const ip) |
| Get the IPv4 header. More... | |
| uint16_t | ipv4_get_id (const struct ip_packet *const ip) |
| Get the IP-ID of an IPv4 packet. More... | |
| uint16_t | 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. More... | |
| void | ipv4_set_id (struct ip_packet *const ip, const int value) |
| Set the IP-ID of an IPv4 packet. More... | |
| int | ipv4_get_df (const struct ip_packet *const ip) |
| Get the Don't Fragment (DF) bit of an IPv4 packet. More... | |
| void | ipv4_set_df (struct ip_packet *const ip, const int value) |
| Set the Don't Fragment (DF) bit of an IPv4 packet. More... | |
| uint32_t | ipv4_get_saddr (const struct ip_packet *const ip) |
| Get the source address of an IPv4 packet. More... | |
| uint32_t | ipv4_get_daddr (const struct ip_packet *const ip) |
| Get the destination address of an IPv4 packet. More... | |
| const struct ipv6_hdr * | ipv6_get_header (const struct ip_packet *const ip) |
| Get the IPv6 header. More... | |
| uint32_t | ip_get_flow_label (const struct ip_packet *const ip) |
| Get the flow label of an IPv6 packet. More... | |
| void | ip_set_flow_label (struct ip_packet *const ip, const uint32_t value) |
| Set the flow label of an IPv6 packet. More... | |
| const struct ipv6_addr * | ipv6_get_saddr (const struct ip_packet *const ip) |
| Get the source address of an IPv6 packet. More... | |
| const struct ipv6_addr * | ipv6_get_daddr (const struct ip_packet *const ip) |
| Get the destination address of an IPv6 packet. More... | |
IP-agnostic packet.
|
static |
Find the next header transported by an IP extension.
| ext | The extension header | |
| ext_len | The maximum length of the extension | |
| [out] | nh | The next header transported by the extension header |
Find the next layer transported by an IP extension.
| nh | The first IP extension | |
| [out] | nl | The next layer |
| bool ip_create | ( | struct ip_packet *const | ip, |
| const uint8_t *const | packet, | ||
| const size_t | 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 |
|
static |
Find the next header and next layer transported by an IP packet.
Private functions used by the IP module: (please do not use directly)
| ip | The IP packet to analyze | |
| [out] | nh | The first IP extension or the transport layer |
| [out] | nl | The transport layer |
| unsigned short ip_get_extension_size | ( | const uint8_t *const | ext | ) |
Get the size of an IPv6 extension.
| ext | The extension |
| uint32_t ip_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 |
| unsigned int 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 |
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 |
| uint8_t* ip_get_next_ext_from_ext | ( | const uint8_t *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 |
| uint8_t* 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 |
| uint8_t* 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 |
| uint8_t* 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 |
| uint8_t 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 |
| const uint8_t* 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 |
| unsigned int 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 |
| unsigned short 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 |
| unsigned int 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 |
| unsigned int 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 |
| ip_version 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 |
| bool 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 |
| void ip_set_daddr | ( | struct ip_packet *const | ip, |
| const uint8_t * | 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 |
| void ip_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 |
| void 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 |
| void ip_set_saddr | ( | struct ip_packet *const | ip, |
| const uint8_t * | 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 |
| void 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 |
| void 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 |
| void 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 |
| uint32_t 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 |
| int 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 |
Get the IPv4 header.
The function does not handle ip_packet whose ip_packet::version is not IPV4.
| ip | The IP packet to analyze |
| uint16_t 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 |
| uint16_t 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) |
| uint32_t 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 |
| void 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 |
| void 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 |
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 |
Get the IPv6 header.
The function does not handle ip_packet whose ip_packet::version is not IPV6.
| ip | The IP packet to analyze |
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 |
1.8.10