]> git.puffer.fish Git - mirror/frr.git/commitdiff
zebra: Modify southbound interface to pass `struct route_node`
authorDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 24 Jan 2018 13:22:57 +0000 (08:22 -0500)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 24 Jan 2018 13:22:57 +0000 (08:22 -0500)
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>
zebra/rt.h
zebra/rt_netlink.c
zebra/rt_socket.c
zebra/zebra_rib.c

index bb4ff5bee809ed8692c942d2fcd3c596c998ab4c..54d45b889a303a9f4c9b014340bb7257b8c869a1 100644 (file)
@@ -60,15 +60,17 @@ enum southbound_results {
  * 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);
+extern void kernel_route_rib(struct route_node *rn, 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,
+extern void kernel_route_rib_pass_fail(struct route_node *rn,
+                                      struct prefix *p,
                                       struct route_entry *re,
                                       enum southbound_results res);
 
index 0221162a3091617cd9080bf7d954da5853ea213e..20cc292e111cffc35a9e979bfe4cffce4bade81a 100644 (file)
@@ -1642,8 +1642,9 @@ int kernel_get_ipmr_sg_stats(struct zebra_vrf *zvrf, void *in)
        return suc;
 }
 
-void kernel_route_rib(struct prefix *p, struct prefix *src_p,
-                     struct route_entry *old, struct route_entry *new)
+void kernel_route_rib(struct route_node *rn, struct prefix *p,
+                     struct prefix *src_p, struct route_entry *old,
+                     struct route_entry *new)
 {
        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,
                                                      src_p, new, 0);
                }
-               kernel_route_rib_pass_fail(p, new,
+               kernel_route_rib_pass_fail(rn, p, new,
                                           (!ret) ?
                                           SOUTHBOUND_INSTALL_SUCCESS :
                                           SOUTHBOUND_INSTALL_FAILURE);
@@ -1682,7 +1683,7 @@ void kernel_route_rib(struct prefix *p, struct prefix *src_p,
        if (old) {
                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) ?
                                           SOUTHBOUND_DELETE_SUCCESS :
                                           SOUTHBOUND_DELETE_FAILURE);
index 09fdf0b2d38f64abeb65646c3a3f46939246c851..6d4af1203c7d457e0174d31bee188ccd7b1bf45b 100644 (file)
@@ -387,8 +387,9 @@ static int kernel_rtm(int cmd, struct prefix *p, struct route_entry *re)
        return 0;
 }
 
-void kernel_route_rib(struct prefix *p, struct prefix *src_p,
-                     struct route_entry *old, struct route_entry *new)
+void kernel_route_rib(struct route_node *rn, struct prefix *p,
+                     struct prefix *src_p, struct route_entry *old,
+                     struct route_entry *new)
 {
        int route = 0;
 
@@ -410,12 +411,12 @@ void kernel_route_rib(struct prefix *p, struct prefix *src_p,
                zlog_err("Can't lower privileges");
 
        if (new) {
-               kernel_route_rib_pass_fail(p, new,
+               kernel_route_rib_pass_fail(rn, p, new,
                                           (!route) ?
                                           SOUTHBOUND_INSTALL_SUCCESS :
                                           SOUTHBOUND_INSTALL_FAILURE);
        } else {
-               kernel_route_rib_pass_fail(p, old,
+               kernel_route_rib_pass_fail(rn, p, old,
                                           (!route) ?
                                           SOUTHBOUND_DELETE_SUCCESS :
                                           SOUTHBOUND_DELETE_FAILURE);
index 78077a4b3d3f93116499f4c34e44424c6294d668..83eff7bdcff7ce18f0e8054e10e1c1ee08b46471 100644 (file)
@@ -998,7 +998,8 @@ int zebra_rib_labeled_unicast(struct route_entry *re)
        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)
 {
        struct nexthop *nexthop;
@@ -1083,7 +1084,7 @@ void rib_install_kernel(struct route_node *rn, struct route_entry *re,
         * the 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++;
 
        return;
@@ -1110,7 +1111,7 @@ void rib_uninstall_kernel(struct route_node *rn, struct route_entry *re)
         * the 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++;
 
        return;