[pim] RPF cache refresh statistics
diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c
index c845a89..df6897e 100644
--- a/pimd/pim_cmd.c
+++ b/pimd/pim_cmd.c
@@ -1022,16 +1022,32 @@
   }
 }
 
+static void show_rpf_refresh_stats(struct vty *vty)
+{
+  vty_out(vty, 
+	  "RPF Cache Refresh Delay:    %ld msecs%s"
+	  "RPF Cache Refresh Timer:    %ld msecs%s"
+	  "RPF Cache Refresh Requests: %lld%s"
+	  "RPF Cache Refresh Events:   %lld%s",
+	  qpim_rpf_cache_refresh_delay_msec, VTY_NEWLINE,
+	  pim_time_timer_remain_msec(qpim_rpf_cache_refresher), VTY_NEWLINE,
+	  qpim_rpf_cache_refresh_requests, VTY_NEWLINE,
+	  qpim_rpf_cache_refresh_events, VTY_NEWLINE);
+}
+
 static void pim_show_rpf(struct vty *vty)
 {
   struct listnode     *up_node;
   struct pim_upstream *up;
 
+  show_rpf_refresh_stats(vty);
+
+  vty_out(vty, "%s", VTY_NEWLINE);
+
   vty_out(vty,
 	  "Source          Group           RpfIface RpfAddress      RibNextHop      Metric Pref%s",
 	  VTY_NEWLINE);
 
-
   for (ALL_LIST_ELEMENTS_RO(qpim_upstream_list, up_node, up)) {
     char src_str[100];
     char grp_str[100];
@@ -1847,7 +1863,7 @@
 
   vty_out(vty, "%s", VTY_NEWLINE);
   
-  vty_out(vty, "Interface Address         ifIndex VifIndex PktsIn PktsOut BytesIn BytesOut%s",
+  vty_out(vty, "Interface Address         ifi Vif  PktsIn PktsOut    BytesIn   BytesOut%s",
 	  VTY_NEWLINE);
 
   for (ALL_LIST_ELEMENTS_RO(iflist, node, ifp)) {
@@ -1878,7 +1894,7 @@
 
     ifaddr = pim_ifp->primary_address;
 
-    vty_out(vty, "%-9s %-15s %7d %8d %6lu %7lu %7lu %8lu%s",
+    vty_out(vty, "%-9s %-15s %3d %3d %7lu %7lu %10lu %10lu%s",
 	    ifp->name,
 	    inet_ntoa(ifaddr),
 	    ifp->ifindex,
@@ -1934,12 +1950,8 @@
 	  VTY_NEWLINE);
 
   vty_out(vty, "%s", VTY_NEWLINE);
-  vty_out(vty, "RPF Cache Refresh Delay: %ld msecs%s",
-	  qpim_rpf_cache_refresh_delay_msec,
-	  VTY_NEWLINE);
-  vty_out(vty, "RPF Cache Refresh Timer: %ld msecs%s",
-	  pim_time_timer_remain_msec(qpim_rpf_cache_refresher),
-	  VTY_NEWLINE);
+
+  show_rpf_refresh_stats(vty);
 
   show_multicast_interfaces(vty);
   
diff --git a/pimd/pim_zebra.c b/pimd/pim_zebra.c
index 56e4dba..9764532 100644
--- a/pimd/pim_zebra.c
+++ b/pimd/pim_zebra.c
@@ -447,13 +447,21 @@
   /* update kernel multicast forwarding cache (MFC) */
   scan_oil();
 
+  ++qpim_rpf_cache_refresh_events;
+
   return 0;
 }
 
 static void sched_rpf_cache_refresh()
 {
-  if (qpim_rpf_cache_refresher)
+  ++qpim_rpf_cache_refresh_requests;
+
+  if (qpim_rpf_cache_refresher) {
+    /* Refresh timer is already running */
     return;
+  }
+
+  /* Start refresh timer */
 
   if (PIM_DEBUG_ZEBRA) {
     zlog_debug("%s: triggering %ld msec timer",
diff --git a/pimd/pimd.c b/pimd/pimd.c
index f255a28..e8afe77 100644
--- a/pimd/pimd.c
+++ b/pimd/pimd.c
@@ -54,6 +54,8 @@
 struct pim_assert_metric  qpim_infinite_assert_metric;
 long                      qpim_rpf_cache_refresh_delay_msec = 10000;
 struct thread            *qpim_rpf_cache_refresher = 0;
+int64_t                   qpim_rpf_cache_refresh_requests = 0;
+int64_t                   qpim_rpf_cache_refresh_events = 0;
 struct in_addr            qpim_inaddr_any;
 
 static void pim_free()
diff --git a/pimd/pimd.h b/pimd/pimd.h
index 10f8518..aaf5faa 100644
--- a/pimd/pimd.h
+++ b/pimd/pimd.h
@@ -80,6 +80,8 @@
 struct pim_assert_metric  qpim_infinite_assert_metric;
 long                      qpim_rpf_cache_refresh_delay_msec;
 struct thread            *qpim_rpf_cache_refresher;
+int64_t                   qpim_rpf_cache_refresh_requests;
+int64_t                   qpim_rpf_cache_refresh_events;
 struct in_addr            qpim_inaddr_any;
 
 #define PIM_JP_HOLDTIME (qpim_t_periodic * 7 / 2)