61 |
} |
} |
62 |
|
|
63 |
/* add up any odd byte */ |
/* add up any odd byte */ |
64 |
if(len == 1) { |
if (len == 1) { |
65 |
acc += htons((u16_t)((*(u8_t *)dataptr) & 0xff) << 8); |
acc += htons((u16_t)((*(u8_t *)dataptr) & 0xff) << 8); |
66 |
DEBUGF(INET_DEBUG, ("inet: chksum: odd byte %d\n", *(u8_t *)dataptr)); |
DEBUGF(INET_DEBUG, ("inet: chksum: odd byte %d\n", *(u8_t *)dataptr)); |
67 |
} else { |
} else { |
69 |
} |
} |
70 |
acc = (acc >> 16) + (acc & 0xffffUL); |
acc = (acc >> 16) + (acc & 0xffffUL); |
71 |
|
|
72 |
if((acc & 0xffff0000) != 0) { |
if ((acc & 0xffff0000) != 0) { |
73 |
acc = (acc >> 16) + (acc & 0xffffUL); |
acc = (acc >> 16) + (acc & 0xffffUL); |
74 |
} |
} |
75 |
|
|
97 |
DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): checksumming pbuf %p (has next %p) \n", (void *) q, (void *)q->next)); |
DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): checksumming pbuf %p (has next %p) \n", (void *) q, (void *)q->next)); |
98 |
acc += lwip_chksum(q->payload, q->len); |
acc += lwip_chksum(q->payload, q->len); |
99 |
/*DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): unwrapped lwip_chksum()=%lx \n", acc));*/ |
/*DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): unwrapped lwip_chksum()=%lx \n", acc));*/ |
100 |
while(acc >> 16) { |
while (acc >> 16) { |
101 |
acc = (acc & 0xffffUL) + (acc >> 16); |
acc = (acc & 0xffffUL) + (acc >> 16); |
102 |
} |
} |
103 |
if(q->len % 2 != 0) { |
if (q->len % 2 != 0) { |
104 |
swapped = 1 - swapped; |
swapped = 1 - swapped; |
105 |
acc = ((acc & 0xff) << 8) | ((acc & 0xff00UL) >> 8); |
acc = ((acc & 0xff) << 8) | ((acc & 0xff00UL) >> 8); |
106 |
} |
} |
107 |
/*DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): wrapped lwip_chksum()=%lx \n", acc));*/ |
/*DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): wrapped lwip_chksum()=%lx \n", acc));*/ |
108 |
} |
} |
109 |
|
|
110 |
if(swapped) { |
if (swapped) { |
111 |
acc = ((acc & 0xff) << 8) | ((acc & 0xff00UL) >> 8); |
acc = ((acc & 0xff) << 8) | ((acc & 0xff00UL) >> 8); |
112 |
} |
} |
113 |
acc += (src->addr & 0xffffUL); |
acc += (src->addr & 0xffffUL); |
117 |
acc += (u32_t)htons((u16_t)proto); |
acc += (u32_t)htons((u16_t)proto); |
118 |
acc += (u32_t)htons(proto_len); |
acc += (u32_t)htons(proto_len); |
119 |
|
|
120 |
while(acc >> 16) { |
while (acc >> 16) { |
121 |
acc = (acc & 0xffffUL) + (acc >> 16); |
acc = (acc & 0xffffUL) + (acc >> 16); |
122 |
} |
} |
123 |
DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): pbuf chain lwip_chksum()=%lx\n", acc)); |
DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): pbuf chain lwip_chksum()=%lx\n", acc)); |
136 |
u32_t acc; |
u32_t acc; |
137 |
|
|
138 |
acc = lwip_chksum(dataptr, len); |
acc = lwip_chksum(dataptr, len); |
139 |
while(acc >> 16) { |
while (acc >> 16) { |
140 |
acc = (acc & 0xffff) + (acc >> 16); |
acc = (acc & 0xffff) + (acc >> 16); |
141 |
} |
} |
142 |
return ~(acc & 0xffff); |
return ~(acc & 0xffff); |
153 |
swapped = 0; |
swapped = 0; |
154 |
for(q = p; q != NULL; q = q->next) { |
for(q = p; q != NULL; q = q->next) { |
155 |
acc += lwip_chksum(q->payload, q->len); |
acc += lwip_chksum(q->payload, q->len); |
156 |
while(acc >> 16) { |
while (acc >> 16) { |
157 |
acc = (acc & 0xffffUL) + (acc >> 16); |
acc = (acc & 0xffffUL) + (acc >> 16); |
158 |
} |
} |
159 |
if(q->len % 2 != 0) { |
if (q->len % 2 != 0) { |
160 |
swapped = 1 - swapped; |
swapped = 1 - swapped; |
161 |
acc = (acc & 0x00ffUL << 8) | (acc & 0xff00UL >> 8); |
acc = (acc & 0x00ffUL << 8) | (acc & 0xff00UL >> 8); |
162 |
} |
} |
163 |
} |
} |
164 |
|
|
165 |
if(swapped) { |
if (swapped) { |
166 |
acc = ((acc & 0x00ffUL) << 8) | ((acc & 0xff00UL) >> 8); |
acc = ((acc & 0x00ffUL) << 8) | ((acc & 0xff00UL) >> 8); |
167 |
} |
} |
168 |
return ~(acc & 0xffffUL); |
return ~(acc & 0xffffUL); |