pool_len(fib_entry_pool),
sizeof(fib_entry_t));
- pool_foreach(entry, fib_entry_pool,
- ({
+ pool_foreach (entry, fib_entry_pool)
+ {
n_srcs += vec_len(entry->fe_srcs);
vec_foreach(esrc, entry->fe_srcs)
{
n_exts += fib_path_ext_list_length(&esrc->fes_path_exts);
}
- }));
+ }
fib_show_memory_usage("Entry Source",
n_srcs, n_srcs, sizeof(fib_entry_src_t));
* then up on the right trigger is more code. i favour the latter.
*/
fib_entry_src_mk_lb(fib_entry,
- fib_entry_get_best_src_i(fib_entry),
+ fib_entry_get_best_source(fib_entry_index),
fct,
&tmp);
if (0 == index)
{
/*
- * only the best source gets to set the back walk flags
+ * only the best source gets to set the install result
*/
res = fib_entry_src_action_cover_update(fib_entry, esrc);
bflags = fib_entry_src_get_flags(esrc);
}
else
{
- fib_entry_src_action_cover_update(fib_entry, esrc);
+ /*
+ * contirubting sources can set backwalk flags
+ */
+ if (esrc->fes_flags & FIB_ENTRY_SRC_FLAG_CONTRIBUTING)
+ {
+ fib_entry_src_cover_res_t tmp = {
+ .install = !0,
+ .bw_reason = FIB_NODE_BW_REASON_FLAG_NONE,
+ };
+
+ tmp = fib_entry_src_action_cover_update(fib_entry, esrc);
+ res.bw_reason |= tmp.bw_reason;
+ }
+ else
+ {
+ fib_entry_src_action_cover_update(fib_entry, esrc);
+ }
}
index++;
}));
FOR_EACH_DELEGATE_CHAIN(fib_entry, fdt, fed,
{
fib_entry_src_mk_lb(fib_entry,
- fib_entry_get_best_src_i(fib_entry),
+ fib_entry_get_best_source(entry_index),
fib_entry_delegate_type_to_chain_type(fdt),
&fed->fd_dpo);
});
fib_node_index_t *fei, *feis = NULL;
fib_entry_t *fib_entry;
- pool_foreach (fib_entry, fib_entry_pool,
- ({
+ pool_foreach (fib_entry, fib_entry_pool)
+ {
if (fib_entry->fe_fib_index == fib_table->ft_index)
vec_add1 (feis, fib_entry_get_index(fib_entry));
- }));
+ }
if (vec_len(feis))
{
* show all
*/
vlib_cli_output (vm, "FIB Entries:");
- pool_foreach_index(fei, fib_entry_pool,
- ({
+ pool_foreach_index (fei, fib_entry_pool)
+ {
vlib_cli_output (vm, "%d@%U",
fei,
format_fib_entry, fei,
FIB_ENTRY_FORMAT_BRIEF);
- }));
+ }
}
return (NULL);