Commit 606a2b48 authored by Daniel Lezcano's avatar Daniel Lezcano Committed by David S. Miller

[NETNS][IPV6] route6 - Pass the network namespace parameter to rt6_lookup

Add a network namespace parameter to rt6_lookup().
Signed-off-by: default avatarDaniel Lezcano <dlezcano@fr.ibm.com>
Signed-off-by: default avatarBenjamin Thery <benjamin.thery@bull.net>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent cdb18761
...@@ -69,7 +69,8 @@ extern void rt6_sndmsg(int type, struct in6_addr *dst, ...@@ -69,7 +69,8 @@ extern void rt6_sndmsg(int type, struct in6_addr *dst,
int dstlen, int srclen, int dstlen, int srclen,
int metric, __u32 flags); int metric, __u32 flags);
extern struct rt6_info *rt6_lookup(struct in6_addr *daddr, extern struct rt6_info *rt6_lookup(struct net *net,
struct in6_addr *daddr,
struct in6_addr *saddr, struct in6_addr *saddr,
int oif, int flags); int oif, int flags);
......
...@@ -753,7 +753,7 @@ static void ipv6_del_addr(struct inet6_ifaddr *ifp) ...@@ -753,7 +753,7 @@ static void ipv6_del_addr(struct inet6_ifaddr *ifp)
struct rt6_info *rt; struct rt6_info *rt;
ipv6_addr_prefix(&prefix, &ifp->addr, ifp->prefix_len); ipv6_addr_prefix(&prefix, &ifp->addr, ifp->prefix_len);
rt = rt6_lookup(&prefix, NULL, ifp->idev->dev->ifindex, 1); rt = rt6_lookup(&init_net, &prefix, NULL, ifp->idev->dev->ifindex, 1);
if (rt && ((rt->rt6i_flags & (RTF_GATEWAY | RTF_DEFAULT)) == 0)) { if (rt && ((rt->rt6i_flags & (RTF_GATEWAY | RTF_DEFAULT)) == 0)) {
if (onlink == 0) { if (onlink == 0) {
...@@ -1700,7 +1700,7 @@ void addrconf_prefix_rcv(struct net_device *dev, u8 *opt, int len) ...@@ -1700,7 +1700,7 @@ void addrconf_prefix_rcv(struct net_device *dev, u8 *opt, int len)
if (pinfo->onlink) { if (pinfo->onlink) {
struct rt6_info *rt; struct rt6_info *rt;
rt = rt6_lookup(&pinfo->prefix, NULL, dev->ifindex, 1); rt = rt6_lookup(&init_net, &pinfo->prefix, NULL, dev->ifindex, 1);
if (rt && ((rt->rt6i_flags & (RTF_GATEWAY | RTF_DEFAULT)) == 0)) { if (rt && ((rt->rt6i_flags & (RTF_GATEWAY | RTF_DEFAULT)) == 0)) {
if (rt->rt6i_flags&RTF_EXPIRES) { if (rt->rt6i_flags&RTF_EXPIRES) {
......
...@@ -101,7 +101,7 @@ int ipv6_sock_ac_join(struct sock *sk, int ifindex, struct in6_addr *addr) ...@@ -101,7 +101,7 @@ int ipv6_sock_ac_join(struct sock *sk, int ifindex, struct in6_addr *addr)
if (ifindex == 0) { if (ifindex == 0) {
struct rt6_info *rt; struct rt6_info *rt;
rt = rt6_lookup(addr, NULL, 0, 0); rt = rt6_lookup(&init_net, addr, NULL, 0, 0);
if (rt) { if (rt) {
dev = rt->rt6i_dev; dev = rt->rt6i_dev;
dev_hold(dev); dev_hold(dev);
......
...@@ -602,7 +602,7 @@ ip6ip6_err(struct sk_buff *skb, struct inet6_skb_parm *opt, ...@@ -602,7 +602,7 @@ ip6ip6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
skb_reset_network_header(skb2); skb_reset_network_header(skb2);
/* Try to guess incoming interface */ /* Try to guess incoming interface */
rt = rt6_lookup(&ipv6_hdr(skb2)->saddr, NULL, 0, 0); rt = rt6_lookup(&init_net, &ipv6_hdr(skb2)->saddr, NULL, 0, 0);
if (rt && rt->rt6i_dev) if (rt && rt->rt6i_dev)
skb2->dev = rt->rt6i_dev; skb2->dev = rt->rt6i_dev;
...@@ -1112,7 +1112,7 @@ static void ip6_tnl_link_config(struct ip6_tnl *t) ...@@ -1112,7 +1112,7 @@ static void ip6_tnl_link_config(struct ip6_tnl *t)
int strict = (ipv6_addr_type(&p->raddr) & int strict = (ipv6_addr_type(&p->raddr) &
(IPV6_ADDR_MULTICAST|IPV6_ADDR_LINKLOCAL)); (IPV6_ADDR_MULTICAST|IPV6_ADDR_LINKLOCAL));
struct rt6_info *rt = rt6_lookup(&p->raddr, &p->laddr, struct rt6_info *rt = rt6_lookup(&init_net, &p->raddr, &p->laddr,
p->link, strict); p->link, strict);
if (rt == NULL) if (rt == NULL)
......
...@@ -208,7 +208,7 @@ int ipv6_sock_mc_join(struct sock *sk, int ifindex, struct in6_addr *addr) ...@@ -208,7 +208,7 @@ int ipv6_sock_mc_join(struct sock *sk, int ifindex, struct in6_addr *addr)
if (ifindex == 0) { if (ifindex == 0) {
struct rt6_info *rt; struct rt6_info *rt;
rt = rt6_lookup(addr, NULL, 0, 0); rt = rt6_lookup(&init_net, addr, NULL, 0, 0);
if (rt) { if (rt) {
dev = rt->rt6i_dev; dev = rt->rt6i_dev;
dev_hold(dev); dev_hold(dev);
...@@ -294,7 +294,7 @@ static struct inet6_dev *ip6_mc_find_dev(struct in6_addr *group, int ifindex) ...@@ -294,7 +294,7 @@ static struct inet6_dev *ip6_mc_find_dev(struct in6_addr *group, int ifindex)
if (ifindex == 0) { if (ifindex == 0) {
struct rt6_info *rt; struct rt6_info *rt;
rt = rt6_lookup(group, NULL, 0, 0); rt = rt6_lookup(&init_net, group, NULL, 0, 0);
if (rt) { if (rt) {
dev = rt->rt6i_dev; dev = rt->rt6i_dev;
dev_hold(dev); dev_hold(dev);
......
...@@ -553,8 +553,8 @@ out: ...@@ -553,8 +553,8 @@ out:
} }
struct rt6_info *rt6_lookup(struct in6_addr *daddr, struct in6_addr *saddr, struct rt6_info *rt6_lookup(struct net *net, struct in6_addr *daddr,
int oif, int strict) struct in6_addr *saddr, int oif, int strict)
{ {
struct flowi fl = { struct flowi fl = {
.oif = oif, .oif = oif,
...@@ -572,7 +572,7 @@ struct rt6_info *rt6_lookup(struct in6_addr *daddr, struct in6_addr *saddr, ...@@ -572,7 +572,7 @@ struct rt6_info *rt6_lookup(struct in6_addr *daddr, struct in6_addr *saddr,
flags |= RT6_LOOKUP_F_HAS_SADDR; flags |= RT6_LOOKUP_F_HAS_SADDR;
} }
dst = fib6_rule_lookup(&init_net, &fl, flags, ip6_pol_route_lookup); dst = fib6_rule_lookup(net, &fl, flags, ip6_pol_route_lookup);
if (dst->error == 0) if (dst->error == 0)
return (struct rt6_info *) dst; return (struct rt6_info *) dst;
...@@ -1159,7 +1159,7 @@ int ip6_route_add(struct fib6_config *cfg) ...@@ -1159,7 +1159,7 @@ int ip6_route_add(struct fib6_config *cfg)
if (!(gwa_type&IPV6_ADDR_UNICAST)) if (!(gwa_type&IPV6_ADDR_UNICAST))
goto out; goto out;
grt = rt6_lookup(gw_addr, NULL, cfg->fc_ifindex, 1); grt = rt6_lookup(&init_net, gw_addr, NULL, cfg->fc_ifindex, 1);
err = -EHOSTUNREACH; err = -EHOSTUNREACH;
if (grt == NULL) if (grt == NULL)
...@@ -1483,7 +1483,7 @@ void rt6_pmtu_discovery(struct in6_addr *daddr, struct in6_addr *saddr, ...@@ -1483,7 +1483,7 @@ void rt6_pmtu_discovery(struct in6_addr *daddr, struct in6_addr *saddr,
struct rt6_info *rt, *nrt; struct rt6_info *rt, *nrt;
int allfrag = 0; int allfrag = 0;
rt = rt6_lookup(daddr, saddr, dev->ifindex, 0); rt = rt6_lookup(dev->nd_net, daddr, saddr, dev->ifindex, 0);
if (rt == NULL) if (rt == NULL)
return; return;
......
...@@ -339,11 +339,11 @@ out: ...@@ -339,11 +339,11 @@ out:
skb_reset_network_header(skb2); skb_reset_network_header(skb2);
/* Try to guess incoming interface */ /* Try to guess incoming interface */
rt6i = rt6_lookup(&iph6->saddr, NULL, NULL, 0); rt6i = rt6_lookup(&init_net, &iph6->saddr, NULL, NULL, 0);
if (rt6i && rt6i->rt6i_dev) { if (rt6i && rt6i->rt6i_dev) {
skb2->dev = rt6i->rt6i_dev; skb2->dev = rt6i->rt6i_dev;
rt6i = rt6_lookup(&iph6->daddr, &iph6->saddr, NULL, 0); rt6i = rt6_lookup(&init_net, &iph6->daddr, &iph6->saddr, NULL, 0);
if (rt6i && rt6i->rt6i_dev && rt6i->rt6i_dev->type == ARPHRD_SIT) { if (rt6i && rt6i->rt6i_dev && rt6i->rt6i_dev->type == ARPHRD_SIT) {
struct ip_tunnel *t = netdev_priv(rt6i->rt6i_dev); struct ip_tunnel *t = netdev_priv(rt6i->rt6i_dev);
......
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