aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv6/route.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/ipv6/route.c')
-rw-r--r--net/ipv6/route.c58
1 files changed, 29 insertions, 29 deletions
diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index 6bf60946698..0940729d2f9 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -314,7 +314,7 @@ static void ip6_dst_ifdown(struct dst_entry *dst, struct net_device *dev,
314static __inline__ int rt6_check_expired(const struct rt6_info *rt) 314static __inline__ int rt6_check_expired(const struct rt6_info *rt)
315{ 315{
316 return (rt->rt6i_flags & RTF_EXPIRES) && 316 return (rt->rt6i_flags & RTF_EXPIRES) &&
317 time_after(jiffies, rt->rt6i_expires); 317 time_after(jiffies, rt->dst.expires);
318} 318}
319 319
320static inline int rt6_need_strict(const struct in6_addr *daddr) 320static inline int rt6_need_strict(const struct in6_addr *daddr)
@@ -340,7 +340,7 @@ static inline struct rt6_info *rt6_device_match(struct net *net,
340 goto out; 340 goto out;
341 341
342 for (sprt = rt; sprt; sprt = sprt->dst.rt6_next) { 342 for (sprt = rt; sprt; sprt = sprt->dst.rt6_next) {
343 struct net_device *dev = sprt->rt6i_dev; 343 struct net_device *dev = sprt->dst.dev;
344 344
345 if (oif) { 345 if (oif) {
346 if (dev->ifindex == oif) 346 if (dev->ifindex == oif)
@@ -401,7 +401,7 @@ static void rt6_probe(struct rt6_info *rt)
401 401
402 target = (struct in6_addr *)&neigh->primary_key; 402 target = (struct in6_addr *)&neigh->primary_key;
403 addrconf_addr_solict_mult(target, &mcaddr); 403 addrconf_addr_solict_mult(target, &mcaddr);
404 ndisc_send_ns(rt->rt6i_dev, NULL, target, &mcaddr, NULL); 404 ndisc_send_ns(rt->dst.dev, NULL, target, &mcaddr, NULL);
405 } else { 405 } else {
406 read_unlock_bh(&neigh->lock); 406 read_unlock_bh(&neigh->lock);
407 } 407 }
@@ -419,7 +419,7 @@ static inline void rt6_probe(struct rt6_info *rt)
419 */ 419 */
420static inline int rt6_check_dev(struct rt6_info *rt, int oif) 420static inline int rt6_check_dev(struct rt6_info *rt, int oif)
421{ 421{
422 struct net_device *dev = rt->rt6i_dev; 422 struct net_device *dev = rt->dst.dev;
423 if (!oif || dev->ifindex == oif) 423 if (!oif || dev->ifindex == oif)
424 return 2; 424 return 2;
425 if ((dev->flags & IFF_LOOPBACK) && 425 if ((dev->flags & IFF_LOOPBACK) &&
@@ -538,7 +538,7 @@ static struct rt6_info *rt6_select(struct fib6_node *fn, int oif, int strict)
538 fn->rr_ptr = next; 538 fn->rr_ptr = next;
539 } 539 }
540 540
541 net = dev_net(rt0->rt6i_dev); 541 net = dev_net(rt0->dst.dev);
542 return match ? match : net->ipv6.ip6_null_entry; 542 return match ? match : net->ipv6.ip6_null_entry;
543} 543}
544 544
@@ -607,7 +607,7 @@ int rt6_route_rcv(struct net_device *dev, u8 *opt, int len,
607 if (!addrconf_finite_timeout(lifetime)) { 607 if (!addrconf_finite_timeout(lifetime)) {
608 rt->rt6i_flags &= ~RTF_EXPIRES; 608 rt->rt6i_flags &= ~RTF_EXPIRES;
609 } else { 609 } else {
610 rt->rt6i_expires = jiffies + HZ * lifetime; 610 rt->dst.expires = jiffies + HZ * lifetime;
611 rt->rt6i_flags |= RTF_EXPIRES; 611 rt->rt6i_flags |= RTF_EXPIRES;
612 } 612 }
613 dst_release(&rt->dst); 613 dst_release(&rt->dst);
@@ -709,7 +709,7 @@ static int __ip6_ins_rt(struct rt6_info *rt, struct nl_info *info)
709int ip6_ins_rt(struct rt6_info *rt) 709int ip6_ins_rt(struct rt6_info *rt)
710{ 710{
711 struct nl_info info = { 711 struct nl_info info = {
712 .nl_net = dev_net(rt->rt6i_dev), 712 .nl_net = dev_net(rt->dst.dev),
713 }; 713 };
714 return __ip6_ins_rt(rt, &info); 714 return __ip6_ins_rt(rt, &info);
715} 715}
@@ -747,7 +747,7 @@ static struct rt6_info *rt6_alloc_cow(const struct rt6_info *ort,
747 747
748 retry: 748 retry:
749 if (rt6_bind_neighbour(rt)) { 749 if (rt6_bind_neighbour(rt)) {
750 struct net *net = dev_net(rt->rt6i_dev); 750 struct net *net = dev_net(rt->dst.dev);
751 int saved_rt_min_interval = 751 int saved_rt_min_interval =
752 net->ipv6.sysctl.ip6_rt_gc_min_interval; 752 net->ipv6.sysctl.ip6_rt_gc_min_interval;
753 int saved_rt_elasticity = 753 int saved_rt_elasticity =
@@ -931,7 +931,7 @@ struct dst_entry *ip6_blackhole_route(struct net *net, struct dst_entry *dst_ori
931 rt->rt6i_idev = ort->rt6i_idev; 931 rt->rt6i_idev = ort->rt6i_idev;
932 if (rt->rt6i_idev) 932 if (rt->rt6i_idev)
933 in6_dev_hold(rt->rt6i_idev); 933 in6_dev_hold(rt->rt6i_idev);
934 rt->rt6i_expires = 0; 934 rt->dst.expires = 0;
935 935
936 rt->rt6i_gateway = ort->rt6i_gateway; 936 rt->rt6i_gateway = ort->rt6i_gateway;
937 rt->rt6i_flags = ort->rt6i_flags & ~RTF_EXPIRES; 937 rt->rt6i_flags = ort->rt6i_flags & ~RTF_EXPIRES;
@@ -1265,7 +1265,7 @@ int ip6_route_add(struct fib6_config *cfg)
1265 } 1265 }
1266 1266
1267 rt->dst.obsolete = -1; 1267 rt->dst.obsolete = -1;
1268 rt->rt6i_expires = (cfg->fc_flags & RTF_EXPIRES) ? 1268 rt->dst.expires = (cfg->fc_flags & RTF_EXPIRES) ?
1269 jiffies + clock_t_to_jiffies(cfg->fc_expires) : 1269 jiffies + clock_t_to_jiffies(cfg->fc_expires) :
1270 0; 1270 0;
1271 1271
@@ -1360,12 +1360,12 @@ int ip6_route_add(struct fib6_config *cfg)
1360 if (!grt) 1360 if (!grt)
1361 goto out; 1361 goto out;
1362 if (dev) { 1362 if (dev) {
1363 if (dev != grt->rt6i_dev) { 1363 if (dev != grt->dst.dev) {
1364 dst_release(&grt->dst); 1364 dst_release(&grt->dst);
1365 goto out; 1365 goto out;
1366 } 1366 }
1367 } else { 1367 } else {
1368 dev = grt->rt6i_dev; 1368 dev = grt->dst.dev;
1369 idev = grt->rt6i_idev; 1369 idev = grt->rt6i_idev;
1370 dev_hold(dev); 1370 dev_hold(dev);
1371 in6_dev_hold(grt->rt6i_idev); 1371 in6_dev_hold(grt->rt6i_idev);
@@ -1445,7 +1445,7 @@ static int __ip6_del_rt(struct rt6_info *rt, struct nl_info *info)
1445{ 1445{
1446 int err; 1446 int err;
1447 struct fib6_table *table; 1447 struct fib6_table *table;
1448 struct net *net = dev_net(rt->rt6i_dev); 1448 struct net *net = dev_net(rt->dst.dev);
1449 1449
1450 if (rt == net->ipv6.ip6_null_entry) 1450 if (rt == net->ipv6.ip6_null_entry)
1451 return -ENOENT; 1451 return -ENOENT;
@@ -1464,7 +1464,7 @@ static int __ip6_del_rt(struct rt6_info *rt, struct nl_info *info)
1464int ip6_del_rt(struct rt6_info *rt) 1464int ip6_del_rt(struct rt6_info *rt)
1465{ 1465{
1466 struct nl_info info = { 1466 struct nl_info info = {
1467 .nl_net = dev_net(rt->rt6i_dev), 1467 .nl_net = dev_net(rt->dst.dev),
1468 }; 1468 };
1469 return __ip6_del_rt(rt, &info); 1469 return __ip6_del_rt(rt, &info);
1470} 1470}
@@ -1489,8 +1489,8 @@ static int ip6_route_del(struct fib6_config *cfg)
1489 if (fn) { 1489 if (fn) {
1490 for (rt = fn->leaf; rt; rt = rt->dst.rt6_next) { 1490 for (rt = fn->leaf; rt; rt = rt->dst.rt6_next) {
1491 if (cfg->fc_ifindex && 1491 if (cfg->fc_ifindex &&
1492 (!rt->rt6i_dev || 1492 (!rt->dst.dev ||
1493 rt->rt6i_dev->ifindex != cfg->fc_ifindex)) 1493 rt->dst.dev->ifindex != cfg->fc_ifindex))
1494 continue; 1494 continue;
1495 if (cfg->fc_flags & RTF_GATEWAY && 1495 if (cfg->fc_flags & RTF_GATEWAY &&
1496 !ipv6_addr_equal(&cfg->fc_gateway, &rt->rt6i_gateway)) 1496 !ipv6_addr_equal(&cfg->fc_gateway, &rt->rt6i_gateway))
@@ -1552,7 +1552,7 @@ restart:
1552 continue; 1552 continue;
1553 if (!(rt->rt6i_flags & RTF_GATEWAY)) 1553 if (!(rt->rt6i_flags & RTF_GATEWAY))
1554 continue; 1554 continue;
1555 if (fl6->flowi6_oif != rt->rt6i_dev->ifindex) 1555 if (fl6->flowi6_oif != rt->dst.dev->ifindex)
1556 continue; 1556 continue;
1557 if (!ipv6_addr_equal(&rdfl->gateway, &rt->rt6i_gateway)) 1557 if (!ipv6_addr_equal(&rdfl->gateway, &rt->rt6i_gateway))
1558 continue; 1558 continue;
@@ -1778,7 +1778,7 @@ void rt6_pmtu_discovery(const struct in6_addr *daddr, const struct in6_addr *sad
1778static struct rt6_info *ip6_rt_copy(const struct rt6_info *ort, 1778static struct rt6_info *ip6_rt_copy(const struct rt6_info *ort,
1779 const struct in6_addr *dest) 1779 const struct in6_addr *dest)
1780{ 1780{
1781 struct net *net = dev_net(ort->rt6i_dev); 1781 struct net *net = dev_net(ort->dst.dev);
1782 struct rt6_info *rt = ip6_dst_alloc(&net->ipv6.ip6_dst_ops, 1782 struct rt6_info *rt = ip6_dst_alloc(&net->ipv6.ip6_dst_ops,
1783 ort->dst.dev, 0); 1783 ort->dst.dev, 0);
1784 1784
@@ -1795,7 +1795,7 @@ static struct rt6_info *ip6_rt_copy(const struct rt6_info *ort,
1795 if (rt->rt6i_idev) 1795 if (rt->rt6i_idev)
1796 in6_dev_hold(rt->rt6i_idev); 1796 in6_dev_hold(rt->rt6i_idev);
1797 rt->dst.lastuse = jiffies; 1797 rt->dst.lastuse = jiffies;
1798 rt->rt6i_expires = 0; 1798 rt->dst.expires = 0;
1799 1799
1800 rt->rt6i_gateway = ort->rt6i_gateway; 1800 rt->rt6i_gateway = ort->rt6i_gateway;
1801 rt->rt6i_flags = ort->rt6i_flags & ~RTF_EXPIRES; 1801 rt->rt6i_flags = ort->rt6i_flags & ~RTF_EXPIRES;
@@ -1829,7 +1829,7 @@ static struct rt6_info *rt6_get_route_info(struct net *net,
1829 goto out; 1829 goto out;
1830 1830
1831 for (rt = fn->leaf; rt; rt = rt->dst.rt6_next) { 1831 for (rt = fn->leaf; rt; rt = rt->dst.rt6_next) {
1832 if (rt->rt6i_dev->ifindex != ifindex) 1832 if (rt->dst.dev->ifindex != ifindex)
1833 continue; 1833 continue;
1834 if ((rt->rt6i_flags & (RTF_ROUTEINFO|RTF_GATEWAY)) != (RTF_ROUTEINFO|RTF_GATEWAY)) 1834 if ((rt->rt6i_flags & (RTF_ROUTEINFO|RTF_GATEWAY)) != (RTF_ROUTEINFO|RTF_GATEWAY))
1835 continue; 1835 continue;
@@ -1884,7 +1884,7 @@ struct rt6_info *rt6_get_dflt_router(const struct in6_addr *addr, struct net_dev
1884 1884
1885 write_lock_bh(&table->tb6_lock); 1885 write_lock_bh(&table->tb6_lock);
1886 for (rt = table->tb6_root.leaf; rt; rt=rt->dst.rt6_next) { 1886 for (rt = table->tb6_root.leaf; rt; rt=rt->dst.rt6_next) {
1887 if (dev == rt->rt6i_dev && 1887 if (dev == rt->dst.dev &&
1888 ((rt->rt6i_flags & (RTF_ADDRCONF | RTF_DEFAULT)) == (RTF_ADDRCONF | RTF_DEFAULT)) && 1888 ((rt->rt6i_flags & (RTF_ADDRCONF | RTF_DEFAULT)) == (RTF_ADDRCONF | RTF_DEFAULT)) &&
1889 ipv6_addr_equal(&rt->rt6i_gateway, addr)) 1889 ipv6_addr_equal(&rt->rt6i_gateway, addr))
1890 break; 1890 break;
@@ -2128,7 +2128,7 @@ static int fib6_remove_prefsrc(struct rt6_info *rt, void *arg)
2128 struct net *net = ((struct arg_dev_net_ip *)arg)->net; 2128 struct net *net = ((struct arg_dev_net_ip *)arg)->net;
2129 struct in6_addr *addr = ((struct arg_dev_net_ip *)arg)->addr; 2129 struct in6_addr *addr = ((struct arg_dev_net_ip *)arg)->addr;
2130 2130
2131 if (((void *)rt->rt6i_dev == dev || !dev) && 2131 if (((void *)rt->dst.dev == dev || !dev) &&
2132 rt != net->ipv6.ip6_null_entry && 2132 rt != net->ipv6.ip6_null_entry &&
2133 ipv6_addr_equal(addr, &rt->rt6i_prefsrc.addr)) { 2133 ipv6_addr_equal(addr, &rt->rt6i_prefsrc.addr)) {
2134 /* remove prefsrc entry */ 2134 /* remove prefsrc entry */
@@ -2158,7 +2158,7 @@ static int fib6_ifdown(struct rt6_info *rt, void *arg)
2158 const struct arg_dev_net *adn = arg; 2158 const struct arg_dev_net *adn = arg;
2159 const struct net_device *dev = adn->dev; 2159 const struct net_device *dev = adn->dev;
2160 2160
2161 if ((rt->rt6i_dev == dev || !dev) && 2161 if ((rt->dst.dev == dev || !dev) &&
2162 rt != adn->net->ipv6.ip6_null_entry) 2162 rt != adn->net->ipv6.ip6_null_entry)
2163 return -1; 2163 return -1;
2164 2164
@@ -2211,7 +2211,7 @@ static int rt6_mtu_change_route(struct rt6_info *rt, void *p_arg)
2211 also have the lowest MTU, TOO BIG MESSAGE will be lead to 2211 also have the lowest MTU, TOO BIG MESSAGE will be lead to
2212 PMTU discouvery. 2212 PMTU discouvery.
2213 */ 2213 */
2214 if (rt->rt6i_dev == arg->dev && 2214 if (rt->dst.dev == arg->dev &&
2215 !dst_metric_locked(&rt->dst, RTAX_MTU) && 2215 !dst_metric_locked(&rt->dst, RTAX_MTU) &&
2216 (dst_mtu(&rt->dst) >= arg->mtu || 2216 (dst_mtu(&rt->dst) >= arg->mtu ||
2217 (dst_mtu(&rt->dst) < arg->mtu && 2217 (dst_mtu(&rt->dst) < arg->mtu &&
@@ -2392,7 +2392,7 @@ static int rt6_fill_node(struct net *net,
2392 rtm->rtm_type = RTN_UNREACHABLE; 2392 rtm->rtm_type = RTN_UNREACHABLE;
2393 else if (rt->rt6i_flags & RTF_LOCAL) 2393 else if (rt->rt6i_flags & RTF_LOCAL)
2394 rtm->rtm_type = RTN_LOCAL; 2394 rtm->rtm_type = RTN_LOCAL;
2395 else if (rt->rt6i_dev && (rt->rt6i_dev->flags & IFF_LOOPBACK)) 2395 else if (rt->dst.dev && (rt->dst.dev->flags & IFF_LOOPBACK))
2396 rtm->rtm_type = RTN_LOCAL; 2396 rtm->rtm_type = RTN_LOCAL;
2397 else 2397 else
2398 rtm->rtm_type = RTN_UNICAST; 2398 rtm->rtm_type = RTN_UNICAST;
@@ -2460,14 +2460,14 @@ static int rt6_fill_node(struct net *net,
2460 rcu_read_unlock(); 2460 rcu_read_unlock();
2461 2461
2462 if (rt->dst.dev) 2462 if (rt->dst.dev)
2463 NLA_PUT_U32(skb, RTA_OIF, rt->rt6i_dev->ifindex); 2463 NLA_PUT_U32(skb, RTA_OIF, rt->dst.dev->ifindex);
2464 2464
2465 NLA_PUT_U32(skb, RTA_PRIORITY, rt->rt6i_metric); 2465 NLA_PUT_U32(skb, RTA_PRIORITY, rt->rt6i_metric);
2466 2466
2467 if (!(rt->rt6i_flags & RTF_EXPIRES)) 2467 if (!(rt->rt6i_flags & RTF_EXPIRES))
2468 expires = 0; 2468 expires = 0;
2469 else if (rt->rt6i_expires - jiffies < INT_MAX) 2469 else if (rt->dst.expires - jiffies < INT_MAX)
2470 expires = rt->rt6i_expires - jiffies; 2470 expires = rt->dst.expires - jiffies;
2471 else 2471 else
2472 expires = INT_MAX; 2472 expires = INT_MAX;
2473 2473
@@ -2661,7 +2661,7 @@ static int rt6_info_route(struct rt6_info *rt, void *p_arg)
2661 seq_printf(m, " %08x %08x %08x %08x %8s\n", 2661 seq_printf(m, " %08x %08x %08x %08x %8s\n",
2662 rt->rt6i_metric, atomic_read(&rt->dst.__refcnt), 2662 rt->rt6i_metric, atomic_read(&rt->dst.__refcnt),
2663 rt->dst.__use, rt->rt6i_flags, 2663 rt->dst.__use, rt->rt6i_flags,
2664 rt->rt6i_dev ? rt->rt6i_dev->name : ""); 2664 rt->dst.dev ? rt->dst.dev->name : "");
2665 return 0; 2665 return 0;
2666} 2666}
2667 2667