summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Lezcano <dlezcano@fr.ibm.com>2008-01-10 11:49:34 +0100
committerDavid S. Miller <davem@davemloft.net>2008-01-29 00:01:16 +0100
commit89918fc270bb77cb1a0703f0ea566a692b32e324 (patch)
treec1a2171b2e1801cbdbe1b9a58411290479774313
parent[NETNS][IPV6]: Add ipv6 structure for netns. (diff)
downloadlinux-89918fc270bb77cb1a0703f0ea566a692b32e324.tar.xz
linux-89918fc270bb77cb1a0703f0ea566a692b32e324.zip
[NETNS][IPV6]: Make the ipv6 sysctl to be a netns subsystem.
The initialization of the sysctl for the ipv6 protocol is changed to a network namespace subsystem. That means when a new network namespace is created the initialization function for the sysctl will be called. That do not change the behavior of the sysctl in case of the kernel with the network namespace disabled. Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/ipv6/sysctl_net_ipv6.c23
1 files changed, 19 insertions, 4 deletions
diff --git a/net/ipv6/sysctl_net_ipv6.c b/net/ipv6/sysctl_net_ipv6.c
index f713fbf34c23..7329decf1f9d 100644
--- a/net/ipv6/sysctl_net_ipv6.c
+++ b/net/ipv6/sysctl_net_ipv6.c
@@ -91,10 +91,10 @@ EXPORT_SYMBOL_GPL(net_ipv6_ctl_path);
static struct ctl_table_header *ipv6_sysctl_header;
-int ipv6_sysctl_register(void)
+static int ipv6_sysctl_net_init(struct net *net)
{
- ipv6_sysctl_header = register_sysctl_paths(net_ipv6_ctl_path,
- ipv6_table);
+ ipv6_sysctl_header = register_net_sysctl_table(net, net_ipv6_ctl_path,
+ ipv6_table);
if (!ipv6_sysctl_header)
return -ENOMEM;
@@ -102,7 +102,22 @@ int ipv6_sysctl_register(void)
}
+static void ipv6_sysctl_net_exit(struct net *net)
+{
+ unregister_net_sysctl_table(ipv6_sysctl_header);
+}
+
+static struct pernet_operations ipv6_sysctl_net_ops = {
+ .init = ipv6_sysctl_net_init,
+ .exit = ipv6_sysctl_net_exit,
+};
+
+int ipv6_sysctl_register(void)
+{
+ return register_pernet_subsys(&ipv6_sysctl_net_ops);
+}
+
void ipv6_sysctl_unregister(void)
{
- unregister_sysctl_table(ipv6_sysctl_header);
+ unregister_pernet_subsys(&ipv6_sysctl_net_ops);
}