Sponsor:

Your company here, and a link to your site. Click to find out more.

rte_ip.h - Man Page

Synopsis

#include <stdint.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netinet/ip.h>
#include <netinet/ip6.h>
#include <rte_byteorder.h>
#include <rte_mbuf.h>

Data Structures

struct rte_ipv4_hdr
struct rte_ipv6_hdr
struct rte_ipv6_routing_ext

Macros

#define RTE_IPV4(a,  b,  c,  d)
#define RTE_IPV4_MAX_PKT_LEN   65535
#define RTE_IPV4_HDR_IHL_MASK   (0x0f)
#define RTE_IPV4_IHL_MULTIPLIER   (4)
#define RTE_IPV4_ANY   ((uint32_t)0x00000000)
#define RTE_IPV4_LOOPBACK   ((uint32_t)0x7f000001)
#define RTE_IPV4_BROADCAST   ((uint32_t)0xe0000000)
#define RTE_IPV4_ALLHOSTS_GROUP   ((uint32_t)0xe0000001)
#define RTE_IPV4_ALLRTRS_GROUP   ((uint32_t)0xe0000002)
#define RTE_IPV4_MAX_LOCAL_GROUP   ((uint32_t)0xe00000ff)
#define RTE_IPV4_MIN_MCAST   RTE_IPV4(224, 0, 0, 0)
#define RTE_IPV4_MAX_MCAST   RTE_IPV4(239, 255, 255, 255)
#define RTE_IS_IPV4_MCAST(x)   ((x) >= RTE_IPV4_MIN_MCAST && (x) <= RTE_IPV4_MAX_MCAST)
#define RTE_IPV6_MIN_MTU   1280
#define RTE_IPV6_EHDR_MF_SHIFT   0

Functions

static uint8_t rte_ipv4_hdr_len (const struct rte_ipv4_hdr *ipv4_hdr)
static uint16_t rte_raw_cksum (const void *buf, size_t len)
static int rte_raw_cksum_mbuf (const struct rte_mbuf *m, uint32_t off, uint32_t len, uint16_t *cksum)
static uint16_t rte_ipv4_cksum (const struct rte_ipv4_hdr *ipv4_hdr)
static uint16_t rte_ipv4_phdr_cksum (const struct rte_ipv4_hdr *ipv4_hdr, uint64_t ol_flags)
static uint16_t rte_ipv4_udptcp_cksum (const struct rte_ipv4_hdr *ipv4_hdr, const void *l4_hdr)
static uint16_t rte_ipv4_udptcp_cksum_mbuf (const struct rte_mbuf *m, const struct rte_ipv4_hdr *ipv4_hdr, uint16_t l4_off)
static int rte_ipv4_udptcp_cksum_verify (const struct rte_ipv4_hdr *ipv4_hdr, const void *l4_hdr)
static int rte_ipv4_udptcp_cksum_mbuf_verify (const struct rte_mbuf *m, const struct rte_ipv4_hdr *ipv4_hdr, uint16_t l4_off)
static uint16_t rte_ipv6_phdr_cksum (const struct rte_ipv6_hdr *ipv6_hdr, uint64_t ol_flags)
static uint16_t rte_ipv6_udptcp_cksum (const struct rte_ipv6_hdr *ipv6_hdr, const void *l4_hdr)
static uint16_t rte_ipv6_udptcp_cksum_mbuf (const struct rte_mbuf *m, const struct rte_ipv6_hdr *ipv6_hdr, uint16_t l4_off)
static int rte_ipv6_udptcp_cksum_verify (const struct rte_ipv6_hdr *ipv6_hdr, const void *l4_hdr)
static int rte_ipv6_udptcp_cksum_mbuf_verify (const struct rte_mbuf *m, const struct rte_ipv6_hdr *ipv6_hdr, uint16_t l4_off)
static int rte_ipv6_get_next_ext (const uint8_t *p, int proto, size_t *ext_len)

Detailed Description

IP-related defines

Definition in file rte_ip.h.

Macro Definition Documentation

#define RTE_IPV4(a, b, c, d)

Value:.PP

                       ((uint32_t)(((a) & 0xff) << 24) | \
                       (((b) & 0xff) << 16) | \
                       (((c) & 0xff) << 8)  | \
                       ((d) & 0xff))

