fib: fib api updates
[vpp.git] / src / vnet / mfib / mfib_table.h
index c6b0b09..4746137 100644 (file)
  */
 typedef struct mfib_table_t_
 {
+    /**
+     * Required for pool_get_aligned
+     */
+    CLIB_CACHE_LINE_ALIGN_MARK(cacheline0);
+
     /**
      * A union of the protocol specific FIBs that provide the
      * underlying LPM mechanism.
@@ -80,7 +85,7 @@ typedef struct mfib_table_t_
  * @brief
  *  Format the description/name of the table
  */
-extern u8* format_mfib_table_name(u8* s, va_list ap);
+extern u8* format_mfib_table_name(u8* s, va_list *ap);
 
 /**
  * @brief
@@ -159,8 +164,11 @@ extern fib_node_index_t mfib_table_entry_update(u32 fib_index,
 extern fib_node_index_t mfib_table_entry_path_update(u32 fib_index,
                                                      const mfib_prefix_t *prefix,
                                                      mfib_source_t source,
-                                                     const fib_route_path_t *rpath,
-                                                     mfib_itf_flags_t flags);
+                                                     const fib_route_path_t *rpath);
+extern fib_node_index_t mfib_table_entry_paths_update(u32 fib_index,
+                                                      const mfib_prefix_t *prefix,
+                                                      mfib_source_t source,
+                                                      const fib_route_path_t *rpath);
 
 /**
  * @brief
@@ -185,6 +193,10 @@ extern void mfib_table_entry_path_remove(u32 fib_index,
                                          const mfib_prefix_t *prefix,
                                          mfib_source_t source,
                                          const fib_route_path_t *paths);
+extern void mfib_table_entry_paths_remove(u32 fib_index,
+                                          const mfib_prefix_t *prefix,
+                                          mfib_source_t source,
+                                          const fib_route_path_t *paths);
 
 
 
@@ -284,6 +296,21 @@ extern void mfib_table_flush(u32 fib_index,
 extern u32 mfib_table_get_index_for_sw_if_index(fib_protocol_t proto,
                                                 u32 sw_if_index);
 
+/**
+ * @brief
+ *  Get the Table-ID of the FIB from protocol and index
+ *
+ * @param fib_index
+ *  The FIB index
+ *
+ * @paran proto
+ *  The protocol of the FIB (and thus the entries therein)
+ *
+ * @return fib_index
+ *  The tableID of the FIB
+ */
+extern u32 mfib_table_get_table_id(u32 fib_index, fib_protocol_t proto);
+
 /**
  * @brief
  *  Get the index of the FIB for a Table-ID. This DOES NOT create the
@@ -300,6 +327,20 @@ extern u32 mfib_table_get_index_for_sw_if_index(fib_protocol_t proto,
  */
 extern u32 mfib_table_find(fib_protocol_t proto, u32 table_id);
 
+/**
+ * @brief
+ *  Get the Table-ID of the FIB from protocol and index
+ *
+ * @param fib_index
+ *  The FIB index
+ *
+ * @paran proto
+ *  The protocol of the FIB (and thus the entries therein)
+ *
+ * @return fib_index
+ *  The tableID of the FIB
+ */
+extern u32 mfib_table_get_table_id(u32 fib_index, fib_protocol_t proto);
 
 /**
  * @brief
@@ -322,6 +363,31 @@ extern u32 mfib_table_find_or_create_and_lock(fib_protocol_t proto,
                                               u32 table_id,
                                               mfib_source_t source);
 
+/**
+ * @brief
+ *  Get the index of the FIB for a Table-ID. This DOES create the
+ * FIB if it does not exist.
+ *
+ * @paran proto
+ *  The protocol of the FIB (and thus the entries therein)
+ *
+ * @param table-id
+ *  The Table-ID
+ *
+ * @return fib_index
+ *  The index of the FIB
+ *
+ * @param source
+ *  The ID of the client/source.
+ *
+ * @param name
+ *  The client is choosing the name they want the table to have
+ */
+extern u32 mfib_table_find_or_create_and_lock_w_name(fib_protocol_t proto,
+                                                     u32 table_id,
+                                                     mfib_source_t source,
+                                                     const u8 *name);
+
 
 /**
  * @brief
@@ -373,6 +439,22 @@ extern void mfib_table_lock(u32 fib_index,
 extern u32 mfib_table_get_num_entries(u32 fib_index,
                                       fib_protocol_t proto);
 
+/**
+ * @brief
+ *  Get the less specific (covering) prefix
+ *
+ * @param fib_index
+ *  The index of the FIB
+ *
+ * @param prefix
+ *  The prefix to lookup
+ *
+ * @return
+ *  The index of the less specific fib_entry_t.
+ */
+extern fib_node_index_t mfib_table_get_less_specific(u32 fib_index,
+                                                   const mfib_prefix_t *prefix);
+
 /**
  * @brief
  * Get a pointer to a FIB table
@@ -395,5 +477,16 @@ extern void mfib_table_walk(u32 fib_index,
                             fib_protocol_t proto,
                             mfib_table_walk_fn_t fn,
                             void *ctx);
+/**
+ * @brief format (display) the memory usage for mfibs
+ */
+extern u8 * format_mfib_table_memory(u8 * s, va_list * args);
+
+/**
+ * To assit UT
+ */
+extern u32 mfib_table_get_n_routes(fib_node_index_t index,
+                                   fib_protocol_t proto);
+
 
 #endif