config = clusterip_config_find_get(e->ip.dst.s_addr); if (!config) { 
config = clusterip_config_find_get(e->ip.dst.s_addr, 1); if (config) { if (cipinfo->config != NULL) { /* Case A: This is an entry that gets reloaded, since * it still has a cipinfo->config pointer. Simply * increase the entry refcount and return */ if (cipinfo->config != config) { printk(KERN_ERR "CLUSTERIP: Reloaded entry " "has invalid config pointer!\n"); return 0; } clusterip_config_entry_get(cipinfo->config); } else { /* Case B: This is a new rule referring to an existing * clusterip config. */ cipinfo->config = config; clusterip_config_entry_get(cipinfo->config); } } else { /* Case C: This is a completely new clusterip config */ 
checkentry(const char *tablename,	   const struct ipt_entry *e,           void *targinfo,           unsigned int targinfosize,           unsigned int hook_mask){	struct ipt_clusterip_tgt_info *cipinfo = targinfo;	struct clusterip_config *config;	if (targinfosize != IPT_ALIGN(sizeof(struct ipt_clusterip_tgt_info))) {		printk(KERN_WARNING "CLUSTERIP: targinfosize %u != %Zu\n",		       targinfosize,		       IPT_ALIGN(sizeof(struct ipt_clusterip_tgt_info)));		return 0;	}	if (cipinfo->hash_mode != CLUSTERIP_HASHMODE_SIP &&	    cipinfo->hash_mode != CLUSTERIP_HASHMODE_SIP_SPT &&	    cipinfo->hash_mode != CLUSTERIP_HASHMODE_SIP_SPT_DPT) {		printk(KERN_WARNING "CLUSTERIP: unknown mode `%u'\n",			cipinfo->hash_mode);		return 0;	}	if (e->ip.dmsk.s_addr != 0xffffffff	    || e->ip.dst.s_addr == 0) {		printk(KERN_ERR "CLUSTERIP: Please specify destination IP\n");		return 0;	}	/* FIXME: further sanity checks */	config = clusterip_config_find_get(e->ip.dst.s_addr);	if (!config) {		if (!(cipinfo->flags & CLUSTERIP_FLAG_NEW)) {			printk(KERN_WARNING "CLUSTERIP: no config found for %u.%u.%u.%u, need 'new'\n", NIPQUAD(e->ip.dst.s_addr));			return 0;		} else {			struct net_device *dev;			if (e->ip.iniface[0] == '\0') {				printk(KERN_WARNING "CLUSTERIP: Please specify an interface name\n");				return 0;			}			dev = dev_get_by_name(e->ip.iniface);			if (!dev) {				printk(KERN_WARNING "CLUSTERIP: no such interface %s\n", e->ip.iniface);				return 0;			}			config = clusterip_config_init(cipinfo, 							e->ip.dst.s_addr, dev);			if (!config) {				printk(KERN_WARNING "CLUSTERIP: cannot allocate config\n");				dev_put(dev);				return 0;			}			dev_mc_add(config->dev,config->clustermac, ETH_ALEN, 0);		}	}	cipinfo->config = config;	return 1;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/4451362445b2d83886003f1d739b94e4f000eeeb/ipt_CLUSTERIP.c/clean/net/ipv4/netfilter/ipt_CLUSTERIP.c