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

  1. proc inet_cksum32_kbk {data} {
  2. binary scan $data\0\0\0 Iu* x
  3. set sum 0
  4. foreach w $x {
  5. incr sum $w
  6. set sum [expr {($sum & 0xffffffff) + ($sum >> 32)}]
  7. }
  8. set sum [expr {($sum & 0xffff) + ($sum >> 16)}]
  9. set sum [expr {($sum & 0xffff) + ($sum >> 16)}]
  10. return [expr {(-1-$sum) & 0xffff}]
  11. }