aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Lezcano <dlezcano@fr.ibm.com>2008-01-10 05:54:53 -0500
committerDavid S. Miller <davem@davemloft.net>2008-01-28 18:01:18 -0500
commit99bc9c4e45e7e783cf0b0a25cc03a103c038f254 (patch)
treee6598bc44e2003761e9ee65f06c4062287c1ed0d
parent760f2d0186225f06d46e07232d65219c5055cad3 (diff)
[NETNS][IPV6]: Make bindv6only sysctl per namespace.
This patch moves the bindv6only sysctl to the network namespace structure. Until the ipv6 protocol is not per namespace, the sysctl variable is always from the initial network namespace. Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--include/net/ipv6.h1
-rw-r--r--include/net/netns/ipv6.h1
-rw-r--r--net/ipv6/af_inet6.c5
-rw-r--r--net/ipv6/sysctl_net_ipv6.c4
4 files changed, 6 insertions, 5 deletions
diff --git a/include/net/ipv6.h b/include/net/ipv6.h
index 5519035491e7..d03a4076e227 100644
--- a/include/net/ipv6.h
+++ b/include/net/ipv6.h
@@ -109,7 +109,6 @@ struct frag_hdr {
109#include <net/sock.h> 109#include <net/sock.h>
110 110
111/* sysctls */ 111/* sysctls */
112extern int sysctl_ipv6_bindv6only;
113extern int sysctl_mld_max_msf; 112extern int sysctl_mld_max_msf;
114 113
115extern struct ctl_path net_ipv6_ctl_path[]; 114extern struct ctl_path net_ipv6_ctl_path[];
diff --git a/include/net/netns/ipv6.h b/include/net/netns/ipv6.h
index 58fbf30d9fdb..42b9b412fb87 100644
--- a/include/net/netns/ipv6.h
+++ b/include/net/netns/ipv6.h
@@ -11,6 +11,7 @@ struct netns_sysctl_ipv6 {
11#ifdef CONFIG_SYSCTL 11#ifdef CONFIG_SYSCTL
12 struct ctl_table_header *table; 12 struct ctl_table_header *table;
13#endif 13#endif
14 int bindv6only;
14}; 15};
15 16
16struct netns_ipv6 { 17struct netns_ipv6 {
diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c
index 72b898fe2dde..70662bf8ab98 100644
--- a/net/ipv6/af_inet6.c
+++ b/net/ipv6/af_inet6.c
@@ -66,8 +66,6 @@ MODULE_AUTHOR("Cast of dozens");
66MODULE_DESCRIPTION("IPv6 protocol stack for Linux"); 66MODULE_DESCRIPTION("IPv6 protocol stack for Linux");
67MODULE_LICENSE("GPL"); 67MODULE_LICENSE("GPL");
68 68
69int sysctl_ipv6_bindv6only __read_mostly;
70
71/* The inetsw6 table contains everything that inet6_create needs to 69/* The inetsw6 table contains everything that inet6_create needs to
72 * build a new socket. 70 * build a new socket.
73 */ 71 */
@@ -193,7 +191,7 @@ lookup_protocol:
193 np->mcast_hops = -1; 191 np->mcast_hops = -1;
194 np->mc_loop = 1; 192 np->mc_loop = 1;
195 np->pmtudisc = IPV6_PMTUDISC_WANT; 193 np->pmtudisc = IPV6_PMTUDISC_WANT;
196 np->ipv6only = sysctl_ipv6_bindv6only; 194 np->ipv6only = init_net.ipv6.sysctl.bindv6only;
197 195
198 /* Init the ipv4 part of the socket since we can have sockets 196 /* Init the ipv4 part of the socket since we can have sockets
199 * using v6 API for ipv4. 197 * using v6 API for ipv4.
@@ -721,6 +719,7 @@ static void cleanup_ipv6_mibs(void)
721 719
722static int inet6_net_init(struct net *net) 720static int inet6_net_init(struct net *net)
723{ 721{
722 net->ipv6.sysctl.bindv6only = 0;
724 return 0; 723 return 0;
725} 724}
726 725
diff --git a/net/ipv6/sysctl_net_ipv6.c b/net/ipv6/sysctl_net_ipv6.c
index 7970f3366f87..13be97a928cb 100644
--- a/net/ipv6/sysctl_net_ipv6.c
+++ b/net/ipv6/sysctl_net_ipv6.c
@@ -35,7 +35,7 @@ static ctl_table ipv6_table_template[] = {
35 { 35 {
36 .ctl_name = NET_IPV6_BINDV6ONLY, 36 .ctl_name = NET_IPV6_BINDV6ONLY,
37 .procname = "bindv6only", 37 .procname = "bindv6only",
38 .data = &sysctl_ipv6_bindv6only, 38 .data = &init_net.ipv6.sysctl.bindv6only,
39 .maxlen = sizeof(int), 39 .maxlen = sizeof(int),
40 .mode = 0644, 40 .mode = 0644,
41 .proc_handler = &proc_dointvec 41 .proc_handler = &proc_dointvec
@@ -116,6 +116,8 @@ static int ipv6_sysctl_net_init(struct net *net)
116 ipv6_table[0].child = ipv6_route_table; 116 ipv6_table[0].child = ipv6_route_table;
117 ipv6_table[1].child = ipv6_icmp_table; 117 ipv6_table[1].child = ipv6_icmp_table;
118 118
119 ipv6_table[2].data = &net->ipv6.sysctl.bindv6only;
120
119 net->ipv6.sysctl.table = register_net_sysctl_table(net, net_ipv6_ctl_path, 121 net->ipv6.sysctl.table = register_net_sysctl_table(net, net_ipv6_ctl_path,
120 ipv6_table); 122 ipv6_table);
121 if (!net->ipv6.sysctl.table) 123 if (!net->ipv6.sysctl.table)