vlib: clean up r2 plugin registration relocator
[vpp.git] / src / vnet / fib / fib_attached_export.c
index a0f4e4e..c6ba057 100644 (file)
@@ -106,8 +106,7 @@ fib_entry_ae_add_or_lock (fib_node_index_t connected)
     {
         fed = fib_entry_delegate_find_or_add(entry,
                                              FIB_ENTRY_DELEGATE_ATTACHED_EXPORT);
-       pool_get(fib_ae_export_pool, export);
-       clib_memset(export, 0, sizeof(*export));
+       pool_get_zero(fib_ae_export_pool, export);
 
        fed->fd_index = (export - fib_ae_export_pool);
        export->faee_ei = connected;
@@ -152,7 +151,7 @@ fib_entry_import_add (fib_ae_import_t *import,
                      fib_node_index_t entry_index)
 {
     fib_node_index_t *existing;
-    const fib_prefix_t *prefix;
+    fib_prefix_t prefix;
 
     /*
      * ensure we only add the exported entry once, since
@@ -168,15 +167,15 @@ fib_entry_import_add (fib_ae_import_t *import,
 
     /*
      * this is the first time this export entry has been imported
-     * Add it to the import FIB and to the list of importeds
+     * Add it to the import FIB and to the list of importeds.
+     * make a copy of the prefix in case the underlying entry reallocs.
      */
-    prefix = fib_entry_get_prefix(entry_index);
+    fib_prefix_copy(&prefix, fib_entry_get_prefix(entry_index));
 
     /*
      * don't import entries that have the same prefix the import entry
      */
-    if (0 != fib_prefix_cmp(prefix,
-                           &import->faei_prefix))
+    if (0 != fib_prefix_cmp(&prefix, &import->faei_prefix))
     {
         const dpo_id_t *dpo;
 
@@ -185,7 +184,7 @@ fib_entry_import_add (fib_ae_import_t *import,
         if (dpo_id_is_valid(dpo) && !dpo_is_drop(dpo))
         {
             fib_table_entry_special_dpo_add(import->faei_import_fib,
-                                            prefix,
+                                            &prefix,
                                             FIB_SOURCE_AE,
                                             (fib_entry_get_flags(entry_index) |
                                              FIB_ENTRY_FLAG_EXCLUSIVE),
@@ -205,7 +204,7 @@ fib_entry_import_add (fib_ae_import_t *import,
 /**
  * Call back when walking a connected prefix's covered prefixes for import
  */
-static int
+static walk_rc_t
 fib_entry_covered_walk_import (fib_entry_t *cover,
                               fib_node_index_t covered,
                               void *ctx)
@@ -214,7 +213,7 @@ fib_entry_covered_walk_import (fib_entry_t *cover,
 
     fib_entry_import_add(import, covered);
 
-    return (0);
+    return (WALK_CONTINUE);
 }
 
 /*
@@ -249,13 +248,14 @@ fib_attached_export_import (fib_entry_t *fib_entry,
      */
     fei = fib_entry_get_index(fib_entry);
 
-    pool_get(fib_ae_import_pool, import);
+    pool_get_zero(fib_ae_import_pool, import);
 
     import->faei_import_fib = fib_entry->fe_fib_index;
     import->faei_export_fib = export_fib;
     import->faei_prefix = fib_entry->fe_prefix;
     import->faei_import_entry = fib_entry_get_index(fib_entry);
     import->faei_export_sibling = ~0;
+    import->faei_exporter = FIB_NODE_INDEX_INVALID;
 
     /*
      * do an exact match in the export table
@@ -273,7 +273,6 @@ fib_attached_export_import (fib_entry_t *fib_entry,
        import->faei_export_entry =
            fib_table_lookup(import->faei_export_fib,
                             &import->faei_prefix);
-       import->faei_exporter = FIB_NODE_INDEX_INVALID;
     }
     else
     {
@@ -364,7 +363,7 @@ fib_attached_export_purge (fib_entry_t *fib_entry)
 
             fed = fib_entry_delegate_find(export_entry,
                                           FIB_ENTRY_DELEGATE_ATTACHED_EXPORT);
-            ASSERT(NULL != fed);
+            ALWAYS_ASSERT(NULL != fed);
 
            export = pool_elt_at_index(fib_ae_export_pool, fed->fd_index);
 
@@ -379,6 +378,7 @@ fib_attached_export_purge (fib_entry_t *fib_entry)
             */
            if (0 == --export->faee_locks)
            {
+                vec_free (export->faee_importers);
                pool_put(fib_ae_export_pool, export);
                 fib_entry_delegate_remove(export_entry,
                                           FIB_ENTRY_DELEGATE_ATTACHED_EXPORT);
@@ -391,7 +391,7 @@ fib_attached_export_purge (fib_entry_t *fib_entry)
        pool_put(fib_ae_import_pool, import);
         fib_entry_delegate_remove(fib_entry,
                                   FIB_ENTRY_DELEGATE_ATTACHED_IMPORT);
-    }  
+    }
 }
 
 void
@@ -522,7 +522,7 @@ fib_ae_import_format (fib_node_index_t impi,
     s = format(s, "export-sibling:%d ", import->faei_export_sibling);
     s = format(s, "exporter:%d ", import->faei_exporter);
     s = format(s, "export-fib:%d ", import->faei_export_fib);
+
     s = format(s, "import-entry:%d ", import->faei_import_entry);
     s = format(s, "import-fib:%d ", import->faei_import_fib);
 
@@ -544,7 +544,7 @@ fib_ae_export_format (fib_node_index_t expi,
     fib_ae_export_t *export;
 
     export = pool_elt_at_index(fib_ae_export_pool, expi);
-    
+
     s = format(s, "\n  Attached-Export:%d:[", (export - fib_ae_export_pool));
     s = format(s, "export-entry:%d ", export->faee_ei);