[NETFILTER]: Switch to using ctl_paths in nf_queue and conntrack modules
This includes the most simple cases for netfilter. The first part is tne queue modules for ipv4 and ipv6, on which the net/ipv4/ and net/ipv6/ paths are reused from the appropriate ipv4 and ipv6 code. The conntrack module is also patched, but this hunk is very small and simple. Signed-off-by: Pavel Emelyanov <xemul@openvz.org> Acked-by: Patrick McHardy <kaber@trash.net> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
c6995bdff0
commit
3d7cc2ba62
7 changed files with 20 additions and 55 deletions
|
@ -177,6 +177,8 @@ extern void inet_get_local_port_range(int *low, int *high);
|
||||||
extern int sysctl_ip_default_ttl;
|
extern int sysctl_ip_default_ttl;
|
||||||
extern int sysctl_ip_nonlocal_bind;
|
extern int sysctl_ip_nonlocal_bind;
|
||||||
|
|
||||||
|
extern struct ctl_path net_ipv4_ctl_path[];
|
||||||
|
|
||||||
/* From ip_fragment.c */
|
/* From ip_fragment.c */
|
||||||
struct inet_frags_ctl;
|
struct inet_frags_ctl;
|
||||||
extern struct inet_frags_ctl ip4_frags_ctl;
|
extern struct inet_frags_ctl ip4_frags_ctl;
|
||||||
|
|
|
@ -112,6 +112,8 @@ struct frag_hdr {
|
||||||
extern int sysctl_ipv6_bindv6only;
|
extern int sysctl_ipv6_bindv6only;
|
||||||
extern int sysctl_mld_max_msf;
|
extern int sysctl_mld_max_msf;
|
||||||
|
|
||||||
|
extern struct ctl_path net_ipv6_ctl_path[];
|
||||||
|
|
||||||
#define _DEVINC(statname, modifier, idev, field) \
|
#define _DEVINC(statname, modifier, idev, field) \
|
||||||
({ \
|
({ \
|
||||||
struct inet6_dev *_idev = (idev); \
|
struct inet6_dev *_idev = (idev); \
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#include <net/sock.h>
|
#include <net/sock.h>
|
||||||
#include <net/route.h>
|
#include <net/route.h>
|
||||||
#include <net/netfilter/nf_queue.h>
|
#include <net/netfilter/nf_queue.h>
|
||||||
|
#include <net/ip.h>
|
||||||
|
|
||||||
#define IPQ_QMAX_DEFAULT 1024
|
#define IPQ_QMAX_DEFAULT 1024
|
||||||
#define IPQ_PROC_FS_NAME "ip_queue"
|
#define IPQ_PROC_FS_NAME "ip_queue"
|
||||||
|
@ -525,26 +526,6 @@ static ctl_table ipq_table[] = {
|
||||||
{ .ctl_name = 0 }
|
{ .ctl_name = 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
static ctl_table ipq_dir_table[] = {
|
|
||||||
{
|
|
||||||
.ctl_name = NET_IPV4,
|
|
||||||
.procname = "ipv4",
|
|
||||||
.mode = 0555,
|
|
||||||
.child = ipq_table
|
|
||||||
},
|
|
||||||
{ .ctl_name = 0 }
|
|
||||||
};
|
|
||||||
|
|
||||||
static ctl_table ipq_root_table[] = {
|
|
||||||
{
|
|
||||||
.ctl_name = CTL_NET,
|
|
||||||
.procname = "net",
|
|
||||||
.mode = 0555,
|
|
||||||
.child = ipq_dir_table
|
|
||||||
},
|
|
||||||
{ .ctl_name = 0 }
|
|
||||||
};
|
|
||||||
|
|
||||||
static int ip_queue_show(struct seq_file *m, void *v)
|
static int ip_queue_show(struct seq_file *m, void *v)
|
||||||
{
|
{
|
||||||
read_lock_bh(&queue_lock);
|
read_lock_bh(&queue_lock);
|
||||||
|
@ -610,7 +591,7 @@ static int __init ip_queue_init(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
register_netdevice_notifier(&ipq_dev_notifier);
|
register_netdevice_notifier(&ipq_dev_notifier);
|
||||||
ipq_sysctl_header = register_sysctl_table(ipq_root_table);
|
ipq_sysctl_header = register_sysctl_paths(net_ipv4_ctl_path, ipq_table);
|
||||||
|
|
||||||
status = nf_register_queue_handler(PF_INET, &nfqh);
|
status = nf_register_queue_handler(PF_INET, &nfqh);
|
||||||
if (status < 0) {
|
if (status < 0) {
|
||||||
|
|
|
@ -846,17 +846,18 @@ static struct ctl_table ipv4_table[] = {
|
||||||
{ .ctl_name = 0 }
|
{ .ctl_name = 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
static __initdata struct ctl_path net_ipv4_path[] = {
|
struct ctl_path net_ipv4_ctl_path[] = {
|
||||||
{ .procname = "net", .ctl_name = CTL_NET, },
|
{ .procname = "net", .ctl_name = CTL_NET, },
|
||||||
{ .procname = "ipv4", .ctl_name = NET_IPV4, },
|
{ .procname = "ipv4", .ctl_name = NET_IPV4, },
|
||||||
{ },
|
{ },
|
||||||
};
|
};
|
||||||
|
EXPORT_SYMBOL_GPL(net_ipv4_ctl_path);
|
||||||
|
|
||||||
static __init int sysctl_ipv4_init(void)
|
static __init int sysctl_ipv4_init(void)
|
||||||
{
|
{
|
||||||
struct ctl_table_header *hdr;
|
struct ctl_table_header *hdr;
|
||||||
|
|
||||||
hdr = register_sysctl_paths(net_ipv4_path, ipv4_table);
|
hdr = register_sysctl_paths(net_ipv4_ctl_path, ipv4_table);
|
||||||
return hdr == NULL ? -ENOMEM : 0;
|
return hdr == NULL ? -ENOMEM : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -529,26 +529,6 @@ static ctl_table ipq_table[] = {
|
||||||
{ .ctl_name = 0 }
|
{ .ctl_name = 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
static ctl_table ipq_dir_table[] = {
|
|
||||||
{
|
|
||||||
.ctl_name = NET_IPV6,
|
|
||||||
.procname = "ipv6",
|
|
||||||
.mode = 0555,
|
|
||||||
.child = ipq_table
|
|
||||||
},
|
|
||||||
{ .ctl_name = 0 }
|
|
||||||
};
|
|
||||||
|
|
||||||
static ctl_table ipq_root_table[] = {
|
|
||||||
{
|
|
||||||
.ctl_name = CTL_NET,
|
|
||||||
.procname = "net",
|
|
||||||
.mode = 0555,
|
|
||||||
.child = ipq_dir_table
|
|
||||||
},
|
|
||||||
{ .ctl_name = 0 }
|
|
||||||
};
|
|
||||||
|
|
||||||
static int ip6_queue_show(struct seq_file *m, void *v)
|
static int ip6_queue_show(struct seq_file *m, void *v)
|
||||||
{
|
{
|
||||||
read_lock_bh(&queue_lock);
|
read_lock_bh(&queue_lock);
|
||||||
|
@ -614,7 +594,7 @@ static int __init ip6_queue_init(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
register_netdevice_notifier(&ipq_dev_notifier);
|
register_netdevice_notifier(&ipq_dev_notifier);
|
||||||
ipq_sysctl_header = register_sysctl_table(ipq_root_table);
|
ipq_sysctl_header = register_sysctl_paths(net_ipv6_ctl_path, ipq_table);
|
||||||
|
|
||||||
status = nf_register_queue_handler(PF_INET6, &nfqh);
|
status = nf_register_queue_handler(PF_INET6, &nfqh);
|
||||||
if (status < 0) {
|
if (status < 0) {
|
||||||
|
|
|
@ -82,17 +82,19 @@ static ctl_table ipv6_table[] = {
|
||||||
{ .ctl_name = 0 }
|
{ .ctl_name = 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct ctl_path ipv6_ctl_path[] = {
|
struct ctl_path net_ipv6_ctl_path[] = {
|
||||||
{ .procname = "net", .ctl_name = CTL_NET, },
|
{ .procname = "net", .ctl_name = CTL_NET, },
|
||||||
{ .procname = "ipv6", .ctl_name = NET_IPV6, },
|
{ .procname = "ipv6", .ctl_name = NET_IPV6, },
|
||||||
{ },
|
{ },
|
||||||
};
|
};
|
||||||
|
EXPORT_SYMBOL_GPL(net_ipv6_ctl_path);
|
||||||
|
|
||||||
static struct ctl_table_header *ipv6_sysctl_header;
|
static struct ctl_table_header *ipv6_sysctl_header;
|
||||||
|
|
||||||
void ipv6_sysctl_register(void)
|
void ipv6_sysctl_register(void)
|
||||||
{
|
{
|
||||||
ipv6_sysctl_header = register_sysctl_paths(ipv6_ctl_path, ipv6_table);
|
ipv6_sysctl_header = register_sysctl_paths(net_ipv6_ctl_path,
|
||||||
|
ipv6_table);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ipv6_sysctl_unregister(void)
|
void ipv6_sysctl_unregister(void)
|
||||||
|
|
|
@ -383,15 +383,11 @@ static ctl_table nf_ct_netfilter_table[] = {
|
||||||
{ .ctl_name = 0 }
|
{ .ctl_name = 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
static ctl_table nf_ct_net_table[] = {
|
struct ctl_path nf_ct_path[] = {
|
||||||
{
|
{ .procname = "net", .ctl_name = CTL_NET, },
|
||||||
.ctl_name = CTL_NET,
|
{ }
|
||||||
.procname = "net",
|
|
||||||
.mode = 0555,
|
|
||||||
.child = nf_ct_netfilter_table,
|
|
||||||
},
|
|
||||||
{ .ctl_name = 0 }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
EXPORT_SYMBOL_GPL(nf_ct_log_invalid);
|
EXPORT_SYMBOL_GPL(nf_ct_log_invalid);
|
||||||
#endif /* CONFIG_SYSCTL */
|
#endif /* CONFIG_SYSCTL */
|
||||||
|
|
||||||
|
@ -418,7 +414,8 @@ static int __init nf_conntrack_standalone_init(void)
|
||||||
proc_stat->owner = THIS_MODULE;
|
proc_stat->owner = THIS_MODULE;
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_SYSCTL
|
#ifdef CONFIG_SYSCTL
|
||||||
nf_ct_sysctl_header = register_sysctl_table(nf_ct_net_table);
|
nf_ct_sysctl_header = register_sysctl_paths(nf_ct_path,
|
||||||
|
nf_ct_netfilter_table);
|
||||||
if (nf_ct_sysctl_header == NULL) {
|
if (nf_ct_sysctl_header == NULL) {
|
||||||
printk("nf_conntrack: can't register to sysctl.\n");
|
printk("nf_conntrack: can't register to sysctl.\n");
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
|
|
Loading…
Reference in a new issue