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(-)
diff --git a/tools/testing/selftests/bpf/network_helpers.h b/tools/testing/selftests/bpf/network_helpers.h index c9b72960c651ab9fb249f6eb9e153b8416b7a488..6d1ae56080c56a65c437899c32566f0e4c496c33 100644 --- a/tools/testing/selftests/bpf/network_helpers.h +++ b/tools/testing/selftests/bpf/network_helpers.h @@ -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; diff --git a/tools/testing/selftests/bpf/prog_tests/xdp_metadata.c b/tools/testing/selftests/bpf/prog_tests/xdp_metadata.c index 7f8e161655336127e5bd7a573d1a09db85a92f53..0e69390ac0c2d8959c614e7d29fea1c31910cf9b 100644 --- a/tools/testing/selftests/bpf/prog_tests/xdp_metadata.c +++ b/tools/testing/selftests/bpf/prog_tests/xdp_metadata.c @@ -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);
diff --git a/tools/testing/selftests/bpf/xdp_hw_metadata.c b/tools/testing/selftests/bpf/xdp_hw_metadata.c index 6f9956eed797f30b9611596909ef2954654eab18..0ef3c020cc9f77a0a149859493468313071ad66b 100644 --- a/tools/testing/selftests/bpf/xdp_hw_metadata.c +++ b/tools/testing/selftests/bpf/xdp_hw_metadata.c @@ -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)