zebra: Modify southbound interface to pass struct route_node

The route_node that we are working on is going to be interesting
to the kernel_route_rib_pass_fail.  So I am setting up the
code to allow me to pass it.  This will be done in a subsuquent
commit.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
This commit is contained in:
Donald Sharp 2018-01-24 08:22:57 -05:00
parent 872c4e980e
commit 7d974ba3b7
4 changed files with 19 additions and 14 deletions

View File

@ -60,15 +60,17 @@ enum southbound_results {
* semantics so we will end up with a delete than * semantics so we will end up with a delete than
* a re-add. * a re-add.
*/ */
extern void kernel_route_rib(struct prefix *p, struct prefix *src_p, extern void kernel_route_rib(struct route_node *rn, struct prefix *p,
struct route_entry *old, struct route_entry *new); struct prefix *src_p, struct route_entry *old,
struct route_entry *new);
/* /*
* So route install/failure may not be immediately known * So route install/failure may not be immediately known
* so let's separate it out and allow the result to * so let's separate it out and allow the result to
* be passed back up. * be passed back up.
*/ */
extern void kernel_route_rib_pass_fail(struct prefix *p, extern void kernel_route_rib_pass_fail(struct route_node *rn,
struct prefix *p,
struct route_entry *re, struct route_entry *re,
enum southbound_results res); enum southbound_results res);

View File

@ -1642,8 +1642,9 @@ int kernel_get_ipmr_sg_stats(struct zebra_vrf *zvrf, void *in)
return suc; return suc;
} }
void kernel_route_rib(struct prefix *p, struct prefix *src_p, void kernel_route_rib(struct route_node *rn, struct prefix *p,
struct route_entry *old, struct route_entry *new) struct prefix *src_p, struct route_entry *old,
struct route_entry *new)
{ {
int ret = 0; int ret = 0;
@ -1672,7 +1673,7 @@ void kernel_route_rib(struct prefix *p, struct prefix *src_p,
ret = netlink_route_multipath(RTM_NEWROUTE, p, ret = netlink_route_multipath(RTM_NEWROUTE, p,
src_p, new, 0); src_p, new, 0);
} }
kernel_route_rib_pass_fail(p, new, kernel_route_rib_pass_fail(rn, p, new,
(!ret) ? (!ret) ?
SOUTHBOUND_INSTALL_SUCCESS : SOUTHBOUND_INSTALL_SUCCESS :
SOUTHBOUND_INSTALL_FAILURE); SOUTHBOUND_INSTALL_FAILURE);
@ -1682,7 +1683,7 @@ void kernel_route_rib(struct prefix *p, struct prefix *src_p,
if (old) { if (old) {
ret = netlink_route_multipath(RTM_DELROUTE, p, src_p, old, 0); ret = netlink_route_multipath(RTM_DELROUTE, p, src_p, old, 0);
kernel_route_rib_pass_fail(p, old, kernel_route_rib_pass_fail(rn, p, old,
(!ret) ? (!ret) ?
SOUTHBOUND_DELETE_SUCCESS : SOUTHBOUND_DELETE_SUCCESS :
SOUTHBOUND_DELETE_FAILURE); SOUTHBOUND_DELETE_FAILURE);

View File

@ -387,8 +387,9 @@ static int kernel_rtm(int cmd, struct prefix *p, struct route_entry *re)
return 0; return 0;
} }
void kernel_route_rib(struct prefix *p, struct prefix *src_p, void kernel_route_rib(struct route_node *rn, struct prefix *p,
struct route_entry *old, struct route_entry *new) struct prefix *src_p, struct route_entry *old,
struct route_entry *new)
{ {
int route = 0; int route = 0;
@ -410,12 +411,12 @@ void kernel_route_rib(struct prefix *p, struct prefix *src_p,
zlog_err("Can't lower privileges"); zlog_err("Can't lower privileges");
if (new) { if (new) {
kernel_route_rib_pass_fail(p, new, kernel_route_rib_pass_fail(rn, p, new,
(!route) ? (!route) ?
SOUTHBOUND_INSTALL_SUCCESS : SOUTHBOUND_INSTALL_SUCCESS :
SOUTHBOUND_INSTALL_FAILURE); SOUTHBOUND_INSTALL_FAILURE);
} else { } else {
kernel_route_rib_pass_fail(p, old, kernel_route_rib_pass_fail(rn, p, old,
(!route) ? (!route) ?
SOUTHBOUND_DELETE_SUCCESS : SOUTHBOUND_DELETE_SUCCESS :
SOUTHBOUND_DELETE_FAILURE); SOUTHBOUND_DELETE_FAILURE);

View File

@ -998,7 +998,8 @@ int zebra_rib_labeled_unicast(struct route_entry *re)
return 1; return 1;
} }
void kernel_route_rib_pass_fail(struct prefix *p, struct route_entry *re, void kernel_route_rib_pass_fail(struct route_node *rn, struct prefix *p,
struct route_entry *re,
enum southbound_results res) enum southbound_results res)
{ {
struct nexthop *nexthop; struct nexthop *nexthop;
@ -1083,7 +1084,7 @@ void rib_install_kernel(struct route_node *rn, struct route_entry *re,
* the kernel. * the kernel.
*/ */
hook_call(rib_update, rn, "installing in kernel"); hook_call(rib_update, rn, "installing in kernel");
kernel_route_rib(p, src_p, old, re); kernel_route_rib(rn, p, src_p, old, re);
zvrf->installs++; zvrf->installs++;
return; return;
@ -1110,7 +1111,7 @@ void rib_uninstall_kernel(struct route_node *rn, struct route_entry *re)
* the kernel. * the kernel.
*/ */
hook_call(rib_update, rn, "uninstalling from kernel"); hook_call(rib_update, rn, "uninstalling from kernel");
kernel_route_rib(p, src_p, re, NULL); kernel_route_rib(rn, p, src_p, re, NULL);
zvrf->removals++; zvrf->removals++;
return; return;