diff options
author | Donald Sharp <sharpd@cumulusnetworks.com> | 2019-02-07 14:57:40 +0100 |
---|---|---|
committer | Donald Sharp <sharpd@cumulusnetworks.com> | 2019-02-07 16:14:17 +0100 |
commit | 547dc6429c9c97f2ff18c26ba51d94cc76350c8b (patch) | |
tree | 7ba7551da88554b07b4328144f364e7b53334383 /sharpd | |
parent | sharpd: Add start of global data structures (diff) | |
download | frr-547dc6429c9c97f2ff18c26ba51d94cc76350c8b.tar.xz frr-547dc6429c9c97f2ff18c26ba51d94cc76350c8b.zip |
sharpd: Move route global variables into the global data structure
Clean up the route global variables into a global data structure.
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Diffstat (limited to 'sharpd')
-rw-r--r-- | sharpd/sharp_globals.h | 21 | ||||
-rw-r--r-- | sharpd/sharp_main.c | 4 | ||||
-rw-r--r-- | sharpd/sharp_vty.c | 59 | ||||
-rw-r--r-- | sharpd/sharp_zebra.c | 49 |
4 files changed, 68 insertions, 65 deletions
diff --git a/sharpd/sharp_globals.h b/sharpd/sharp_globals.h index 6b6cafc3c..d3c802af4 100644 --- a/sharpd/sharp_globals.h +++ b/sharpd/sharp_globals.h @@ -22,7 +22,28 @@ #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 diff --git a/sharpd/sharp_main.c b/sharpd/sharp_main.c index c389b0bc3..79d8bf9f0 100644 --- a/sharpd/sharp_main.c +++ b/sharpd/sharp_main.c @@ -48,10 +48,6 @@ #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[] = { }; diff --git a/sharpd/sharp_vty.c b/sharpd/sharp_vty.c index 9ea9ff02d..a8819932e 100644 --- a/sharpd/sharp_vty.c +++ b/sharpd/sharp_vty.c @@ -30,24 +30,13 @@ #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; } diff --git a/sharpd/sharp_zebra.c b/sharpd/sharp_zebra.c index f6de086c0..58ace8c58 100644 --- a/sharpd/sharp_zebra.c +++ b/sharpd/sharp_zebra.c @@ -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); |