#include <stdint.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <cne_byteorder.h>
#include <pktmbuf.h>
Go to the source code of this file.
|
static uint8_t | cne_ipv4_hdr_len (const struct cne_ipv4_hdr *ipv4_hdr) |
|
static uint16_t | cne_raw_cksum (const void *buf, size_t len) |
|
static uint16_t | cne_raw_cksum_mbuf (const pktmbuf_t *m, uint32_t off, uint32_t len) |
|
static uint16_t | cne_ipv4_cksum (const struct cne_ipv4_hdr *ipv4_hdr) |
|
static uint16_t | cne_ipv4_phdr_cksum (const struct cne_ipv4_hdr *ipv4_hdr, uint64_t ol_flags) |
|
static uint16_t | __ipv4_udptcp_cksum (const struct cne_ipv4_hdr *ipv4_hdr, const void *l4_hdr) |
|
static uint16_t | cne_ipv4_udptcp_cksum (const struct cne_ipv4_hdr *ipv4_hdr, const void *l4_hdr) |
|
static int | cne_ipv4_udptcp_cksum_verify (const struct cne_ipv4_hdr *ipv4_hdr, const void *l4_hdr) |
|
static uint16_t | cne_ipv6_phdr_cksum (const struct cne_ipv6_hdr *ipv6_hdr, uint64_t ol_flags) |
|
static uint16_t | cne_ipv6_udptcp_cksum (const struct cne_ipv6_hdr *ipv6_hdr, const void *l4_hdr) |
|
static int | cne_ipv6_get_next_ext (const uint8_t *p, int proto, size_t *ext_len) |
|
IP-related defines
Definition in file cne_ip.h.
◆ CNE_IPV4
#define CNE_IPV4 |
( |
|
a, |
|
|
|
b, |
|
|
|
c, |
|
|
|
d |
|
) |
| ((uint32_t)(((a)&0xff) << 24) | (((b)&0xff) << 16) | (((c)&0xff) << 8) | ((d)&0xff)) |
◆ CNE_IPV4_MAX_PKT_LEN
#define CNE_IPV4_MAX_PKT_LEN 65535 |
Maximal IPv4 packet length (including a header)
Definition at line 51 of file cne_ip.h.
◆ CNE_IPV4_HDR_IHL_MASK
#define CNE_IPV4_HDR_IHL_MASK (0x0f) |
Internet header length mask for version_ihl field
Definition at line 54 of file cne_ip.h.
◆ CNE_IPV4_IHL_MULTIPLIER
#define CNE_IPV4_IHL_MULTIPLIER (4) |
Internet header length field multiplier (IHL field specifies overall header length in number of 4-byte words)
Definition at line 59 of file cne_ip.h.
◆ CNE_IPV4_ANY
#define CNE_IPV4_ANY ((uint32_t)0x00000000) |
◆ CNE_IPV4_LOOPBACK
#define CNE_IPV4_LOOPBACK ((uint32_t)0x7f000001) |
◆ CNE_IPV4_BROADCAST
#define CNE_IPV4_BROADCAST ((uint32_t)0xe0000000) |
◆ CNE_IPV4_ALLHOSTS_GROUP
#define CNE_IPV4_ALLHOSTS_GROUP ((uint32_t)0xe0000001) |
◆ CNE_IPV4_ALLRTRS_GROUP
#define CNE_IPV4_ALLRTRS_GROUP ((uint32_t)0xe0000002) |
◆ CNE_IPV4_MAX_LOCAL_GROUP
#define CNE_IPV4_MAX_LOCAL_GROUP ((uint32_t)0xe00000ff) |
224.0.0.255
Definition at line 86 of file cne_ip.h.
◆ CNE_IPV4_MIN_MCAST
#define CNE_IPV4_MIN_MCAST CNE_IPV4(224, 0, 0, 0) |
Minimal IPv4-multicast address
Definition at line 91 of file cne_ip.h.
◆ CNE_IPV4_MAX_MCAST
#define CNE_IPV4_MAX_MCAST CNE_IPV4(239, 255, 255, 255) |
Maximum IPv4 multicast address \
Definition at line 94 of file cne_ip.h.
◆ CNE_IS_IPV4_MCAST
check if IPv4 address is multicast
Definition at line 98 of file cne_ip.h.
◆ CNE_IPV6_MIN_MTU
#define CNE_IPV6_MIN_MTU 1280 |
Minimum MTU for IPv6, see RFC 8200.
Definition at line 390 of file cne_ip.h.
◆ CNE_IPV6_EHDR_MF_SHIFT
#define CNE_IPV6_EHDR_MF_SHIFT 0 |
IPv6 fragment extension header.
Definition at line 459 of file cne_ip.h.
◆ cne_ipv4_hdr_len()
static uint8_t cne_ipv4_hdr_len |
( |
const struct cne_ipv4_hdr * |
ipv4_hdr | ) |
|
|
inlinestatic |
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 113 of file cne_ip.h.
◆ cne_raw_cksum()
static uint16_t cne_raw_cksum |
( |
const void * |
buf, |
|
|
size_t |
len |
|
) |
| |
|
inlinestatic |
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 191 of file cne_ip.h.
◆ cne_raw_cksum_mbuf()
static uint16_t cne_raw_cksum_mbuf |
( |
const pktmbuf_t * |
m, |
|
|
uint32_t |
off, |
|
|
uint32_t |
len |
|
) |
| |
|
inlinestatic |
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. |
- Returns
- checksum value
Definition at line 212 of file cne_ip.h.
◆ cne_ipv4_cksum()
static uint16_t cne_ipv4_cksum |
( |
const struct cne_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_hdr | The pointer to the contiguous IPv4 header. |
- Returns
- The complemented checksum to set in the IP packet.
Definition at line 228 of file cne_ip.h.
◆ cne_ipv4_phdr_cksum()
static uint16_t cne_ipv4_phdr_cksum |
( |
const struct cne_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_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 254 of file cne_ip.h.
◆ __ipv4_udptcp_cksum()
static uint16_t __ipv4_udptcp_cksum |
( |
const struct cne_ipv4_hdr * |
ipv4_hdr, |
|
|
const void * |
l4_hdr |
|
) |
| |
|
inlinestatic |
Process the IPv4 UDP or TCP checksum.
The IP and layer 4 checksum must be set to 0 in the packet 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 IP packet.
Definition at line 294 of file cne_ip.h.
◆ cne_ipv4_udptcp_cksum()
static uint16_t cne_ipv4_udptcp_cksum |
( |
const struct cne_ipv4_hdr * |
ipv4_hdr, |
|
|
const void * |
l4_hdr |
|
) |
| |
|
inlinestatic |
Process the IPv4 UDP or TCP checksum.
The IP and layer 4 checksum must be set to 0 in the packet 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 IP packet.
Definition at line 329 of file cne_ip.h.
◆ cne_ipv4_udptcp_cksum_verify()
static int cne_ipv4_udptcp_cksum_verify |
( |
const struct cne_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_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 359 of file cne_ip.h.
◆ cne_ipv6_phdr_cksum()
static uint16_t cne_ipv6_phdr_cksum |
( |
const struct cne_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_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 409 of file cne_ip.h.
◆ cne_ipv6_udptcp_cksum()
static uint16_t cne_ipv6_udptcp_cksum |
( |
const struct cne_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_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 IP packet.
Definition at line 440 of file cne_ip.h.
◆ cne_ipv6_get_next_ext()
static int cne_ipv6_get_next_ext |
( |
const uint8_t * |
p, |
|
|
int |
proto, |
|
|
size_t * |
ext_len |
|
) |
| |
|
inlinestatic |
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 500 of file cne_ip.h.