@@ -38,8 +38,9 @@ uint32_t net_checksum_add_cont(int len, uint8_t *buf, int seq)
uint16_t net_checksum_finish(uint32_t sum)
{
- while (sum>>16)
- sum = (sum & 0xFFFF)+(sum >> 16);
+ while (sum >> 16) {
+ sum = (sum & 0xFFFF) + (sum >> 16);
+ }
return ~sum;
}
@@ -63,22 +64,23 @@ void net_checksum_calculate(uint8_t *data, int length)
if (length < 14 + 20) {
return;
}
+ if ((data[14] & 0xf0) != 0x40) {
+ return; /* not IPv4 */
+ }
- if ((data[14] & 0xf0) != 0x40)
- return; /* not IPv4 */
hlen = (data[14] & 0x0f) * 4;
plen = (data[16] << 8 | data[17]) - hlen;
proto = data[23];
switch (proto) {
case PROTO_TCP:
- csum_offset = 16;
- break;
+ csum_offset = 16;
+ break;
case PROTO_UDP:
- csum_offset = 6;
- break;
+ csum_offset = 6;
+ break;
default:
- return;
+ return;
}
if (plen < csum_offset + 2 || plen + hlen >= length) {