Create IPv4 address

Definition at line 67 of file rte_ip.h.

#define RTE_IPV4_MAX_PKT_LEN   65535

Maximal IPv4 packet length (including a header)

Definition at line 73 of file rte_ip.h.

#define RTE_IPV4_HDR_IHL_MASK   (0x0f)

Internet header length mask for version_ihl field

Definition at line 76 of file rte_ip.h.

#define RTE_IPV4_IHL_MULTIPLIER   (4)

Internet header length field multiplier (IHL field specifies overall header length in number of 4-byte words)

Definition at line 81 of file rte_ip.h.

#define RTE_IPV4_ANY   ((uint32_t)0x00000000)

0.0.0.0

Definition at line 109 of file rte_ip.h.

#define RTE_IPV4_LOOPBACK   ((uint32_t)0x7f000001)

127.0.0.1

Definition at line 110 of file rte_ip.h.

#define RTE_IPV4_BROADCAST   ((uint32_t)0xe0000000)

224.0.0.0

Definition at line 111 of file rte_ip.h.

#define RTE_IPV4_ALLHOSTS_GROUP   ((uint32_t)0xe0000001)

224.0.0.1

Definition at line 112 of file rte_ip.h.

#define RTE_IPV4_ALLRTRS_GROUP   ((uint32_t)0xe0000002)

224.0.0.2

Definition at line 113 of file rte_ip.h.

#define RTE_IPV4_MAX_LOCAL_GROUP   ((uint32_t)0xe00000ff)

224.0.0.255

Definition at line 114 of file rte_ip.h.

#define RTE_IPV4_MIN_MCAST   RTE_IPV4(224, 0, 0, 0)

Minimal IPv4-multicast address

Definition at line 119 of file rte_ip.h.

#define RTE_IPV4_MAX_MCAST   RTE_IPV4(239, 255, 255, 255)

Maximum IPv4 multicast address

Definition at line 121 of file rte_ip.h.

#define RTE_IS_IPV4_MCAST(x)   ((x) >= RTE_IPV4_MIN_MCAST && (x) <= RTE_IPV4_MAX_MCAST)

check if IPv4 address is multicast

Definition at line 124 of file rte_ip.h.

#define RTE_IPV6_MIN_MTU   1280

Minimum MTU for IPv6, see RFC 8200.

Definition at line 564 of file rte_ip.h.

#define RTE_IPV6_EHDR_MF_SHIFT   0

IPv6 fragment extension header.

Definition at line 769 of file rte_ip.h.

Function Documentation

static uint8_t rte_ipv4_hdr_len (const struct rte_ipv4_hdr * ipv4_hdr) [inline], [static]

Get the length of an IPv4 header.

Parameters

ipv4_hdr Pointer to the IPv4 header.

Returns

The length of the IPv4 header (with options if present) in bytes.

Definition at line 141 of file rte_ip.h.

static uint16_t rte_raw_cksum (const void * buf, size_t len) [inline], [static]

Process the non-complemented checksum of a buffer.

Parameters

buf Pointer to the buffer.
len Length of the buffer.

Returns

The non-complemented checksum.

Definition at line 212 of file rte_ip.h.

static int rte_raw_cksum_mbuf (const struct rte_mbuf * m, uint32_t off, uint32_t len, uint16_t * cksum) [inline], [static]

Compute the raw (non complemented) checksum of a packet.

Parameters

m The pointer to the mbuf.
off The offset in bytes to start the checksum.
len The length in bytes of the data to checksum.
cksum A pointer to the checksum, filled on success.

Returns

0 on success, -1 on error (bad length or offset).

Definition at line 235 of file rte_ip.h.

static uint16_t rte_ipv4_cksum (const struct rte_ipv4_hdr * ipv4_hdr) [inline], [static]

Process the IPv4 checksum of an IPv4 header.

The checksum field must be set to 0 by the caller.

Parameters

ipv4_hdr The pointer to the contiguous IPv4 header.

Returns

The complemented checksum to set in the IP packet.

Definition at line 305 of file rte_ip.h.

static uint16_t rte_ipv4_phdr_cksum (const struct rte_ipv4_hdr * ipv4_hdr, uint64_t ol_flags) [inline], [static]

