Posted to tcl by kbk at Thu Oct 22 16:14:20 GMT 2009view pretty

proc inet_cksum32_kbk {data} {
    binary scan $data\0\0\0 Iu* x
    set sum 0
    foreach w $x {
	incr sum $w
	set sum [expr {($sum & 0xffffffff) + ($sum >> 32)}]
    }
    set sum [expr {($sum & 0xffff) + ($sum >> 16)}]
    set sum [expr {($sum & 0xffff) + ($sum >> 16)}]
    return [expr {(-1-$sum) & 0xffff}]
}