TCP Checksums in mbufs
Lowell Gilbert
lgusenet at be-well.ilk.org
Mon Jan 8 22:24:03 UTC 2007
Julian Elischer <julian at elischer.org> writes:
> 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.
Actually, it is as easy as that (once you handle the possible
overflow). And it's exactly the way this kind of case is usually
handled.
> 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 :-)
RFC 1071, but that doesn't include the code. Just the one-sentence
explanation of what to do. [And several more sentences of
explanation...]
More information about the freebsd-hackers
mailing list