]> git.puffer.fish Git - matthieu/frr.git/commitdiff
sharpd: Move route global variables into the global data structure
authorDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 7 Feb 2019 13:57:40 +0000 (08:57 -0500)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 7 Feb 2019 15:14:17 +0000 (10:14 -0500)
Clean up the route global variables into a global data structure.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
sharpd/sharp_globals.h
sharpd/sharp_main.c
sharpd/sharp_vty.c
sharpd/sharp_zebra.c

index 6b6cafc3cafdab65079b42c57951629c55775acf..d3c802af43ad87ffeb6feef7c89b018705910099 100644 (file)
 #ifndef __SHARP_GLOBAL_H__
 #define __SHARP_GLOBAL_H__
 
+struct sharp_routes {
+       /* The original prefix for route installation */
+       struct prefix orig_prefix;
+
+       /* The nexthop group we are using for installation */
+       struct nexthop nhop;
+       struct nexthop_group nhop_group;
+
+       uint32_t total_routes;
+       uint32_t installed_routes;
+       uint32_t removed_routes;
+       int32_t repeat;
+
+       uint8_t inst;
+
+       struct timeval t_start;
+       struct timeval t_end;
+};
+
 struct sharp_global {
+       struct sharp_routes r;
 };
 
+extern struct sharp_global sg;
 #endif
index c389b0bc362f584581138845f019eaaa023c8cdb..79d8bf9f0704d10c72781eff5effdf0d6eff4fdd 100644 (file)
 #include "sharp_vty.h"
 #include "sharp_globals.h"
 
-uint32_t total_routes = 0;
-uint32_t installed_routes = 0;
-uint32_t removed_routes = 0;
-
 zebra_capabilities_t _caps_p[] = {
 };
 
index 9ea9ff02d4d7daadd53aed239ac5efff398f88a6..a8819932e95c96ed581eca05d2a1bf0bfe822a7c 100644 (file)
 #include "zclient.h"
 #include "nexthop_group.h"
 
+#include "sharpd/sharp_globals.h"
 #include "sharpd/sharp_zebra.h"
 #include "sharpd/sharp_vty.h"
 #ifndef VTYSH_EXTRACT_PL
 #include "sharpd/sharp_vty_clippy.c"
 #endif
 
