64 |
lwip_standard_chksum(void *dataptr, int len) |
lwip_standard_chksum(void *dataptr, int len) |
65 |
{ |
{ |
66 |
u32_t acc; |
u32_t acc; |
67 |
LWIP_DEBUGF(INET_DEBUG, ("lwip_chksum(%p, %d)\n", (void *)dataptr, len)); |
LWIP_DEBUGF(INET_DEBUG, ("lwip_chksum(%p, %"S16_F")\n", (void *)dataptr, len)); |
68 |
|
|
69 |
/* iterate by two bytes at once */ |
/* iterate by two bytes at once */ |
70 |
for(acc = 0; len > 1; len -= 2) { |
for(acc = 0; len > 1; len -= 2) { |
82 |
/* add up any last odd byte */ |
/* add up any last odd byte */ |
83 |
if (len == 1) { |
if (len == 1) { |
84 |
acc += htons((u16_t)((*(u8_t *)dataptr) & 0xff) << 8); |
acc += htons((u16_t)((*(u8_t *)dataptr) & 0xff) << 8); |
85 |
LWIP_DEBUGF(INET_DEBUG, ("inet: chksum: odd byte %d\n", (unsigned int)(*(u8_t *)dataptr))); |
LWIP_DEBUGF(INET_DEBUG, ("inet: chksum: odd byte %"U16_F"\n", (u16_t)(*(u8_t *)dataptr))); |
86 |
} else { |
} else { |
87 |
LWIP_DEBUGF(INET_DEBUG, ("inet: chksum: no odd byte\n")); |
LWIP_DEBUGF(INET_DEBUG, ("inet: chksum: no odd byte\n")); |
88 |
} |
} |
116 |
LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): checksumming pbuf %p (has next %p) \n", |
LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): checksumming pbuf %p (has next %p) \n", |
117 |
(void *)q, (void *)q->next)); |
(void *)q, (void *)q->next)); |
118 |
acc += LWIP_CHKSUM(q->payload, q->len); |
acc += LWIP_CHKSUM(q->payload, q->len); |
119 |
/*LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): unwrapped lwip_chksum()=%lx \n", acc));*/ |
/*LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): unwrapped lwip_chksum()=%"X32_F" \n", acc));*/ |
120 |
while (acc >> 16) { |
while (acc >> 16) { |
121 |
acc = (acc & 0xffffUL) + (acc >> 16); |
acc = (acc & 0xffffUL) + (acc >> 16); |
122 |
} |
} |
124 |
swapped = 1 - swapped; |
swapped = 1 - swapped; |
125 |
acc = ((acc & 0xff) << 8) | ((acc & 0xff00UL) >> 8); |
acc = ((acc & 0xff) << 8) | ((acc & 0xff00UL) >> 8); |
126 |
} |
} |
127 |
/*LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): wrapped lwip_chksum()=%lx \n", acc));*/ |
/*LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): wrapped lwip_chksum()=%"X32_F" \n", acc));*/ |
128 |
} |
} |
129 |
|
|
130 |
if (swapped) { |
if (swapped) { |
140 |
while (acc >> 16) { |
while (acc >> 16) { |
141 |
acc = (acc & 0xffffUL) + (acc >> 16); |
acc = (acc & 0xffffUL) + (acc >> 16); |
142 |
} |
} |
143 |
LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): pbuf chain lwip_chksum()=%lx\n", acc)); |
LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): pbuf chain lwip_chksum()=%"X32_F"\n", acc)); |
144 |
return (u16_t)~(acc & 0xffffUL); |
return (u16_t)~(acc & 0xffffUL); |
145 |
} |
} |
146 |
|
|
225 |
*/ |
*/ |
226 |
/* */ |
/* */ |
227 |
/* inet_aton */ |
/* inet_aton */ |
228 |
int inet_aton(const char *cp, struct in_addr *addr) |
s8_t |
229 |
|
inet_aton(const char *cp, struct in_addr *addr) |
230 |
{ |
{ |
231 |
u32_t val; |
u32_t val; |
232 |
int base, n; |
s32_t base, n; |
233 |
char c; |
char c; |
234 |
u32_t parts[4]; |
u32_t parts[4]; |
235 |
u32_t* pp = parts; |
u32_t* pp = parts; |
253 |
} |
} |
254 |
for (;;) { |
for (;;) { |
255 |
if (isdigit(c)) { |
if (isdigit(c)) { |
256 |
val = (val * base) + (int)(c - '0'); |
val = (val * base) + (s16_t)(c - '0'); |
257 |
c = *++cp; |
c = *++cp; |
258 |
} else if (base == 16 && isxdigit(c)) { |
} else if (base == 16 && isxdigit(c)) { |
259 |
val = (val << 4) | |
val = (val << 4) | |
260 |
(int)(c + 10 - (islower(c) ? 'a' : 'A')); |
(s16_t)(c + 10 - (islower(c) ? 'a' : 'A')); |
261 |
c = *++cp; |
c = *++cp; |
262 |
} else |
} else |
263 |
break; |
break; |