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

-- 
Alexis Lothoré, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

Reply via email to