UDP checksum problems after switching from kernel 2.4 to 2.6
maarten.wijnants at pandora.be
Fri Dec 17 16:48:52 CET 2004
I have written a libipq application that accepts QUEUEd packets from
userspace, checks them, and subsequently decides what to do with them. I
often change stuff inside a packet and then reinject it in the kernel
through ACCEPT. More specifically, I only need to do this for UDP packets.
As stated on the netfilter homepage, the checksum of a modified packet must
be recomputed before it is reinjected into kernelspace. So, every time I
change the content of a QUEUEd UDP packet, I recompute the IP checksum.
However, I just set the UDP checksum to 0 to save computation power.
This all worked fine on kernel version 2.4. However, I have just upgraded to
kernel 2.6, and all of a sudden my application doesn't work anymore.
Although I manually set the UDP checksum to 0 in my libipq userspace
application, the UDP packet arrives at its destination with an incorrect UDP
checksum. As a result, the UDP packet is dropped by the network stack of the
receiving machine. Is this an issue in kernel 2.6? In other words, do I need
to recalculate the UDP checksum in order to garantuee correct execution of
my application? Also, if this is the case, does anyone know an efficient
algoritm for this?
Thanks in advance for your help.
Expertisecentrum voor Digitale Media
Limburgs Universitair Centrum
Wetenschapspark 2 - 3590 Diepenbeek
Tel: +32 (0)11 268419 - Mobile: +32 (0)497 341848
E-mail: maarten.wijnants at luc.ac.be
More information about the netfilter-devel