git.droids-corp.org
/
dpdk.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
common/octeontx2: fix memory mapping API usage
[dpdk.git]
/
lib
/
librte_net
/
rte_ip.h
diff --git
a/lib/librte_net/rte_ip.h
b/lib/librte_net/rte_ip.h
index
a69430f
..
fcd1eb3
100644
(file)
--- a/
lib/librte_net/rte_ip.h
+++ b/
lib/librte_net/rte_ip.h
@@
-139,8
+139,11
@@
__rte_raw_cksum(const void *buf, size_t len, uint32_t sum)
}
/* if length is in odd bytes */
}
/* if length is in odd bytes */
- if (len == 1)
- sum += *((const uint8_t *)u16_buf);
+ if (len == 1) {
+ uint16_t left = 0;
+ *(uint8_t *)&left = *(const uint8_t *)u16_buf;
+ sum += left;
+ }
return sum;
}
return sum;
}
@@
-267,7
+270,7
@@
rte_ipv4_cksum(const struct rte_ipv4_hdr *ipv4_hdr)
{
uint16_t cksum;
cksum = rte_raw_cksum(ipv4_hdr, sizeof(struct rte_ipv4_hdr));
{
uint16_t cksum;
cksum = rte_raw_cksum(ipv4_hdr, sizeof(struct rte_ipv4_hdr));
- return (
cksum == 0xffff) ? cksum : (
uint16_t)~cksum;
+ return (uint16_t)~cksum;
}
/**
}
/**
@@
-324,8
+327,7
@@
rte_ipv4_phdr_cksum(const struct rte_ipv4_hdr *ipv4_hdr, uint64_t ol_flags)
* @param l4_hdr
* The pointer to the beginning of the L4 header.
* @return
* @param l4_hdr
* The pointer to the beginning of the L4 header.
* @return
- * The complemented checksum to set in the IP packet
- * or 0 on error
+ * The complemented checksum to set in the IP packet.
*/
static inline uint16_t
rte_ipv4_udptcp_cksum(const struct rte_ipv4_hdr *ipv4_hdr, const void *l4_hdr)
*/
static inline uint16_t
rte_ipv4_udptcp_cksum(const struct rte_ipv4_hdr *ipv4_hdr, const void *l4_hdr)
@@
-344,7
+346,12
@@
rte_ipv4_udptcp_cksum(const struct rte_ipv4_hdr *ipv4_hdr, const void *l4_hdr)
cksum = ((cksum & 0xffff0000) >> 16) + (cksum & 0xffff);
cksum = (~cksum) & 0xffff;
cksum = ((cksum & 0xffff0000) >> 16) + (cksum & 0xffff);
cksum = (~cksum) & 0xffff;
- if (cksum == 0)
+ /*
+ * Per RFC 768:If the computed checksum is zero for UDP,
+ * it is transmitted as all ones
+ * (the equivalent in one's complement arithmetic).
+ */
+ if (cksum == 0 && ipv4_hdr->next_proto_id == IPPROTO_UDP)
cksum = 0xffff;
return (uint16_t)cksum;
cksum = 0xffff;
return (uint16_t)cksum;
@@
-371,6
+378,8
@@
struct rte_ipv6_hdr {
#define RTE_IPV6_HDR_ECN_MASK (0x03 << RTE_IPV6_HDR_TC_SHIFT)
#define RTE_IPV6_HDR_ECN_CE RTE_IPV6_HDR_ECN_MASK
#define RTE_IPV6_HDR_ECN_MASK (0x03 << RTE_IPV6_HDR_TC_SHIFT)
#define RTE_IPV6_HDR_ECN_CE RTE_IPV6_HDR_ECN_MASK
+#define RTE_IPV6_MIN_MTU 1280 /**< Minimum MTU for IPv6, see RFC 8200. */
+
/**
* Process the pseudo-header checksum of an IPv6 header.
*
/**
* Process the pseudo-header checksum of an IPv6 header.
*
@@
-436,7
+445,12
@@
rte_ipv6_udptcp_cksum(const struct rte_ipv6_hdr *ipv6_hdr, const void *l4_hdr)
cksum = ((cksum & 0xffff0000) >> 16) + (cksum & 0xffff);
cksum = (~cksum) & 0xffff;
cksum = ((cksum & 0xffff0000) >> 16) + (cksum & 0xffff);
cksum = (~cksum) & 0xffff;
- if (cksum == 0)
+ /*
+ * Per RFC 768: If the computed checksum is zero for UDP,
+ * it is transmitted as all ones
+ * (the equivalent in one's complement arithmetic).
+ */
+ if (cksum == 0 && ipv6_hdr->proto == IPPROTO_UDP)
cksum = 0xffff;
return (uint16_t)cksum;
cksum = 0xffff;
return (uint16_t)cksum;