aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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)