skb_postpull_rcsum(skb, skb->nh.raw, skb->h.raw - skb->nh.raw); 
int rawv6_rcv(struct sock *sk, struct sk_buff *skb){	struct inet_sock *inet = inet_sk(sk);	struct raw6_sock *rp = raw6_sk(sk);        if (!xfrm6_policy_check(sk, XFRM_POLICY_IN, skb)) {                kfree_skb(skb);                return NET_RX_DROP;        }	if (!rp->checksum)		skb->ip_summed = CHECKSUM_UNNECESSARY;	if (skb->ip_summed != CHECKSUM_UNNECESSARY) {		if (skb->ip_summed == CHECKSUM_HW) {			skb->ip_summed = CHECKSUM_UNNECESSARY;			if (csum_ipv6_magic(&skb->nh.ipv6h->saddr,					    &skb->nh.ipv6h->daddr,					    skb->len, inet->num, skb->csum)) {				LIMIT_NETDEBUG(			        printk(KERN_DEBUG "raw v6 hw csum failure.\n"));				skb->ip_summed = CHECKSUM_NONE;			}		}		if (skb->ip_summed == CHECKSUM_NONE)			skb->csum = ~csum_ipv6_magic(&skb->nh.ipv6h->saddr,						     &skb->nh.ipv6h->daddr,						     skb->len, inet->num, 0);	}	if (inet->hdrincl) {		if (skb->ip_summed != CHECKSUM_UNNECESSARY &&		    (unsigned short)csum_fold(skb_checksum(skb, 0, skb->len, skb->csum))) {			/* FIXME: increment a raw6 drops counter here */			kfree_skb(skb);			return 0;		}		skb->ip_summed = CHECKSUM_UNNECESSARY;	}	rawv6_rcv_skb(sk, skb);	return 0;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/97077c4a9868fce8ac151512cde5d24fc1144f24/raw.c/clean/net/ipv6/raw.c