* Instead the client/source provides the DPO to link to.
* Special entries are add/remove reference counted per-source. So n
* 'removes' are required for n 'adds', if the entry is no longer required.
- * An 'update' can only be used after an 'add' and is therefore assumed to act
- * on the reference instance of that add (an update is implemented as add/remove
- * pair).
+ * An 'update' is an 'add' if no 'add' has already been called, otherwise an 'add'
+ * is therefore assumed to act on the reference instance of that add.
*
* @param fib_entry_index
* The index of the FIB entry to update
* @return
* the index of the fib_entry_t that is created (or existed already).
*/
-extern void fib_table_entry_special_dpo_update (fib_node_index_t fib_entry_index,
- fib_source_t source,
- fib_entry_flag_t stype,
- const dpo_id_t *dpo);
+extern fib_node_index_t fib_table_entry_special_dpo_update (u32 fib_index,
+ const fib_prefix_t *prefix,
+ fib_source_t source,
+ fib_entry_flag_t stype,
+ const dpo_id_t *dpo);
/**
* @brief
* @param next_hop_weight
* [un]equal cost path weight
*
- * @param next_hop_label
- * The path's out-going label. INVALID is there is none.
+ * @param next_hop_label_stack
+ * The path's out-going label stack. NULL is there is none.
*
* @param pf
* Flags for the path
u32 next_hop_sw_if_index,
u32 next_hop_fib_index,
u32 next_hop_weight,
- mpls_label_t next_hop_label,
+ mpls_label_t *next_hop_label_stack,
fib_route_path_flags_t pf);
/**
* @brief
* Flags for the entry.
*
* @param rpaths
- * A vector of paths.
+ * A vector of paths. Not const since they may be modified.
*
* @return
* the index of the fib_entry_t that is created (or existed already).
const fib_prefix_t *prefix,
fib_source_t source,
fib_entry_flag_t flags,
- const fib_route_path_t *rpath);
+ fib_route_path_t *rpath);
/**
* @brief
extern void fib_table_entry_path_remove2(u32 fib_index,
const fib_prefix_t *prefix,
fib_source_t source,
- const fib_route_path_t *paths);
+ fib_route_path_t *paths);
/**
* @brief
* The ID of the client/source adding the entry.
*
* @param rpaths
- * A vector of paths.
+ * A vector of paths. Not const since they may be modified.
*
* @return
* the index of the fib_entry_t that is created (or existed already).
const fib_prefix_t *prefix,
fib_source_t source,
fib_entry_flag_t flags,
- const fib_route_path_t *paths);
+ fib_route_path_t *paths);
/**
* @brief
* @param next_hop_weight
* [un]equal cost path weight
*
- * @param next_hop_label
- * The path's out-going label. INVALID is there is none.
+ * @param next_hop_label_stack
+ * The path's out-going label stack. NULL is there is none.
*
* @param pf
* Flags for the path
u32 next_hop_sw_if_index,
u32 next_hop_fib_index,
u32 next_hop_weight,
- mpls_label_t next_hop_label,
+ mpls_label_t *next_hop_label_stack,
fib_route_path_flags_t pf);
/**