summaryrefslogtreecommitdiff
path: root/zebra/rt.h
diff options
context:
space:
mode:
Diffstat (limited to 'zebra/rt.h')
-rw-r--r--zebra/rt.h52
1 files changed, 47 insertions, 5 deletions
diff --git a/zebra/rt.h b/zebra/rt.h
index 3ce15e9640..6bbe69e983 100644
--- a/zebra/rt.h
+++ b/zebra/rt.h
@@ -41,17 +41,59 @@
* success failure should be handled by the caller.
*/
-extern int kernel_route_rib(struct prefix *, struct prefix *,
- struct route_entry *, struct route_entry *);
+
+enum southbound_results {
+ SOUTHBOUND_INSTALL_SUCCESS,
+ SOUTHBOUND_INSTALL_FAILURE,
+ SOUTHBOUND_DELETE_SUCCESS,
+ SOUTHBOUND_DELETE_FAILURE,
+};
+
+/*
+ * Install/delete the specified prefix p from the kernel
+ *
+ * old = NULL, new = pointer - Install new
+ * old = pointer, new = pointer - Route replace Old w/ New
+ * old = pointer, new = NULL, - Route Delete
+ *
+ * Please note not all kernels support route replace
+ * semantics so we will end up with a delete than
+ * a re-add.
+ */
+extern void kernel_route_rib(struct prefix *p, struct prefix *src_p,
+ struct route_entry *old, struct route_entry *new);
+
+/*
+ * So route install/failure may not be immediately known
+ * so let's separate it out and allow the result to
+ * be passed back up.
+ */
+extern void kernel_route_rib_pass_fail(struct prefix *p,
+ struct route_entry *re,
+ enum southbound_results res);
extern int kernel_address_add_ipv4(struct interface *, struct connected *);
extern int kernel_address_delete_ipv4(struct interface *, struct connected *);
extern int kernel_neigh_update(int, int, uint32_t, char *, int);
extern int kernel_interface_set_master(struct interface *master,
struct interface *slave);
-extern int kernel_add_lsp(zebra_lsp_t *);
-extern int kernel_upd_lsp(zebra_lsp_t *);
-extern int kernel_del_lsp(zebra_lsp_t *);
+
+extern void kernel_add_lsp(zebra_lsp_t *lsp);
+extern void kernel_upd_lsp(zebra_lsp_t *lsp);
+extern void kernel_del_lsp(zebra_lsp_t *lsp);
+
+/*
+ * Add the ability to pass back up the lsp install/delete
+ * success/failure.
+ *
+ * This functions goal is similiar to kernel_route_rib_pass_fail
+ * in that we are separating out the mechanics for
+ * the install/failure to set/unset flags and to notify
+ * as needed.
+ */
+extern void kernel_lsp_pass_fail(zebra_lsp_t *lsp,
+ enum southbound_results res);
+
extern int mpls_kernel_init(void);
extern int kernel_get_ipmr_sg_stats(struct zebra_vrf *zvrf, void *mroute);