({
mfib_itf_delete(mfib_itf_get(mfii));
}));
+ hash_free(msrc->mfes_itfs);
+ msrc->mfes_itfs = NULL;
fib_path_list_unlock(msrc->mfes_pl);
}
mfib_entry_t *mfib_entry;
pool_get(mfib_entry_pool, mfib_entry);
- memset(mfib_entry, 0, sizeof(*mfib_entry));
fib_node_init(&mfib_entry->mfe_node,
FIB_NODE_TYPE_MFIB_ENTRY);
+ /*
+ * Some of the members require non-default initialisation
+ * so we also init those that don't and thus save on the call to memset.
+ */
+ mfib_entry->mfe_flags = 0;
mfib_entry->mfe_fib_index = fib_index;
mfib_entry->mfe_prefix = *prefix;
mfib_entry->mfe_parent = FIB_NODE_INDEX_INVALID;
+ mfib_entry->mfe_sibling = FIB_NODE_INDEX_INVALID;
+ mfib_entry->mfe_srcs = NULL;
+ mfib_entry->mfe_itfs = NULL;
dpo_reset(&mfib_entry->mfe_rep);
case FIB_FORW_CHAIN_TYPE_MPLS_NON_EOS:
case FIB_FORW_CHAIN_TYPE_MPLS_EOS:
case FIB_FORW_CHAIN_TYPE_ETHERNET:
+ case FIB_FORW_CHAIN_TYPE_NSH:
ASSERT(0);
break;
}
mfib_entry_t *mfib_entry;
mfib_entry = mfib_entry_get(mfib_entry_index);
- fib_path_list_walk(mfib_entry->mfe_parent, fib_path_encode, api_rpaths);
+ if (FIB_NODE_INDEX_INVALID != mfib_entry->mfe_parent)
+ {
+ fib_path_list_walk(mfib_entry->mfe_parent,
+ fib_path_encode,
+ api_rpaths);
+ }
}
+
void
mfib_entry_get_prefix (fib_node_index_t mfib_entry_index,
mfib_prefix_t *pfx)
return (NULL);
}
+/*?
+ * This commnad displays an entry, or all entries, in the mfib tables indexed by their unique
+ * numerical indentifier.
+ ?*/
VLIB_CLI_COMMAND (show_mfib_entry, static) = {
.path = "show mfib entry",
.function = show_mfib_entry_command,