FIB Interpose Source
[vpp.git] / src / vnet / fib / fib_attached_export.c
index fd597e3..3b8c6b4 100644 (file)
@@ -20,6 +20,7 @@
 #include <vnet/fib/fib_entry_cover.h>
 #include <vnet/fib/fib_entry_src.h>
 #include <vnet/fib/fib_entry_delegate.h>
+#include <vnet/dpo/drop_dpo.h>
 
 /**
  * A description of the need to import routes from the export table
@@ -184,7 +185,7 @@ fib_entry_import_add (fib_ae_import_t *import,
 
         dpo = fib_entry_contribute_ip_forwarding(entry_index);
 
-        if (dpo_id_is_valid(dpo))
+        if (dpo_id_is_valid(dpo) && !dpo_is_drop(dpo))
         {
             fib_table_entry_special_dpo_add(import->faei_import_fib,
                                             &prefix,
@@ -303,8 +304,8 @@ fib_attached_export_import (fib_entry_t *fib_entry,
      * may have realloc'd.
      */
     fib_entry = fib_entry_get(fei);
-        import->faei_export_sibling =
-         fib_entry_cover_track(fib_entry_get(import->faei_export_entry), fei);
+    import->faei_export_sibling =
+       fib_entry_cover_track(fib_entry_get(import->faei_export_entry), fei);
 
     fed = fib_entry_delegate_find_or_add(fib_entry,
                                          FIB_ENTRY_DELEGATE_ATTACHED_IMPORT);
@@ -514,67 +515,52 @@ fib_attached_export_cover_update (fib_entry_t *fib_entry)
 }
 
 u8*
-fib_ae_import_format (fib_entry_t *fib_entry,
+fib_ae_import_format (fib_node_index_t impi,
                      u8* s)
 {
-    fib_entry_delegate_t *fed;
-
-    fed = fib_entry_delegate_get(fib_entry,
-                                 FIB_ENTRY_DELEGATE_ATTACHED_IMPORT);
-
-    if (NULL != fed)
-    {
-       fib_node_index_t *index;
-       fib_ae_import_t *import;
-
-       import = pool_elt_at_index(fib_ae_import_pool, fed->fd_index);
+    fib_node_index_t *index;
+    fib_ae_import_t *import;
 
-       s = format(s, "\n  Attached-Import:%d:[", (import - fib_ae_import_pool));
-       s = format(s, "export-prefix:%U ", format_fib_prefix, &import->faei_prefix);
-       s = format(s, "export-entry:%d ", import->faei_export_entry);
-       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);
+    import = pool_elt_at_index(fib_ae_import_pool, impi);
 
-       s = format(s, "import-entry:%d ", import->faei_import_entry);
-       s = format(s, "import-fib:%d ", import->faei_import_fib);
+    s = format(s, "\n  Attached-Import:%d:[", (import - fib_ae_import_pool));
+    s = format(s, "export-prefix:%U ", format_fib_prefix, &import->faei_prefix);
+    s = format(s, "export-entry:%d ", import->faei_export_entry);
+    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);
 
-       s = format(s, "importeds:[");
-       vec_foreach(index, import->faei_importeds)
-       {
-           s = format(s, "%d, ", *index);
-       }
-           s = format(s, "]]");
+    s = format(s, "importeds:[");
+    vec_foreach(index, import->faei_importeds)
+    {
+        s = format(s, "%d, ", *index);
     }
+    s = format(s, "]]");
 
     return (s);
 }
 
 u8*
-fib_ae_export_format (fib_entry_t *fib_entry,
+fib_ae_export_format (fib_node_index_t expi,
                      u8* s)
 {
-    fib_entry_delegate_t *fed;
-
-    fed = fib_entry_delegate_get(fib_entry,
-                                 FIB_ENTRY_DELEGATE_ATTACHED_EXPORT);
-
-    if (NULL != fed)
-    {
-        fib_node_index_t *index;
-       fib_ae_export_t *export;
+    fib_node_index_t *index;
+    fib_ae_export_t *export;
 
-       export = pool_elt_at_index(fib_ae_export_pool, fed->fd_list);
+    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);
+    s = format(s, "\n  Attached-Export:%d:[", (export - fib_ae_export_pool));
+    s = format(s, "export-entry:%d ", export->faee_ei);
 
-       s = format(s, "importers:[");
-       vec_foreach(index, export->faee_importers)
-       {
-           s = format(s, "%d, ", *index);
-       }
-       s = format(s, "]]");
+    s = format(s, "importers:[");
+    vec_foreach(index, export->faee_importers)
+    {
+        s = format(s, "%d, ", *index);
     }
+    s = format(s, "]]");
+
     return (s);
 }