 /* Grab first address on interface. */ newdst = indev->ifa_list->ifa_local; 
redirect_target(struct sk_buff **pskb,		const struct net_device *in,		const struct net_device *out,		unsigned int hooknum,		const void *targinfo,		void *userinfo){	struct ip_conntrack *ct;	enum ip_conntrack_info ctinfo;	u_int32_t newdst;	const struct ip_nat_multi_range_compat *mr = targinfo;	struct ip_nat_range newrange;	IP_NF_ASSERT(hooknum == NF_IP_PRE_ROUTING		     || hooknum == NF_IP_LOCAL_OUT);	ct = ip_conntrack_get(*pskb, &ctinfo);	IP_NF_ASSERT(ct && (ctinfo == IP_CT_NEW || ctinfo == IP_CT_RELATED));	/* Local packets: make them go to loopback */	if (hooknum == NF_IP_LOCAL_OUT)		newdst = htonl(0x7F000001);	else {		struct in_device *indev;		/* Device might not have an associated in_device. */		indev = (struct in_device *)(*pskb)->dev->ip_ptr;		if (indev == NULL || indev->ifa_list == NULL)			return NF_DROP;		/* Grab first address on interface. */		newdst = indev->ifa_list->ifa_local;	}	/* Transfer from original range. */	newrange = ((struct ip_nat_range)		{ mr->range[0].flags | IP_NAT_RANGE_MAP_IPS,		  newdst, newdst,		  mr->range[0].min, mr->range[0].max });	/* Hand modified range to generic setup. */	return ip_nat_setup_info(ct, &newrange, hooknum);}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/cd0bf2d796ebb51c346b1ed4208cdbfd86e98a61/ipt_REDIRECT.c/buggy/net/ipv4/netfilter/ipt_REDIRECT.c