Posted to tcl by kbk at Thu Oct 22 16:07:06 GMT 2009view pretty
proc inet_cksum8_kbk {data} { set sum 0 binary scan $data cu* x if {[llength $x] & 1} { lappend x 0 } foreach {v w} $x { set sum [expr {$sum + ($v << 8) + $w}] set sum [expr {($sum & 0xffff) + ($sum >> 16)}] } return [expr {(-1-$sum) & 0xffff}] } proc inet_cksum16_kbk {data} { binary scan $data\0 Su* x set sum 0 foreach w $x { incr sum $w set sum [expr {($sum & 0xffff) + ($sum >> 16)}] } return [expr {(-1-$sum) & 0xffff}] }