fib: Copy the prefix before use in case the underlying entry reallocs.
[vpp.git] / src / vnet / fib / fib_attached_export.c
index feb304b..3c9c2bf 100644 (file)
@@ -28,7 +28,7 @@
 typedef struct fib_ae_import_t_
 {
     /**
-     * The entry in the epxort table that this importer
+     * The entry in the export table that this importer
      * is importing covereds from
      */
     fib_node_index_t faei_export_entry;
@@ -86,7 +86,7 @@ typedef struct fib_ae_export_t_ {
 } fib_ae_export_t;
 
 /*
- * memory pools for the importers and exportes
+ * memory pools for the importers and exporters
  */
 static fib_ae_import_t *fib_ae_import_pool;
 static fib_ae_export_t *fib_ae_export_pool;
@@ -99,8 +99,8 @@ fib_entry_ae_add_or_lock (fib_node_index_t connected)
     fib_entry_t *entry;
 
     entry = fib_entry_get(connected);
-    fed = fib_entry_delegate_get(entry,
-                                 FIB_ENTRY_DELEGATE_ATTACHED_EXPORT);
+    fed = fib_entry_delegate_find(entry,
+                                  FIB_ENTRY_DELEGATE_ATTACHED_EXPORT);
 
     if (NULL == fed)
     {
@@ -136,7 +136,7 @@ fib_entry_import_remove (fib_ae_import_t *import,
     if (index < vec_len(import->faei_importeds))
     {
        /*
-        * this is an entry that was previsouly imported
+        * this is an entry that was previously imported
         */
        fib_table_entry_special_remove(import->faei_import_fib,
                                       fib_entry_get_prefix(entry_index),
@@ -152,7 +152,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 +168,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 +185,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),
@@ -245,7 +245,7 @@ fib_attached_export_import (fib_entry_t *fib_entry,
     fib_node_index_t fei;
 
     /*
-     * save index for later post-realloc retreival
+     * save index for later post-realloc retrieval
      */
     fei = fib_entry_get_index(fib_entry);
 
@@ -310,15 +310,15 @@ fib_attached_export_import (fib_entry_t *fib_entry,
 }
 
 /**
- * \brief All the imported entries need to be pruged
+ * \brief All the imported entries need to be purged
  */
 void
 fib_attached_export_purge (fib_entry_t *fib_entry)
 {
     fib_entry_delegate_t *fed;
 
-    fed = fib_entry_delegate_get(fib_entry,
-                                 FIB_ENTRY_DELEGATE_ATTACHED_IMPORT);
+    fed = fib_entry_delegate_find(fib_entry,
+                                  FIB_ENTRY_DELEGATE_ATTACHED_IMPORT);
 
     if (NULL != fed)
     {
@@ -362,8 +362,8 @@ fib_attached_export_purge (fib_entry_t *fib_entry)
 
            export_entry = fib_entry_get(import->faei_export_entry);
 
-            fed = fib_entry_delegate_get(export_entry,
-                                         FIB_ENTRY_DELEGATE_ATTACHED_EXPORT);
+            fed = fib_entry_delegate_find(export_entry,
+                                          FIB_ENTRY_DELEGATE_ATTACHED_EXPORT);
             ASSERT(NULL != fed);
 
            export = pool_elt_at_index(fib_ae_export_pool, fed->fd_index);
@@ -400,8 +400,8 @@ fib_attached_export_covered_added (fib_entry_t *cover,
 {
     fib_entry_delegate_t *fed;
 
-    fed = fib_entry_delegate_get(cover,
-                                 FIB_ENTRY_DELEGATE_ATTACHED_EXPORT);
+    fed = fib_entry_delegate_find(cover,
+                                  FIB_ENTRY_DELEGATE_ATTACHED_EXPORT);
 
     if (NULL != fed)
     {
@@ -432,8 +432,8 @@ fib_attached_export_covered_removed (fib_entry_t *cover,
 {
     fib_entry_delegate_t *fed;
 
-    fed = fib_entry_delegate_get(cover,
-                                 FIB_ENTRY_DELEGATE_ATTACHED_EXPORT);
+    fed = fib_entry_delegate_find(cover,
+                                  FIB_ENTRY_DELEGATE_ATTACHED_EXPORT);
 
     if (NULL != fed)
     {
@@ -463,8 +463,8 @@ fib_attached_export_cover_modified_i (fib_entry_t *fib_entry)
 {
     fib_entry_delegate_t *fed;
 
-    fed = fib_entry_delegate_get(fib_entry,
-                                 FIB_ENTRY_DELEGATE_ATTACHED_IMPORT);
+    fed = fib_entry_delegate_find(fib_entry,
+                                  FIB_ENTRY_DELEGATE_ATTACHED_IMPORT);
 
     if (NULL != fed)
     {