X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fmfib%2Fmfib_entry.c;h=1aa8e0864ca7db5ff77e7b1a25d4dcb569d31095;hb=5a72c1c151f843a962cc1247213c063233e8b119;hp=acbe90bb10937cc20da846d5226c81ee805497b3;hpb=ce1b4c7f05ce28d7b73eb7ed0a8ea4bd483f09e9;p=vpp.git diff --git a/src/vnet/mfib/mfib_entry.c b/src/vnet/mfib/mfib_entry.c index acbe90bb109..1aa8e0864ca 100644 --- a/src/vnet/mfib/mfib_entry.c +++ b/src/vnet/mfib/mfib_entry.c @@ -292,6 +292,8 @@ mfib_entry_src_flush (mfib_entry_src_t *msrc) ({ mfib_itf_delete(mfib_itf_get(mfii)); })); + hash_free(msrc->mfes_itfs); + msrc->mfes_itfs = NULL; fib_path_list_unlock(msrc->mfes_pl); } @@ -404,14 +406,21 @@ mfib_entry_alloc (u32 fib_index, 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); @@ -1050,9 +1059,15 @@ mfib_entry_encode (fib_node_index_t mfib_entry_index, 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)