RHX@CORNELLC.CCS.CORNELL.EDU (Dick Cogger) (04/07/88)
Probably, the following suggestion has been discussed in the past, but I haven't seen a reference: Why not offload JUST the IP and TCP checksumming to a Front End Processor (or controller board)? Doing so would require code operating at a lower layer to "peek" at fields deeper in the packet, and protocol layer-bigots may object, but it should work. For incoming packets, if the lap-type is IP (or the SNAP, etc.) then checksum the header-- if bad drop the packet. If the IP-type is TCP, checksum the packet; if bad drop it. In general, this is what the higher layer in the host is going to do anyway. If you trust the channel or dualported memory used to get the packet from the controller board, you could then rely on getting only good (in terms of checksums) packets. For outgoing packets, the controller could make the same sort of tests and calculate and fill in checksums only if the host had left them as zero. In both cases, the host code could (re)do the checksumming if it wanted to. In any case, the programming interface to the host would not be complicated (tcp, udp socket clients; multiple boards, etc.), but a major source of host overhead would be offloaded. Of course, the fast host processor might still be able to execute the checksum faster than a slow controller board. Dick Cogger RHX@CornellC.ccs.cornell.edu