]> git.proxmox.com Git - mirror_frr.git/commitdiff
pimd: Move some data tracking variables per VRF
authorDonald Sharp <sharpd@cumulusnetworks.com>
Sun, 18 Mar 2018 01:34:55 +0000 (21:34 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Sun, 18 Mar 2018 01:34:55 +0000 (21:34 -0400)
There were a few more global variables that needed to be per
vrf.  So move them over.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
pimd/pim_cmd.c
pimd/pim_instance.c
pimd/pim_instance.h
pimd/pim_nht.c
pimd/pim_rp.c
pimd/pim_rpf.c
pimd/pim_rpf.h
pimd/pim_zebra.c
pimd/pim_zlookup.c
pimd/pimd.c
pimd/pimd.h

index a8935bf80d94afbd9d567d29f0f678a45ce9a80c..2b21d661c3269f57c443dd759e72b6cab0df2f0d 100644 (file)
@@ -2572,7 +2572,7 @@ static void show_rpf_refresh_stats(struct vty *vty, struct pim_instance *pim,
        char refresh_uptime[10];
 
        pim_time_uptime_begin(refresh_uptime, sizeof(refresh_uptime), now,
-                             qpim_rpf_cache_refresh_last);
+                             pim->rpf_cache_refresh_last);
 
        if (json) {
                json_object_int_add(json, "rpfCacheRefreshDelayMsecs",
@@ -2581,15 +2581,15 @@ static void show_rpf_refresh_stats(struct vty *vty, struct pim_instance *pim,
                        json, "rpfCacheRefreshTimer",
                        pim_time_timer_remain_msec(pim->rpf_cache_refresher));
                json_object_int_add(json, "rpfCacheRefreshRequests",
-                                   qpim_rpf_cache_refresh_requests);
+                                   pim->rpf_cache_refresh_requests);
                json_object_int_add(json, "rpfCacheRefreshEvents",
-                                   qpim_rpf_cache_refresh_events);
+                                   pim->rpf_cache_refresh_events);
                json_object_string_add(json, "rpfCacheRefreshLast",
                                       refresh_uptime);
                json_object_int_add(json, "nexthopLookups",
-                                   qpim_nexthop_lookups);
+                                   pim->nexthop_lookups);
                json_object_int_add(json, "nexthopLookupsAvoided",
-                                   nexthop_lookups_avoided);
+                                   pim->nexthop_lookups_avoided);
        } else {
                vty_out(vty,
                        "RPF Cache Refresh Delay:    %ld msecs\n"
@@ -2601,10 +2601,10 @@ static void show_rpf_refresh_stats(struct vty *vty, struct pim_instance *pim,
                        "Nexthop Lookups Avoided:    %lld\n",
                        qpim_rpf_cache_refresh_delay_msec,
                        pim_time_timer_remain_msec(pim->rpf_cache_refresher),
-                       (long long)qpim_rpf_cache_refresh_requests,
-                       (long long)qpim_rpf_cache_refresh_events,
-                       refresh_uptime, (long long)qpim_nexthop_lookups,
-                       (long long)nexthop_lookups_avoided);
+                       (long long)pim->rpf_cache_refresh_requests,
+                       (long long)pim->rpf_cache_refresh_events,
+                       refresh_uptime, (long long)pim->nexthop_lookups,
+                       (long long)pim->nexthop_lookups_avoided);
        }
 }
 
