[282] in linux-net channel archive

home help back first fref pref prev next nref lref last post

Final comprehensive consolidated inet checksum kernel patch

daemon@ATHENA.MIT.EDU (Tom May)
Sun May 7 02:50:07 1995

Date: Sat, 6 May 1995 22:57:14 -0700
From: ftom@netcom.com (Tom May)
To: linux-net@vger.rutgers.edu

I realized while doing the patches for udp_check() and ip_fast_csum()
that it would be a good idea to consolidate the inet checksum code
because it's all basically the same.  Here is a patch which adds some
new inline asm functions to ip.h, and patches ip_compute_csum in ip.c,
tcp_check tcp.c, and udp_check in udp.c so that they are one-liners
built on top of the inline asms in ip.h.  For ip_fast_csum it was
better to use a different approach which is optimized for small sizes.

I have included my test code to make it easy for the next person to
hack these routines even further.  I have also included timing results
from my 486DX2/66 and P90 systems.

This patch wants to go on top of a clean 1.2.8 system.

begin 644 checksum.patch.tar.gz
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
'B!W9`,@``.I2
`
end

That's really all.
Tom.

home help back first fref pref prev next nref lref last post