FIB: encode the label stack in the FIB path during table dump
[vpp.git] / src / vnet / fib / fib_path_list.h
index b4b6985..380eb1a 100644 (file)
@@ -106,7 +106,7 @@ typedef enum fib_path_list_flags_t_ {
 
 extern fib_node_index_t fib_path_list_create(fib_path_list_flags_t flags,
                                             const fib_route_path_t *paths);
-extern fib_node_index_t fib_path_list_create_special(fib_protocol_t nh_proto,
+extern fib_node_index_t fib_path_list_create_special(dpo_proto_t nh_proto,
                                                     fib_path_list_flags_t flags,
                                                     const dpo_id_t *dpo);
 
@@ -127,8 +127,19 @@ extern fib_node_index_t fib_path_list_path_remove (
 
 extern u32 fib_path_list_get_n_paths(fib_node_index_t pl_index);
 
+/**
+ * Flags to control how the path-list returns forwarding information
+ */
+typedef enum fib_path_list_fwd_flags_t_
+{
+    FIB_PATH_LIST_FWD_FLAG_NONE = 0,
+    FIB_PATH_LIST_FWD_FLAG_COLLAPSE = (1 << 0),
+    FIB_PATH_LIST_FWD_FLAG_STICKY = (1 << 1),
+} fib_path_list_fwd_flags_t;
+
 extern void fib_path_list_contribute_forwarding(fib_node_index_t path_list_index,
                                                fib_forward_chain_type_t type,
+                                                fib_path_list_fwd_flags_t flags,
                                                dpo_id_t *dpo);
 extern void fib_path_list_contribute_urpf(fib_node_index_t path_index,
                                          index_t urpf);
@@ -150,9 +161,11 @@ extern int fib_path_list_recursive_loop_detect(fib_node_index_t path_list_index,
 extern u32 fib_path_list_get_resolving_interface(fib_node_index_t path_list_index);
 extern int fib_path_list_is_looped(fib_node_index_t path_list_index);
 extern int fib_path_list_is_popular(fib_node_index_t path_list_index);
-extern fib_protocol_t fib_path_list_get_proto(fib_node_index_t path_list_index);
+extern dpo_proto_t fib_path_list_get_proto(fib_node_index_t path_list_index);
 extern u8 * fib_path_list_format(fib_node_index_t pl_index,
                                 u8 * s);
+extern u8 * format_fib_path_list(u8 * s, va_list *args);
+
 extern index_t fib_path_list_lb_map_add_or_lock(fib_node_index_t pl_index,
                                                 const fib_node_index_t *pis);
 extern u32 fib_path_list_find_rpath (fib_node_index_t path_list_index,
@@ -170,6 +183,17 @@ extern void fib_path_list_walk(fib_node_index_t pl_index,
                               fib_path_list_walk_fn_t func,
                               void *ctx);
 
+typedef fib_path_list_walk_rc_t (*fib_path_list_walk_w_ext_fn_t)(
+    fib_node_index_t pl_index,
+    fib_node_index_t path_index,
+    const struct fib_path_ext_t_ *ext_list,
+    void *ctx);
+
+extern void fib_path_list_walk_w_ext(fib_node_index_t pl_index,
+                                     const fib_path_ext_list_t *ext_list,
+                                     fib_path_list_walk_w_ext_fn_t func,
+                                     void *ctx);
+
 extern void fib_path_list_module_init(void);
 
 extern void fib_path_list_module_init(void);