@@ -2616,7 +2616,7 @@ static void show_scan_oil_stats(struct pim_instance *pim, struct vty *vty,
        char uptime_mroute_del[10];
 
        pim_time_uptime_begin(uptime_scan_oil, sizeof(uptime_scan_oil), now,
-                             qpim_scan_oil_last);
+                             pim->scan_oil_last);
        pim_time_uptime_begin(uptime_mroute_add, sizeof(uptime_mroute_add), now,
                              pim->mroute_add_last);
        pim_time_uptime_begin(uptime_mroute_del, sizeof(uptime_mroute_del), now,
@@ -2626,7 +2626,7 @@ static void show_scan_oil_stats(struct pim_instance *pim, struct vty *vty,
                "Scan OIL - Last: %s  Events: %lld\n"
                "MFC Add  - Last: %s  Events: %lld\n"
                "MFC Del  - Last: %s  Events: %lld\n",
-               uptime_scan_oil, (long long)qpim_scan_oil_events,
+               uptime_scan_oil, (long long)pim->scan_oil_events,
                uptime_mroute_add, (long long)pim->mroute_add_events,
                uptime_mroute_del, (long long)pim->mroute_del_events);
 }
index 60a3308a00e8ec2ec24df272bbd4c458fe902da6..ab4ffc26ae4906816e2eecfdc6f54c85d9ea1df8 100644 (file)
@@ -119,6 +119,7 @@ static struct pim_instance *pim_instance_init(struct vrf *vrf)
 
        pim_upstream_init(pim);
 
+       pim->last_route_change_time = -1;
        return pim;
 }
 
index e672c39fdc19830ce36471d2adc4af1ebfd79af1..75f011513fabf270052910ef01694151f6724968 100644 (file)
@@ -97,6 +97,15 @@ struct pim_instance {
 
        /* If we need to rescan all our upstreams */
        struct thread *rpf_cache_refresher;
+       int64_t rpf_cache_refresh_requests;
+       int64_t rpf_cache_refresh_events;
+       int64_t rpf_cache_refresh_last;
+       int64_t scan_oil_events;
+       int64_t scan_oil_last;
+
+       int64_t nexthop_lookups;
+       int64_t nexthop_lookups_avoided;
+       int64_t last_route_change_time;
 };
 
 void pim_vrf_init(void);
index 94f19bea777630662ad898edaf7c1202f6e754cc..94cb32bc23329fcc7d43931cf69406f94d2bcb73 100644 (file)
@@ -759,7 +759,7 @@ int pim_parse_nexthop_update(int command, struct zclient *zclient,
                        pnc->upstream_hash->count, listcount(pnc->rp_list));
        }
 
-       pim_rpf_set_refresh_time();
+       pim_rpf_set_refresh_time(pim);
 
        if (listcount(pnc->rp_list))
                pim_update_rp_nh(pim, pnc);
index 23953611800935d63fc1c7b15a08e965a5726c9e..1ad4b33a7ee7f85ba6f2f710c3e0bdeabafc89e9 100644 (file)
@@ -868,7 +868,7 @@ struct pim_rpf *pim_rp_g(struct pim_instance *pim, struct in_addr group)
                                        "%s: Nexthop cache not found for RP %s grp %s register with Zebra",
                                        __PRETTY_FUNCTION__, buf, buf1);
                        }
-                       pim_rpf_set_refresh_time();
+                       pim_rpf_set_refresh_time(pim);
                        pim_nexthop_lookup(pim, &rp_info->rp.source_nexthop,
                                           rp_info->rp.rpf_addr.u.prefix4, 1);
                }
index b5d5f006f2d4529a028f30b485eb76a31f2d7a69..221c1ee4af54868da005d182e69d011405bc9740 100644 (file)
 #include "pim_nht.h"
 #include "pim_oil.h"
 
-static long long last_route_change_time = -1;
-long long nexthop_lookups_avoided = 0;
-
 static struct in_addr pim_rpf_find_rpf_addr(struct pim_upstream *up);
 
