SVN revision 907 from Zebra cvs repository.
diff --git a/ospf6d/ospf6d.c b/ospf6d/ospf6d.c
index 362d679..4eba8a4 100644
--- a/ospf6d/ospf6d.c
+++ b/ospf6d/ospf6d.c
@@ -26,7 +26,6 @@
 #include "vty.h"
 #include "command.h"
 
-#include "ospf6d.h"
 #include "ospf6_proto.h"
 #include "ospf6_network.h"
 #include "ospf6_lsa.h"
@@ -41,6 +40,8 @@
 #include "ospf6_neighbor.h"
 #include "ospf6_intra.h"
 #include "ospf6_asbr.h"
+#include "ospf6_abr.h"
+#include "ospf6d.h"
 
 char ospf6_daemon_version[] = OSPF6_DAEMON_VERSION;
 
@@ -139,6 +140,7 @@
   return prev;
 }
 
+
 DEFUN (show_version_ospf6,
        show_version_ospf6_cmd,
        "show version ospf6",
@@ -147,7 +149,7 @@
       )
 {
   vty_out (vty, "Zebra OSPF6d Version: %s%s",
-           ospf6_daemon_version, VTY_NEWLINE);
+           ospf6_daemon_version, VNL);
 
   return CMD_SUCCESS;
 }
@@ -169,10 +171,58 @@
   config_write_ospf6_debug_spf (vty);
   config_write_ospf6_debug_route (vty);
   config_write_ospf6_debug_asbr (vty);
-  vty_out (vty, "!%s", VTY_NEWLINE);
+  config_write_ospf6_debug_abr (vty);
+  vty_out (vty, "!%s", VNL);
   return 0;
 }
 
+#define AREA_LSDB_TITLE_FORMAT \
+  "%s        Area Scoped Link State Database (Area %s)%s%s"
+#define IF_LSDB_TITLE_FORMAT \
+  "%s        I/F Scoped Link State Database (I/F %s in Area %s)%s%s"
+#define AS_LSDB_TITLE_FORMAT \
+  "%s        AS Scoped Link State Database%s%s"
+
+static int
+parse_show_level (int argc, char **argv)
+{
+  int level;
+  if (argc)
+    {
+      if (! strncmp (argv[0], "de", 2))
+        level = OSPF6_LSDB_SHOW_LEVEL_DETAIL;
+      else if (! strncmp (argv[0], "du", 2))
+        level = OSPF6_LSDB_SHOW_LEVEL_DUMP;
+      else if (! strncmp (argv[0], "in", 2))
+        level = OSPF6_LSDB_SHOW_LEVEL_INTERNAL;
+    }
+  else
+    level = OSPF6_LSDB_SHOW_LEVEL_NORMAL;
+  return level;
+}
+
+static u_int16_t
+parse_type_spec (int argc, char **argv)
+{
+  u_int16_t type;
+  assert (argc);
+  if (! strcmp (argv[0], "router"))
+    type = htons (OSPF6_LSTYPE_ROUTER);
+  else if (! strcmp (argv[0], "network"))
+    type = htons (OSPF6_LSTYPE_NETWORK);
+  else if (! strcmp (argv[0], "as-external"))
+    type = htons (OSPF6_LSTYPE_AS_EXTERNAL);
+  else if (! strcmp (argv[0], "intra-prefix"))
+    type = htons (OSPF6_LSTYPE_INTRA_PREFIX);
+  else if (! strcmp (argv[0], "inter-router"))
+    type = htons (OSPF6_LSTYPE_INTER_ROUTER);
+  else if (! strcmp (argv[0], "inter-prefix"))
+    type = htons (OSPF6_LSTYPE_INTER_PREFIX);
+  else if (! strcmp (argv[0], "link"))
+    type = htons (OSPF6_LSTYPE_LINK);
+  return type;
+}
+
 DEFUN (show_ipv6_ospf6_database,
        show_ipv6_ospf6_database_cmd,
        "show ipv6 ospf6 database",
@@ -182,43 +232,39 @@
        "Display Link state database\n"
       )
 {
+  int level;
   listnode i, j;
   struct ospf6 *o = ospf6;
-  void (*showfunc) (struct vty *, struct ospf6_lsa *) = NULL;
+  struct ospf6_area *oa;
+  struct ospf6_interface *oi;
 
   OSPF6_CMD_CHECK_RUNNING ();
 
-  if (argc)
-    {
-      if (! strncmp (argv[0], "de", 2))
-        showfunc = ospf6_lsa_show;
-      else if (! strncmp (argv[0], "du", 2))
-        showfunc = ospf6_lsa_show_dump;
-      else if (! strncmp (argv[0], "in", 2))
-        showfunc = ospf6_lsa_show_internal;
-    }
-  else
-    showfunc = ospf6_lsa_show_summary;
+  level = parse_show_level (argc, argv);
 
-  if (showfunc == ospf6_lsa_show_summary)
-    ospf6_lsa_show_summary_header (vty);
-
-  LSDB_FOREACH_LSA (vty, showfunc, o->lsdb);
   for (i = listhead (o->area_list); i; nextnode (i))
     {
-      struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
-      LSDB_FOREACH_LSA (vty, showfunc, oa->lsdb);
+      oa = (struct ospf6_area *) getdata (i);
+      vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL);
+      ospf6_lsdb_show (vty, level, NULL, NULL, NULL, oa->lsdb);
     }
+
   for (i = listhead (o->area_list); i; nextnode (i))
     {
-      struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
+      oa = (struct ospf6_area *) getdata (i);
       for (j = listhead (oa->if_list); j; nextnode (j))
         {
-          struct ospf6_interface *oi = (struct ospf6_interface *) getdata (j);
-          LSDB_FOREACH_LSA (vty, showfunc, oi->lsdb);
+          oi = (struct ospf6_interface *) getdata (j);
+          vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL,
+                   oi->interface->name, oa->name, VNL, VNL);
+          ospf6_lsdb_show (vty, level, NULL, NULL, NULL, oi->lsdb);
         }
     }
 
+  vty_out (vty, AS_LSDB_TITLE_FORMAT, VNL, VNL, VNL);
+  ospf6_lsdb_show (vty, level, NULL, NULL, NULL, o->lsdb);
+
+  vty_out (vty, "%s", VNL);
   return CMD_SUCCESS;
 }
 
@@ -254,59 +300,56 @@
        "Display Intra-Area-Prefix LSAs\n"
       )
 {
+  int level;
   listnode i, j;
   struct ospf6 *o = ospf6;
-  void (*showfunc) (struct vty *, struct ospf6_lsa *) = NULL;
+  struct ospf6_area *oa;
+  struct ospf6_interface *oi;
   u_int16_t type = 0;
 
   OSPF6_CMD_CHECK_RUNNING ();
 
-  if (argc > 1)
-    {
-      if (! strncmp (argv[1], "de", 2))
-        showfunc = ospf6_lsa_show;
-      else if (! strncmp (argv[1], "du", 2))
-        showfunc = ospf6_lsa_show_dump;
-      else if (! strncmp (argv[1], "in", 2))
-        showfunc = ospf6_lsa_show_internal;
-    }
-  else
-    showfunc = ospf6_lsa_show_summary;
+  type = parse_type_spec (argc, argv);
+  argc--;
+  argv++;
+  level = parse_show_level (argc, argv);
 
-  if (showfunc == ospf6_lsa_show_summary)
-    ospf6_lsa_show_summary_header (vty);
-
-  if (! strcmp (argv[0], "router"))
-    type = htons (OSPF6_LSTYPE_ROUTER);
-  else if (! strcmp (argv[0], "network"))
-    type = htons (OSPF6_LSTYPE_NETWORK);
-  else if (! strcmp (argv[0], "as-external"))
-    type = htons (OSPF6_LSTYPE_AS_EXTERNAL);
-  else if (! strcmp (argv[0], "intra-prefix"))
-    type = htons (OSPF6_LSTYPE_INTRA_PREFIX);
-  else if (! strcmp (argv[0], "inter-router"))
-    type = htons (OSPF6_LSTYPE_INTER_ROUTER);
-  else if (! strcmp (argv[0], "inter-prefix"))
-    type = htons (OSPF6_LSTYPE_INTER_PREFIX);
-  else if (! strcmp (argv[0], "link"))
-    type = htons (OSPF6_LSTYPE_LINK);
-
-  LSDB_FOREACH_LSA_T (vty, showfunc, o->lsdb, type);
-  for (i = listhead (o->area_list); i; nextnode (i))
+  switch (OSPF6_LSA_SCOPE (type))
     {
-      struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
-      LSDB_FOREACH_LSA_T (vty, showfunc, oa->lsdb, type);
-    }
-  for (i = listhead (o->area_list); i; nextnode (i))
-    {
-      struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
-      for (j = listhead (oa->if_list); j; nextnode (j))
-        {
-          struct ospf6_interface *oi = (struct ospf6_interface *) getdata (j);
-          LSDB_FOREACH_LSA_T (vty, showfunc, oi->lsdb, type);
-        }
+      case OSPF6_LSA_SCOPE_AREA:
+        for (i = listhead (o->area_list); i; nextnode (i))
+          {
+            oa = (struct ospf6_area *) getdata (i);
+            vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL);
+            ospf6_lsdb_show (vty, level, &type, NULL, NULL, oa->lsdb);
+          }
+        break;
+
+      case OSPF6_LSA_SCOPE_LINKLOCAL:
+        for (i = listhead (o->area_list); i; nextnode (i))
+          {
+            oa = (struct ospf6_area *) getdata (i);
+            for (j = listhead (oa->if_list); j; nextnode (j))
+              {
+                oi = (struct ospf6_interface *) getdata (j);
+                vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL,
+                         oi->interface->name, oa->name, VNL, VNL);
+                ospf6_lsdb_show (vty, level, &type, NULL, NULL, oi->lsdb);
+              }
+          }
+        break;
+
+      case OSPF6_LSA_SCOPE_AS:
+        vty_out (vty, AS_LSDB_TITLE_FORMAT, VNL, VNL, VNL);
+        ospf6_lsdb_show (vty, level, &type, NULL, NULL, o->lsdb);
+        break;
+
+      default:
+        assert (0);
+        break;
     }
 
+  vty_out (vty, "%s", VNL);
   return CMD_SUCCESS;
 }
 
@@ -345,51 +388,49 @@
        "Specify Link state ID as IPv4 address notation\n"
       )
 {
+  int level;
   listnode i, j;
   struct ospf6 *o = ospf6;
-  void (*showfunc) (struct vty *, struct ospf6_lsa *) = NULL;
+  struct ospf6_area *oa;
+  struct ospf6_interface *oi;
   u_int32_t id = 0;
 
   OSPF6_CMD_CHECK_RUNNING ();
 
-  if (argc > 1)
-    {
-      if (! strncmp (argv[1], "de", 2))
-        showfunc = ospf6_lsa_show;
-      else if (! strncmp (argv[1], "du", 2))
-        showfunc = ospf6_lsa_show_dump;
-      else if (! strncmp (argv[1], "in", 2))
-        showfunc = ospf6_lsa_show_internal;
-    }
-  else
-    showfunc = ospf6_lsa_show_summary;
-
-  if (showfunc == ospf6_lsa_show_summary)
-    ospf6_lsa_show_summary_header (vty);
-
   if ((inet_pton (AF_INET, argv[0], &id)) != 1)
     {
       vty_out (vty, "Link State ID is not parsable: %s%s",
-               argv[0], VTY_NEWLINE);
+               argv[0], VNL);
       return CMD_SUCCESS;
     }
 
-  LSDB_FOREACH_LSA_I (vty, showfunc, o->lsdb, id);
+  argc--;
+  argv++;
+  level = parse_show_level (argc, argv);
+
   for (i = listhead (o->area_list); i; nextnode (i))
     {
-      struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
-      LSDB_FOREACH_LSA_I (vty, showfunc, oa->lsdb, id);
+      oa = (struct ospf6_area *) getdata (i);
+      vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL);
+      ospf6_lsdb_show (vty, level, NULL, &id, NULL, oa->lsdb);
     }
+
   for (i = listhead (o->area_list); i; nextnode (i))
     {
-      struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
+      oa = (struct ospf6_area *) getdata (i);
       for (j = listhead (oa->if_list); j; nextnode (j))
         {
-          struct ospf6_interface *oi = (struct ospf6_interface *) getdata (j);
-          LSDB_FOREACH_LSA_I (vty, showfunc, oi->lsdb, id);
+          oi = (struct ospf6_interface *) getdata (j);
+          vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL,
+                   oi->interface->name, oa->name, VNL, VNL);
+          ospf6_lsdb_show (vty, level, NULL, &id, NULL, oi->lsdb);
         }
     }
 
+  vty_out (vty, AS_LSDB_TITLE_FORMAT, VNL, VNL, VNL);
+  ospf6_lsdb_show (vty, level, NULL, &id, NULL, o->lsdb);
+
+  vty_out (vty, "%s", VNL);
   return CMD_SUCCESS;
 }
 
@@ -402,7 +443,32 @@
        OSPF6_STR
        "Display Link state database\n"
        "Any Link state Type\n"
-       "Any Link state ID\n"
+       "Specify Link state ID as IPv4 address notation\n"
+       "Display details of LSAs\n"
+       "Dump LSAs\n"
+       "Display LSA's internal information\n"
+      );
+
+ALIAS (show_ipv6_ospf6_database_id,
+       show_ipv6_ospf6_database_linkstate_id_cmd,
+       "show ipv6 ospf6 database linkstate-id A.B.C.D",
+       SHOW_STR
+       IPV6_STR
+       OSPF6_STR
+       "Display Link state database\n"
+       "Search by Link state ID\n"
+       "Specify Link state ID as IPv4 address notation\n"
+      );
+
+ALIAS (show_ipv6_ospf6_database_id,
+       show_ipv6_ospf6_database_linkstate_id_detail_cmd,
+       "show ipv6 ospf6 database linkstate-id A.B.C.D "
+       "(detail|dump|internal)",
+       SHOW_STR
+       IPV6_STR
+       OSPF6_STR
+       "Display Link state database\n"
+       "Search by Link state ID\n"
        "Specify Link state ID as IPv4 address notation\n"
        "Display details of LSAs\n"
        "Dump LSAs\n"
@@ -421,51 +487,49 @@
        "Specify Advertising Router as IPv4 address notation\n"
       )
 {
+  int level;
   listnode i, j;
   struct ospf6 *o = ospf6;
-  void (*showfunc) (struct vty *, struct ospf6_lsa *) = NULL;
-  u_int32_t router = 0;
+  struct ospf6_area *oa;
+  struct ospf6_interface *oi;
+  u_int32_t adv_router = 0;
 
   OSPF6_CMD_CHECK_RUNNING ();
 
-  if (argc > 1)
-    {
-      if (! strncmp (argv[1], "de", 2))
-        showfunc = ospf6_lsa_show;
-      else if (! strncmp (argv[1], "du", 2))
-        showfunc = ospf6_lsa_show_dump;
-      else if (! strncmp (argv[1], "in", 2))
-        showfunc = ospf6_lsa_show_internal;
-    }
-  else
-    showfunc = ospf6_lsa_show_summary;
-
-  if (showfunc == ospf6_lsa_show_summary)
-    ospf6_lsa_show_summary_header (vty);
-
-  if ((inet_pton (AF_INET, argv[0], &router)) != 1)
+  if ((inet_pton (AF_INET, argv[0], &adv_router)) != 1)
     {
       vty_out (vty, "Advertising Router is not parsable: %s%s",
-               argv[0], VTY_NEWLINE);
+               argv[0], VNL);
       return CMD_SUCCESS;
     }
 
-  LSDB_FOREACH_LSA_R (vty, showfunc, o->lsdb, router);
+  argc--;
+  argv++;
+  level = parse_show_level (argc, argv);
+
   for (i = listhead (o->area_list); i; nextnode (i))
     {
-      struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
-      LSDB_FOREACH_LSA_R (vty, showfunc, oa->lsdb, router);
+      oa = (struct ospf6_area *) getdata (i);
+      vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL);
+      ospf6_lsdb_show (vty, level, NULL, NULL, &adv_router, oa->lsdb);
     }
+
   for (i = listhead (o->area_list); i; nextnode (i))
     {
-      struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
+      oa = (struct ospf6_area *) getdata (i);
       for (j = listhead (oa->if_list); j; nextnode (j))
         {
-          struct ospf6_interface *oi = (struct ospf6_interface *) getdata (j);
-          LSDB_FOREACH_LSA_R (vty, showfunc, oi->lsdb, router);
+          oi = (struct ospf6_interface *) getdata (j);
+          vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL,
+                   oi->interface->name, oa->name, VNL, VNL);
+          ospf6_lsdb_show (vty, level, NULL, NULL, &adv_router, oi->lsdb);
         }
     }
 
+  vty_out (vty, AS_LSDB_TITLE_FORMAT, VNL, VNL, VNL);
+  ospf6_lsdb_show (vty, level, NULL, NULL, &adv_router, o->lsdb);
+
+  vty_out (vty, "%s", VNL);
   return CMD_SUCCESS;
 }
 
@@ -485,6 +549,32 @@
        "Display LSA's internal information\n"
       );
 
+ALIAS (show_ipv6_ospf6_database_router,
+       show_ipv6_ospf6_database_adv_router_cmd,
+       "show ipv6 ospf6 database adv-router A.B.C.D",
+       SHOW_STR
+       IPV6_STR
+       OSPF6_STR
+       "Display Link state database\n"
+       "Search by Advertising Router\n"
+       "Specify Advertising Router as IPv4 address notation\n"
+      );
+
+ALIAS (show_ipv6_ospf6_database_router,
+       show_ipv6_ospf6_database_adv_router_detail_cmd,
+       "show ipv6 ospf6 database adv-router A.B.C.D "
+       "(detail|dump|internal)",
+       SHOW_STR
+       IPV6_STR
+       OSPF6_STR
+       "Display Link state database\n"
+       "Search by Advertising Router\n"
+       "Specify Advertising Router as IPv4 address notation\n"
+       "Display details of LSAs\n"
+       "Dump LSAs\n"
+       "Display LSA's internal information\n"
+      );
+
 DEFUN (show_ipv6_ospf6_database_type_id,
        show_ipv6_ospf6_database_type_id_cmd,
        "show ipv6 ospf6 database "
@@ -506,67 +596,67 @@
        "Specify Link state ID as IPv4 address notation\n"
       )
 {
+  int level;
   listnode i, j;
   struct ospf6 *o = ospf6;
-  void (*showfunc) (struct vty *, struct ospf6_lsa *) = NULL;
+  struct ospf6_area *oa;
+  struct ospf6_interface *oi;
   u_int16_t type = 0;
   u_int32_t id = 0;
 
   OSPF6_CMD_CHECK_RUNNING ();
 
-  if (argc > 2)
-    {
-      if (! strncmp (argv[2], "de", 2))
-        showfunc = ospf6_lsa_show;
-      else if (! strncmp (argv[2], "du", 2))
-        showfunc = ospf6_lsa_show_dump;
-      else if (! strncmp (argv[2], "in", 2))
-        showfunc = ospf6_lsa_show_internal;
-    }
-  else
-    showfunc = ospf6_lsa_show_summary;
+  type = parse_type_spec (argc, argv);
+  argc--;
+  argv++;
 
-  if (showfunc == ospf6_lsa_show_summary)
-    ospf6_lsa_show_summary_header (vty);
-
-  if (! strcmp (argv[0], "router"))
-    type = htons (OSPF6_LSTYPE_ROUTER);
-  else if (! strcmp (argv[0], "network"))
-    type = htons (OSPF6_LSTYPE_NETWORK);
-  else if (! strcmp (argv[0], "as-external"))
-    type = htons (OSPF6_LSTYPE_AS_EXTERNAL);
-  else if (! strcmp (argv[0], "intra-prefix"))
-    type = htons (OSPF6_LSTYPE_INTRA_PREFIX);
-  else if (! strcmp (argv[0], "inter-router"))
-    type = htons (OSPF6_LSTYPE_INTER_ROUTER);
-  else if (! strcmp (argv[0], "inter-prefix"))
-    type = htons (OSPF6_LSTYPE_INTER_PREFIX);
-  else if (! strcmp (argv[0], "link"))
-    type = htons (OSPF6_LSTYPE_LINK);
-
-  if ((inet_pton (AF_INET, argv[1], &id)) != 1)
+  if ((inet_pton (AF_INET, argv[0], &id)) != 1)
     {
       vty_out (vty, "Link state ID is not parsable: %s%s",
-               argv[1], VTY_NEWLINE);
+               argv[0], VNL);
       return CMD_SUCCESS;
     }
 
-  LSDB_FOREACH_LSA_TI (vty, showfunc, o->lsdb, type, id);
-  for (i = listhead (o->area_list); i; nextnode (i))
+  argc--;
+  argv++;
+  level = parse_show_level (argc, argv);
+
+  switch (OSPF6_LSA_SCOPE (type))
     {
-      struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
-      LSDB_FOREACH_LSA_TI (vty, showfunc, oa->lsdb, type, id);
-    }
-  for (i = listhead (o->area_list); i; nextnode (i))
-    {
-      struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
-      for (j = listhead (oa->if_list); j; nextnode (j))
-        {
-          struct ospf6_interface *oi = (struct ospf6_interface *) getdata (j);
-          LSDB_FOREACH_LSA_TI (vty, showfunc, oi->lsdb, type, id);
-        }
+      case OSPF6_LSA_SCOPE_AREA:
+        for (i = listhead (o->area_list); i; nextnode (i))
+          {
+            oa = (struct ospf6_area *) getdata (i);
+            vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL);
+            ospf6_lsdb_show (vty, level, &type, &id, NULL, oa->lsdb);
+          }
+        break;
+
+      case OSPF6_LSA_SCOPE_LINKLOCAL:
+        for (i = listhead (o->area_list); i; nextnode (i))
+          {
+            oa = (struct ospf6_area *) getdata (i);
+            for (j = listhead (oa->if_list); j; nextnode (j))
+              {
+                oi = (struct ospf6_interface *) getdata (j);
+                vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL,
+                         oi->interface->name, oa->name, VNL, VNL);
+                ospf6_lsdb_show (vty, level, &type, &id, NULL, oi->lsdb);
+              }
+          }
+        break;
+
+      case OSPF6_LSA_SCOPE_AS:
+        vty_out (vty, AS_LSDB_TITLE_FORMAT, VNL, VNL, VNL);
+        ospf6_lsdb_show (vty, level, &type, &id, NULL, o->lsdb);
+        break;
+
+      default:
+        assert (0);
+        break;
     }
 
+  vty_out (vty, "%s", VNL);
   return CMD_SUCCESS;
 }
 
@@ -595,6 +685,54 @@
        "Display LSA's internal information\n"
       );
 
+ALIAS (show_ipv6_ospf6_database_type_id,
+       show_ipv6_ospf6_database_type_linkstate_id_cmd,
+       "show ipv6 ospf6 database "
+       "(router|network|inter-prefix|inter-router|as-external|"
+       "group-membership|type-7|link|intra-prefix) linkstate-id A.B.C.D",
+       SHOW_STR
+       IPV6_STR
+       OSPF6_STR
+       "Display Link state database\n"
+       "Display Router LSAs\n"
+       "Display Network LSAs\n"
+       "Display Inter-Area-Prefix LSAs\n"
+       "Display Inter-Area-Router LSAs\n"
+       "Display As-External LSAs\n"
+       "Display Group-Membership LSAs\n"
+       "Display Type-7 LSAs\n"
+       "Display Link LSAs\n"
+       "Display Intra-Area-Prefix LSAs\n"
+       "Search by Link state ID\n"
+       "Specify Link state ID as IPv4 address notation\n"
+      );
+
+ALIAS (show_ipv6_ospf6_database_type_id,
+       show_ipv6_ospf6_database_type_linkstate_id_detail_cmd,
+       "show ipv6 ospf6 database "
+       "(router|network|inter-prefix|inter-router|as-external|"
+       "group-membership|type-7|link|intra-prefix) linkstate-id A.B.C.D "
+       "(detail|dump|internal)",
+       SHOW_STR
+       IPV6_STR
+       OSPF6_STR
+       "Display Link state database\n"
+       "Display Router LSAs\n"
+       "Display Network LSAs\n"
+       "Display Inter-Area-Prefix LSAs\n"
+       "Display Inter-Area-Router LSAs\n"
+       "Display As-External LSAs\n"
+       "Display Group-Membership LSAs\n"
+       "Display Type-7 LSAs\n"
+       "Display Link LSAs\n"
+       "Display Intra-Area-Prefix LSAs\n"
+       "Search by Link state ID\n"
+       "Specify Link state ID as IPv4 address notation\n"
+       "Display details of LSAs\n"
+       "Dump LSAs\n"
+       "Display LSA's internal information\n"
+      );
+
 DEFUN (show_ipv6_ospf6_database_type_router,
        show_ipv6_ospf6_database_type_router_cmd,
        "show ipv6 ospf6 database "
@@ -617,67 +755,67 @@
        "Specify Advertising Router as IPv4 address notation\n"
       )
 {
+  int level;
   listnode i, j;
   struct ospf6 *o = ospf6;
-  void (*showfunc) (struct vty *, struct ospf6_lsa *) = NULL;
+  struct ospf6_area *oa;
+  struct ospf6_interface *oi;
   u_int16_t type = 0;
-  u_int32_t router = 0;
+  u_int32_t adv_router = 0;
 
   OSPF6_CMD_CHECK_RUNNING ();
 
-  if (argc > 2)
-    {
-      if (! strncmp (argv[2], "de", 2))
-        showfunc = ospf6_lsa_show;
-      else if (! strncmp (argv[2], "du", 2))
-        showfunc = ospf6_lsa_show_dump;
-      else if (! strncmp (argv[2], "in", 2))
-        showfunc = ospf6_lsa_show_internal;
-    }
-  else
-    showfunc = ospf6_lsa_show_summary;
+  type = parse_type_spec (argc, argv);
+  argc--;
+  argv++;
 
-  if (showfunc == ospf6_lsa_show_summary)
-    ospf6_lsa_show_summary_header (vty);
-
-  if (! strcmp (argv[0], "router"))
-    type = htons (OSPF6_LSTYPE_ROUTER);
-  else if (! strcmp (argv[0], "network"))
-    type = htons (OSPF6_LSTYPE_NETWORK);
-  else if (! strcmp (argv[0], "as-external"))
-    type = htons (OSPF6_LSTYPE_AS_EXTERNAL);
-  else if (! strcmp (argv[0], "intra-prefix"))
-    type = htons (OSPF6_LSTYPE_INTRA_PREFIX);
-  else if (! strcmp (argv[0], "inter-router"))
-    type = htons (OSPF6_LSTYPE_INTER_ROUTER);
-  else if (! strcmp (argv[0], "inter-prefix"))
-    type = htons (OSPF6_LSTYPE_INTER_PREFIX);
-  else if (! strcmp (argv[0], "link"))
-    type = htons (OSPF6_LSTYPE_LINK);
-
-  if ((inet_pton (AF_INET, argv[1], &router)) != 1)
+  if ((inet_pton (AF_INET, argv[0], &adv_router)) != 1)
     {
       vty_out (vty, "Advertising Router is not parsable: %s%s",
-               argv[1], VTY_NEWLINE);
+               argv[0], VNL);
       return CMD_SUCCESS;
     }
 
-  LSDB_FOREACH_LSA_TR (vty, showfunc, o->lsdb, type, router);
-  for (i = listhead (o->area_list); i; nextnode (i))
+  argc--;
+  argv++;
+  level = parse_show_level (argc, argv);
+
+  switch (OSPF6_LSA_SCOPE (type))
     {
-      struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
-      LSDB_FOREACH_LSA_TR (vty, showfunc, oa->lsdb, type, router);
-    }
-  for (i = listhead (o->area_list); i; nextnode (i))
-    {
-      struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
-      for (j = listhead (oa->if_list); j; nextnode (j))
-        {
-          struct ospf6_interface *oi = (struct ospf6_interface *) getdata (j);
-          LSDB_FOREACH_LSA_TR (vty, showfunc, oi->lsdb, type, router);
-        }
+      case OSPF6_LSA_SCOPE_AREA:
+        for (i = listhead (o->area_list); i; nextnode (i))
+          {
+            oa = (struct ospf6_area *) getdata (i);
+            vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL);
+            ospf6_lsdb_show (vty, level, &type, NULL, &adv_router, oa->lsdb);
+          }
+        break;
+
+      case OSPF6_LSA_SCOPE_LINKLOCAL:
+        for (i = listhead (o->area_list); i; nextnode (i))
+          {
+            oa = (struct ospf6_area *) getdata (i);
+            for (j = listhead (oa->if_list); j; nextnode (j))
+              {
+                oi = (struct ospf6_interface *) getdata (j);
+                vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL,
+                         oi->interface->name, oa->name, VNL, VNL);
+                ospf6_lsdb_show (vty, level, &type, NULL, &adv_router, oi->lsdb);
+              }
+          }
+        break;
+
+      case OSPF6_LSA_SCOPE_AS:
+        vty_out (vty, AS_LSDB_TITLE_FORMAT, VNL, VNL, VNL);
+        ospf6_lsdb_show (vty, level, &type, NULL, &adv_router, o->lsdb);
+        break;
+
+      default:
+        assert (0);
+        break;
     }
 
+  vty_out (vty, "%s", VNL);
   return CMD_SUCCESS;
 }
 
@@ -707,6 +845,54 @@
        "Display LSA's internal information\n"
       );
 
+ALIAS (show_ipv6_ospf6_database_type_router,
+       show_ipv6_ospf6_database_type_adv_router_cmd,
+       "show ipv6 ospf6 database "
+       "(router|network|inter-prefix|inter-router|as-external|"
+       "group-membership|type-7|link|intra-prefix) adv-router A.B.C.D",
+       SHOW_STR
+       IPV6_STR
+       OSPF6_STR
+       "Display Link state database\n"
+       "Display Router LSAs\n"
+       "Display Network LSAs\n"
+       "Display Inter-Area-Prefix LSAs\n"
+       "Display Inter-Area-Router LSAs\n"
+       "Display As-External LSAs\n"
+       "Display Group-Membership LSAs\n"
+       "Display Type-7 LSAs\n"
+       "Display Link LSAs\n"
+       "Display Intra-Area-Prefix LSAs\n"
+       "Search by Advertising Router\n"
+       "Specify Advertising Router as IPv4 address notation\n"
+      );
+
+ALIAS (show_ipv6_ospf6_database_type_router,
+       show_ipv6_ospf6_database_type_adv_router_detail_cmd,
+       "show ipv6 ospf6 database "
+       "(router|network|inter-prefix|inter-router|as-external|"
+       "group-membership|type-7|link|intra-prefix) adv-router A.B.C.D "
+       "(detail|dump|internal)",
+       SHOW_STR
+       IPV6_STR
+       OSPF6_STR
+       "Display Link state database\n"
+       "Display Router LSAs\n"
+       "Display Network LSAs\n"
+       "Display Inter-Area-Prefix LSAs\n"
+       "Display Inter-Area-Router LSAs\n"
+       "Display As-External LSAs\n"
+       "Display Group-Membership LSAs\n"
+       "Display Type-7 LSAs\n"
+       "Display Link LSAs\n"
+       "Display Intra-Area-Prefix LSAs\n"
+       "Search by Advertising Router\n"
+       "Specify Advertising Router as IPv4 address notation\n"
+       "Display details of LSAs\n"
+       "Dump LSAs\n"
+       "Display LSA's internal information\n"
+      );
+
 DEFUN (show_ipv6_ospf6_database_id_router,
        show_ipv6_ospf6_database_id_router_cmd,
        "show ipv6 ospf6 database * A.B.C.D A.B.C.D",
@@ -719,59 +905,60 @@
        "Specify Advertising Router as IPv4 address notation\n"
       )
 {
+  int level;
   listnode i, j;
   struct ospf6 *o = ospf6;
-  void (*showfunc) (struct vty *, struct ospf6_lsa *) = NULL;
+  struct ospf6_area *oa;
+  struct ospf6_interface *oi;
   u_int32_t id = 0;
-  u_int32_t router = 0;
+  u_int32_t adv_router = 0;
 
   OSPF6_CMD_CHECK_RUNNING ();
 
-  if (argc > 2)
-    {
-      if (! strncmp (argv[2], "de", 2))
-        showfunc = ospf6_lsa_show;
-      else if (! strncmp (argv[2], "du", 2))
-        showfunc = ospf6_lsa_show_dump;
-      else if (! strncmp (argv[2], "in", 2))
-        showfunc = ospf6_lsa_show_internal;
-    }
-  else
-    showfunc = ospf6_lsa_show_summary;
-
-  if (showfunc == ospf6_lsa_show_summary)
-    ospf6_lsa_show_summary_header (vty);
-
   if ((inet_pton (AF_INET, argv[0], &id)) != 1)
     {
       vty_out (vty, "Link state ID is not parsable: %s%s",
-               argv[1], VTY_NEWLINE);
+               argv[1], VNL);
       return CMD_SUCCESS;
     }
 
-  if ((inet_pton (AF_INET, argv[1], &router)) != 1)
+  argc--;
+  argv++;
+
+  if ((inet_pton (AF_INET, argv[0], &adv_router)) != 1)
     {
       vty_out (vty, "Advertising Router is not parsable: %s%s",
-               argv[1], VTY_NEWLINE);
+               argv[0], VNL);
       return CMD_SUCCESS;
     }
 
-  LSDB_FOREACH_LSA_IR (vty, showfunc, o->lsdb, id, router);
+  argc--;
+  argv++;
+  level = parse_show_level (argc, argv);
+
   for (i = listhead (o->area_list); i; nextnode (i))
     {
-      struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
-      LSDB_FOREACH_LSA_IR (vty, showfunc, oa->lsdb, id, router);
+      oa = (struct ospf6_area *) getdata (i);
+      vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL);
+      ospf6_lsdb_show (vty, level, NULL, &id, &adv_router, oa->lsdb);
     }
+
   for (i = listhead (o->area_list); i; nextnode (i))
     {
-      struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
+      oa = (struct ospf6_area *) getdata (i);
       for (j = listhead (oa->if_list); j; nextnode (j))
         {
-          struct ospf6_interface *oi = (struct ospf6_interface *) getdata (j);
-          LSDB_FOREACH_LSA_IR (vty, showfunc, oi->lsdb, id, router);
+          oi = (struct ospf6_interface *) getdata (j);
+          vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL,
+                   oi->interface->name, oa->name, VNL, VNL);
+          ospf6_lsdb_show (vty, level, NULL, &id, &adv_router, oi->lsdb);
         }
     }
 
+  vty_out (vty, AS_LSDB_TITLE_FORMAT, VNL, VNL, VNL);
+  ospf6_lsdb_show (vty, level, NULL, &id, &adv_router, o->lsdb);
+
+  vty_out (vty, "%s", VNL);
   return CMD_SUCCESS;
 }
 
@@ -791,6 +978,93 @@
        "Display LSA's internal information\n"
       );
 
+DEFUN (show_ipv6_ospf6_database_adv_router_linkstate_id,
+       show_ipv6_ospf6_database_adv_router_linkstate_id_cmd,
+       "show ipv6 ospf6 database adv-router A.B.C.D linkstate-id A.B.C.D",
+       SHOW_STR
+       IPV6_STR
+       OSPF6_STR
+       "Display Link state database\n"
+       "Search by Advertising Router\n"
+       "Specify Advertising Router as IPv4 address notation\n"
+       "Search by Link state ID\n"
+       "Specify Link state ID as IPv4 address notation\n"
+      )
+{
+  int level;
+  listnode i, j;
+  struct ospf6 *o = ospf6;
+  struct ospf6_area *oa;
+  struct ospf6_interface *oi;
+  u_int32_t id = 0;
+  u_int32_t adv_router = 0;
+
+  OSPF6_CMD_CHECK_RUNNING ();
+
+  if ((inet_pton (AF_INET, argv[0], &adv_router)) != 1)
+    {
+      vty_out (vty, "Advertising Router is not parsable: %s%s",
+               argv[0], VNL);
+      return CMD_SUCCESS;
+    }
+
+  argc--;
+  argv++;
+
+  if ((inet_pton (AF_INET, argv[0], &id)) != 1)
+    {
+      vty_out (vty, "Link state ID is not parsable: %s%s",
+               argv[1], VNL);
+      return CMD_SUCCESS;
+    }
+
+  argc--;
+  argv++;
+  level = parse_show_level (argc, argv);
+
+  for (i = listhead (o->area_list); i; nextnode (i))
+    {
+      oa = (struct ospf6_area *) getdata (i);
+      vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL);
+      ospf6_lsdb_show (vty, level, NULL, &id, &adv_router, oa->lsdb);
+    }
+
+  for (i = listhead (o->area_list); i; nextnode (i))
+    {
+      oa = (struct ospf6_area *) getdata (i);
+      for (j = listhead (oa->if_list); j; nextnode (j))
+        {
+          oi = (struct ospf6_interface *) getdata (j);
+          vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL,
+                   oi->interface->name, oa->name, VNL, VNL);
+          ospf6_lsdb_show (vty, level, NULL, &id, &adv_router, oi->lsdb);
+        }
+    }
+
+  vty_out (vty, AS_LSDB_TITLE_FORMAT, VNL, VNL, VNL);
+  ospf6_lsdb_show (vty, level, NULL, &id, &adv_router, o->lsdb);
+
+  vty_out (vty, "%s", VNL);
+  return CMD_SUCCESS;
+}
+
+ALIAS (show_ipv6_ospf6_database_adv_router_linkstate_id,
+       show_ipv6_ospf6_database_adv_router_linkstate_id_detail_cmd,
+       "show ipv6 ospf6 database adv-router A.B.C.D linkstate-id A.B.C.D "
+       "(detail|dump|internal)",
+       SHOW_STR
+       IPV6_STR
+       OSPF6_STR
+       "Display Link state database\n"
+       "Search by Advertising Router\n"
+       "Specify Advertising Router as IPv4 address notation\n"
+       "Search by Link state ID\n"
+       "Specify Link state ID as IPv4 address notation\n"
+       "Display details of LSAs\n"
+       "Dump LSAs\n"
+       "Display LSA's internal information\n"
+      );
+
 DEFUN (show_ipv6_ospf6_database_type_id_router,
        show_ipv6_ospf6_database_type_id_router_cmd,
        "show ipv6 ospf6 database "
@@ -813,73 +1087,78 @@
        "Specify Advertising Router as IPv4 address notation\n"
       )
 {
+  int level;
   listnode i, j;
   struct ospf6 *o = ospf6;
-  void (*showfunc) (struct vty *, struct ospf6_lsa *) = NULL;
+  struct ospf6_area *oa;
+  struct ospf6_interface *oi;
   u_int16_t type = 0;
   u_int32_t id = 0;
-  u_int32_t router = 0;
+  u_int32_t adv_router = 0;
 
   OSPF6_CMD_CHECK_RUNNING ();
 
-  if (argc > 3)
-    {
-      if (! strncmp (argv[3], "du", 2))
-        showfunc = ospf6_lsa_show_dump;
-      else if (! strncmp (argv[3], "in", 2))
-        showfunc = ospf6_lsa_show_internal;
-    }
-  else
-    showfunc = ospf6_lsa_show;
+  type = parse_type_spec (argc, argv);
+  argc--;
+  argv++;
 
-  if (showfunc == ospf6_lsa_show_summary)
-    ospf6_lsa_show_summary_header (vty);
-
-  if (! strcmp (argv[0], "router"))
-    type = htons (OSPF6_LSTYPE_ROUTER);
-  else if (! strcmp (argv[0], "network"))
-    type = htons (OSPF6_LSTYPE_NETWORK);
-  else if (! strcmp (argv[0], "as-external"))
-    type = htons (OSPF6_LSTYPE_AS_EXTERNAL);
-  else if (! strcmp (argv[0], "intra-prefix"))
-    type = htons (OSPF6_LSTYPE_INTRA_PREFIX);
-  else if (! strcmp (argv[0], "inter-router"))
-    type = htons (OSPF6_LSTYPE_INTER_ROUTER);
-  else if (! strcmp (argv[0], "inter-prefix"))
-    type = htons (OSPF6_LSTYPE_INTER_PREFIX);
-  else if (! strcmp (argv[0], "link"))
-    type = htons (OSPF6_LSTYPE_LINK);
-
-  if ((inet_pton (AF_INET, argv[1], &id)) != 1)
+  if ((inet_pton (AF_INET, argv[0], &id)) != 1)
     {
       vty_out (vty, "Link state ID is not parsable: %s%s",
-               argv[1], VTY_NEWLINE);
+               argv[0], VNL);
       return CMD_SUCCESS;
     }
 
-  if ((inet_pton (AF_INET, argv[2], &router)) != 1)
+  argc--;
+  argv++;
+
+  if ((inet_pton (AF_INET, argv[0], &adv_router)) != 1)
     {
       vty_out (vty, "Advertising Router is not parsable: %s%s",
-               argv[2], VTY_NEWLINE);
+               argv[0], VNL);
       return CMD_SUCCESS;
     }
 
-  LSDB_FOREACH_LSA_TIR (vty, showfunc, o->lsdb, type, id, router);
-  for (i = listhead (o->area_list); i; nextnode (i))
+  argc--;
+  argv++;
+  level = parse_show_level (argc, argv);
+
+  switch (OSPF6_LSA_SCOPE (type))
     {
-      struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
-      LSDB_FOREACH_LSA_TIR (vty, showfunc, oa->lsdb, type, id, router);
-    }
-  for (i = listhead (o->area_list); i; nextnode (i))
-    {
-      struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
-      for (j = listhead (oa->if_list); j; nextnode (j))
-        {
-          struct ospf6_interface *oi = (struct ospf6_interface *) getdata (j);
-          LSDB_FOREACH_LSA_TIR (vty, showfunc, oi->lsdb, type, id, router);
-        }
+      case OSPF6_LSA_SCOPE_AREA:
+        for (i = listhead (o->area_list); i; nextnode (i))
+          {
+            oa = (struct ospf6_area *) getdata (i);
+            vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL);
+            ospf6_lsdb_show (vty, level, &type, &id, &adv_router, oa->lsdb);
+          }
+        break;
+
+      case OSPF6_LSA_SCOPE_LINKLOCAL:
+        for (i = listhead (o->area_list); i; nextnode (i))
+          {
+            oa = (struct ospf6_area *) getdata (i);
+            for (j = listhead (oa->if_list); j; nextnode (j))
+              {
+                oi = (struct ospf6_interface *) getdata (j);
+                vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL,
+                         oi->interface->name, oa->name, VNL, VNL);
+                ospf6_lsdb_show (vty, level, &type, &id, &adv_router, oi->lsdb);
+              }
+          }
+        break;
+
+      case OSPF6_LSA_SCOPE_AS:
+        vty_out (vty, AS_LSDB_TITLE_FORMAT, VNL, VNL, VNL);
+        ospf6_lsdb_show (vty, level, &type, &id, &adv_router, o->lsdb);
+        break;
+
+      default:
+        assert (0);
+        break;
     }
 
+  vty_out (vty, "%s", VNL);
   return CMD_SUCCESS;
 }
 
@@ -904,7 +1183,134 @@
        "Display Intra-Area-Prefix LSAs\n"
        "Specify Link state ID as IPv4 address notation\n"
        "Specify Advertising Router as IPv4 address notation\n"
-       "Display details of LSAs\n"
+       "Dump LSAs\n"
+       "Display LSA's internal information\n"
+      );
+
+DEFUN (show_ipv6_ospf6_database_type_adv_router_linkstate_id,
+       show_ipv6_ospf6_database_type_adv_router_linkstate_id_cmd,
+       "show ipv6 ospf6 database "
+       "(router|network|inter-prefix|inter-router|as-external|"
+       "group-membership|type-7|link|intra-prefix) "
+       "adv-router A.B.C.D linkstate-id A.B.C.D",
+       SHOW_STR
+       IPV6_STR
+       OSPF6_STR
+       "Display Link state database\n"
+       "Display Router LSAs\n"
+       "Display Network LSAs\n"
+       "Display Inter-Area-Prefix LSAs\n"
+       "Display Inter-Area-Router LSAs\n"
+       "Display As-External LSAs\n"
+       "Display Group-Membership LSAs\n"
+       "Display Type-7 LSAs\n"
+       "Display Link LSAs\n"
+       "Display Intra-Area-Prefix LSAs\n"
+       "Search by Advertising Router\n"
+       "Specify Advertising Router as IPv4 address notation\n"
+       "Search by Link state ID\n"
+       "Specify Link state ID as IPv4 address notation\n"
+      )
+{
+  int level;
+  listnode i, j;
+  struct ospf6 *o = ospf6;
+  struct ospf6_area *oa;
+  struct ospf6_interface *oi;
+  u_int16_t type = 0;
+  u_int32_t id = 0;
+  u_int32_t adv_router = 0;
+
+  OSPF6_CMD_CHECK_RUNNING ();
+
+  type = parse_type_spec (argc, argv);
+  argc--;
+  argv++;
+
+  if ((inet_pton (AF_INET, argv[0], &adv_router)) != 1)
+    {
+      vty_out (vty, "Advertising Router is not parsable: %s%s",
+               argv[0], VNL);
+      return CMD_SUCCESS;
+    }
+
+  argc--;
+  argv++;
+
+  if ((inet_pton (AF_INET, argv[0], &id)) != 1)
+    {
+      vty_out (vty, "Link state ID is not parsable: %s%s",
+               argv[0], VNL);
+      return CMD_SUCCESS;
+    }
+
+  argc--;
+  argv++;
+  level = parse_show_level (argc, argv);
+
+  switch (OSPF6_LSA_SCOPE (type))
+    {
+      case OSPF6_LSA_SCOPE_AREA:
+        for (i = listhead (o->area_list); i; nextnode (i))
+          {
+            oa = (struct ospf6_area *) getdata (i);
+            vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL);
+            ospf6_lsdb_show (vty, level, &type, &id, &adv_router, oa->lsdb);
+          }
+        break;
+
+      case OSPF6_LSA_SCOPE_LINKLOCAL:
+        for (i = listhead (o->area_list); i; nextnode (i))
+          {
+            oa = (struct ospf6_area *) getdata (i);
+            for (j = listhead (oa->if_list); j; nextnode (j))
+              {
+                oi = (struct ospf6_interface *) getdata (j);
+                vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL,
+                         oi->interface->name, oa->name, VNL, VNL);
+                ospf6_lsdb_show (vty, level, &type, &id, &adv_router, oi->lsdb);
+              }
+          }
+        break;
+
+      case OSPF6_LSA_SCOPE_AS:
+        vty_out (vty, AS_LSDB_TITLE_FORMAT, VNL, VNL, VNL);
+        ospf6_lsdb_show (vty, level, &type, &id, &adv_router, o->lsdb);
+        break;
+
+      default:
+        assert (0);
+        break;
+    }
+
+  vty_out (vty, "%s", VNL);
+  return CMD_SUCCESS;
+}
+
+ALIAS (show_ipv6_ospf6_database_type_adv_router_linkstate_id,
+       show_ipv6_ospf6_database_type_adv_router_linkstate_id_detail_cmd,
+       "show ipv6 ospf6 database "
+       "(router|network|inter-prefix|inter-router|as-external|"
+       "group-membership|type-7|link|intra-prefix) "
+       "adv-router A.B.C.D linkstate-id A.B.C.D "
+       "(dump|internal)",
+       SHOW_STR
+       IPV6_STR
+       OSPF6_STR
+       "Display Link state database\n"
+       "Display Router LSAs\n"
+       "Display Network LSAs\n"
+       "Display Inter-Area-Prefix LSAs\n"
+       "Display Inter-Area-Router LSAs\n"
+       "Display As-External LSAs\n"
+       "Display Group-Membership LSAs\n"
+       "Display Type-7 LSAs\n"
+       "Display Link LSAs\n"
+       "Display Intra-Area-Prefix LSAs\n"
+       "Search by Advertising Router\n"
+       "Specify Advertising Router as IPv4 address notation\n"
+       "Search by Link state ID\n"
+       "Specify Link state ID as IPv4 address notation\n"
        "Dump LSAs\n"
        "Display LSA's internal information\n"
       );
@@ -915,47 +1321,45 @@
        SHOW_STR
        IPV6_STR
        OSPF6_STR
-       "Display Link state database\n"
        "Display Self-originated LSAs\n"
       )
 {
+  int level;
   listnode i, j;
   struct ospf6 *o = ospf6;
-  void (*showfunc) (struct vty *, struct ospf6_lsa *) = NULL;
+  struct ospf6_area *oa;
+  struct ospf6_interface *oi;
+  u_int32_t adv_router = 0;
 
   OSPF6_CMD_CHECK_RUNNING ();
 
-  if (argc > 0)
-    {
-      if (! strncmp (argv[0], "de", 2))
-        showfunc = ospf6_lsa_show;
-      else if (! strncmp (argv[0], "du", 2))
-        showfunc = ospf6_lsa_show_dump;
-      else if (! strncmp (argv[0], "in", 2))
-        showfunc = ospf6_lsa_show_internal;
-    }
-  else
-    showfunc = ospf6_lsa_show_summary;
+  level = parse_show_level (argc, argv);
 
-  if (showfunc == ospf6_lsa_show_summary)
-    ospf6_lsa_show_summary_header (vty);
+  adv_router = o->router_id;
 
-  LSDB_FOREACH_LSA_R (vty, showfunc, o->lsdb, o->router_id);
   for (i = listhead (o->area_list); i; nextnode (i))
     {
-      struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
-      LSDB_FOREACH_LSA_R (vty, showfunc, oa->lsdb, o->router_id);
+      oa = (struct ospf6_area *) getdata (i);
+      vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL);
+      ospf6_lsdb_show (vty, level, NULL, NULL, &adv_router, oa->lsdb);
     }
+
   for (i = listhead (o->area_list); i; nextnode (i))
     {
-      struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
+      oa = (struct ospf6_area *) getdata (i);
       for (j = listhead (oa->if_list); j; nextnode (j))
         {
-          struct ospf6_interface *oi = (struct ospf6_interface *) getdata (j);
-          LSDB_FOREACH_LSA_R (vty, showfunc, oi->lsdb, o->router_id);
+          oi = (struct ospf6_interface *) getdata (j);
+          vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL,
+                   oi->interface->name, oa->name, VNL, VNL);
+          ospf6_lsdb_show (vty, level, NULL, NULL, &adv_router, oi->lsdb);
         }
     }
 
+  vty_out (vty, AS_LSDB_TITLE_FORMAT, VNL, VNL, VNL);
+  ospf6_lsdb_show (vty, level, NULL, NULL, &adv_router, o->lsdb);
+
+  vty_out (vty, "%s", VNL);
   return CMD_SUCCESS;
 }
 
@@ -966,12 +1370,11 @@
        SHOW_STR
        IPV6_STR
        OSPF6_STR
-       "Display Link state database\n"
        "Display Self-originated LSAs\n"
        "Display details of LSAs\n"
        "Dump LSAs\n"
        "Display LSA's internal information\n"
-      );
+      )
 
 DEFUN (show_ipv6_ospf6_database_type_self_originated,
        show_ipv6_ospf6_database_type_self_originated_cmd,
@@ -994,59 +1397,59 @@
        "Display Self-originated LSAs\n"
       )
 {
+  int level;
   listnode i, j;
   struct ospf6 *o = ospf6;
-  void (*showfunc) (struct vty *, struct ospf6_lsa *) = NULL;
+  struct ospf6_area *oa;
+  struct ospf6_interface *oi;
   u_int16_t type = 0;
+  u_int32_t adv_router = 0;
 
   OSPF6_CMD_CHECK_RUNNING ();
 
-  if (argc > 1)
-    {
-      if (! strncmp (argv[1], "de", 2))
-        showfunc = ospf6_lsa_show;
-      else if (! strncmp (argv[1], "du", 2))
-        showfunc = ospf6_lsa_show_dump;
-      else if (! strncmp (argv[1], "in", 2))
-        showfunc = ospf6_lsa_show_internal;
-    }
-  else
-    showfunc = ospf6_lsa_show_summary;
+  type = parse_type_spec (argc, argv);
+  argc--;
+  argv++;
+  level = parse_show_level (argc, argv);
 
-  if (showfunc == ospf6_lsa_show_summary)
-    ospf6_lsa_show_summary_header (vty);
+  adv_router = o->router_id;
 
-  if (! strcmp (argv[0], "router"))
-    type = htons (OSPF6_LSTYPE_ROUTER);
-  else if (! strcmp (argv[0], "network"))
-    type = htons (OSPF6_LSTYPE_NETWORK);
-  else if (! strcmp (argv[0], "as-external"))
-    type = htons (OSPF6_LSTYPE_AS_EXTERNAL);
-  else if (! strcmp (argv[0], "intra-prefix"))
-    type = htons (OSPF6_LSTYPE_INTRA_PREFIX);
-  else if (! strcmp (argv[0], "inter-router"))
-    type = htons (OSPF6_LSTYPE_INTER_ROUTER);
-  else if (! strcmp (argv[0], "inter-prefix"))
-    type = htons (OSPF6_LSTYPE_INTER_PREFIX);
-  else if (! strcmp (argv[0], "link"))
-    type = htons (OSPF6_LSTYPE_LINK);
+  switch (OSPF6_LSA_SCOPE (type))
+    {
+      case OSPF6_LSA_SCOPE_AREA:
+        for (i = listhead (o->area_list); i; nextnode (i))
+          {
+            oa = (struct ospf6_area *) getdata (i);
+            vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL);
+            ospf6_lsdb_show (vty, level, &type, NULL, &adv_router, oa->lsdb);
+          }
+        break;
 
-  LSDB_FOREACH_LSA_TR (vty, showfunc, o->lsdb, type, o->router_id);
-  for (i = listhead (o->area_list); i; nextnode (i))
-    {
-      struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
-      LSDB_FOREACH_LSA_TR (vty, showfunc, oa->lsdb, type, o->router_id);
-    }
-  for (i = listhead (o->area_list); i; nextnode (i))
-    {
-      struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
-      for (j = listhead (oa->if_list); j; nextnode (j))
-        {
-          struct ospf6_interface *oi = (struct ospf6_interface *) getdata (j);
-          LSDB_FOREACH_LSA_TR (vty, showfunc, oi->lsdb, type, o->router_id);
-        }
+      case OSPF6_LSA_SCOPE_LINKLOCAL:
+        for (i = listhead (o->area_list); i; nextnode (i))
+          {
+            oa = (struct ospf6_area *) getdata (i);
+            for (j = listhead (oa->if_list); j; nextnode (j))
+              {
+                oi = (struct ospf6_interface *) getdata (j);
+                vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL,
+                         oi->interface->name, oa->name, VNL, VNL);
+                ospf6_lsdb_show (vty, level, &type, NULL, &adv_router, oi->lsdb);
+              }
+          }
+        break;
+
+      case OSPF6_LSA_SCOPE_AS:
+        vty_out (vty, AS_LSDB_TITLE_FORMAT, VNL, VNL, VNL);
+        ospf6_lsdb_show (vty, level, &type, NULL, &adv_router, o->lsdb);
+        break;
+
+      default:
+        assert (0);
+        break;
     }
 
+  vty_out (vty, "%s", VNL);
   return CMD_SUCCESS;
 }
 
@@ -1075,6 +1478,124 @@
        "Display LSA's internal information\n"
       );
 
+DEFUN (show_ipv6_ospf6_database_type_self_originated_linkstate_id,
+       show_ipv6_ospf6_database_type_self_originated_linkstate_id_cmd,
+       "show ipv6 ospf6 database "
+       "(router|network|inter-prefix|inter-router|as-external|"
+       "group-membership|type-7|link|intra-prefix) self-originated "
+       "linkstate-id A.B.C.D",
+       SHOW_STR
+       IPV6_STR
+       OSPF6_STR
+       "Display Link state database\n"
+       "Display Router LSAs\n"
+       "Display Network LSAs\n"
+       "Display Inter-Area-Prefix LSAs\n"
+       "Display Inter-Area-Router LSAs\n"
+       "Display As-External LSAs\n"
+       "Display Group-Membership LSAs\n"
+       "Display Type-7 LSAs\n"
+       "Display Link LSAs\n"
+       "Display Intra-Area-Prefix LSAs\n"
+       "Display Self-originated LSAs\n"
+       "Search by Link state ID\n"
+       "Specify Link state ID as IPv4 address notation\n"
+      )
+{
+  int level;
+  listnode i, j;
+  struct ospf6 *o = ospf6;
+  struct ospf6_area *oa;
+  struct ospf6_interface *oi;
+  u_int16_t type = 0;
+  u_int32_t adv_router = 0;
+  u_int32_t id = 0;
+
+  OSPF6_CMD_CHECK_RUNNING ();
+
+  type = parse_type_spec (argc, argv);
+  argc--;
+  argv++;
+
+  if ((inet_pton (AF_INET, argv[1], &id)) != 1)
+    {
+      vty_out (vty, "Link State ID is not parsable: %s%s",
+               argv[0], VNL);
+      return CMD_SUCCESS;
+    }
+
+  argc--;
+  argv++;
+  level = parse_show_level (argc, argv);
+
+  adv_router = o->router_id;
+
+  switch (OSPF6_LSA_SCOPE (type))
+    {
+      case OSPF6_LSA_SCOPE_AREA:
+        for (i = listhead (o->area_list); i; nextnode (i))
+          {
+            oa = (struct ospf6_area *) getdata (i);
+            vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL);
+            ospf6_lsdb_show (vty, level, &type, &id, &adv_router, oa->lsdb);
+          }
+        break;
+
+      case OSPF6_LSA_SCOPE_LINKLOCAL:
+        for (i = listhead (o->area_list); i; nextnode (i))
+          {
+            oa = (struct ospf6_area *) getdata (i);
+            for (j = listhead (oa->if_list); j; nextnode (j))
+              {
+                oi = (struct ospf6_interface *) getdata (j);
+                vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL,
+                         oi->interface->name, oa->name, VNL, VNL);
+                ospf6_lsdb_show (vty, level, &type, &id, &adv_router, oi->lsdb);
+              }
+          }
+        break;
+
+      case OSPF6_LSA_SCOPE_AS:
+        vty_out (vty, AS_LSDB_TITLE_FORMAT, VNL, VNL, VNL);
+        ospf6_lsdb_show (vty, level, &type, &id, &adv_router, o->lsdb);
+        break;
+
+      default:
+        assert (0);
+        break;
+    }
+
+  vty_out (vty, "%s", VNL);
+  return CMD_SUCCESS;
+}
+
+ALIAS (show_ipv6_ospf6_database_type_self_originated_linkstate_id,
+       show_ipv6_ospf6_database_type_self_originated_linkstate_id_detail_cmd,
+       "show ipv6 ospf6 database "
+       "(router|network|inter-prefix|inter-router|as-external|"
+       "group-membership|type-7|link|intra-prefix) self-originated "
+       "linkstate-id A.B.C.D (detail|dump|internal)",
+       SHOW_STR
+       IPV6_STR
+       OSPF6_STR
+       "Display Link state database\n"
+       "Display Router LSAs\n"
+       "Display Network LSAs\n"
+       "Display Inter-Area-Prefix LSAs\n"
+       "Display Inter-Area-Router LSAs\n"
+       "Display As-External LSAs\n"
+       "Display Group-Membership LSAs\n"
+       "Display Type-7 LSAs\n"
+       "Display Link LSAs\n"
+       "Display Intra-Area-Prefix LSAs\n"
+       "Display Self-originated LSAs\n"
+       "Search by Link state ID\n"
+       "Specify Link state ID as IPv4 address notation\n"
+       "Display details of LSAs\n"
+       "Dump LSAs\n"
+       "Display LSA's internal information\n"
+      );
+
 DEFUN (show_ipv6_ospf6_database_type_id_self_originated,
        show_ipv6_ospf6_database_type_id_self_originated_cmd,
        "show ipv6 ospf6 database "
@@ -1097,65 +1618,70 @@
        "Display Self-originated LSAs\n"
       )
 {
+  int level;
   listnode i, j;
   struct ospf6 *o = ospf6;
-  void (*showfunc) (struct vty *, struct ospf6_lsa *) = NULL;
+  struct ospf6_area *oa;
+  struct ospf6_interface *oi;
   u_int16_t type = 0;
+  u_int32_t adv_router = 0;
   u_int32_t id = 0;
 
   OSPF6_CMD_CHECK_RUNNING ();
 
-  if (argc > 2)
-    {
-      if (! strncmp (argv[2], "du", 2))
-        showfunc = ospf6_lsa_show_dump;
-      else if (! strncmp (argv[2], "in", 2))
-        showfunc = ospf6_lsa_show_internal;
-    }
-  else
-    showfunc = ospf6_lsa_show;
-
-  if (showfunc == ospf6_lsa_show_summary)
-    ospf6_lsa_show_summary_header (vty);
-
-  if (! strcmp (argv[0], "router"))
-    type = htons (OSPF6_LSTYPE_ROUTER);
-  else if (! strcmp (argv[0], "network"))
-    type = htons (OSPF6_LSTYPE_NETWORK);
-  else if (! strcmp (argv[0], "as-external"))
-    type = htons (OSPF6_LSTYPE_AS_EXTERNAL);
-  else if (! strcmp (argv[0], "intra-prefix"))
-    type = htons (OSPF6_LSTYPE_INTRA_PREFIX);
-  else if (! strcmp (argv[0], "inter-router"))
-    type = htons (OSPF6_LSTYPE_INTER_ROUTER);
-  else if (! strcmp (argv[0], "inter-prefix"))
-    type = htons (OSPF6_LSTYPE_INTER_PREFIX);
-  else if (! strcmp (argv[0], "link"))
-    type = htons (OSPF6_LSTYPE_LINK);
+  type = parse_type_spec (argc, argv);
+  argc--;
+  argv++;
 
   if ((inet_pton (AF_INET, argv[1], &id)) != 1)
     {
       vty_out (vty, "Link State ID is not parsable: %s%s",
-               argv[0], VTY_NEWLINE);
+               argv[0], VNL);
       return CMD_SUCCESS;
     }
 
-  LSDB_FOREACH_LSA_TIR (vty, showfunc, o->lsdb, type, id, o->router_id);
-  for (i = listhead (o->area_list); i; nextnode (i))
+  argc--;
+  argv++;
+  level = parse_show_level (argc, argv);
+
+  adv_router = o->router_id;
+
+  switch (OSPF6_LSA_SCOPE (type))
     {
-      struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
-      LSDB_FOREACH_LSA_TIR (vty, showfunc, oa->lsdb, type, id, o->router_id);
-    }
-  for (i = listhead (o->area_list); i; nextnode (i))
-    {
-      struct ospf6_area *oa = (struct ospf6_area *) getdata (i);
-      for (j = listhead (oa->if_list); j; nextnode (j))
-        {
-          struct ospf6_interface *oi = (struct ospf6_interface *) getdata (j);
-          LSDB_FOREACH_LSA_TIR (vty, showfunc, oi->lsdb, type, id, o->router_id);
-        }
+      case OSPF6_LSA_SCOPE_AREA:
+        for (i = listhead (o->area_list); i; nextnode (i))
+          {
+            oa = (struct ospf6_area *) getdata (i);
+            vty_out (vty, AREA_LSDB_TITLE_FORMAT, VNL, oa->name, VNL, VNL);
+            ospf6_lsdb_show (vty, level, &type, &id, &adv_router, oa->lsdb);
+          }
+        break;
+
+      case OSPF6_LSA_SCOPE_LINKLOCAL:
+        for (i = listhead (o->area_list); i; nextnode (i))
+          {
+            oa = (struct ospf6_area *) getdata (i);
+            for (j = listhead (oa->if_list); j; nextnode (j))
+              {
+                oi = (struct ospf6_interface *) getdata (j);
+                vty_out (vty, IF_LSDB_TITLE_FORMAT, VNL,
+                         oi->interface->name, oa->name, VNL, VNL);
+                ospf6_lsdb_show (vty, level, &type, &id, &adv_router, oi->lsdb);
+              }
+          }
+        break;
+
+      case OSPF6_LSA_SCOPE_AS:
+        vty_out (vty, AS_LSDB_TITLE_FORMAT, VNL, VNL, VNL);
+        ospf6_lsdb_show (vty, level, &type, &id, &adv_router, o->lsdb);
+        break;
+
+      default:
+        assert (0);
+        break;
     }
 
+  vty_out (vty, "%s", VNL);
   return CMD_SUCCESS;
 }
 
@@ -1164,7 +1690,7 @@
        "show ipv6 ospf6 database "
        "(router|network|inter-prefix|inter-router|as-external|"
        "group-membership|type-7|link|intra-prefix) A.B.C.D self-originated "
-       "(dump|internal)",
+       "(detail|dump|internal)",
        SHOW_STR
        IPV6_STR
        OSPF6_STR
@@ -1178,15 +1704,14 @@
        "Display Type-7 LSAs\n"
        "Display Link LSAs\n"
        "Display Intra-Area-Prefix LSAs\n"
-       "Specify Link state ID as IPv4 address notation\n"
        "Display Self-originated LSAs\n"
+       "Search by Link state ID\n"
+       "Specify Link state ID as IPv4 address notation\n"
        "Display details of LSAs\n"
        "Dump LSAs\n"
        "Display LSA's internal information\n"
       );
 
-
-
 /* Install ospf related commands. */
 void
 ospf6_init ()
@@ -1203,52 +1728,88 @@
   install_element_ospf6_debug_asbr ();
 
   install_element (VIEW_NODE, &show_version_ospf6_cmd);
-  install_element (VIEW_NODE, &show_ipv6_ospf6_database_cmd);
-  install_element (VIEW_NODE, &show_ipv6_ospf6_database_detail_cmd);
-  install_element (VIEW_NODE, &show_ipv6_ospf6_database_type_cmd);
-  install_element (VIEW_NODE, &show_ipv6_ospf6_database_type_detail_cmd);
-  install_element (VIEW_NODE, &show_ipv6_ospf6_database_id_cmd);
-  install_element (VIEW_NODE, &show_ipv6_ospf6_database_id_detail_cmd);
-  install_element (VIEW_NODE, &show_ipv6_ospf6_database_router_cmd);
-  install_element (VIEW_NODE, &show_ipv6_ospf6_database_router_detail_cmd);
-  install_element (VIEW_NODE, &show_ipv6_ospf6_database_type_id_cmd);
-  install_element (VIEW_NODE, &show_ipv6_ospf6_database_type_id_detail_cmd);
-  install_element (VIEW_NODE, &show_ipv6_ospf6_database_type_router_cmd);
-  install_element (VIEW_NODE, &show_ipv6_ospf6_database_type_router_detail_cmd);
-  install_element (VIEW_NODE, &show_ipv6_ospf6_database_id_router_cmd);
-  install_element (VIEW_NODE, &show_ipv6_ospf6_database_id_router_detail_cmd);
-  install_element (VIEW_NODE, &show_ipv6_ospf6_database_type_id_router_cmd);
-  install_element (VIEW_NODE, &show_ipv6_ospf6_database_type_id_router_detail_cmd);
-  install_element (VIEW_NODE, &show_ipv6_ospf6_database_self_originated_cmd);
-  install_element (VIEW_NODE, &show_ipv6_ospf6_database_self_originated_detail_cmd);
-  install_element (VIEW_NODE, &show_ipv6_ospf6_database_type_self_originated_cmd);
-  install_element (VIEW_NODE, &show_ipv6_ospf6_database_type_self_originated_detail_cmd);
-  install_element (VIEW_NODE, &show_ipv6_ospf6_database_type_id_self_originated_cmd);
-  install_element (VIEW_NODE, &show_ipv6_ospf6_database_type_id_self_originated_detail_cmd);
-
   install_element (ENABLE_NODE, &show_version_ospf6_cmd);
-  install_element (ENABLE_NODE, &show_ipv6_ospf6_database_cmd);
-  install_element (ENABLE_NODE, &show_ipv6_ospf6_database_detail_cmd);
-  install_element (ENABLE_NODE, &show_ipv6_ospf6_database_type_cmd);
-  install_element (ENABLE_NODE, &show_ipv6_ospf6_database_type_detail_cmd);
-  install_element (ENABLE_NODE, &show_ipv6_ospf6_database_id_cmd);
-  install_element (ENABLE_NODE, &show_ipv6_ospf6_database_id_detail_cmd);
-  install_element (ENABLE_NODE, &show_ipv6_ospf6_database_router_cmd);
-  install_element (ENABLE_NODE, &show_ipv6_ospf6_database_router_detail_cmd);
-  install_element (ENABLE_NODE, &show_ipv6_ospf6_database_type_id_cmd);
-  install_element (ENABLE_NODE, &show_ipv6_ospf6_database_type_id_detail_cmd);
-  install_element (ENABLE_NODE, &show_ipv6_ospf6_database_type_router_cmd);
-  install_element (ENABLE_NODE, &show_ipv6_ospf6_database_type_router_detail_cmd);
-  install_element (ENABLE_NODE, &show_ipv6_ospf6_database_id_router_cmd);
-  install_element (ENABLE_NODE, &show_ipv6_ospf6_database_id_router_detail_cmd);
-  install_element (ENABLE_NODE, &show_ipv6_ospf6_database_type_id_router_cmd);
-  install_element (ENABLE_NODE, &show_ipv6_ospf6_database_type_id_router_detail_cmd);
-  install_element (ENABLE_NODE, &show_ipv6_ospf6_database_self_originated_cmd);
-  install_element (ENABLE_NODE, &show_ipv6_ospf6_database_self_originated_detail_cmd);
-  install_element (ENABLE_NODE, &show_ipv6_ospf6_database_type_self_originated_cmd);
-  install_element (ENABLE_NODE, &show_ipv6_ospf6_database_type_self_originated_detail_cmd);
-  install_element (ENABLE_NODE, &show_ipv6_ospf6_database_type_id_self_originated_cmd);
-  install_element (ENABLE_NODE, &show_ipv6_ospf6_database_type_id_self_originated_detail_cmd);
+
+#define INSTALL(n,c) \
+  install_element (n ## _NODE, &show_ipv6_ospf6_ ## c);
+
+  INSTALL (VIEW, database_cmd);
+  INSTALL (VIEW, database_detail_cmd);
+  INSTALL (VIEW, database_type_cmd);
+  INSTALL (VIEW, database_type_detail_cmd);
+  INSTALL (VIEW, database_id_cmd);
+  INSTALL (VIEW, database_id_detail_cmd);
+  INSTALL (VIEW, database_linkstate_id_cmd);
+  INSTALL (VIEW, database_linkstate_id_detail_cmd);
+  INSTALL (VIEW, database_router_cmd);
+  INSTALL (VIEW, database_router_detail_cmd);
+  INSTALL (VIEW, database_adv_router_cmd);
+  INSTALL (VIEW, database_adv_router_detail_cmd);
+  INSTALL (VIEW, database_type_id_cmd);
+  INSTALL (VIEW, database_type_id_detail_cmd);
+  INSTALL (VIEW, database_type_linkstate_id_cmd);
+  INSTALL (VIEW, database_type_linkstate_id_detail_cmd);
+  INSTALL (VIEW, database_type_router_cmd);
+  INSTALL (VIEW, database_type_router_detail_cmd);
+  INSTALL (VIEW, database_type_adv_router_cmd);
+  INSTALL (VIEW, database_type_adv_router_detail_cmd);
+  INSTALL (VIEW, database_adv_router_linkstate_id_cmd);
+  INSTALL (VIEW, database_adv_router_linkstate_id_detail_cmd);
+  INSTALL (VIEW, database_id_router_cmd);
+  INSTALL (VIEW, database_id_router_detail_cmd);
+  INSTALL (VIEW, database_type_id_router_cmd);
+  INSTALL (VIEW, database_type_id_router_detail_cmd);
+  INSTALL (VIEW, database_type_adv_router_linkstate_id_cmd);
+  INSTALL (VIEW, database_type_adv_router_linkstate_id_detail_cmd);
+  INSTALL (VIEW, database_self_originated_cmd);
+  INSTALL (VIEW, database_self_originated_detail_cmd);
+  INSTALL (VIEW, database_type_self_originated_cmd);
+  INSTALL (VIEW, database_type_self_originated_detail_cmd);
+  INSTALL (VIEW, database_type_id_self_originated_cmd);
+  INSTALL (VIEW, database_type_id_self_originated_detail_cmd);
+  INSTALL (VIEW, database_type_self_originated_linkstate_id_cmd);
+  INSTALL (VIEW, database_type_self_originated_linkstate_id_detail_cmd);
+  INSTALL (VIEW, database_type_id_self_originated_cmd);
+  INSTALL (VIEW, database_type_id_self_originated_detail_cmd);
+
+  INSTALL (ENABLE, database_cmd);
+  INSTALL (ENABLE, database_detail_cmd);
+  INSTALL (ENABLE, database_type_cmd);
+  INSTALL (ENABLE, database_type_detail_cmd);
+  INSTALL (ENABLE, database_id_cmd);
+  INSTALL (ENABLE, database_id_detail_cmd);
+  INSTALL (ENABLE, database_linkstate_id_cmd);
+  INSTALL (ENABLE, database_linkstate_id_detail_cmd);
+  INSTALL (ENABLE, database_router_cmd);
+  INSTALL (ENABLE, database_router_detail_cmd);
+  INSTALL (ENABLE, database_adv_router_cmd);
+  INSTALL (ENABLE, database_adv_router_detail_cmd);
+  INSTALL (ENABLE, database_type_id_cmd);
+  INSTALL (ENABLE, database_type_id_detail_cmd);
+  INSTALL (ENABLE, database_type_linkstate_id_cmd);
+  INSTALL (ENABLE, database_type_linkstate_id_detail_cmd);
+  INSTALL (ENABLE, database_type_router_cmd);
+  INSTALL (ENABLE, database_type_router_detail_cmd);
+  INSTALL (ENABLE, database_type_adv_router_cmd);
+  INSTALL (ENABLE, database_type_adv_router_detail_cmd);
+  INSTALL (ENABLE, database_adv_router_linkstate_id_cmd);
+  INSTALL (ENABLE, database_adv_router_linkstate_id_detail_cmd);
+  INSTALL (ENABLE, database_id_router_cmd);
+  INSTALL (ENABLE, database_id_router_detail_cmd);
+  INSTALL (ENABLE, database_type_id_router_cmd);
+  INSTALL (ENABLE, database_type_id_router_detail_cmd);
+  INSTALL (ENABLE, database_type_adv_router_linkstate_id_cmd);
+  INSTALL (ENABLE, database_type_adv_router_linkstate_id_detail_cmd);
+  INSTALL (ENABLE, database_self_originated_cmd);
+  INSTALL (ENABLE, database_self_originated_detail_cmd);
+  INSTALL (ENABLE, database_type_self_originated_cmd);
+  INSTALL (ENABLE, database_type_self_originated_detail_cmd);
+  INSTALL (ENABLE, database_type_id_self_originated_cmd);
+  INSTALL (ENABLE, database_type_id_self_originated_detail_cmd);
+  INSTALL (ENABLE, database_type_self_originated_linkstate_id_cmd);
+  INSTALL (ENABLE, database_type_self_originated_linkstate_id_detail_cmd);
+  INSTALL (ENABLE, database_type_id_self_originated_cmd);
+  INSTALL (ENABLE, database_type_id_self_originated_detail_cmd);
 
   ospf6_top_init ();
   ospf6_area_init ();
@@ -1260,6 +1821,7 @@
   ospf6_spf_init ();
   ospf6_intra_init ();
   ospf6_asbr_init ();
+  ospf6_abr_init ();
 
   /* Make ospf protocol socket. */
   ospf6_serv_sock ();