DPDK  24.11.0-rc1
Data Structures | Macros | Functions
rte_ip4.h File Reference
#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_cksum.h>
#include <rte_mbuf.h>

Go to the source code of this file.

Data Structures

struct  rte_ipv4_hdr
 

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)
 

Functions

static uint8_t rte_ipv4_hdr_len (const struct rte_ipv4_hdr *ipv4_hdr)
 
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)
 

Detailed Description

IPv4-related defines

Definition in file rte_ip4.h.

Macro Definition Documentation

◆ RTE_IPV4

#define RTE_IPV4 (   a,
  b,
  c,
 
)
Value:
((uint32_t)(((a) & 0xff) << 24) | \
(((b) & 0xff) << 16) | \
(((c) & 0xff) << 8) | \
((d) & 0xff))

Create IPv4 address

Examples:
examples/ip_fragmentation/main.c, examples/ip_reassembly/main.c, examples/ipv4_multicast/main.c, examples/l3fwd-graph/main.c, examples/l3fwd-power/main.c, examples/l3fwd/l3fwd_em.c, and examples/l3fwd/main.c.

Definition at line 68 of file rte_ip4.h.

◆ RTE_IPV4_MAX_PKT_LEN

#define RTE_IPV4_MAX_PKT_LEN   65535

Maximal IPv4 packet length (including a header)

Examples:
examples/ipsec-secgw/ipsec-secgw.c.

Definition at line 74 of file rte_ip4.h.

◆ RTE_IPV4_HDR_IHL_MASK

#define RTE_IPV4_HDR_IHL_MASK   (0x0f)

Internet header length mask for version_ihl field

Examples:
examples/ipsec-secgw/ipsec-secgw.c, and examples/l2fwd-crypto/main.c.

Definition at line 77 of file rte_ip4.h.

◆ RTE_IPV4_IHL_MULTIPLIER

#define RTE_IPV4_IHL_MULTIPLIER   (4)

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

Examples:
examples/ipsec-secgw/ipsec-secgw.c, examples/ipsec-secgw/sa.c, and examples/l2fwd-crypto/main.c.

Definition at line 82 of file rte_ip4.h.

◆ RTE_IPV4_ANY

#define RTE_IPV4_ANY   ((uint32_t)0x00000000)

0.0.0.0

Definition at line 110 of file rte_ip4.h.

◆ RTE_IPV4_LOOPBACK

#define RTE_IPV4_LOOPBACK   ((uint32_t)0x7f000001)

127.0.0.1

Definition at line 111 of file rte_ip4.h.

◆ RTE_IPV4_BROADCAST

#define RTE_IPV4_BROADCAST   ((uint32_t)0xe0000000)

224.0.0.0

Definition at line 112 of file rte_ip4.h.

◆ RTE_IPV4_ALLHOSTS_GROUP

#define RTE_IPV4_ALLHOSTS_GROUP   ((uint32_t)0xe0000001)

224.0.0.1

Definition at line 113 of file rte_ip4.h.

◆ RTE_IPV4_ALLRTRS_GROUP

#define RTE_IPV4_ALLRTRS_GROUP   ((uint32_t)0xe0000002)

224.0.0.2

Definition at line 114 of file rte_ip4.h.

◆ RTE_IPV4_MAX_LOCAL_GROUP

#define RTE_IPV4_MAX_LOCAL_GROUP   ((uint32_t)0xe00000ff)

224.0.0.255

Definition at line 115 of file rte_ip4.h.

◆ RTE_IPV4_MIN_MCAST

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

Minimal IPv4-multicast address

Definition at line 120 of file rte_ip4.h.

◆ RTE_IPV4_MAX_MCAST

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

Maximum IPv4 multicast address

Definition at line 122 of file rte_ip4.h.

◆ RTE_IS_IPV4_MCAST

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

check if IPv4 address is multicast

Examples:
examples/ipv4_multicast/main.c.

Definition at line 125 of file rte_ip4.h.

Function Documentation

◆ rte_ipv4_hdr_len()

static uint8_t rte_ipv4_hdr_len ( const struct rte_ipv4_hdr ipv4_hdr)
inlinestatic

Get the length of an IPv4 header.

Parameters
ipv4_hdrPointer to the IPv4 header.
Returns
The length of the IPv4 header (with options if present) in bytes.
Examples:
examples/l3fwd/l3fwd_em.c.

Definition at line 144 of file rte_ip4.h.

◆ rte_ipv4_cksum()

static uint16_t rte_ipv4_cksum ( const struct rte_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.
Examples:
examples/ipsec-secgw/ipsec-secgw.c, and examples/l3fwd-power/main.c.

Definition at line 161 of file rte_ip4.h.

◆ rte_ipv4_phdr_cksum()

static uint16_t rte_ipv4_phdr_cksum ( const struct rte_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/vhost/main.c.

Definition at line 187 of file rte_ip4.h.

◆ rte_ipv4_udptcp_cksum()

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

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_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 L4 header.

Definition at line 251 of file rte_ip4.h.

◆ rte_ipv4_udptcp_cksum_mbuf()

static uint16_t rte_ipv4_udptcp_cksum_mbuf ( const struct rte_mbuf m,
const struct rte_ipv4_hdr ipv4_hdr,
uint16_t  l4_off 
)
inlinestatic

Compute the IPv4 UDP/TCP checksum of a packet.

Parameters
mThe pointer to the mbuf.
ipv4_hdrThe pointer to the contiguous IPv4 header.
l4_offThe offset in bytes to start L4 checksum.
Returns
The complemented checksum to set in the L4 header.

Definition at line 308 of file rte_ip4.h.

◆ rte_ipv4_udptcp_cksum_verify()

static int rte_ipv4_udptcp_cksum_verify ( const struct rte_ipv4_hdr ipv4_hdr,
const void *  l4_hdr 
)
inlinestatic

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_hdrThe pointer to the contiguous IPv4 header.
l4_hdrThe pointer to the beginning of the L4 header.
Returns
Return 0 if the checksum is correct, else -1.

Definition at line 340 of file rte_ip4.h.

◆ rte_ipv4_udptcp_cksum_mbuf_verify()

static int rte_ipv4_udptcp_cksum_mbuf_verify ( const struct rte_mbuf m,
const struct rte_ipv4_hdr ipv4_hdr,
uint16_t  l4_off 
)
inlinestatic

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
mThe pointer to the mbuf.
ipv4_hdrThe pointer to the contiguous IPv4 header.
l4_offThe offset in bytes to start L4 checksum.
Returns
Return 0 if the checksum is correct, else -1.

Definition at line 367 of file rte_ip4.h.