mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-14 23:53:28 +00:00
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:
parent
872c4e980e
commit
7d974ba3b7
@ -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);
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user