MFIB: changes to improve route add/delete performance
[vpp.git] / src / vnet / mfib / mfib_entry.c
index 5170080..1aa8e08 100644 (file)
@@ -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);
 
@@ -465,6 +474,7 @@ mfib_entry_src_collect_forwarding (fib_node_index_t pl_index,
     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;
     }
@@ -1049,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)
@@ -1147,6 +1163,10 @@ show_mfib_entry_command (vlib_main_t * vm,
     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,