Commit 53b7997f authored by YOSHIFUJI Hideaki's avatar YOSHIFUJI Hideaki Committed by David S. Miller

ipv6 netns: Make several "global" sysctl variables namespace aware.

Signed-off-by: default avatarYOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 721499e8
...@@ -1863,6 +1863,7 @@ void addrconf_prefix_rcv(struct net_device *dev, u8 *opt, int len) ...@@ -1863,6 +1863,7 @@ void addrconf_prefix_rcv(struct net_device *dev, u8 *opt, int len)
struct inet6_ifaddr * ifp; struct inet6_ifaddr * ifp;
struct in6_addr addr; struct in6_addr addr;
int create = 0, update_lft = 0; int create = 0, update_lft = 0;
struct net *net = dev_net(dev);
if (pinfo->prefix_len == 64) { if (pinfo->prefix_len == 64) {
memcpy(&addr, &pinfo->prefix, 8); memcpy(&addr, &pinfo->prefix, 8);
...@@ -1881,7 +1882,7 @@ void addrconf_prefix_rcv(struct net_device *dev, u8 *opt, int len) ...@@ -1881,7 +1882,7 @@ void addrconf_prefix_rcv(struct net_device *dev, u8 *opt, int len)
ok: ok:
ifp = ipv6_get_ifaddr(dev_net(dev), &addr, dev, 1); ifp = ipv6_get_ifaddr(net, &addr, dev, 1);
if (ifp == NULL && valid_lft) { if (ifp == NULL && valid_lft) {
int max_addresses = in6_dev->cnf.max_addresses; int max_addresses = in6_dev->cnf.max_addresses;
...@@ -1889,7 +1890,7 @@ ok: ...@@ -1889,7 +1890,7 @@ ok:
#ifdef CONFIG_IPV6_OPTIMISTIC_DAD #ifdef CONFIG_IPV6_OPTIMISTIC_DAD
if (in6_dev->cnf.optimistic_dad && if (in6_dev->cnf.optimistic_dad &&
!ipv6_devconf.forwarding) !net->ipv6.devconf_all->forwarding)
addr_flags = IFA_F_OPTIMISTIC; addr_flags = IFA_F_OPTIMISTIC;
#endif #endif
...@@ -2314,11 +2315,12 @@ static void init_loopback(struct net_device *dev) ...@@ -2314,11 +2315,12 @@ static void init_loopback(struct net_device *dev)
static void addrconf_add_linklocal(struct inet6_dev *idev, struct in6_addr *addr) static void addrconf_add_linklocal(struct inet6_dev *idev, struct in6_addr *addr)
{ {
struct inet6_ifaddr * ifp; struct inet6_ifaddr * ifp;
struct net *net = dev_net(idev->dev);
u32 addr_flags = IFA_F_PERMANENT; u32 addr_flags = IFA_F_PERMANENT;
#ifdef CONFIG_IPV6_OPTIMISTIC_DAD #ifdef CONFIG_IPV6_OPTIMISTIC_DAD
if (idev->cnf.optimistic_dad && if (idev->cnf.optimistic_dad &&
!ipv6_devconf.forwarding) !net->ipv6.devconf_all->forwarding)
addr_flags |= IFA_F_OPTIMISTIC; addr_flags |= IFA_F_OPTIMISTIC;
#endif #endif
......
...@@ -60,7 +60,7 @@ int ipv6_sock_ac_join(struct sock *sk, int ifindex, struct in6_addr *addr) ...@@ -60,7 +60,7 @@ int ipv6_sock_ac_join(struct sock *sk, int ifindex, struct in6_addr *addr)
struct inet6_dev *idev; struct inet6_dev *idev;
struct ipv6_ac_socklist *pac; struct ipv6_ac_socklist *pac;
struct net *net = sock_net(sk); struct net *net = sock_net(sk);
int ishost = !ipv6_devconf.forwarding; int ishost = !net->ipv6.devconf_all->forwarding;
int err = 0; int err = 0;
if (!capable(CAP_NET_ADMIN)) if (!capable(CAP_NET_ADMIN))
......
...@@ -319,7 +319,7 @@ static int ipv6_rthdr_rcv(struct sk_buff *skb) ...@@ -319,7 +319,7 @@ static int ipv6_rthdr_rcv(struct sk_buff *skb)
int n, i; int n, i;
struct ipv6_rt_hdr *hdr; struct ipv6_rt_hdr *hdr;
struct rt0_hdr *rthdr; struct rt0_hdr *rthdr;
int accept_source_route = ipv6_devconf.accept_source_route; int accept_source_route = dev_net(skb->dev)->ipv6.devconf_all->accept_source_route;
idev = in6_dev_get(skb->dev); idev = in6_dev_get(skb->dev);
if (idev) { if (idev) {
......
...@@ -249,7 +249,7 @@ int ip6_mc_input(struct sk_buff *skb) ...@@ -249,7 +249,7 @@ int ip6_mc_input(struct sk_buff *skb)
/* /*
* IPv6 multicast router mode is now supported ;) * IPv6 multicast router mode is now supported ;)
*/ */
if (ipv6_devconf.mc_forwarding && if (dev_net(skb->dev)->ipv6.devconf_all->mc_forwarding &&
likely(!(IP6CB(skb)->flags & IP6SKB_FORWARDED))) { likely(!(IP6CB(skb)->flags & IP6SKB_FORWARDED))) {
/* /*
* Okay, we try to forward - split and duplicate * Okay, we try to forward - split and duplicate
......
...@@ -411,7 +411,7 @@ int ip6_forward(struct sk_buff *skb) ...@@ -411,7 +411,7 @@ int ip6_forward(struct sk_buff *skb)
struct inet6_skb_parm *opt = IP6CB(skb); struct inet6_skb_parm *opt = IP6CB(skb);
struct net *net = dev_net(dst->dev); struct net *net = dev_net(dst->dev);
if (ipv6_devconf.forwarding == 0) if (net->ipv6.devconf_all->forwarding == 0)
goto error; goto error;
if (skb_warn_if_lro(skb)) if (skb_warn_if_lro(skb))
...@@ -458,7 +458,7 @@ int ip6_forward(struct sk_buff *skb) ...@@ -458,7 +458,7 @@ int ip6_forward(struct sk_buff *skb)
} }
/* XXX: idev->cnf.proxy_ndp? */ /* XXX: idev->cnf.proxy_ndp? */
if (ipv6_devconf.proxy_ndp && if (net->ipv6.devconf_all->proxy_ndp &&
pneigh_lookup(&nd_tbl, net, &hdr->daddr, skb->dev, 0)) { pneigh_lookup(&nd_tbl, net, &hdr->daddr, skb->dev, 0)) {
int proxied = ip6_forward_proxy_check(skb); int proxied = ip6_forward_proxy_check(skb);
if (proxied > 0) if (proxied > 0)
......
...@@ -1038,7 +1038,7 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname, ...@@ -1038,7 +1038,7 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname,
dst_release(dst); dst_release(dst);
} }
if (val < 0) if (val < 0)
val = ipv6_devconf.hop_limit; val = sock_net(sk)->ipv6.devconf_all->hop_limit;
break; break;
} }
......
...@@ -151,7 +151,7 @@ static int ip6_mc_leave_src(struct sock *sk, struct ipv6_mc_socklist *iml, ...@@ -151,7 +151,7 @@ static int ip6_mc_leave_src(struct sock *sk, struct ipv6_mc_socklist *iml,
#define IGMP6_UNSOLICITED_IVAL (10*HZ) #define IGMP6_UNSOLICITED_IVAL (10*HZ)
#define MLD_QRV_DEFAULT 2 #define MLD_QRV_DEFAULT 2
#define MLD_V1_SEEN(idev) (ipv6_devconf.force_mld_version == 1 || \ #define MLD_V1_SEEN(idev) (dev_net((idev)->dev)->ipv6.devconf_all->force_mld_version == 1 || \
(idev)->cnf.force_mld_version == 1 || \ (idev)->cnf.force_mld_version == 1 || \
((idev)->mc_v1_seen && \ ((idev)->mc_v1_seen && \
time_before(jiffies, (idev)->mc_v1_seen))) time_before(jiffies, (idev)->mc_v1_seen)))
......
...@@ -784,15 +784,17 @@ static void ndisc_recv_ns(struct sk_buff *skb) ...@@ -784,15 +784,17 @@ static void ndisc_recv_ns(struct sk_buff *skb)
idev = ifp->idev; idev = ifp->idev;
} else { } else {
struct net *net = dev_net(dev);
idev = in6_dev_get(dev); idev = in6_dev_get(dev);
if (!idev) { if (!idev) {
/* XXX: count this drop? */ /* XXX: count this drop? */
return; return;
} }
if (ipv6_chk_acast_addr(dev_net(dev), dev, &msg->target) || if (ipv6_chk_acast_addr(net, dev, &msg->target) ||
(idev->cnf.forwarding && (idev->cnf.forwarding &&
(ipv6_devconf.proxy_ndp || idev->cnf.proxy_ndp) && (net->ipv6.devconf_all->proxy_ndp || idev->cnf.proxy_ndp) &&
(is_router = pndisc_is_router(&msg->target, dev)) >= 0)) { (is_router = pndisc_is_router(&msg->target, dev)) >= 0)) {
if (!(NEIGH_CB(skb)->flags & LOCALLY_ENQUEUED) && if (!(NEIGH_CB(skb)->flags & LOCALLY_ENQUEUED) &&
skb->pkt_type != PACKET_HOST && skb->pkt_type != PACKET_HOST &&
...@@ -921,6 +923,7 @@ static void ndisc_recv_na(struct sk_buff *skb) ...@@ -921,6 +923,7 @@ static void ndisc_recv_na(struct sk_buff *skb)
if (neigh) { if (neigh) {
u8 old_flags = neigh->flags; u8 old_flags = neigh->flags;
struct net *net = dev_net(dev);
if (neigh->nud_state & NUD_FAILED) if (neigh->nud_state & NUD_FAILED)
goto out; goto out;
...@@ -931,8 +934,8 @@ static void ndisc_recv_na(struct sk_buff *skb) ...@@ -931,8 +934,8 @@ static void ndisc_recv_na(struct sk_buff *skb)
* has already sent a NA to us. * has already sent a NA to us.
*/ */
if (lladdr && !memcmp(lladdr, dev->dev_addr, dev->addr_len) && if (lladdr && !memcmp(lladdr, dev->dev_addr, dev->addr_len) &&
ipv6_devconf.forwarding && ipv6_devconf.proxy_ndp && net->ipv6.devconf_all->forwarding && net->ipv6.devconf_all->proxy_ndp &&
pneigh_lookup(&nd_tbl, dev_net(dev), &msg->target, dev, 0)) { pneigh_lookup(&nd_tbl, net, &msg->target, dev, 0)) {
/* XXX: idev->cnf.prixy_ndp */ /* XXX: idev->cnf.prixy_ndp */
goto out; goto out;
} }
......
...@@ -676,7 +676,7 @@ static struct rt6_info *ip6_pol_route(struct net *net, struct fib6_table *table, ...@@ -676,7 +676,7 @@ static struct rt6_info *ip6_pol_route(struct net *net, struct fib6_table *table,
int strict = 0; int strict = 0;
int attempts = 3; int attempts = 3;
int err; int err;
int reachable = ipv6_devconf.forwarding ? 0 : RT6_LOOKUP_F_REACHABLE; int reachable = net->ipv6.devconf_all->forwarding ? 0 : RT6_LOOKUP_F_REACHABLE;
strict |= flags & RT6_LOOKUP_F_IFACE; strict |= flags & RT6_LOOKUP_F_IFACE;
...@@ -1058,7 +1058,7 @@ int ip6_dst_hoplimit(struct dst_entry *dst) ...@@ -1058,7 +1058,7 @@ int ip6_dst_hoplimit(struct dst_entry *dst)
hoplimit = idev->cnf.hop_limit; hoplimit = idev->cnf.hop_limit;
in6_dev_put(idev); in6_dev_put(idev);
} else } else
hoplimit = ipv6_devconf.hop_limit; hoplimit = dev_net(dev)->ipv6.devconf_all->hop_limit;
} }
return hoplimit; return hoplimit;
} }
......
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