DPDK  24.11.0
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.

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

struct __rte_aligned (2) rte_ipv4_hdr
 
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 __rte_experimental uint16_t rte_ipv4_cksum_simple (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_aligned()

struct __rte_aligned ( )

IPv4 Header

< version and header length

< header length

< version

< type of service

< length of packet

< packet ID

< fragmentation offset

< time to live

< protocol ID

< header checksum

< source address

< destination address

Definition at line 42 of file rte_ip4.h.

◆ 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_cksum_simple()

static __rte_experimental uint16_t rte_ipv4_cksum_simple ( const struct rte_ipv4_hdr *  ipv4_hdr)
inlinestatic
Warning
EXPERIMENTAL: this API may change without prior notice.

Process the IPv4 checksum of an IPv4 header without any extensions.

The checksum field does NOT have to be set by the caller, the field is skipped by the calculation.

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

Definition at line 184 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 222 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 286 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 343 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 375 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 402 of file rte_ip4.h.