MTRIE Optimisations 2
[vpp.git] / src / vnet / fib / fib_table.h
index cfec516..b310aea 100644 (file)
  */
 typedef struct fib_table_t_
 {
-    /**
-     * A union of the protocol specific FIBs that provide the
-     * underlying LPM mechanism.
-     * This element is first in the struct so that it is in the
-     * first cache line.
-     */
-    union {
-       ip4_fib_t v4;
-       ip6_fib_t v6;
-       mpls_fib_t mpls;
-    };
-
     /**
      * Which protocol this table serves. Used to switch on the union above.
      */
@@ -729,4 +717,20 @@ extern u32 fib_table_get_num_entries(u32 fib_index,
 extern fib_table_t *fib_table_get(fib_node_index_t index,
                                  fib_protocol_t proto);
 
+/**
+ * @brief Call back function when walking entries in a FIB table
+ */
+typedef int (*fib_table_walk_fn_t)(fib_node_index_t fei,
+                                   void *ctx);
+
+/**
+ * @brief Walk all entries in a FIB table
+ * N.B: This is NOT safe to deletes. If you need to delete walk the whole
+ * table and store elements in a vector, then delete the elements
+ */
+extern void fib_table_walk(u32 fib_index,
+                           fib_protocol_t proto,
+                           fib_table_walk_fn_t fn,
+                           void *ctx);
+
 #endif