Process the pseudo-header checksum of an IPv4 header.

The checksum field must be set to 0 by the caller.

Depending on the ol_flags, the pseudo-header checksum expected by the drivers is not the same. For instance, when TSO is enabled, the IP payload length must not be included in the packet.

When ol_flags is 0, it computes the standard pseudo-header checksum.

Parameters

ipv4_hdr The pointer to the contiguous IPv4 header.
ol_flags The ol_flags of the associated mbuf.

Returns

The non-complemented checksum to set in the L4 header.

Definition at line 331 of file rte_ip.h.

static uint16_t rte_ipv4_udptcp_cksum (const struct rte_ipv4_hdr * ipv4_hdr, const void * l4_hdr) [inline], [static]

Process the IPv4 UDP or TCP checksum.

The layer 4 checksum must be set to 0 in the L4 header by the caller.

Parameters

ipv4_hdr The pointer to the contiguous IPv4 header.
l4_hdr The pointer to the beginning of the L4 header.

Returns

The complemented checksum to set in the L4 header.

Definition at line 395 of file rte_ip.h.

static uint16_t rte_ipv4_udptcp_cksum_mbuf (const struct rte_mbuf * m, const struct rte_ipv4_hdr * ipv4_hdr, uint16_t l4_off) [inline], [static]

Compute the IPv4 UDP/TCP checksum of a packet.

Parameters

m The pointer to the mbuf.
ipv4_hdr The pointer to the contiguous IPv4 header.
l4_off The offset in bytes to start L4 checksum.

Returns

The complemented checksum to set in the L4 header.

Definition at line 449 of file rte_ip.h.

static int rte_ipv4_udptcp_cksum_verify (const struct rte_ipv4_hdr * ipv4_hdr, const void * l4_hdr) [inline], [static]

Validate the IPv4 UDP or TCP checksum.

In case of UDP, the caller must first check if udp_hdr->dgram_cksum is 0 (i.e. no checksum).

Parameters

ipv4_hdr The pointer to the contiguous IPv4 header.
l4_hdr The pointer to the beginning of the L4 header.

Returns

Return 0 if the checksum is correct, else -1.

Definition at line 481 of file rte_ip.h.

static int rte_ipv4_udptcp_cksum_mbuf_verify (const struct rte_mbuf * m, const struct rte_ipv4_hdr * ipv4_hdr, uint16_t l4_off) [inline], [static]

Verify the IPv4 UDP/TCP checksum of a packet.

In case of UDP, the caller must first check if udp_hdr->dgram_cksum is 0 (i.e. no checksum).

Parameters

m The pointer to the mbuf.
ipv4_hdr The pointer to the contiguous IPv4 header.
l4_off The offset in bytes to start L4 checksum.

Returns

Return 0 if the checksum is correct, else -1.

Definition at line 508 of file rte_ip.h.

static uint16_t rte_ipv6_phdr_cksum (const struct rte_ipv6_hdr * ipv6_hdr, uint64_t ol_flags) [inline], [static]

Process the pseudo-header checksum of an IPv6 header.

Depending on the ol_flags, the pseudo-header checksum expected by the drivers is not the same. For instance, when TSO is enabled, the IPv6 payload length must not be included in the packet.

When ol_flags is 0, it computes the standard pseudo-header checksum.

Parameters

ipv6_hdr The pointer to the contiguous IPv6 header.
ol_flags The ol_flags of the associated mbuf.

Returns

The non-complemented checksum to set in the L4 header.

Definition at line 583 of file rte_ip.h.

static uint16_t rte_ipv6_udptcp_cksum (const struct rte_ipv6_hdr * ipv6_hdr, const void * l4_hdr) [inline], [static]

Process the IPv6 UDP or TCP checksum.

The IPv6 header must not be followed by extension headers. The layer 4 checksum must be set to 0 in the L4 header by the caller.

Parameters

ipv6_hdr The pointer to the contiguous IPv6 header.
l4_hdr The pointer to the beginning of the L4 header.

Returns

The complemented checksum to set in the L4 header.

Definition at line 638 of file rte_ip.h.

