Commit 99bc9c4e authored by Daniel Lezcano's avatar Daniel Lezcano Committed by David S. Miller

[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: default avatarDaniel Lezcano <dlezcano@fr.ibm.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 760f2d01
...@@ -109,7 +109,6 @@ struct frag_hdr { ...@@ -109,7 +109,6 @@ struct frag_hdr {
#include <net/sock.h> #include <net/sock.h>
/* sysctls */ /* sysctls */
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[]; extern struct ctl_path net_ipv6_ctl_path[];
......
...@@ -11,6 +11,7 @@ struct netns_sysctl_ipv6 { ...@@ -11,6 +11,7 @@ struct netns_sysctl_ipv6 {
#ifdef CONFIG_SYSCTL #ifdef CONFIG_SYSCTL
struct ctl_table_header *table; struct ctl_table_header *table;
#endif #endif
int bindv6only;
}; };
struct netns_ipv6 { struct netns_ipv6 {
......
...@@ -66,8 +66,6 @@ MODULE_AUTHOR("Cast of dozens"); ...@@ -66,8 +66,6 @@ MODULE_AUTHOR("Cast of dozens");
MODULE_DESCRIPTION("IPv6 protocol stack for Linux"); MODULE_DESCRIPTION("IPv6 protocol stack for Linux");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
int sysctl_ipv6_bindv6only __read_mostly;
/* The inetsw6 table contains everything that inet6_create needs to /* The inetsw6 table contains everything that inet6_create needs to
* build a new socket. * build a new socket.
*/ */
...@@ -193,7 +191,7 @@ static int inet6_create(struct net *net, struct socket *sock, int protocol) ...@@ -193,7 +191,7 @@ static int inet6_create(struct net *net, struct socket *sock, int protocol)
np->mcast_hops = -1; np->mcast_hops = -1;
np->mc_loop = 1; np->mc_loop = 1;
np->pmtudisc = IPV6_PMTUDISC_WANT; np->pmtudisc = IPV6_PMTUDISC_WANT;
np->ipv6only = sysctl_ipv6_bindv6only; np->ipv6only = init_net.ipv6.sysctl.bindv6only;
/* Init the ipv4 part of the socket since we can have sockets /* Init the ipv4 part of the socket since we can have sockets
* using v6 API for ipv4. * using v6 API for ipv4.
...@@ -721,6 +719,7 @@ static void cleanup_ipv6_mibs(void) ...@@ -721,6 +719,7 @@ static void cleanup_ipv6_mibs(void)
static int inet6_net_init(struct net *net) static int inet6_net_init(struct net *net)
{ {
net->ipv6.sysctl.bindv6only = 0;
return 0; return 0;
} }
......
...@@ -35,7 +35,7 @@ static ctl_table ipv6_table_template[] = { ...@@ -35,7 +35,7 @@ static ctl_table ipv6_table_template[] = {
{ {
.ctl_name = NET_IPV6_BINDV6ONLY, .ctl_name = NET_IPV6_BINDV6ONLY,
.procname = "bindv6only", .procname = "bindv6only",
.data = &sysctl_ipv6_bindv6only, .data = &init_net.ipv6.sysctl.bindv6only,
.maxlen = sizeof(int), .maxlen = sizeof(int),
.mode = 0644, .mode = 0644,
.proc_handler = &proc_dointvec .proc_handler = &proc_dointvec
...@@ -116,6 +116,8 @@ static int ipv6_sysctl_net_init(struct net *net) ...@@ -116,6 +116,8 @@ static int ipv6_sysctl_net_init(struct net *net)
ipv6_table[0].child = ipv6_route_table; ipv6_table[0].child = ipv6_route_table;
ipv6_table[1].child = ipv6_icmp_table; ipv6_table[1].child = ipv6_icmp_table;
ipv6_table[2].data = &net->ipv6.sysctl.bindv6only;
net->ipv6.sysctl.table = register_net_sysctl_table(net, net_ipv6_ctl_path, net->ipv6.sysctl.table = register_net_sysctl_table(net, net_ipv6_ctl_path,
ipv6_table); ipv6_table);
if (!net->ipv6.sysctl.table) if (!net->ipv6.sysctl.table)
......
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