fib_path_ext_list_flush(&esrc->fes_path_exts);
vec_del1(fib_entry->fe_srcs, index);
+ vec_sort_with_function(fib_entry->fe_srcs,
+ fib_entry_src_cmp_for_sort);
}
fib_entry_src_cover_res_t
/*
* else
* the path does not refine the cover, meaning that
- * the adjacency doesdoes not match the sub-net on the link.
+ * the adjacency does/does not match the sub-net on the link.
* So this path does not contribute forwarding.
*/
break;
/*
* As an optimisation we allocate the vector of next-hops to be sized
- * equal to the maximum nuber of paths we will need, which is also the
+ * equal to the maximum number of paths we will need, which is also the
* most likely number we will need, since in most cases the paths are 'up'.
*/
vec_validate(ctx.next_hops, fib_path_list_get_n_paths(esrc->fes_pl));
/*
* uninstall the forwarding chain from the forwarding tables
*/
- FIB_ENTRY_DBG(fib_entry, "uninstall: %d",
- fib_entry->fe_adj_index);
+ FIB_ENTRY_DBG(fib_entry, "uninstall");
if (dpo_id_is_valid(&fib_entry->fe_lb))
{
/*
* the covered source is itself a COVERED_INHERIT, i.e.
* it also pushes this source down the sub-tree.
- * We consider this more specfic covered to be the owner
+ * We consider this more specific covered to be the owner
* of the sub-tree from this point down.
*/
return (FIB_TABLE_WALK_SUB_TREE_STOP);
{
/*
* The covered's source was not inherited and it is also
- * not inherting. Nevertheless, it still owns the sub-tree from
+ * not inheriting. Nevertheless, it still owns the sub-tree from
* this point down.
*/
return (FIB_TABLE_WALK_SUB_TREE_STOP);
/*
* the covered source is itself a COVERED_INHERIT, i.e.
* it also pushes this source down the sub-tree.
- * We consider this more specfic covered to be the owner
+ * We consider this more specific covered to be the owner
* of the sub-tree from this point down.
*/
return (FIB_TABLE_WALK_SUB_TREE_STOP);
{
/*
* The covered's source was not inherited and it is also
- * not inherting. Nevertheless, it still owns the sub-tree from
+ * not inheriting. Nevertheless, it still owns the sub-tree from
* this point down.
*/
return (FIB_TABLE_WALK_SUB_TREE_STOP);
esrc = fib_entry_src_find(fib_entry, source);
if (NULL == esrc)
{
+ const dpo_id_t *dpo;
+
+ if (flags == FIB_ENTRY_FLAG_EXCLUSIVE) {
+ dpo = &rpath->dpo;
+ } else {
+ dpo = drop_dpo_get(fib_entry_get_dpo_proto(fib_entry));
+ }
+
fib_entry =
fib_entry_src_action_add(fib_entry,
source,
flags,
- drop_dpo_get(
- fib_entry_get_dpo_proto(fib_entry)));
+ dpo);
esrc = fib_entry_src_find(fib_entry, source);
}
if (NULL == esrc)
{
+ const dpo_id_t *dpo;
+
+ if (flags == FIB_ENTRY_FLAG_EXCLUSIVE) {
+ dpo = &rpaths->dpo;
+ } else {
+ dpo = drop_dpo_get(fib_entry_get_dpo_proto(fib_entry));
+ }
+
fib_entry = fib_entry_src_action_add(fib_entry,
source,
flags,
- drop_dpo_get(
- fib_entry_get_dpo_proto(fib_entry)));
+ dpo);
esrc = fib_entry_src_find(fib_entry, source);
}
else