[bgpd] Add RIB reporting commands, show bgp ... statistics

2006-09-13 Paul Jakma <paul.jakma@sun.com>

	* bgp_aspath.c: (aspath_highest) new, return highest ASN in an
	  aspath.
	* bgp_route.c: (bgp_peer_count_walker) new, do the walk done
	  in bgp_peer_counts as a thread.
	  (bgp_peer_counts) move walk to previous and call it via
	  thread_execute so this RIB walk shows up in thread stats.
	  (bgp_table_stats) New, gather some statistics for a given
	  RIB.
	  (bgp_table_stats_walker) New, RIB walker thread for former.
	  (bgp_table_stats_vty) Parsing front-end for 'show bgp ...',
	  useful model for future rationalisation of 'show ... bgp'.
	  (bgp_route_init) Add new RIB stats commands.
diff --git a/bgpd/bgp_aspath.c b/bgpd/bgp_aspath.c
index 317e9f8..327406f 100644
--- a/bgpd/bgp_aspath.c
+++ b/bgpd/bgp_aspath.c
@@ -434,6 +434,26 @@
   return size;
 }
 
+/* Return highest public ASN in path */
+as_t
+aspath_highest (struct aspath *aspath)
+{
+  struct assegment *seg = aspath->segments;
+  as_t highest = 0;
+  unsigned int i;
+  
+  while (seg)
+    {
+      for (i = 0; i < seg->length; i++)
+        if (seg->as[i] > highest
+            && (seg->as[i] < BGP_PRIVATE_AS_MIN
+                || seg->as[i] > BGP_PRIVATE_AS_MAX))
+	  highest = seg->as[i];
+      seg = seg->next;
+    }
+  return highest;
+}
+
 /* Convert aspath structure to string expression. */
 static char *
 aspath_make_str_count (struct aspath *as)