[bgpd] Add 'show bgp views' command

* bgp_vty.c: (show_bgp_views_cmd) new command to list all defined
  views.
  (with small edits by Paul Jakma)

Signed-off-by: Paul Jakma <paul@quagga.net>
diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c
index 7acf27c..380dbda 100644
--- a/bgpd/bgp_vty.c
+++ b/bgpd/bgp_vty.c
@@ -6509,6 +6509,32 @@
        "BGP IPv6 neighbor to clear\n"
        "Soft reconfig for rsclient RIB\n")
 
+DEFUN (show_bgp_views,
+       show_bgp_views_cmd,
+       "show bgp views",
+       SHOW_STR
+       BGP_STR
+       "Show the defined BGP views\n")
+{
+  struct list *inst = bm->bgp;
+  struct listnode *node;
+  struct bgp *bgp;
+
+  if (!bgp_option_check (BGP_OPT_MULTIPLE_INSTANCE))
+    {
+      vty_out (vty, "Multiple BGP views are not defined%s", VTY_NEWLINE);
+      return CMD_WARNING;
+    }
+  
+  vty_out (vty, "Defined BGP views:%s", VTY_NEWLINE);
+  for (ALL_LIST_ELEMENTS_RO(inst, node, bgp))
+    vty_out (vty, "\t%s (AS%u)%s", 
+             bgp->name ? bgp->name : "(null)",
+             bgp->as, VTY_NEWLINE);
+  
+  return CMD_SUCCESS;
+}
+
 DEFUN (show_bgp_memory, 
        show_bgp_memory_cmd,
        "show bgp memory",
@@ -9875,6 +9901,11 @@
   install_element (RESTRICTED_NODE, &show_bgp_memory_cmd);
   install_element (ENABLE_NODE, &show_bgp_memory_cmd);
   
+  /* "show bgp views" commands. */
+  install_element (VIEW_NODE, &show_bgp_views_cmd);
+  install_element (RESTRICTED_NODE, &show_bgp_views_cmd);
+  install_element (ENABLE_NODE, &show_bgp_views_cmd);
+  
   /* Community-list. */
   community_list_vty ();
 }