fib: Allow the creation of new source on the API
[vpp.git] / src / vnet / fib / fib_table.h
index 74be63d..11137e1 100644 (file)
 #include <vnet/mpls/mpls.h>
 #include <vnet/mpls/packet.h>
 
-/**
- * Keep a lock per-source and a total
- */
-#define FIB_TABLE_N_LOCKS (FIB_SOURCE_MAX+1)
-#define FIB_TABLE_TOTAL_LOCKS FIB_SOURCE_MAX
-
 /**
  * Flags for the source data
  */
@@ -89,7 +83,8 @@ typedef struct fib_table_t_
     /**
      * per-source number of locks on the table
      */
-    u16 ft_locks[FIB_TABLE_N_LOCKS];
+    u32 *ft_locks;
+    u32 ft_total_locks;
 
     /**
      * Table ID (hash key) for this FIB.
@@ -109,7 +104,7 @@ typedef struct fib_table_t_
     /**
      * Per-source route counters
      */
-    u32 ft_src_route_counts[FIB_SOURCE_MAX];
+    u32 *ft_src_route_counts;
 
     /**
      * Total route counters
@@ -945,6 +940,17 @@ extern void fib_table_walk(u32 fib_index,
                            fib_table_walk_fn_t fn,
                            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_w_src(u32 fib_index,
+                                 fib_protocol_t proto,
+                                 fib_source_t src,
+                                 fib_table_walk_fn_t fn,
+                                 void *ctx);
+
 /**
  * @brief Walk all entries in a sub-tree FIB table. The 'root' paraneter
  * is the prefix at the root of the sub-tree.
@@ -962,4 +968,12 @@ extern void fib_table_sub_tree_walk(u32 fib_index,
  */
 extern u8 *format_fib_table_memory(u8 *s, va_list *args);
 
+/**
+ * Debug function
+ */
+#if CLIB_DEBUG > 0
+extern void fib_table_assert_empty(const fib_table_t *fib_table);
+#endif
+
+
 #endif