#if defined(CONFIG_IP_NF_TARGET_MASQUERADE) || \ defined(CONFIG_IP_NF_TARGET_MASQUERADE_MODULE) /* this is ugly, but there is no other place where to put it */ conntrack->nat.masq_index = exp->master->nat.masq_index; #endif 
init_conntrack(const struct ip_conntrack_tuple *tuple,	       struct ip_conntrack_protocol *protocol,	       struct sk_buff *skb){	struct ip_conntrack *conntrack;	struct ip_conntrack_tuple repl_tuple;	size_t hash;	struct ip_conntrack_expect *exp;	if (!ip_conntrack_hash_rnd_initted) {		get_random_bytes(&ip_conntrack_hash_rnd, 4);		ip_conntrack_hash_rnd_initted = 1;	}	hash = hash_conntrack(tuple);	if (ip_conntrack_max	    && atomic_read(&ip_conntrack_count) >= ip_conntrack_max) {		/* Try dropping from this hash chain. */		if (!early_drop(&ip_conntrack_hash[hash])) {			if (net_ratelimit())				printk(KERN_WARNING				       "ip_conntrack: table full, dropping"				       " packet.\n");			return ERR_PTR(-ENOMEM);		}	}	if (!ip_ct_invert_tuple(&repl_tuple, tuple, protocol)) {		DEBUGP("Can't invert tuple.\n");		return NULL;	}	conntrack = kmem_cache_alloc(ip_conntrack_cachep, GFP_ATOMIC);	if (!conntrack) {		DEBUGP("Can't allocate conntrack.\n");		return ERR_PTR(-ENOMEM);	}	memset(conntrack, 0, sizeof(*conntrack));	atomic_set(&conntrack->ct_general.use, 1);	conntrack->ct_general.destroy = destroy_conntrack;	conntrack->tuplehash[IP_CT_DIR_ORIGINAL].tuple = *tuple;	conntrack->tuplehash[IP_CT_DIR_REPLY].tuple = repl_tuple;	if (!protocol->new(conntrack, skb)) {		kmem_cache_free(ip_conntrack_cachep, conntrack);		return NULL;	}	/* Don't set timer yet: wait for confirmation */	init_timer(&conntrack->timeout);	conntrack->timeout.data = (unsigned long)conntrack;	conntrack->timeout.function = death_by_timeout;	write_lock_bh(&ip_conntrack_lock);	exp = find_expectation(tuple);	if (exp) {		DEBUGP("conntrack: expectation arrives ct=%p exp=%p\n",			conntrack, exp);		/* Welcome, Mr. Bond.  We've been expecting you... */		__set_bit(IPS_EXPECTED_BIT, &conntrack->status);		conntrack->master = exp->master;#ifdef CONFIG_IP_NF_CONNTRACK_MARK		conntrack->mark = exp->master->mark;#endif		nf_conntrack_get(&conntrack->master->ct_general);		CONNTRACK_STAT_INC(expect_new);	} else {		conntrack->helper = ip_ct_find_helper(&repl_tuple);		CONNTRACK_STAT_INC(new);	}	/* Overload tuple linked list to put us in unconfirmed list. */	list_add(&conntrack->tuplehash[IP_CT_DIR_ORIGINAL].list, &unconfirmed);	atomic_inc(&ip_conntrack_count);	write_unlock_bh(&ip_conntrack_lock);	if (exp) {		if (exp->expectfn)			exp->expectfn(conntrack, exp);		ip_conntrack_expect_put(exp);	}	return &conntrack->tuplehash[IP_CT_DIR_ORIGINAL];}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/1f494c0e040b001cf844280910d04ba7ebdc2898/ip_conntrack_core.c/clean/net/ipv4/netfilter/ip_conntrack_core.c