+
+ {
+ uint16_t rx_cksum = ntohs(udph->chksum), my_cksum;
+ vec_t cksum_vec[4];
+ uint32_t hdr[2];
+
+ udph->chksum = 0;
+
+ cksum_vec[0].ptr = (uint8_t *)(iph->ip6_src.s6_addr);
+ cksum_vec[0].len = 16;
+ cksum_vec[1].ptr = (uint8_t *)(iph->ip6_dst.s6_addr);
+ cksum_vec[1].len = 16;
+ cksum_vec[2].ptr = (uint8_t *)hdr;
+ cksum_vec[2].len = 8;
+ hdr[0] = iph->plen;
+ hdr[1] = htonl(IANA_UDP);
+ cksum_vec[3].ptr = payload;
+ cksum_vec[3].len = ntohs(iph->plen);
+
+ my_cksum = in_cksum(cksum_vec, 4);
+ printfUART("rx cksum: %x calc: %x\n", rx_cksum, my_cksum);
+ if (rx_cksum != my_cksum) {
+ BLIP_STATS_INCR(cksum);
+ return;
+ }
+ }
+
+ BLIP_STATS_INCR(rcvd);