X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Ffib%2Ffib_entry_src.c;h=ff73cbf90f12fa1026cb68a9c0917b4cfb33f96a;hb=57b5860f013953ce161d05302e05370db9cd6ee2;hp=8c5082846a84556b2f1b7d617354553f527cf7ab;hpb=51822bf07a3f0fe72834ea94659faf6e262475ba;p=vpp.git diff --git a/src/vnet/fib/fib_entry_src.c b/src/vnet/fib/fib_entry_src.c index 8c5082846a8..ff73cbf90f1 100644 --- a/src/vnet/fib/fib_entry_src.c +++ b/src/vnet/fib/fib_entry_src.c @@ -193,6 +193,7 @@ typedef struct fib_entry_src_collect_forwarding_ctx_t_ const fib_entry_src_t *esrc; fib_forward_chain_type_t fct; int n_recursive_constrained; + u16 preference; } fib_entry_src_collect_forwarding_ctx_t; /** @@ -351,6 +352,22 @@ fib_entry_src_collect_forwarding (fib_node_index_t pl_index, { ctx->n_recursive_constrained += 1; } + if (0xffff == ctx->preference) + { + /* + * not set a preference yet, so the first path we encounter + * sets the preference we are collecting. + */ + ctx->preference = fib_path_get_preference(path_index); + } + else if (ctx->preference != fib_path_get_preference(path_index)) + { + /* + * this path does not belong to the same preference as the + * previous paths encountered. we are done now. + */ + return (FIB_PATH_LIST_WALK_STOP); + } /* * get the matching path-extension for the path being visited. @@ -422,6 +439,7 @@ fib_entry_src_mk_lb (fib_entry_t *fib_entry, .next_hops = NULL, .n_recursive_constrained = 0, .fct = fct, + .preference = 0xffff, }; /*