-void pim_rpf_set_refresh_time(void)
+void pim_rpf_set_refresh_time(struct pim_instance *pim)
 {
-       last_route_change_time = pim_time_monotonic_usec();
+       pim->last_route_change_time = pim_time_monotonic_usec();
        if (PIM_DEBUG_TRACE)
-               zlog_debug("%s: New last route change time: %lld",
-                          __PRETTY_FUNCTION__, last_route_change_time);
+               zlog_debug("%s: vrf(%s) New last route change time: %" PRId64,
+                          __PRETTY_FUNCTION__, pim->vrf->name,
+                          pim->last_route_change_time);
 }
 
 int pim_nexthop_lookup(struct pim_instance *pim, struct pim_nexthop *nexthop,
@@ -70,7 +68,7 @@ int pim_nexthop_lookup(struct pim_instance *pim, struct pim_nexthop *nexthop,
                return -1;
 
        if ((nexthop->last_lookup.s_addr == addr.s_addr)
-           && (nexthop->last_lookup_time > last_route_change_time)) {
+           && (nexthop->last_lookup_time > pim->last_route_change_time)) {
                if (PIM_DEBUG_TRACE) {
                        char addr_str[INET_ADDRSTRLEN];
                        pim_inet4_dump("<addr?>", addr, addr_str,
@@ -79,12 +77,12 @@ int pim_nexthop_lookup(struct pim_instance *pim, struct pim_nexthop *nexthop,
                        pim_addr_dump("<nexthop?>", &nexthop->mrib_nexthop_addr,
                                      nexthop_str, sizeof(nexthop_str));
                        zlog_debug(
-                               "%s: Using last lookup for %s at %lld, %lld addr%s",
+                               "%s: Using last lookup for %s at %lld, %" PRId64 " addr%s",
                                __PRETTY_FUNCTION__, addr_str,
                                nexthop->last_lookup_time,
-                               last_route_change_time, nexthop_str);
+                               pim->last_route_change_time, nexthop_str);
                }
-               nexthop_lookups_avoided++;
+               pim->nexthop_lookups_avoided++;
                return 0;
        } else {
                if (PIM_DEBUG_TRACE) {
@@ -92,10 +90,10 @@ int pim_nexthop_lookup(struct pim_instance *pim, struct pim_nexthop *nexthop,
                        pim_inet4_dump("<addr?>", addr, addr_str,
                                       sizeof(addr_str));
                        zlog_debug(
-                               "%s: Looking up: %s, last lookup time: %lld, %lld",
+                               "%s: Looking up: %s, last lookup time: %lld, %" PRId64,
                                __PRETTY_FUNCTION__, addr_str,
                                nexthop->last_lookup_time,
-                               last_route_change_time);
+                               pim->last_route_change_time);
                }
        }
 
index 86032f1c29634eb066a811e5492491c597dea0c7..78bbfc7ed9992aaa3c9fccd0b1e31f44888a1260 100644 (file)
@@ -56,8 +56,6 @@ enum pim_rpf_result { PIM_RPF_OK = 0, PIM_RPF_CHANGED, PIM_RPF_FAILURE };
 
 struct pim_upstream;
 
-extern long long nexthop_lookups_avoided;
-
 unsigned int pim_rpf_hash_key(void *arg);
 int pim_rpf_equal(const void *arg1, const void *arg2);
 
@@ -71,5 +69,5 @@ int pim_rpf_addr_is_inaddr_none(struct pim_rpf *rpf);
 int pim_rpf_addr_is_inaddr_any(struct pim_rpf *rpf);
 
 int pim_rpf_is_same(struct pim_rpf *rpf1, struct pim_rpf *rpf2);
-void pim_rpf_set_refresh_time(void);
+void pim_rpf_set_refresh_time(struct pim_instance *pim);
 #endif /* PIM_RPF_H */
index ef9d9068f9c4193b98c875e65425441c2fc45745..6cce69720285271dfa5a97df5bcc0db70f5138ad 100644 (file)
@@ -637,8 +637,8 @@ void pim_scan_oil(struct pim_instance *pim)
        ifindex_t ifindex;
        int vif_index = 0;
 
-       qpim_scan_oil_last = pim_time_monotonic_sec();
-       ++qpim_scan_oil_events;
+       pim->scan_oil_last = pim_time_monotonic_sec();
+       ++pim->scan_oil_events;
 
        for (ALL_LIST_ELEMENTS(pim->channel_oil_list, node, nextnode, c_oil)) {
                if (c_oil->up && c_oil->up->rpf.source_nexthop.interface) {
@@ -665,8 +665,8 @@ static int on_rpf_cache_refresh(struct thread *t)
        /* update kernel multicast forwarding cache (MFC) */
        pim_scan_oil(pim);
 
-       qpim_rpf_cache_refresh_last = pim_time_monotonic_sec();
-       ++qpim_rpf_cache_refresh_events;
+       pim->rpf_cache_refresh_last = pim_time_monotonic_sec();
+       ++pim->rpf_cache_refresh_events;
 
        // It is called as part of pim_neighbor_add
        // pim_rp_setup ();
@@ -675,9 +675,9 @@ static int on_rpf_cache_refresh(struct thread *t)
 
 void sched_rpf_cache_refresh(struct pim_instance *pim)
 {
-       ++qpim_rpf_cache_refresh_requests;
+       ++pim->rpf_cache_refresh_requests;
 
-       pim_rpf_set_refresh_time();
+       pim_rpf_set_refresh_time(pim);
 
        if (pim->rpf_cache_refresher) {
                /* Refresh timer is already running */
index 8006148f93f417355d611910148f0624e8f2c594..275baedf72f9bfd2e7e02677609e57df10fbda33 100644 (file)
@@ -352,7 +352,7 @@ int zclient_lookup_nexthop(struct pim_instance *pim,
        uint32_t route_metric = 0xFFFFFFFF;
        uint8_t protocol_distance = 0xFF;
 
-       qpim_nexthop_lookups++;
+       pim->nexthop_lookups++;
 
        for (lookup = 0; lookup < max_lookup; ++lookup) {
                int num_ifindex;
index 0532ce873a4d5f0ba0274916fe3ff6cfc7a7f0a1..551f6047d7aecc2b67420cf87514cb694c03a7cd 100644 (file)
@@ -52,12 +52,6 @@ int qpim_t_periodic =
        PIM_DEFAULT_T_PERIODIC; /* Period between Join/Prune Messages */
 struct pim_assert_metric qpim_infinite_assert_metric;
 long qpim_rpf_cache_refresh_delay_msec = 50;
-int64_t qpim_rpf_cache_refresh_requests = 0;
-int64_t qpim_rpf_cache_refresh_events = 0;
-int64_t qpim_rpf_cache_refresh_last = 0;
-int64_t qpim_scan_oil_events = 0;
-int64_t qpim_scan_oil_last = 0;
-int64_t qpim_nexthop_lookups = 0;
 int qpim_packet_process = PIM_DEFAULT_PACKET_PROCESS;
 uint8_t qpim_ecmp_enable = 0;
 uint8_t qpim_ecmp_rebalance_enable = 0;
index 89582b991ec4355f300a96bad2faa05f3147a1e8..840e0d7e348b608d39e8d25bc540acedd806212e 100644 (file)
@@ -140,12 +140,6 @@ struct in_addr qpim_all_pim_routers_addr;
 int qpim_t_periodic; /* Period between Join/Prune Messages */
 struct pim_assert_metric qpim_infinite_assert_metric;
 long qpim_rpf_cache_refresh_delay_msec;
-int64_t qpim_rpf_cache_refresh_requests;
-int64_t qpim_rpf_cache_refresh_events;
-int64_t qpim_rpf_cache_refresh_last;
-int64_t qpim_scan_oil_events;
-int64_t qpim_scan_oil_last;
-int64_t qpim_nexthop_lookups;
 extern int qpim_packet_process;
 extern uint8_t qpim_ecmp_enable;
 extern uint8_t qpim_ecmp_rebalance_enable;