@@ -127,9 +127,9 @@ static inline __sum16 build_ip_csum(struct iphdr *iph)
return csum_fold(sum);
}
-static inline __sum16 csum_tcpudp_magic(__be32 saddr, __be32 daddr,
- __u32 len, __u8 proto,
- __wsum csum)
+static inline __sum16 build_ipv4_pseudo_header_csum(__be32 saddr, __be32 daddr,
+ __u32 len, __u8 proto,
+ __wsum csum)
{
__u64 s = csum;
@@ -142,10 +142,10 @@ static inline __sum16 csum_tcpudp_magic(__be32 saddr, __be32 daddr,
return csum_fold((__u32)s);
}
-static inline __sum16 csum_ipv6_magic(const struct in6_addr *saddr,
- const struct in6_addr *daddr,
- __u32 len, __u8 proto,
- __wsum csum)
+static inline __sum16
+build_ipv6_pseudo_header_csum(const struct in6_addr *saddr,
+ const struct in6_addr *daddr, __u32 len,
+ __u8 proto, __wsum csum)
{
__u64 s = csum;
int i;
@@ -180,8 +180,9 @@ static int generate_packet(struct xsk *xsk, __u16 dst_port)
udph->source = htons(UDP_SOURCE_PORT);
udph->dest = htons(dst_port);
udph->len = htons(sizeof(*udph) + UDP_PAYLOAD_BYTES);
- udph->check = ~csum_tcpudp_magic(iph->saddr, iph->daddr,
- ntohs(udph->len), IPPROTO_UDP, 0);
+ udph->check = ~build_ipv4_pseudo_header_csum(iph->saddr, iph->daddr,
+ ntohs(udph->len),
+ IPPROTO_UDP, 0);
memset(udph + 1, 0xAA, UDP_PAYLOAD_BYTES);
@@ -378,11 +378,15 @@ static void ping_pong(struct xsk *xsk, void *rx_packet, clockid_t clock_id)
want_csum = udph->check;
if (ip6h)
- udph->check = ~csum_ipv6_magic(&ip6h->saddr, &ip6h->daddr,
- ntohs(udph->len), IPPROTO_UDP, 0);
+ udph->check = ~build_ipv6_pseudo_header_csum(&ip6h->saddr,
+ &ip6h->daddr,
+ ntohs(udph->len),
+ IPPROTO_UDP, 0);
else
- udph->check = ~csum_tcpudp_magic(iph->saddr, iph->daddr,
- ntohs(udph->len), IPPROTO_UDP, 0);
+ udph->check = ~build_ipv4_pseudo_header_csum(iph->saddr,
+ iph->daddr,
+ ntohs(udph->len),
+ IPPROTO_UDP, 0);
meta->flags |= XDP_TXMD_FLAGS_CHECKSUM;
if (iph)
network_helpers.h provides helpers to compute checksum for pseudo headers but no helpers to compute the global checksums. Before adding those, rename the pseudo header checksum helper to clarify their role. Signed-off-by: Alexis Lothoré (eBPF Foundation) <alexis.lothore@bootlin.com> --- Changes in v2: - new patch --- tools/testing/selftests/bpf/network_helpers.h | 14 +++++++------- tools/testing/selftests/bpf/prog_tests/xdp_metadata.c | 5 +++-- tools/testing/selftests/bpf/xdp_hw_metadata.c | 12 ++++++++---- 3 files changed, 18 insertions(+), 13 deletions(-)