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",
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"
"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);
}
}
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,
"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);
}
pim_upstream_init(pim);
+ pim->last_route_change_time = -1;
return pim;
}
/* 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);
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);
"%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);
}
#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,
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,
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) {
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);
}
}
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);
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 */
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) {
/* 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 ();
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 */
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;
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;
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;