123456789101112131415161718192021222324252627282930313233343536 |
- #include "libbb.h"
- uint16_t FAST_FUNC inet_cksum(uint16_t *addr, int nleft)
- {
-
- unsigned sum = 0;
- while (nleft > 1) {
- sum += *addr++;
- nleft -= 2;
- }
-
- if (nleft == 1) {
- if (BB_LITTLE_ENDIAN)
- sum += *(uint8_t*)addr;
- else
- sum += *(uint8_t*)addr << 8;
- }
-
- sum = (sum >> 16) + (sum & 0xffff);
- sum += (sum >> 16);
- return (uint16_t)~sum;
- }
|