status = queue_handler[pf].outfn(*skb, info, queuenum, queue_handler[pf].data); 
status = queue_handler[pf]->outfn(*skb, info, queuenum, queue_handler[pf]->data); 
int nf_queue(struct sk_buff **skb, 	     struct list_head *elem, 	     int pf, unsigned int hook,	     struct net_device *indev,	     struct net_device *outdev,	     int (*okfn)(struct sk_buff *),	     unsigned int queuenum){	int status;	struct nf_info *info;#ifdef CONFIG_BRIDGE_NETFILTER	struct net_device *physindev = NULL;	struct net_device *physoutdev = NULL;#endif	/* QUEUE == DROP if noone is waiting, to be safe. */	read_lock(&queue_handler_lock);	if (!queue_handler[pf].outfn) {		read_unlock(&queue_handler_lock);		kfree_skb(*skb);		return 1;	}	info = kmalloc(sizeof(*info)+queue_rerouter[pf].rer_size, GFP_ATOMIC);	if (!info) {		if (net_ratelimit())			printk(KERN_ERR "OOM queueing packet %p\n",			       *skb);		read_unlock(&queue_handler_lock);		kfree_skb(*skb);		return 1;	}	*info = (struct nf_info) { 		(struct nf_hook_ops *)elem, pf, hook, indev, outdev, okfn };	/* If it's going away, ignore hook. */	if (!try_module_get(info->elem->owner)) {		read_unlock(&queue_handler_lock);		kfree(info);		return 0;	}	/* Bump dev refs so they don't vanish while packet is out */	if (indev) dev_hold(indev);	if (outdev) dev_hold(outdev);#ifdef CONFIG_BRIDGE_NETFILTER	if ((*skb)->nf_bridge) {		physindev = (*skb)->nf_bridge->physindev;		if (physindev) dev_hold(physindev);		physoutdev = (*skb)->nf_bridge->physoutdev;		if (physoutdev) dev_hold(physoutdev);	}#endif	if (queue_rerouter[pf].save)		queue_rerouter[pf].save(*skb, info);	status = queue_handler[pf].outfn(*skb, info, queuenum,					 queue_handler[pf].data);	if (status >= 0 && queue_rerouter[pf].reroute)		status = queue_rerouter[pf].reroute(skb, info);	read_unlock(&queue_handler_lock);	if (status < 0) {		/* James M doesn't say fuck enough. */		if (indev) dev_put(indev);		if (outdev) dev_put(outdev);#ifdef CONFIG_BRIDGE_NETFILTER		if (physindev) dev_put(physindev);		if (physoutdev) dev_put(physoutdev);#endif		module_put(info->elem->owner);		kfree(info);		kfree_skb(*skb);		return 1;	}	return 1;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/bbd86b9fc469b7e91dc7444e6abb8930811d79cb/nf_queue.c/clean/net/netfilter/nf_queue.c