⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ip_conntrack_standalone.c

📁 linux-2.6.15.6
💻 C
📖 第 1 页 / 共 2 页
字号:
static struct nf_hook_ops ip_conntrack_local_out_ops = {	.hook		= ip_conntrack_local,	.owner		= THIS_MODULE,	.pf		= PF_INET,	.hooknum	= NF_IP_LOCAL_OUT,	.priority	= NF_IP_PRI_CONNTRACK,};/* helpers */static struct nf_hook_ops ip_conntrack_helper_out_ops = {	.hook		= ip_conntrack_help,	.owner		= THIS_MODULE,	.pf		= PF_INET,	.hooknum	= NF_IP_POST_ROUTING,	.priority	= NF_IP_PRI_CONNTRACK_HELPER,};static struct nf_hook_ops ip_conntrack_helper_in_ops = {	.hook		= ip_conntrack_help,	.owner		= THIS_MODULE,	.pf		= PF_INET,	.hooknum	= NF_IP_LOCAL_IN,	.priority	= NF_IP_PRI_CONNTRACK_HELPER,};/* Refragmenter; last chance. */static struct nf_hook_ops ip_conntrack_out_ops = {	.hook		= ip_refrag,	.owner		= THIS_MODULE,	.pf		= PF_INET,	.hooknum	= NF_IP_POST_ROUTING,	.priority	= NF_IP_PRI_CONNTRACK_CONFIRM,};static struct nf_hook_ops ip_conntrack_local_in_ops = {	.hook		= ip_confirm,	.owner		= THIS_MODULE,	.pf		= PF_INET,	.hooknum	= NF_IP_LOCAL_IN,	.priority	= NF_IP_PRI_CONNTRACK_CONFIRM,};/* Sysctl support */#ifdef CONFIG_SYSCTL/* From ip_conntrack_core.c */extern int ip_conntrack_max;extern unsigned int ip_conntrack_htable_size;/* From ip_conntrack_proto_tcp.c */extern unsigned long ip_ct_tcp_timeout_syn_sent;extern unsigned long ip_ct_tcp_timeout_syn_recv;extern unsigned long ip_ct_tcp_timeout_established;extern unsigned long ip_ct_tcp_timeout_fin_wait;extern unsigned long ip_ct_tcp_timeout_close_wait;extern unsigned long ip_ct_tcp_timeout_last_ack;extern unsigned long ip_ct_tcp_timeout_time_wait;extern unsigned long ip_ct_tcp_timeout_close;extern unsigned long ip_ct_tcp_timeout_max_retrans;extern int ip_ct_tcp_loose;extern int ip_ct_tcp_be_liberal;extern int ip_ct_tcp_max_retrans;/* From ip_conntrack_proto_udp.c */extern unsigned long ip_ct_udp_timeout;extern unsigned long ip_ct_udp_timeout_stream;/* From ip_conntrack_proto_icmp.c */extern unsigned long ip_ct_icmp_timeout;/* From ip_conntrack_proto_icmp.c */extern unsigned long ip_ct_generic_timeout;/* Log invalid packets of a given protocol */static int log_invalid_proto_min = 0;static int log_invalid_proto_max = 255;static struct ctl_table_header *ip_ct_sysctl_header;static ctl_table ip_ct_sysctl_table[] = {	{		.ctl_name	= NET_IPV4_NF_CONNTRACK_MAX,		.procname	= "ip_conntrack_max",		.data		= &ip_conntrack_max,		.maxlen		= sizeof(int),		.mode		= 0644,		.proc_handler	= &proc_dointvec,	},	{		.ctl_name	= NET_IPV4_NF_CONNTRACK_COUNT,		.procname	= "ip_conntrack_count",		.data		= &ip_conntrack_count,		.maxlen		= sizeof(int),		.mode		= 0444,		.proc_handler	= &proc_dointvec,	},	{		.ctl_name	= NET_IPV4_NF_CONNTRACK_BUCKETS,		.procname	= "ip_conntrack_buckets",		.data		= &ip_conntrack_htable_size,		.maxlen		= sizeof(unsigned int),		.mode		= 0444,		.proc_handler	= &proc_dointvec,	},	{		.ctl_name	= NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_SYN_SENT,		.procname	= "ip_conntrack_tcp_timeout_syn_sent",		.data		= &ip_ct_tcp_timeout_syn_sent,		.maxlen		= sizeof(unsigned int),		.mode		= 0644,		.proc_handler	= &proc_dointvec_jiffies,	},	{		.ctl_name	= NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_SYN_RECV,		.procname	= "ip_conntrack_tcp_timeout_syn_recv",		.data		= &ip_ct_tcp_timeout_syn_recv,		.maxlen		= sizeof(unsigned int),		.mode		= 0644,		.proc_handler	= &proc_dointvec_jiffies,	},	{		.ctl_name	= NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_ESTABLISHED,		.procname	= "ip_conntrack_tcp_timeout_established",		.data		= &ip_ct_tcp_timeout_established,		.maxlen		= sizeof(unsigned int),		.mode		= 0644,		.proc_handler	= &proc_dointvec_jiffies,	},	{		.ctl_name	= NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_FIN_WAIT,		.procname	= "ip_conntrack_tcp_timeout_fin_wait",		.data		= &ip_ct_tcp_timeout_fin_wait,		.maxlen		= sizeof(unsigned int),		.mode		= 0644,		.proc_handler	= &proc_dointvec_jiffies,	},	{		.ctl_name	= NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_CLOSE_WAIT,		.procname	= "ip_conntrack_tcp_timeout_close_wait",		.data		= &ip_ct_tcp_timeout_close_wait,		.maxlen		= sizeof(unsigned int),		.mode		= 0644,		.proc_handler	= &proc_dointvec_jiffies,	},	{		.ctl_name	= NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_LAST_ACK,		.procname	= "ip_conntrack_tcp_timeout_last_ack",		.data		= &ip_ct_tcp_timeout_last_ack,		.maxlen		= sizeof(unsigned int),		.mode		= 0644,		.proc_handler	= &proc_dointvec_jiffies,	},	{		.ctl_name	= NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_TIME_WAIT,		.procname	= "ip_conntrack_tcp_timeout_time_wait",		.data		= &ip_ct_tcp_timeout_time_wait,		.maxlen		= sizeof(unsigned int),		.mode		= 0644,		.proc_handler	= &proc_dointvec_jiffies,	},	{		.ctl_name	= NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_CLOSE,		.procname	= "ip_conntrack_tcp_timeout_close",		.data		= &ip_ct_tcp_timeout_close,		.maxlen		= sizeof(unsigned int),		.mode		= 0644,		.proc_handler	= &proc_dointvec_jiffies,	},	{		.ctl_name	= NET_IPV4_NF_CONNTRACK_UDP_TIMEOUT,		.procname	= "ip_conntrack_udp_timeout",		.data		= &ip_ct_udp_timeout,		.maxlen		= sizeof(unsigned int),		.mode		= 0644,		.proc_handler	= &proc_dointvec_jiffies,	},	{		.ctl_name	= NET_IPV4_NF_CONNTRACK_UDP_TIMEOUT_STREAM,		.procname	= "ip_conntrack_udp_timeout_stream",		.data		= &ip_ct_udp_timeout_stream,		.maxlen		= sizeof(unsigned int),		.mode		= 0644,		.proc_handler	= &proc_dointvec_jiffies,	},	{		.ctl_name	= NET_IPV4_NF_CONNTRACK_ICMP_TIMEOUT,		.procname	= "ip_conntrack_icmp_timeout",		.data		= &ip_ct_icmp_timeout,		.maxlen		= sizeof(unsigned int),		.mode		= 0644,		.proc_handler	= &proc_dointvec_jiffies,	},	{		.ctl_name	= NET_IPV4_NF_CONNTRACK_GENERIC_TIMEOUT,		.procname	= "ip_conntrack_generic_timeout",		.data		= &ip_ct_generic_timeout,		.maxlen		= sizeof(unsigned int),		.mode		= 0644,		.proc_handler	= &proc_dointvec_jiffies,	},	{		.ctl_name	= NET_IPV4_NF_CONNTRACK_LOG_INVALID,		.procname	= "ip_conntrack_log_invalid",		.data		= &ip_ct_log_invalid,		.maxlen		= sizeof(unsigned int),		.mode		= 0644,		.proc_handler	= &proc_dointvec_minmax,		.strategy	= &sysctl_intvec,		.extra1		= &log_invalid_proto_min,		.extra2		= &log_invalid_proto_max,	},	{		.ctl_name	= NET_IPV4_NF_CONNTRACK_TCP_TIMEOUT_MAX_RETRANS,		.procname	= "ip_conntrack_tcp_timeout_max_retrans",		.data		= &ip_ct_tcp_timeout_max_retrans,		.maxlen		= sizeof(unsigned int),		.mode		= 0644,		.proc_handler	= &proc_dointvec_jiffies,	},	{		.ctl_name	= NET_IPV4_NF_CONNTRACK_TCP_LOOSE,		.procname	= "ip_conntrack_tcp_loose",		.data		= &ip_ct_tcp_loose,		.maxlen		= sizeof(unsigned int),		.mode		= 0644,		.proc_handler	= &proc_dointvec,	},	{		.ctl_name	= NET_IPV4_NF_CONNTRACK_TCP_BE_LIBERAL,		.procname	= "ip_conntrack_tcp_be_liberal",		.data		= &ip_ct_tcp_be_liberal,		.maxlen		= sizeof(unsigned int),		.mode		= 0644,		.proc_handler	= &proc_dointvec,	},	{		.ctl_name	= NET_IPV4_NF_CONNTRACK_TCP_MAX_RETRANS,		.procname	= "ip_conntrack_tcp_max_retrans",		.data		= &ip_ct_tcp_max_retrans,		.maxlen		= sizeof(unsigned int),		.mode		= 0644,		.proc_handler	= &proc_dointvec,	},	{ .ctl_name = 0 }};#define NET_IP_CONNTRACK_MAX 2089static ctl_table ip_ct_netfilter_table[] = {	{		.ctl_name	= NET_IPV4_NETFILTER,		.procname	= "netfilter",		.mode		= 0555,		.child		= ip_ct_sysctl_table,	},	{		.ctl_name	= NET_IP_CONNTRACK_MAX,		.procname	= "ip_conntrack_max",		.data		= &ip_conntrack_max,		.maxlen		= sizeof(int),		.mode		= 0644,		.proc_handler	= &proc_dointvec	},	{ .ctl_name = 0 }};static ctl_table ip_ct_ipv4_table[] = {	{		.ctl_name	= NET_IPV4,		.procname	= "ipv4",		.mode		= 0555,		.child		= ip_ct_netfilter_table,	},	{ .ctl_name = 0 }};static ctl_table ip_ct_net_table[] = {	{		.ctl_name	= CTL_NET,		.procname	= "net",		.mode		= 0555, 		.child		= ip_ct_ipv4_table,	},	{ .ctl_name = 0 }};EXPORT_SYMBOL(ip_ct_log_invalid);#endif /* CONFIG_SYSCTL */static int init_or_cleanup(int init){#ifdef CONFIG_PROC_FS	struct proc_dir_entry *proc, *proc_exp, *proc_stat;#endif	int ret = 0;	if (!init) goto cleanup;	ret = ip_conntrack_init();	if (ret < 0)		goto cleanup_nothing;#ifdef CONFIG_PROC_FS	ret = -ENOMEM;	proc = proc_net_fops_create("ip_conntrack", 0440, &ct_file_ops);	if (!proc) goto cleanup_init;	proc_exp = proc_net_fops_create("ip_conntrack_expect", 0440,					&exp_file_ops);	if (!proc_exp) goto cleanup_proc;	proc_stat = create_proc_entry("ip_conntrack", S_IRUGO, proc_net_stat);	if (!proc_stat)		goto cleanup_proc_exp;	proc_stat->proc_fops = &ct_cpu_seq_fops;	proc_stat->owner = THIS_MODULE;#endif	ret = nf_register_hook(&ip_conntrack_defrag_ops);	if (ret < 0) {		printk("ip_conntrack: can't register pre-routing defrag hook.\n");		goto cleanup_proc_stat;	}	ret = nf_register_hook(&ip_conntrack_defrag_local_out_ops);	if (ret < 0) {		printk("ip_conntrack: can't register local_out defrag hook.\n");		goto cleanup_defragops;	}	ret = nf_register_hook(&ip_conntrack_in_ops);	if (ret < 0) {		printk("ip_conntrack: can't register pre-routing hook.\n");		goto cleanup_defraglocalops;	}	ret = nf_register_hook(&ip_conntrack_local_out_ops);	if (ret < 0) {		printk("ip_conntrack: can't register local out hook.\n");		goto cleanup_inops;	}	ret = nf_register_hook(&ip_conntrack_helper_in_ops);	if (ret < 0) {		printk("ip_conntrack: can't register local in helper hook.\n");		goto cleanup_inandlocalops;	}	ret = nf_register_hook(&ip_conntrack_helper_out_ops);	if (ret < 0) {		printk("ip_conntrack: can't register postrouting helper hook.\n");		goto cleanup_helperinops;	}	ret = nf_register_hook(&ip_conntrack_out_ops);	if (ret < 0) {		printk("ip_conntrack: can't register post-routing hook.\n");		goto cleanup_helperoutops;	}	ret = nf_register_hook(&ip_conntrack_local_in_ops);	if (ret < 0) {		printk("ip_conntrack: can't register local in hook.\n");		goto cleanup_inoutandlocalops;	}#ifdef CONFIG_SYSCTL	ip_ct_sysctl_header = register_sysctl_table(ip_ct_net_table, 0);	if (ip_ct_sysctl_header == NULL) {		printk("ip_conntrack: can't register to sysctl.\n");		ret = -ENOMEM;		goto cleanup_localinops;	}#endif	return ret; cleanup:	synchronize_net();#ifdef CONFIG_SYSCTL 	unregister_sysctl_table(ip_ct_sysctl_header); cleanup_localinops:#endif	nf_unregister_hook(&ip_conntrack_local_in_ops); cleanup_inoutandlocalops:	nf_unregister_hook(&ip_conntrack_out_ops); cleanup_helperoutops:	nf_unregister_hook(&ip_conntrack_helper_out_ops); cleanup_helperinops:	nf_unregister_hook(&ip_conntrack_helper_in_ops); cleanup_inandlocalops:	nf_unregister_hook(&ip_conntrack_local_out_ops); cleanup_inops:	nf_unregister_hook(&ip_conntrack_in_ops); cleanup_defraglocalops:	nf_unregister_hook(&ip_conntrack_defrag_local_out_ops); cleanup_defragops:	nf_unregister_hook(&ip_conntrack_defrag_ops); cleanup_proc_stat:#ifdef CONFIG_PROC_FS	remove_proc_entry("ip_conntrack", proc_net_stat); cleanup_proc_exp:	proc_net_remove("ip_conntrack_expect"); cleanup_proc:	proc_net_remove("ip_conntrack"); cleanup_init:#endif /* CONFIG_PROC_FS */	ip_conntrack_cleanup(); cleanup_nothing:	return ret;}/* FIXME: Allow NULL functions and sub in pointers to generic for   them. --RR */int ip_conntrack_protocol_register(struct ip_conntrack_protocol *proto){	int ret = 0;	write_lock_bh(&ip_conntrack_lock);	if (ip_ct_protos[proto->proto] != &ip_conntrack_generic_protocol) {		ret = -EBUSY;		goto out;	}	ip_ct_protos[proto->proto] = proto; out:	write_unlock_bh(&ip_conntrack_lock);	return ret;}void ip_conntrack_protocol_unregister(struct ip_conntrack_protocol *proto){	write_lock_bh(&ip_conntrack_lock);	ip_ct_protos[proto->proto] = &ip_conntrack_generic_protocol;	write_unlock_bh(&ip_conntrack_lock);		/* Somebody could be still looking at the proto in bh. */	synchronize_net();	/* Remove all contrack entries for this protocol */	ip_ct_iterate_cleanup(kill_proto, &proto->proto);}static int __init init(void){	return init_or_cleanup(1);}static void __exit fini(void){	init_or_cleanup(0);}module_init(init);module_exit(fini);/* Some modules need us, but don't depend directly on any symbol.   They should call this. */void need_ip_conntrack(void){}#ifdef CONFIG_IP_NF_CONNTRACK_EVENTSEXPORT_SYMBOL_GPL(ip_conntrack_chain);EXPORT_SYMBOL_GPL(ip_conntrack_expect_chain);EXPORT_SYMBOL_GPL(ip_conntrack_register_notifier);EXPORT_SYMBOL_GPL(ip_conntrack_unregister_notifier);EXPORT_SYMBOL_GPL(__ip_ct_event_cache_init);EXPORT_PER_CPU_SYMBOL_GPL(ip_conntrack_ecache);#endifEXPORT_SYMBOL(ip_conntrack_protocol_register);EXPORT_SYMBOL(ip_conntrack_protocol_unregister);EXPORT_SYMBOL(ip_ct_get_tuple);EXPORT_SYMBOL(invert_tuplepr);EXPORT_SYMBOL(ip_conntrack_alter_reply);EXPORT_SYMBOL(ip_conntrack_destroyed);EXPORT_SYMBOL(need_ip_conntrack);EXPORT_SYMBOL(ip_conntrack_helper_register);EXPORT_SYMBOL(ip_conntrack_helper_unregister);EXPORT_SYMBOL(ip_ct_iterate_cleanup);EXPORT_SYMBOL(__ip_ct_refresh_acct);EXPORT_SYMBOL(ip_conntrack_expect_alloc);EXPORT_SYMBOL(ip_conntrack_expect_put);EXPORT_SYMBOL_GPL(__ip_conntrack_expect_find);EXPORT_SYMBOL_GPL(ip_conntrack_expect_find);EXPORT_SYMBOL(ip_conntrack_expect_related);EXPORT_SYMBOL(ip_conntrack_unexpect_related);EXPORT_SYMBOL_GPL(ip_conntrack_expect_list);EXPORT_SYMBOL_GPL(ip_ct_unlink_expect);EXPORT_SYMBOL(ip_conntrack_tuple_taken);EXPORT_SYMBOL(ip_ct_gather_frags);EXPORT_SYMBOL(ip_conntrack_htable_size);EXPORT_SYMBOL(ip_conntrack_lock);EXPORT_SYMBOL(ip_conntrack_hash);EXPORT_SYMBOL(ip_conntrack_untracked);EXPORT_SYMBOL_GPL(ip_conntrack_find_get);#ifdef CONFIG_IP_NF_NAT_NEEDEDEXPORT_SYMBOL(ip_conntrack_tcp_update);#endifEXPORT_SYMBOL_GPL(ip_conntrack_flush);EXPORT_SYMBOL_GPL(__ip_conntrack_find);EXPORT_SYMBOL_GPL(ip_conntrack_alloc);EXPORT_SYMBOL_GPL(ip_conntrack_free);EXPORT_SYMBOL_GPL(ip_conntrack_hash_insert);EXPORT_SYMBOL_GPL(ip_ct_remove_expectations);EXPORT_SYMBOL_GPL(ip_conntrack_helper_find_get);EXPORT_SYMBOL_GPL(ip_conntrack_helper_put);EXPORT_SYMBOL_GPL(__ip_conntrack_helper_find_byname);EXPORT_SYMBOL_GPL(ip_conntrack_proto_find_get);EXPORT_SYMBOL_GPL(ip_conntrack_proto_put);EXPORT_SYMBOL_GPL(__ip_conntrack_proto_find);#if defined(CONFIG_IP_NF_CONNTRACK_NETLINK) || \    defined(CONFIG_IP_NF_CONNTRACK_NETLINK_MODULE)EXPORT_SYMBOL_GPL(ip_ct_port_tuple_to_nfattr);EXPORT_SYMBOL_GPL(ip_ct_port_nfattr_to_tuple);#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -