Merge svn revisions 1208, 1222 and 1228 from Zebra cvs.
diff --git a/ospf6d/ospf6_spf.c b/ospf6d/ospf6_spf.c
index 4f3af7c..4010a5e 100644
--- a/ospf6d/ospf6_spf.c
+++ b/ospf6d/ospf6_spf.c
@@ -487,6 +487,32 @@
   pqueue_delete (candidate_list);
 }
 
+void
+ospf6_spf_log_database (struct ospf6_area *oa)
+{
+  char *p, *end, buffer[256];
+  struct listnode *node;
+  struct ospf6_interface *oi;
+
+  p = buffer;
+  end = buffer + sizeof (buffer);
+
+  snprintf (p, end - p, "SPF on DB (#LSAs):");
+  p = (buffer + strlen (buffer) < end ? buffer + strlen (buffer) : end);
+  snprintf (p, end - p, " Area %s: %d", oa->name, oa->lsdb->count);
+  p = (buffer + strlen (buffer) < end ? buffer + strlen (buffer) : end);
+
+  for (node = listhead (oa->if_list); node; nextnode (node))
+    {
+      oi = (struct ospf6_interface *) getdata (node);
+      snprintf (p, end - p, " I/F %s: %d",
+                oi->interface->name, oi->lsdb->count);
+      p = (buffer + strlen (buffer) < end ? buffer + strlen (buffer) : end);
+    }
+
+  zlog_info ("%s", buffer);
+}
+
 int
 ospf6_spf_calculation_thread (struct thread *t)
 {
@@ -496,20 +522,20 @@
   oa = (struct ospf6_area *) THREAD_ARG (t);
   oa->thread_spf_calculation = NULL;
 
-  if (IS_OSPF6_DEBUG_SPF (PROCESS) || IS_OSPF6_DEBUG_SPF (TIME))
-    zlog_info ("SPF calculation for area %s", oa->name);
+  if (IS_OSPF6_DEBUG_SPF (PROCESS))
+    zlog_info ("SPF calculation for Area %s", oa->name);
+  if (IS_OSPF6_DEBUG_SPF (DATABASE))
+    ospf6_spf_log_database (oa);
 
   /* execute SPF calculation */
   gettimeofday (&start, (struct timezone *) NULL);
   ospf6_spf_calculation (oa->ospf6->router_id, oa->spf_table, oa);
   gettimeofday (&end, (struct timezone *) NULL);
+  timersub (&end, &start, &runtime);
 
   if (IS_OSPF6_DEBUG_SPF (PROCESS) || IS_OSPF6_DEBUG_SPF (TIME))
-    {
-      timersub (&end, &start, &runtime);
-      zlog_info ("SPF calculation for area %s: runtime %ld sec %ld usec",
-                 oa->name, runtime.tv_sec, runtime.tv_usec);
-    }
+    zlog_info ("SPF runtime: %ld sec %ld usec",
+               runtime.tv_sec, runtime.tv_usec);
 
   ospf6_intra_route_calculation (oa);
   ospf6_intra_brouter_calculation (oa);
@@ -588,6 +614,21 @@
   return CMD_SUCCESS;
 }
 
+DEFUN (debug_ospf6_spf_database,
+       debug_ospf6_spf_database_cmd,
+       "debug ospf6 spf database",
+       DEBUG_STR
+       OSPF6_STR
+       "Debug SPF Calculation\n"
+       "Log number of LSAs at SPF Calculation time\n"
+      )
+{
+  unsigned char level = 0;
+  level = OSPF6_DEBUG_SPF_DATABASE;
+  OSPF6_DEBUG_SPF_ON (level);
+  return CMD_SUCCESS;
+}
+
 DEFUN (no_debug_ospf6_spf_process,
        no_debug_ospf6_spf_process_cmd,
        "no debug ospf6 spf process",
@@ -620,6 +661,22 @@
   return CMD_SUCCESS;
 }
 
+DEFUN (no_debug_ospf6_spf_database,
+       no_debug_ospf6_spf_database_cmd,
+       "no debug ospf6 spf database",
+       NO_STR
+       DEBUG_STR
+       OSPF6_STR
+       "Debug SPF Calculation\n"
+       "Quit Logging number of LSAs at SPF Calculation time\n"
+      )
+{
+  unsigned char level = 0;
+  level = OSPF6_DEBUG_SPF_DATABASE;
+  OSPF6_DEBUG_SPF_OFF (level);
+  return CMD_SUCCESS;
+}
+
 int
 config_write_ospf6_debug_spf (struct vty *vty)
 {
@@ -627,6 +684,8 @@
     vty_out (vty, "debug ospf6 spf process%s", VNL);
   if (IS_OSPF6_DEBUG_SPF (TIME))
     vty_out (vty, "debug ospf6 spf time%s", VNL);
+  if (IS_OSPF6_DEBUG_SPF (DATABASE))
+    vty_out (vty, "debug ospf6 spf database%s", VNL);
   return 0;
 }
 
@@ -635,12 +694,16 @@
 {
   install_element (ENABLE_NODE, &debug_ospf6_spf_process_cmd);
   install_element (ENABLE_NODE, &debug_ospf6_spf_time_cmd);
+  install_element (ENABLE_NODE, &debug_ospf6_spf_database_cmd);
   install_element (ENABLE_NODE, &no_debug_ospf6_spf_process_cmd);
   install_element (ENABLE_NODE, &no_debug_ospf6_spf_time_cmd);
+  install_element (ENABLE_NODE, &no_debug_ospf6_spf_database_cmd);
   install_element (CONFIG_NODE, &debug_ospf6_spf_process_cmd);
   install_element (CONFIG_NODE, &debug_ospf6_spf_time_cmd);
+  install_element (CONFIG_NODE, &debug_ospf6_spf_database_cmd);
   install_element (CONFIG_NODE, &no_debug_ospf6_spf_process_cmd);
   install_element (CONFIG_NODE, &no_debug_ospf6_spf_time_cmd);
+  install_element (CONFIG_NODE, &no_debug_ospf6_spf_database_cmd);
 }
 
 void