Commit 3d7cc2ba authored by Pavel Emelyanov's avatar Pavel Emelyanov Committed by David S. Miller

[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: default avatarPavel Emelyanov <xemul@openvz.org>
Acked-by: default avatarPatrick McHardy <kaber@trash.net>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent c6995bdf
...@@ -177,6 +177,8 @@ extern void inet_get_local_port_range(int *low, int *high); ...@@ -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 { ...@@ -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 @@ ...@@ -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[] = { ...@@ -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) ...@@ -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[] = { ...@@ -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[] = { ...@@ -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) ...@@ -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[] = { ...@@ -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[] = { ...@@ -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) ...@@ -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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment