DPDK: Data Plane Development Kit

18.02.0-rc0
rte_ip.h File Reference
#include <stdint.h>
#include <netinet/in.h>
#include <rte_byteorder.h>
#include <rte_mbuf.h>

Go to the source code of this file.

Data Structures

struct  ipv4_hdr
struct  ipv6_hdr

Macros

#define IPv4(a, b, c, d)
#define IPV4_MAX_PKT_LEN   65535
#define IPV4_HDR_IHL_MASK   (0x0f)
#define IPV4_IHL_MULTIPLIER   (4)
#define IPV4_ANY   ((uint32_t)0x00000000)
#define IPV4_LOOPBACK   ((uint32_t)0x7f000001)
#define IPV4_BROADCAST   ((uint32_t)0xe0000000)
#define IPV4_ALLHOSTS_GROUP   ((uint32_t)0xe0000001)
#define IPV4_ALLRTRS_GROUP   ((uint32_t)0xe0000002)
#define IPV4_MAX_LOCAL_GROUP   ((uint32_t)0xe00000ff)
#define IPV4_MIN_MCAST   IPv4(224, 0, 0, 0)
#define IPV4_MAX_MCAST   IPv4(239, 255, 255, 255)
#define IS_IPV4_MCAST(x)   ((x) >= IPV4_MIN_MCAST && (x) <= IPV4_MAX_MCAST)

Functions

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 ipv4_hdr *ipv4_hdr)
static uint16_t rte_ipv4_phdr_cksum (const struct ipv4_hdr *ipv4_hdr, uint64_t ol_flags)
static uint16_t rte_ipv4_udptcp_cksum (const struct ipv4_hdr *ipv4_hdr, const void *l4_hdr)
static uint16_t rte_ipv6_phdr_cksum (const struct ipv6_hdr *ipv6_hdr, uint64_t ol_flags)
static uint16_t rte_ipv6_udptcp_cksum (const struct ipv6_hdr *ipv6_hdr, const void *l4_hdr)

Detailed Description

IP-related defines

Definition in file rte_ip.h.

Macro Definition Documentation

#define IPv4 (   a,
  b,
  c,
 
)
#define IPV4_MAX_PKT_LEN   65535

Maximal IPv4 packet length (including a header)

Definition at line 113 of file rte_ip.h.

#define IPV4_HDR_IHL_MASK   (0x0f)

Internet header length mask for version_ihl field

Examples:
examples/l2fwd-crypto/main.c, and examples/l3fwd/l3fwd_em.c.

Definition at line 116 of file rte_ip.h.

#define IPV4_IHL_MULTIPLIER   (4)

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

Examples:
examples/l2fwd-crypto/main.c, and examples/l3fwd/l3fwd_em.c.

Definition at line 121 of file rte_ip.h.

#define IPV4_ANY   ((uint32_t)0x00000000)

0.0.0.0

Definition at line 138 of file rte_ip.h.

#define IPV4_LOOPBACK   ((uint32_t)0x7f000001)

127.0.0.1

Definition at line 139 of file rte_ip.h.

#define IPV4_BROADCAST   ((uint32_t)0xe0000000)

224.0.0.0

Definition at line 140 of file rte_ip.h.

#define IPV4_ALLHOSTS_GROUP   ((uint32_t)0xe0000001)

224.0.0.1

Definition at line 141 of file rte_ip.h.

#define IPV4_ALLRTRS_GROUP   ((uint32_t)0xe0000002)

224.0.0.2

Definition at line 142 of file rte_ip.h.

#define IPV4_MAX_LOCAL_GROUP   ((uint32_t)0xe00000ff)

224.0.0.255

Definition at line 143 of file rte_ip.h.

#define IPV4_MIN_MCAST   IPv4(224, 0, 0, 0)

Minimal IPv4-multicast address

Definition at line 148 of file rte_ip.h.

#define IPV4_MAX_MCAST   IPv4(239, 255, 255, 255)

Maximum IPv4 multicast address

Definition at line 149 of file rte_ip.h.

#define IS_IPV4_MCAST (   x)    ((x) >= IPV4_MIN_MCAST && (x) <= IPV4_MAX_MCAST)

check if IPv4 address is multicast

Examples:
examples/ipv4_multicast/main.c.

Definition at line 151 of file rte_ip.h.

Function Documentation

static uint16_t rte_raw_cksum ( const void *  buf,
size_t  len 
)
inlinestatic

Process the non-complemented checksum of a buffer.

Parameters
bufPointer to the buffer.
lenLength of the buffer.
Returns
The non-complemented checksum.

Definition at line 225 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 
)
inlinestatic

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

Parameters
mThe pointer to the mbuf.
offThe offset in bytes to start the checksum.
lenThe length in bytes of the data to checksum.
cksumA pointer to the checksum, filled on success.
Returns
0 on success, -1 on error (bad length or offset).

Definition at line 248 of file rte_ip.h.

static uint16_t rte_ipv4_cksum ( const struct ipv4_hdr ipv4_hdr)
inlinestatic

Process the IPv4 checksum of an IPv4 header.

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

Parameters
ipv4_hdrThe pointer to the contiguous IPv4 header.
Returns
The complemented checksum to set in the IP packet.

Definition at line 315 of file rte_ip.h.

static uint16_t rte_ipv4_phdr_cksum ( const struct ipv4_hdr ipv4_hdr,
uint64_t  ol_flags 
)
inlinestatic

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_hdrThe pointer to the contiguous IPv4 header.
ol_flagsThe ol_flags of the associated mbuf.
Returns
The non-complemented checksum to set in the L4 header.
Examples:
examples/tep_termination/vxlan.c, and examples/vhost/main.c.

Definition at line 341 of file rte_ip.h.

static uint16_t rte_ipv4_udptcp_cksum ( const struct ipv4_hdr ipv4_hdr,
const void *  l4_hdr 
)
inlinestatic

Process the IPv4 UDP or TCP checksum.

The IPv4 header should not contains options. The IP and layer 4 checksum must be set to 0 in the packet by the caller.

Parameters
ipv4_hdrThe pointer to the contiguous IPv4 header.
l4_hdrThe pointer to the beginning of the L4 header.
Returns
The complemented checksum to set in the IP packet.

Definition at line 379 of file rte_ip.h.

static uint16_t rte_ipv6_phdr_cksum ( const struct ipv6_hdr ipv6_hdr,
uint64_t  ol_flags 
)
inlinestatic

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_hdrThe pointer to the contiguous IPv6 header.
ol_flagsThe ol_flags of the associated mbuf.
Returns
The non-complemented checksum to set in the L4 header.
Examples:
examples/tep_termination/vxlan.c, and examples/vhost/main.c.

Definition at line 427 of file rte_ip.h.

static uint16_t rte_ipv6_udptcp_cksum ( const struct ipv6_hdr ipv6_hdr,
const void *  l4_hdr 
)
inlinestatic

Process the IPv6 UDP or TCP checksum.

The IPv4 header should not contains options. The layer 4 checksum must be set to 0 in the packet by the caller.

Parameters
ipv6_hdrThe pointer to the contiguous IPv6 header.
l4_hdrThe pointer to the beginning of the L4 header.
Returns
The complemented checksum to set in the IP packet.

Definition at line 463 of file rte_ip.h.