-extern uint32_t total_routes;
-extern uint32_t installed_routes;
-extern uint32_t removed_routes;
-
-uint8_t inst;
-struct prefix prefix;
-struct prefix orig_prefix;
-struct nexthop nhop;
-struct nexthop_group nhop_group;
-uint32_t rts;
-int32_t repeat;
-
 DEFPY(watch_nexthop_v6, watch_nexthop_v6_cmd,
       "sharp watch nexthop X:X::X:X$nhop [connected$connected]",
       "Sharp routing Protocol\n"
@@ -109,18 +98,21 @@ DEFPY (install_routes,
        "Should we repeat this command\n"
        "How many times to repeat this command\n")
 {
-       total_routes = routes;
-       installed_routes = 0;
+       struct prefix prefix;
+       uint32_t rts;
+
+       sg.r.total_routes = routes;
+       sg.r.installed_routes = 0;
 
        if (rpt >= 2)
-               repeat = rpt * 2;
+               sg.r.repeat = rpt * 2;
        else
-               repeat = 0;
+               sg.r.repeat = 0;
 
        memset(&prefix, 0, sizeof(prefix));
-       memset(&orig_prefix, 0, sizeof(orig_prefix));
-       memset(&nhop, 0, sizeof(nhop));
-       memset(&nhop_group, 0, sizeof(nhop_group));
+       memset(&sg.r.orig_prefix, 0, sizeof(sg.r.orig_prefix));
+       memset(&sg.r.nhop, 0, sizeof(sg.r.nhop));
+       memset(&sg.r.nhop_group, 0, sizeof(sg.r.nhop_group));
 
        if (start4.s_addr != 0) {
                prefix.family = AF_INET;
@@ -131,7 +123,7 @@ DEFPY (install_routes,
                prefix.prefixlen = 128;
                prefix.u.prefix6 = start6;
        }
-       orig_prefix = prefix;
+       sg.r.orig_prefix = prefix;
 
        if (nexthop_group) {
                struct nexthop_group_cmd *nhgc = nhgc_find(nexthop_group);
@@ -142,22 +134,22 @@ DEFPY (install_routes,
                        return CMD_WARNING;
                }
 
-               nhop_group.nexthop = nhgc->nhg.nexthop;
+               sg.r.nhop_group.nexthop = nhgc->nhg.nexthop;
        } else {
                if (nexthop4.s_addr != INADDR_ANY) {
-                       nhop.gate.ipv4 = nexthop4;
-                       nhop.type = NEXTHOP_TYPE_IPV4;
+                       sg.r.nhop.gate.ipv4 = nexthop4;
+                       sg.r.nhop.type = NEXTHOP_TYPE_IPV4;
                } else {
-                       nhop.gate.ipv6 = nexthop6;
-                       nhop.type = NEXTHOP_TYPE_IPV6;
+                       sg.r.nhop.gate.ipv6 = nexthop6;
+                       sg.r.nhop.type = NEXTHOP_TYPE_IPV6;
                }
 
-               nhop_group.nexthop = &nhop;
+               sg.r.nhop_group.nexthop = &sg.r.nhop;
        }
 
-       inst = instance;
+       sg.r.inst = instance;
        rts = routes;
-       sharp_install_routes_helper(&prefix, inst, &nhop_group, rts);
+       sharp_install_routes_helper(&prefix, sg.r.inst, &sg.r.nhop_group, rts);
 
        return CMD_SUCCESS;
 }
@@ -204,8 +196,11 @@ DEFPY (remove_routes,
        "instance to use\n"
        "Value of instance\n")
 {
-       total_routes = routes;
-       removed_routes = 0;
+       struct prefix prefix;
+
+       sg.r.total_routes = routes;
+       sg.r.removed_routes = 0;
+       uint32_t rts;
 
        memset(&prefix, 0, sizeof(prefix));
 
@@ -219,9 +214,9 @@ DEFPY (remove_routes,
                prefix.u.prefix6 = start6;
        }
 
-       inst = instance;
+       sg.r.inst = instance;
        rts = routes;
-       sharp_remove_routes_helper(&prefix, inst, rts);
+       sharp_remove_routes_helper(&prefix, sg.r.inst, rts);
 
        return CMD_SUCCESS;
 }
index f6de086c0655399f3ba71e94ef1412cccd101874..58ace8c58b182f0a761df2d4cd00f5269b1e0581 100644 (file)
@@ -36,6 +36,7 @@
 #include "nexthop.h"
 #include "nexthop_group.h"
 
+#include "sharp_globals.h"
 #include "sharp_zebra.h"
 
 /* Zebra structure to hold current status. */
@@ -129,16 +130,6 @@ static int interface_state_down(int command, struct zclient *zclient,
        return 0;
 }
 
-static struct timeval t_start;
-static struct timeval t_end;
-extern uint32_t total_routes;
-extern uint32_t installed_routes;
-extern uint32_t removed_routes;
-extern int32_t repeat;
-extern struct prefix orig_prefix;
-extern struct nexthop_group nhop_group;
-extern uint8_t inst;
-
 void sharp_install_routes_helper(struct prefix *p, uint8_t instance,
                                 struct nexthop_group *nhg,
                                 uint32_t routes)
@@ -154,7 +145,7 @@ void sharp_install_routes_helper(struct prefix *p, uint8_t instance,
        } else
                temp = ntohl(p->u.val32[3]);
 
-       monotime(&t_start);
+       monotime(&sg.r.t_start);
        for (i = 0; i < routes; i++) {
                route_add(p, (uint8_t)instance, nhg);
                if (v4)
@@ -178,7 +169,7 @@ void sharp_remove_routes_helper(struct prefix *p, uint8_t instance,
        } else
                temp = ntohl(p->u.val32[3]);
 
-       monotime(&t_start);
+       monotime(&sg.r.t_start);
        for (i = 0; i < routes; i++) {
                route_delete(p, (uint8_t)instance);
                if (v4)
@@ -190,21 +181,21 @@ void sharp_remove_routes_helper(struct prefix *p, uint8_t instance,
 
 static void handle_repeated(bool installed)
 {
-       struct prefix p = orig_prefix;
-       repeat--;
+       struct prefix p = sg.r.orig_prefix;
+       sg.r.repeat--;
 
-       if (repeat <= 0)
+       if (sg.r.repeat <= 0)
                return;
 
        if (installed) {
-               removed_routes = 0;
-               sharp_remove_routes_helper(&p, inst, total_routes);
+               sg.r.removed_routes = 0;
+               sharp_remove_routes_helper(&p, sg.r.inst, sg.r.total_routes);
        }
 
-       if (!installed) {
-               installed_routes = 0;
-               sharp_install_routes_helper(&p, inst, &nhop_group,
-                                           total_routes);
+       if (installed) {
+               sg.r.installed_routes = 0;
+               sharp_install_routes_helper(&p, sg.r.inst, &sg.r.nhop_group,
+                                           sg.r.total_routes);
        }
 }
 
@@ -221,10 +212,10 @@ static int route_notify_owner(int command, struct zclient *zclient,
 
        switch (note) {
        case ZAPI_ROUTE_INSTALLED:
-               installed_routes++;
-               if (total_routes == installed_routes) {
-                       monotime(&t_end);
-                       timersub(&t_end, &t_start, &r);
+               sg.r.installed_routes++;
+               if (sg.r.total_routes == sg.r.installed_routes) {
+                       monotime(&sg.r.t_end);
+                       timersub(&sg.r.t_end, &sg.r.t_start, &r);
                        zlog_debug("Installed All Items %ld.%ld", r.tv_sec,
                                   r.tv_usec);
                        handle_repeated(true);
@@ -237,10 +228,10 @@ static int route_notify_owner(int command, struct zclient *zclient,
                zlog_debug("Better Admin Distance won over us");
                break;
        case ZAPI_ROUTE_REMOVED:
-               removed_routes++;
-               if (total_routes == removed_routes) {
-                       monotime(&t_end);
-                       timersub(&t_end, &t_start, &r);
+               sg.r.removed_routes++;
+               if (sg.r.total_routes == sg.r.removed_routes) {
+                       monotime(&sg.r.t_end);
+                       timersub(&sg.r.t_end, &sg.r.t_start, &r);
                        zlog_debug("Removed all Items %ld.%ld", r.tv_sec,
                                   r.tv_usec);
                        handle_repeated(false);