if (LOG_INVALID(IPPROTO_ICMP)) nf_log_packet(PF_INET, 0, skb, NULL, NULL, NULL, "ip_ct_icmp: bad HW ICMP checksum "); return -NF_ACCEPT; 
/* fall through */ 
icmp_error(struct sk_buff *skb, enum ip_conntrack_info *ctinfo,	   unsigned int hooknum){	struct icmphdr _ih, *icmph;	/* Not enough header? */	icmph = skb_header_pointer(skb, skb->nh.iph->ihl*4, sizeof(_ih), &_ih);	if (icmph == NULL) {		if (LOG_INVALID(IPPROTO_ICMP))			nf_log_packet(PF_INET, 0, skb, NULL, NULL, NULL,				      "ip_ct_icmp: short packet ");		return -NF_ACCEPT;	}	/* See ip_conntrack_proto_tcp.c */	if (hooknum != NF_IP_PRE_ROUTING)		goto checksum_skipped;	switch (skb->ip_summed) {	case CHECKSUM_HW:		if (!(u16)csum_fold(skb->csum)) 			break;		if (LOG_INVALID(IPPROTO_ICMP))			nf_log_packet(PF_INET, 0, skb, NULL, NULL, NULL,				      "ip_ct_icmp: bad HW ICMP checksum ");		return -NF_ACCEPT;	case CHECKSUM_NONE:		if ((u16)csum_fold(skb_checksum(skb, 0, skb->len, 0))) {			if (LOG_INVALID(IPPROTO_ICMP))				nf_log_packet(PF_INET, 0, skb, NULL, NULL, NULL,					      "ip_ct_icmp: bad ICMP checksum ");			return -NF_ACCEPT;		}	default:		break;	}checksum_skipped:	/*	 *	18 is the highest 'known' ICMP type. Anything else is a mystery	 *	 *	RFC 1122: 3.2.2  Unknown ICMP messages types MUST be silently	 *		  discarded.	 */	if (icmph->type > NR_ICMP_TYPES) {		if (LOG_INVALID(IPPROTO_ICMP))			nf_log_packet(PF_INET, 0, skb, NULL, NULL, NULL,				      "ip_ct_icmp: invalid ICMP type ");		return -NF_ACCEPT;	}	/* Need to track icmp error message? */	if (icmph->type != ICMP_DEST_UNREACH	    && icmph->type != ICMP_SOURCE_QUENCH	    && icmph->type != ICMP_TIME_EXCEEDED	    && icmph->type != ICMP_PARAMETERPROB	    && icmph->type != ICMP_REDIRECT)		return NF_ACCEPT;	return icmp_error_message(skb, ctinfo, hooknum);}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/fb286bb2990a107009dbf25f6ffebeb7df77f9be/ip_conntrack_proto_icmp.c/clean/net/ipv4/netfilter/ip_conntrack_proto_icmp.c