Commit 7fc33165 authored by YOSHIFUJI Hideaki's avatar YOSHIFUJI Hideaki Committed by David S. Miller

[IPV6] ROUTE: Put SUBTREE() as FIB6_SUBTREE() into ip6_fib.h for future use.

Based on MIPL2 kernel patch.
Signed-off-by: default avatarYOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Signed-off-by: default avatarVille Nuorvala <vnuorval@tcs.hut.fi>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent fefc2a6c
...@@ -60,6 +60,11 @@ struct fib6_node ...@@ -60,6 +60,11 @@ struct fib6_node
__u32 fn_sernum; __u32 fn_sernum;
}; };
#ifndef CONFIG_IPV6_SUBTREES
#define FIB6_SUBTREE(fn) NULL
#else
#define FIB6_SUBTREE(fn) ((fn)->subtree)
#endif
/* /*
* routing information * routing information
......
...@@ -73,10 +73,8 @@ static DEFINE_RWLOCK(fib6_walker_lock); ...@@ -73,10 +73,8 @@ static DEFINE_RWLOCK(fib6_walker_lock);
#ifdef CONFIG_IPV6_SUBTREES #ifdef CONFIG_IPV6_SUBTREES
#define FWS_INIT FWS_S #define FWS_INIT FWS_S
#define SUBTREE(fn) ((fn)->subtree)
#else #else
#define FWS_INIT FWS_L #define FWS_INIT FWS_L
#define SUBTREE(fn) NULL
#endif #endif
static void fib6_prune_clones(struct fib6_node *fn, struct rt6_info *rt); static void fib6_prune_clones(struct fib6_node *fn, struct rt6_info *rt);
...@@ -854,7 +852,7 @@ static struct fib6_node * fib6_lookup_1(struct fib6_node *root, ...@@ -854,7 +852,7 @@ static struct fib6_node * fib6_lookup_1(struct fib6_node *root,
} }
while(fn) { while(fn) {
if (SUBTREE(fn) || fn->fn_flags & RTN_RTINFO) { if (FIB6_SUBTREE(fn) || fn->fn_flags & RTN_RTINFO) {
struct rt6key *key; struct rt6key *key;
key = (struct rt6key *) ((u8 *) fn->leaf + key = (struct rt6key *) ((u8 *) fn->leaf +
...@@ -985,7 +983,7 @@ static struct rt6_info * fib6_find_prefix(struct fib6_node *fn) ...@@ -985,7 +983,7 @@ static struct rt6_info * fib6_find_prefix(struct fib6_node *fn)
if(fn->right) if(fn->right)
return fn->right->leaf; return fn->right->leaf;
fn = SUBTREE(fn); fn = FIB6_SUBTREE(fn);
} }
return NULL; return NULL;
} }
...@@ -1016,7 +1014,7 @@ static struct fib6_node * fib6_repair_tree(struct fib6_node *fn) ...@@ -1016,7 +1014,7 @@ static struct fib6_node * fib6_repair_tree(struct fib6_node *fn)
if (fn->right) child = fn->right, children |= 1; if (fn->right) child = fn->right, children |= 1;
if (fn->left) child = fn->left, children |= 2; if (fn->left) child = fn->left, children |= 2;
if (children == 3 || SUBTREE(fn) if (children == 3 || FIB6_SUBTREE(fn)
#ifdef CONFIG_IPV6_SUBTREES #ifdef CONFIG_IPV6_SUBTREES
/* Subtree root (i.e. fn) may have one child */ /* Subtree root (i.e. fn) may have one child */
|| (children && fn->fn_flags&RTN_ROOT) || (children && fn->fn_flags&RTN_ROOT)
...@@ -1035,9 +1033,9 @@ static struct fib6_node * fib6_repair_tree(struct fib6_node *fn) ...@@ -1035,9 +1033,9 @@ static struct fib6_node * fib6_repair_tree(struct fib6_node *fn)
pn = fn->parent; pn = fn->parent;
#ifdef CONFIG_IPV6_SUBTREES #ifdef CONFIG_IPV6_SUBTREES
if (SUBTREE(pn) == fn) { if (FIB6_SUBTREE(pn) == fn) {
BUG_TRAP(fn->fn_flags&RTN_ROOT); BUG_TRAP(fn->fn_flags&RTN_ROOT);
SUBTREE(pn) = NULL; FIB6_SUBTREE(pn) = NULL;
nstate = FWS_L; nstate = FWS_L;
} else { } else {
BUG_TRAP(!(fn->fn_flags&RTN_ROOT)); BUG_TRAP(!(fn->fn_flags&RTN_ROOT));
...@@ -1085,7 +1083,7 @@ static struct fib6_node * fib6_repair_tree(struct fib6_node *fn) ...@@ -1085,7 +1083,7 @@ static struct fib6_node * fib6_repair_tree(struct fib6_node *fn)
read_unlock(&fib6_walker_lock); read_unlock(&fib6_walker_lock);
node_free(fn); node_free(fn);
if (pn->fn_flags&RTN_RTINFO || SUBTREE(pn)) if (pn->fn_flags&RTN_RTINFO || FIB6_SUBTREE(pn))
return pn; return pn;
rt6_release(pn->leaf); rt6_release(pn->leaf);
...@@ -1228,8 +1226,8 @@ static int fib6_walk_continue(struct fib6_walker_t *w) ...@@ -1228,8 +1226,8 @@ static int fib6_walk_continue(struct fib6_walker_t *w)
switch (w->state) { switch (w->state) {
#ifdef CONFIG_IPV6_SUBTREES #ifdef CONFIG_IPV6_SUBTREES
case FWS_S: case FWS_S:
if (SUBTREE(fn)) { if (FIB6_SUBTREE(fn)) {
w->node = SUBTREE(fn); w->node = FIB6_SUBTREE(fn);
continue; continue;
} }
w->state = FWS_L; w->state = FWS_L;
...@@ -1263,7 +1261,7 @@ static int fib6_walk_continue(struct fib6_walker_t *w) ...@@ -1263,7 +1261,7 @@ static int fib6_walk_continue(struct fib6_walker_t *w)
pn = fn->parent; pn = fn->parent;
w->node = pn; w->node = pn;
#ifdef CONFIG_IPV6_SUBTREES #ifdef CONFIG_IPV6_SUBTREES
if (SUBTREE(pn) == fn) { if (FIB6_SUBTREE(pn) == fn) {
BUG_TRAP(fn->fn_flags&RTN_ROOT); BUG_TRAP(fn->fn_flags&RTN_ROOT);
w->state = FWS_L; w->state = FWS_L;
continue; continue;
......
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