diff options
Diffstat (limited to 'zebra/rt.h')
| -rw-r--r-- | zebra/rt.h | 52 |
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); |
