diff options
-rw-r--r-- | include/net/ip6_fib.h | 1 | ||||
-rw-r--r-- | net/ipv6/ip6_fib.c | 20 | ||||
-rw-r--r-- | net/ipv6/route.c | 20 |
3 files changed, 20 insertions, 21 deletions
diff --git a/include/net/ip6_fib.h b/include/net/ip6_fib.h index 7be4f4e3a0f2..9eda572a2a65 100644 --- a/include/net/ip6_fib.h +++ b/include/net/ip6_fib.h | |||
@@ -83,7 +83,6 @@ struct rt6_info | |||
83 | { | 83 | { |
84 | union { | 84 | union { |
85 | struct dst_entry dst; | 85 | struct dst_entry dst; |
86 | struct rt6_info *next; | ||
87 | } u; | 86 | } u; |
88 | 87 | ||
89 | struct inet6_dev *rt6i_idev; | 88 | struct inet6_dev *rt6i_idev; |
diff --git a/net/ipv6/ip6_fib.c b/net/ipv6/ip6_fib.c index f90ab5233326..8c9024890bbe 100644 --- a/net/ipv6/ip6_fib.c +++ b/net/ipv6/ip6_fib.c | |||
@@ -298,7 +298,7 @@ static int fib6_dump_node(struct fib6_walker_t *w) | |||
298 | int res; | 298 | int res; |
299 | struct rt6_info *rt; | 299 | struct rt6_info *rt; |
300 | 300 | ||
301 | for (rt = w->leaf; rt; rt = rt->u.next) { | 301 | for (rt = w->leaf; rt; rt = rt->u.dst.rt6_next) { |
302 | res = rt6_dump_route(rt, w->args); | 302 | res = rt6_dump_route(rt, w->args); |
303 | if (res < 0) { | 303 | if (res < 0) { |
304 | /* Frame is full, suspend walking */ | 304 | /* Frame is full, suspend walking */ |
@@ -624,11 +624,11 @@ static int fib6_add_rt2node(struct fib6_node *fn, struct rt6_info *rt, | |||
624 | fn->leaf == &ip6_null_entry && | 624 | fn->leaf == &ip6_null_entry && |
625 | !(rt->rt6i_flags & (RTF_DEFAULT | RTF_ADDRCONF)) ){ | 625 | !(rt->rt6i_flags & (RTF_DEFAULT | RTF_ADDRCONF)) ){ |
626 | fn->leaf = rt; | 626 | fn->leaf = rt; |
627 | rt->u.next = NULL; | 627 | rt->u.dst.rt6_next = NULL; |
628 | goto out; | 628 | goto out; |
629 | } | 629 | } |
630 | 630 | ||
631 | for (iter = fn->leaf; iter; iter=iter->u.next) { | 631 | for (iter = fn->leaf; iter; iter=iter->u.dst.rt6_next) { |
632 | /* | 632 | /* |
633 | * Search for duplicates | 633 | * Search for duplicates |
634 | */ | 634 | */ |
@@ -656,7 +656,7 @@ static int fib6_add_rt2node(struct fib6_node *fn, struct rt6_info *rt, | |||
656 | if (iter->rt6i_metric > rt->rt6i_metric) | 656 | if (iter->rt6i_metric > rt->rt6i_metric) |
657 | break; | 657 | break; |
658 | 658 | ||
659 | ins = &iter->u.next; | 659 | ins = &iter->u.dst.rt6_next; |
660 | } | 660 | } |
661 | 661 | ||
662 | /* | 662 | /* |
@@ -664,7 +664,7 @@ static int fib6_add_rt2node(struct fib6_node *fn, struct rt6_info *rt, | |||
664 | */ | 664 | */ |
665 | 665 | ||
666 | out: | 666 | out: |
667 | rt->u.next = iter; | 667 | rt->u.dst.rt6_next = iter; |
668 | *ins = rt; | 668 | *ins = rt; |
669 | rt->rt6i_node = fn; | 669 | rt->rt6i_node = fn; |
670 | atomic_inc(&rt->rt6i_ref); | 670 | atomic_inc(&rt->rt6i_ref); |
@@ -1105,7 +1105,7 @@ static void fib6_del_route(struct fib6_node *fn, struct rt6_info **rtp, | |||
1105 | RT6_TRACE("fib6_del_route\n"); | 1105 | RT6_TRACE("fib6_del_route\n"); |
1106 | 1106 | ||
1107 | /* Unlink it */ | 1107 | /* Unlink it */ |
1108 | *rtp = rt->u.next; | 1108 | *rtp = rt->u.dst.rt6_next; |
1109 | rt->rt6i_node = NULL; | 1109 | rt->rt6i_node = NULL; |
1110 | rt6_stats.fib_rt_entries--; | 1110 | rt6_stats.fib_rt_entries--; |
1111 | rt6_stats.fib_discarded_routes++; | 1111 | rt6_stats.fib_discarded_routes++; |
@@ -1115,14 +1115,14 @@ static void fib6_del_route(struct fib6_node *fn, struct rt6_info **rtp, | |||
1115 | FOR_WALKERS(w) { | 1115 | FOR_WALKERS(w) { |
1116 | if (w->state == FWS_C && w->leaf == rt) { | 1116 | if (w->state == FWS_C && w->leaf == rt) { |
1117 | RT6_TRACE("walker %p adjusted by delroute\n", w); | 1117 | RT6_TRACE("walker %p adjusted by delroute\n", w); |
1118 | w->leaf = rt->u.next; | 1118 | w->leaf = rt->u.dst.rt6_next; |
1119 | if (w->leaf == NULL) | 1119 | if (w->leaf == NULL) |
1120 | w->state = FWS_U; | 1120 | w->state = FWS_U; |
1121 | } | 1121 | } |
1122 | } | 1122 | } |
1123 | read_unlock(&fib6_walker_lock); | 1123 | read_unlock(&fib6_walker_lock); |
1124 | 1124 | ||
1125 | rt->u.next = NULL; | 1125 | rt->u.dst.rt6_next = NULL; |
1126 | 1126 | ||
1127 | if (fn->leaf == NULL && fn->fn_flags&RTN_TL_ROOT) | 1127 | if (fn->leaf == NULL && fn->fn_flags&RTN_TL_ROOT) |
1128 | fn->leaf = &ip6_null_entry; | 1128 | fn->leaf = &ip6_null_entry; |
@@ -1190,7 +1190,7 @@ int fib6_del(struct rt6_info *rt, struct nl_info *info) | |||
1190 | * Walk the leaf entries looking for ourself | 1190 | * Walk the leaf entries looking for ourself |
1191 | */ | 1191 | */ |
1192 | 1192 | ||
1193 | for (rtp = &fn->leaf; *rtp; rtp = &(*rtp)->u.next) { | 1193 | for (rtp = &fn->leaf; *rtp; rtp = &(*rtp)->u.dst.rt6_next) { |
1194 | if (*rtp == rt) { | 1194 | if (*rtp == rt) { |
1195 | fib6_del_route(fn, rtp, info); | 1195 | fib6_del_route(fn, rtp, info); |
1196 | return 0; | 1196 | return 0; |
@@ -1317,7 +1317,7 @@ static int fib6_clean_node(struct fib6_walker_t *w) | |||
1317 | struct rt6_info *rt; | 1317 | struct rt6_info *rt; |
1318 | struct fib6_cleaner_t *c = (struct fib6_cleaner_t*)w; | 1318 | struct fib6_cleaner_t *c = (struct fib6_cleaner_t*)w; |
1319 | 1319 | ||
1320 | for (rt = w->leaf; rt; rt = rt->u.next) { | 1320 | for (rt = w->leaf; rt; rt = rt->u.dst.rt6_next) { |
1321 | res = c->func(rt, c->arg); | 1321 | res = c->func(rt, c->arg); |
1322 | if (res < 0) { | 1322 | if (res < 0) { |
1323 | w->leaf = rt; | 1323 | w->leaf = rt; |
diff --git a/net/ipv6/route.c b/net/ipv6/route.c index fc8448cc5d21..a415ac610e2d 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c | |||
@@ -243,7 +243,7 @@ static __inline__ struct rt6_info *rt6_device_match(struct rt6_info *rt, | |||
243 | struct rt6_info *sprt; | 243 | struct rt6_info *sprt; |
244 | 244 | ||
245 | if (oif) { | 245 | if (oif) { |
246 | for (sprt = rt; sprt; sprt = sprt->u.next) { | 246 | for (sprt = rt; sprt; sprt = sprt->u.dst.rt6_next) { |
247 | struct net_device *dev = sprt->rt6i_dev; | 247 | struct net_device *dev = sprt->rt6i_dev; |
248 | if (dev->ifindex == oif) | 248 | if (dev->ifindex == oif) |
249 | return sprt; | 249 | return sprt; |
@@ -376,7 +376,7 @@ static struct rt6_info *rt6_select(struct rt6_info **head, int oif, | |||
376 | 376 | ||
377 | for (rt = rt0, metric = rt0->rt6i_metric; | 377 | for (rt = rt0, metric = rt0->rt6i_metric; |
378 | rt && rt->rt6i_metric == metric && (!last || rt != rt0); | 378 | rt && rt->rt6i_metric == metric && (!last || rt != rt0); |
379 | rt = rt->u.next) { | 379 | rt = rt->u.dst.rt6_next) { |
380 | int m; | 380 | int m; |
381 | 381 | ||
382 | if (rt6_check_expired(rt)) | 382 | if (rt6_check_expired(rt)) |
@@ -404,9 +404,9 @@ static struct rt6_info *rt6_select(struct rt6_info **head, int oif, | |||
404 | /* no entries matched; do round-robin */ | 404 | /* no entries matched; do round-robin */ |
405 | static DEFINE_SPINLOCK(lock); | 405 | static DEFINE_SPINLOCK(lock); |
406 | spin_lock(&lock); | 406 | spin_lock(&lock); |
407 | *head = rt0->u.next; | 407 | *head = rt0->u.dst.rt6_next; |
408 | rt0->u.next = last->u.next; | 408 | rt0->u.dst.rt6_next = last->u.dst.rt6_next; |
409 | last->u.next = rt0; | 409 | last->u.dst.rt6_next = rt0; |
410 | spin_unlock(&lock); | 410 | spin_unlock(&lock); |
411 | } | 411 | } |
412 | 412 | ||
@@ -1278,7 +1278,7 @@ static int ip6_route_del(struct fib6_config *cfg) | |||
1278 | &cfg->fc_src, cfg->fc_src_len); | 1278 | &cfg->fc_src, cfg->fc_src_len); |
1279 | 1279 | ||
1280 | if (fn) { | 1280 | if (fn) { |
1281 | for (rt = fn->leaf; rt; rt = rt->u.next) { | 1281 | for (rt = fn->leaf; rt; rt = rt->u.dst.rt6_next) { |
1282 | if (cfg->fc_ifindex && | 1282 | if (cfg->fc_ifindex && |
1283 | (rt->rt6i_dev == NULL || | 1283 | (rt->rt6i_dev == NULL || |
1284 | rt->rt6i_dev->ifindex != cfg->fc_ifindex)) | 1284 | rt->rt6i_dev->ifindex != cfg->fc_ifindex)) |
@@ -1329,7 +1329,7 @@ static struct rt6_info *__ip6_route_redirect(struct fib6_table *table, | |||
1329 | read_lock_bh(&table->tb6_lock); | 1329 | read_lock_bh(&table->tb6_lock); |
1330 | fn = fib6_lookup(&table->tb6_root, &fl->fl6_dst, &fl->fl6_src); | 1330 | fn = fib6_lookup(&table->tb6_root, &fl->fl6_dst, &fl->fl6_src); |
1331 | restart: | 1331 | restart: |
1332 | for (rt = fn->leaf; rt; rt = rt->u.next) { | 1332 | for (rt = fn->leaf; rt; rt = rt->u.dst.rt6_next) { |
1333 | /* | 1333 | /* |
1334 | * Current route is on-link; redirect is always invalid. | 1334 | * Current route is on-link; redirect is always invalid. |
1335 | * | 1335 | * |
@@ -1590,7 +1590,7 @@ static struct rt6_info *rt6_get_route_info(struct in6_addr *prefix, int prefixle | |||
1590 | if (!fn) | 1590 | if (!fn) |
1591 | goto out; | 1591 | goto out; |
1592 | 1592 | ||
1593 | for (rt = fn->leaf; rt; rt = rt->u.next) { | 1593 | for (rt = fn->leaf; rt; rt = rt->u.dst.rt6_next) { |
1594 | if (rt->rt6i_dev->ifindex != ifindex) | 1594 | if (rt->rt6i_dev->ifindex != ifindex) |
1595 | continue; | 1595 | continue; |
1596 | if ((rt->rt6i_flags & (RTF_ROUTEINFO|RTF_GATEWAY)) != (RTF_ROUTEINFO|RTF_GATEWAY)) | 1596 | if ((rt->rt6i_flags & (RTF_ROUTEINFO|RTF_GATEWAY)) != (RTF_ROUTEINFO|RTF_GATEWAY)) |
@@ -1641,7 +1641,7 @@ struct rt6_info *rt6_get_dflt_router(struct in6_addr *addr, struct net_device *d | |||
1641 | return NULL; | 1641 | return NULL; |
1642 | 1642 | ||
1643 | write_lock_bh(&table->tb6_lock); | 1643 | write_lock_bh(&table->tb6_lock); |
1644 | for (rt = table->tb6_root.leaf; rt; rt=rt->u.next) { | 1644 | for (rt = table->tb6_root.leaf; rt; rt=rt->u.dst.rt6_next) { |
1645 | if (dev == rt->rt6i_dev && | 1645 | if (dev == rt->rt6i_dev && |
1646 | ((rt->rt6i_flags & (RTF_ADDRCONF | RTF_DEFAULT)) == (RTF_ADDRCONF | RTF_DEFAULT)) && | 1646 | ((rt->rt6i_flags & (RTF_ADDRCONF | RTF_DEFAULT)) == (RTF_ADDRCONF | RTF_DEFAULT)) && |
1647 | ipv6_addr_equal(&rt->rt6i_gateway, addr)) | 1647 | ipv6_addr_equal(&rt->rt6i_gateway, addr)) |
@@ -1684,7 +1684,7 @@ void rt6_purge_dflt_routers(void) | |||
1684 | 1684 | ||
1685 | restart: | 1685 | restart: |
1686 | read_lock_bh(&table->tb6_lock); | 1686 | read_lock_bh(&table->tb6_lock); |
1687 | for (rt = table->tb6_root.leaf; rt; rt = rt->u.next) { | 1687 | for (rt = table->tb6_root.leaf; rt; rt = rt->u.dst.rt6_next) { |
1688 | if (rt->rt6i_flags & (RTF_DEFAULT | RTF_ADDRCONF)) { | 1688 | if (rt->rt6i_flags & (RTF_DEFAULT | RTF_ADDRCONF)) { |
1689 | dst_hold(&rt->u.dst); | 1689 | dst_hold(&rt->u.dst); |
1690 | read_unlock_bh(&table->tb6_lock); | 1690 | read_unlock_bh(&table->tb6_lock); |