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));
{
fib_entry = fib_entry_post_flag_update_actions(fib_entry,
old_flags);
- fib_entry_src_action_installed(fib_entry, source);
+ fib_entry = fib_entry_src_action_installed(fib_entry, source);
return (fib_entry);
}
return (fib_path_list_get_resolving_interface(fib_entry->fe_parent));
}
+u32
+fib_entry_get_any_resolving_interface (fib_node_index_t entry_index)
+{
+ const fib_entry_src_t *src;
+ fib_entry_t *fib_entry;
+ fib_source_t source;
+ u32 sw_if_index;
+
+ fib_entry = fib_entry_get(entry_index);
+
+ FOR_EACH_SRC_ADDED(fib_entry, src, source,
+ ({
+ sw_if_index = fib_entry_get_resolving_interface_for_source (entry_index,
+ source);
+
+ if (~0 != sw_if_index)
+ break;
+ }));
+ return (sw_if_index);
+}
+
fib_source_t
fib_entry_get_best_source (fib_node_index_t entry_index)
{
return (pool_elts(fib_entry_pool));
}
+#if CLIB_DEBUG > 0
+void
+fib_table_assert_empty (const fib_table_t *fib_table)
+{
+ fib_node_index_t *fei, *feis = NULL;
+ fib_entry_t *fib_entry;
+
+ 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))
+ {
+ vec_foreach (fei, feis)
+ clib_error ("%U", format_fib_entry, *fei, FIB_ENTRY_FORMAT_DETAIL);
+ }
+
+ ASSERT(0);
+}
+#endif
+
static clib_error_t *
show_fib_entry_command (vlib_main_t * vm,
unformat_input_t * input,
* 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);