static uint16_t rte_ipv6_udptcp_cksum_mbuf (const struct rte_mbuf * m, const struct rte_ipv6_hdr * ipv6_hdr, uint16_t l4_off) [inline], [static]

Process the IPv6 UDP or TCP checksum of a packet.

The IPv6 header must not be followed by extension headers. The layer 4 checksum must be set to 0 in the L4 header by the caller.

Parameters

m The pointer to the mbuf.
ipv6_hdr The pointer to the contiguous IPv6 header.
l4_off The offset in bytes to start L4 checksum.

Returns

The complemented checksum to set in the L4 header.

Definition at line 695 of file rte_ip.h.

static int rte_ipv6_udptcp_cksum_verify (const struct rte_ipv6_hdr * ipv6_hdr, const void * l4_hdr) [inline], [static]

Validate the IPv6 UDP or TCP checksum.

In case of UDP, the caller must first check if udp_hdr->dgram_cksum is 0: this is either invalid or means no checksum in some situations. See 8.1 (Upper-Layer Checksums) in RFC 8200.

Parameters

ipv6_hdr The pointer to the contiguous IPv6 header.
l4_hdr The pointer to the beginning of the L4 header.

Returns

Return 0 if the checksum is correct, else -1.

Definition at line 728 of file rte_ip.h.

static int rte_ipv6_udptcp_cksum_mbuf_verify (const struct rte_mbuf * m, const struct rte_ipv6_hdr * ipv6_hdr, uint16_t l4_off) [inline], [static]

Validate the IPv6 UDP or TCP checksum of a packet.

In case of UDP, the caller must first check if udp_hdr->dgram_cksum is 0: this is either invalid or means no checksum in some situations. See 8.1 (Upper-Layer Checksums) in RFC 8200.

Parameters

m The pointer to the mbuf.
ipv6_hdr The pointer to the contiguous IPv6 header.
l4_off The offset in bytes to start L4 checksum.

Returns

Return 0 if the checksum is correct, else -1.

Definition at line 756 of file rte_ip.h.

static int rte_ipv6_get_next_ext (const uint8_t * p, int proto, size_t * ext_len) [inline], [static]

Parse next IPv6 header extension

This function checks if proto number is an IPv6 extensions and parses its data if so, providing information on next header and extension length.

Parameters

p Pointer to an extension raw data.
proto Protocol number extracted from the 'next header' field from the IPv6 header or the previous extension.
ext_len Extension data length.

Returns

next protocol number if proto is an IPv6 extension, -EINVAL otherwise

Definition at line 810 of file rte_ip.h.

Author

Generated automatically by Doxygen for DPDK from the source code.

Referenced By

The man pages RTE_IPV4(3), RTE_IPV4_ALLHOSTS_GROUP(3), RTE_IPV4_ALLRTRS_GROUP(3), RTE_IPV4_ANY(3), RTE_IPV4_BROADCAST(3), rte_ipv4_cksum(3), RTE_IPV4_HDR_IHL_MASK(3), rte_ipv4_hdr_len(3), RTE_IPV4_IHL_MULTIPLIER(3), RTE_IPV4_LOOPBACK(3), RTE_IPV4_MAX_LOCAL_GROUP(3), RTE_IPV4_MAX_MCAST(3), RTE_IPV4_MAX_PKT_LEN(3), RTE_IPV4_MIN_MCAST(3), rte_ipv4_phdr_cksum(3), rte_ipv4_udptcp_cksum(3), rte_ipv4_udptcp_cksum_mbuf(3), rte_ipv4_udptcp_cksum_mbuf_verify(3), rte_ipv4_udptcp_cksum_verify(3), RTE_IPV6_EHDR_MF_SHIFT(3), rte_ipv6_get_next_ext(3), RTE_IPV6_MIN_MTU(3), rte_ipv6_phdr_cksum(3), rte_ipv6_udptcp_cksum(3), rte_ipv6_udptcp_cksum_mbuf(3), rte_ipv6_udptcp_cksum_mbuf_verify(3), rte_ipv6_udptcp_cksum_verify(3), RTE_IS_IPV4_MCAST(3), rte_raw_cksum(3) and rte_raw_cksum_mbuf(3) are aliases of rte_ip.h(3).

Version 23.11.0 DPDK