Example #1
0
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;
}
Example #2
0
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);
    }
}