|| ctinfo == IP_CT_IS_REPLY+IP_CT_IS_REPLY)) 
|| ctinfo == IP_CT_RELATED+IP_CT_IS_REPLY)) 
target(struct sk_buff **pskb,       const struct net_device *in,       const struct net_device *out,       unsigned int hooknum,       const void *targinfo,       void *userinfo){	const struct ipt_clusterip_tgt_info *cipinfo = targinfo;	enum ip_conntrack_info ctinfo;	struct ip_conntrack *ct = ip_conntrack_get((*pskb), &ctinfo);	u_int32_t hash;	/* don't need to clusterip_config_get() here, since refcount	 * is only decremented by destroy() - and ip_tables guarantees	 * that the ->target() function isn't called after ->destroy() */	if (!ct) {		printk(KERN_ERR "CLUSTERIP: no conntrack!\n");			/* FIXME: need to drop invalid ones, since replies			 * to outgoing connections of other nodes will be 			 * marked as INVALID */		return NF_DROP;	}	/* special case: ICMP error handling. conntrack distinguishes between	 * error messages (RELATED) and information requests (see below) */	if ((*pskb)->nh.iph->protocol == IPPROTO_ICMP	    && (ctinfo == IP_CT_RELATED 		|| ctinfo == IP_CT_IS_REPLY+IP_CT_IS_REPLY))		return IPT_CONTINUE;	/* ip_conntrack_icmp guarantees us that we only have ICMP_ECHO, 	 * TIMESTAMP, INFO_REQUEST or ADDRESS type icmp packets from here	 * on, which all have an ID field [relevant for hashing]. */	hash = clusterip_hashfn(*pskb, cipinfo->config);	switch (ctinfo) {		case IP_CT_NEW:			ct->mark = hash;			break;		case IP_CT_RELATED:		case IP_CT_RELATED+IP_CT_IS_REPLY:			/* FIXME: we don't handle expectations at the			 * moment.  they can arrive on a different node than			 * the master connection (e.g. FTP passive mode) */		case IP_CT_ESTABLISHED:		case IP_CT_ESTABLISHED+IP_CT_IS_REPLY:			break;		default:			break;	}#ifdef DEBUG_CLUSTERP	DUMP_TUPLE(&ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple);#endif	DEBUGP("hash=%u ct_hash=%lu ", hash, ct->mark);	if (!clusterip_responsible(cipinfo->config, hash)) {		DEBUGP("not responsible\n");		return NF_DROP;	}	DEBUGP("responsible\n");	/* despite being received via linklayer multicast, this is	 * actually a unicast IP packet. TCP doesn't like PACKET_MULTICAST */	(*pskb)->pkt_type = PACKET_HOST;	return IPT_CONTINUE;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/5d927eb0101eb791fb2d4f72b49a2da5faf01941/ipt_CLUSTERIP.c/buggy/net/ipv4/netfilter/ipt_CLUSTERIP.c