u_int32_t Checksum(Packet *iPkt,u_int32_t pktlen) { if( (iPkt == NULL) || pktlen == 0) { /* XXX */ return 1; } if(iPkt->iph) { if(IS_IP4(iPkt)) { ip_checksum((void *)iPkt->iph, (pktlen - ((void *) iPkt->iph - (void *)iPkt->pkt))); } else if(IS_IP6(iPkt)) { ip6_checksum((void *)iPkt->iph, (pktlen - ((void *) iPkt->iph - (void *)iPkt->pkt))); } else { goto cksum_err; } } return 0; cksum_err: printf("[%s()]: Encountered an error while running checksum against a packet \n", __FUNCTION__); return 1; }
void inet_checksum(uint16_t eth_type, void *buf, size_t len) { if (eth_type == ETH_TYPE_IP) { return ip_checksum(buf, len); } else if (eth_type == ETH_TYPE_IPV6) { return ip6_checksum(buf, len); } }