if (entry->skb->ip_summed == CHECKSUM_HW && (*errp = skb_checksum_help(entry->skb, entry->info->outdev == NULL))) { read_unlock_bh(&queue_lock); return NULL; } 
ipq_build_packet_message(struct ipq_queue_entry *entry, int *errp){	unsigned char *old_tail;	size_t size = 0;	size_t data_len = 0;	struct sk_buff *skb;	struct ipq_packet_msg *pmsg;	struct nlmsghdr *nlh;	read_lock_bh(&queue_lock);		switch (copy_mode) {	case IPQ_COPY_META:	case IPQ_COPY_NONE:		size = NLMSG_SPACE(sizeof(*pmsg));		data_len = 0;		break;		case IPQ_COPY_PACKET:		if (copy_range == 0 || copy_range > entry->skb->len)			data_len = entry->skb->len;		else			data_len = copy_range;				size = NLMSG_SPACE(sizeof(*pmsg) + data_len);		break;		default:		*errp = -EINVAL;		read_unlock_bh(&queue_lock);		return NULL;	}	read_unlock_bh(&queue_lock);	skb = alloc_skb(size, GFP_ATOMIC);	if (!skb)		goto nlmsg_failure;			old_tail= skb->tail;	nlh = NLMSG_PUT(skb, 0, 0, IPQM_PACKET, size - sizeof(*nlh));	pmsg = NLMSG_DATA(nlh);	memset(pmsg, 0, sizeof(*pmsg));	pmsg->packet_id       = (unsigned long )entry;	pmsg->data_len        = data_len;	pmsg->timestamp_sec   = entry->skb->stamp.tv_sec;	pmsg->timestamp_usec  = entry->skb->stamp.tv_usec;	pmsg->mark            = entry->skb->nfmark;	pmsg->hook            = entry->info->hook;	pmsg->hw_protocol     = entry->skb->protocol;		if (entry->info->indev)		strcpy(pmsg->indev_name, entry->info->indev->name);	else		pmsg->indev_name[0] = '\0';		if (entry->info->outdev)		strcpy(pmsg->outdev_name, entry->info->outdev->name);	else		pmsg->outdev_name[0] = '\0';		if (entry->info->indev && entry->skb->dev) {		pmsg->hw_type = entry->skb->dev->type;		if (entry->skb->dev->hard_header_parse)			pmsg->hw_addrlen =				entry->skb->dev->hard_header_parse(entry->skb,				                                   pmsg->hw_addr);	}		if (data_len)		if (skb_copy_bits(entry->skb, 0, pmsg->payload, data_len))			BUG();			nlh->nlmsg_len = skb->tail - old_tail;	return skb;nlmsg_failure:	if (skb)		kfree_skb(skb);	*errp = -EINVAL;	printk(KERN_ERR "ip_queue: error creating packet message\n");	return NULL;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/66a79a19a7c582efd99bb143c3a59fbda006eb39/ip_queue.c/clean/net/ipv4/netfilter/ip_queue.c