1 /* oneC_sum() - One complement's checksum Author: Kees J. Bot
3 * See RFC 1071, "Computing the Internet checksum"
7 #include <net/gen/oneCsum.h>
9 u16_t
oneC_sum(u16_t prev
, void *data
, size_t size
)
21 swap
= ((size_t) dptr
& 1);
23 sum
= ((sum
& 0xFF) << 8) | ((sum
& 0xFF00) >> 8);
25 ((u8_t
*) &word
)[0]= 0;
26 ((u8_t
*) &word
)[1]= dptr
[0];
34 sum
+= (u32_t
) ((u16_t
*) dptr
)[0]
35 + (u32_t
) ((u16_t
*) dptr
)[1]
36 + (u32_t
) ((u16_t
*) dptr
)[2]
37 + (u32_t
) ((u16_t
*) dptr
)[3];
43 sum
+= (u32_t
) ((u16_t
*) dptr
)[0];
49 ((u8_t
*) &word
)[0]= dptr
[0];
50 ((u8_t
*) &word
)[1]= 0;
54 sum
= (sum
& 0xFFFF) + (sum
>> 16);
55 if (sum
> 0xFFFF) sum
++;
58 sum
= ((sum
& 0xFF) << 8) | ((sum
& 0xFF00) >> 8);