TCP Checksums in mbufs

Julian Elischer julian at
Mon Jan 8 22:00:22 UTC 2007

Lee Brotherston wrote:
> Hi,
> I have a bit of code I have written that uses pfil to access network
> traffic as it passes between interfaces on a FreeBSD router.  One of
> the functions it performs is some incredibly basic rewrites of certain
> packets (keeping the same length, so no issues about sequence
> numbers), but it does alter the payload.
> I just wanted to check what is the "proper" way to be going about
> recalculating the checksums on the packet?  I can write a function to
> do this and write this into the packet stored in the mbuf directly,
> however I wasn't sure if there was a more acceptable method such as
> flagging it to be re-checksum'd as it's routed, or to offload the
> computation to the NIC or something?
> Any thoughts, suggestions, etc very welcome!
> By the way, I'm not subscribed to the list right now, so I'd
> appreciate it if people could CC me on replies.
> Many thanks
>   Lee

there is an algorythm to recalculate the tcp/ip
checksum when you replace a byte. you subtract the old value from the 
csum and add the new one, but not quite a as easy as that.

I think it's given in one of the RFCs but  I think it may also
be used in the tcpmss port, or possibly the mss fixup code in ppp.
I know I've used it somewhere but forget where :-)

More information about the freebsd-hackers mailing list