On 11/15/24 16:54, Stanislav Fomichev wrote:
On 11/14, Alexis Lothoré (eBPF Foundation) wrote:
+static inline __sum16 build_udp_v4_csum(const struct iphdr *iph, __u8 l4_proto,
__u16 l4_len, const void *l4_start,
int num_words)
+{
- unsigned long pseudo_sum;
- int num_u16 = sizeof(iph->saddr); /* halfwords: twice byte len */
- pseudo_sum = add_csum_hword((void *)&iph->saddr, num_u16);
- pseudo_sum += htons(l4_proto);
- pseudo_sum += l4_len;
- pseudo_sum += add_csum_hword(l4_start, num_words);
- return csum_fold(pseudo_sum);
I was expecting to see a call to csum_tcpudp_magic here. And csum_ipv6_magic down below. These build pseudo header csum, so no need to manually do it again.
I initially tried to fit csum_tcpudp_magic here and did not manage to make a valid UDP checksum, but after more attempts, it looks like I had a misunderstanding this checksum computation. I am now able to used csum_tcpudp_magic in build_udp_v4_csum, it will be fixed in the next revision :)
Thanks,
Alexis