diff --git a/vtysh/ChangeLog b/vtysh/ChangeLog
index db9f805..e73317d 100644
--- a/vtysh/ChangeLog
+++ b/vtysh/ChangeLog
@@ -1,3 +1,14 @@
+2004-08-26 Hasso Tepper <hasso@estpak.ee>
+
+	* *.c: Cosmetical changes - strip long lines, fix multiline comments
+	  style, indentation fixes, remove useless comments.
+	* vtysh.h: define VTYSH_INTERFACE.
+	* vtysh.c: Use VTYSH_INTERFACE where possible. Added some related TODO
+	  items.
+	* vtysh.c: Move things around a little to reduce spaghetti mess.
+	* Makefile.am: Parse only needed files from zebra daemon while
+	  building vtysh_cmd.c file to supress warnings.
+
 2004-06-30  Greg Troxel  <gdt@poblano.ir.bbn.com>
 
 	* extract.pl.in: Rename from extract.pl, with @PERL@.
diff --git a/vtysh/Makefile.am b/vtysh/Makefile.am
index 3467fad..99513e9 100644
--- a/vtysh/Makefile.am
+++ b/vtysh/Makefile.am
@@ -21,11 +21,16 @@
 rebuild4:
 	./extract.pl $(top_srcdir)/zebra/*.c $(top_srcdir)/ripd/*.c $(top_srcdir)/ospfd/*.c $(top_srcdir)/bgpd/*.c $(top_srcdir)/isisd/*.c $(top_srcdir)/lib/keychain.c $(top_srcdir)/lib/routemap.c $(top_srcdir)/lib/filter.c $(top_srcdir)/lib/plist.c $(top_srcdir)/lib/distribute.c $(top_srcdir)/lib/if_rmap.c > vtysh_cmd.c
 
-vtysh_cmd.c: $(top_srcdir)/zebra/*.c $(top_srcdir)/ripd/*.c $(top_srcdir)/ripngd/*.c $(top_srcdir)/ospfd/*.c \
-     $(top_srcdir)/ospf6d/*.c $(top_srcdir)/bgpd/*.c $(top_srcdir)/isisd/*.c $(top_srcdir)/lib/keychain.c $(top_srcdir)/lib/routemap.c \
-     $(top_srcdir)/lib/filter.c $(top_srcdir)/lib/plist.c $(top_srcdir)/lib/distribute.c $(top_srcdir)/lib/if_rmap.c
-	$(srcdir)/extract.pl $(top_srcdir)/zebra/*.c $(top_srcdir)/ripd/*.c $(top_srcdir)/ripngd/*.c $(top_srcdir)/ospfd/*.c \
-          $(top_srcdir)/ospf6d/*.c $(top_srcdir)/isisd/*.c $(top_srcdir)/bgpd/*.c $(top_srcdir)/lib/keychain.c \
-          $(top_srcdir)/lib/routemap.c $(top_srcdir)/lib/filter.c $(top_srcdir)/lib/plist.c $(top_srcdir)/lib/distribute.c \
-          $(top_srcdir)/lib/if_rmap.c > vtysh_cmd.c
+vtysh_cmd.c: $(top_srcdir)/ripd/*.c $(top_srcdir)/ripngd/*.c $(top_srcdir)/ospfd/*.c $(top_srcdir)/ospf6d/*.c \
+  $(top_srcdir)/isisd/*.c $(top_srcdir)/bgpd/*.c $(top_srcdir)/lib/keychain.c $(top_srcdir)/lib/routemap.c \
+  $(top_srcdir)/lib/filter.c $(top_srcdir)/lib/plist.c $(top_srcdir)/lib/distribute.c $(top_srcdir)/lib/if_rmap.c \
+  $(top_srcdir)/zebra/debug.c $(top_srcdir)/zebra/interface.c $(top_srcdir)/zebra/irdp.c \
+  $(top_srcdir)/zebra/irdp_interface.c $(top_srcdir)/zebra/rtadv.c $(top_srcdir)/zebra/zebra_vty.c \
+  $(top_srcdir)/zebra/zserv.c
+	$(srcdir)/extract.pl $(top_srcdir)/ripd/*.c $(top_srcdir)/ripngd/*.c $(top_srcdir)/ospfd/*.c $(top_srcdir)/ospf6d/*.c \
+	  $(top_srcdir)/isisd/*.c $(top_srcdir)/bgpd/*.c $(top_srcdir)/lib/keychain.c $(top_srcdir)/lib/routemap.c \
+	  $(top_srcdir)/lib/filter.c $(top_srcdir)/lib/plist.c $(top_srcdir)/lib/distribute.c $(top_srcdir)/lib/if_rmap.c \
+	  $(top_srcdir)/zebra/debug.c $(top_srcdir)/zebra/interface.c $(top_srcdir)/zebra/irdp.c \
+	  $(top_srcdir)/zebra/irdp_interface.c $(top_srcdir)/zebra/rtadv.c $(top_srcdir)/zebra/zebra_vty.c \
+	  $(top_srcdir)/zebra/zserv.c > vtysh_cmd.c
 
diff --git a/vtysh/vtysh.c b/vtysh/vtysh.c
index 169466e..e8310d7 100644
--- a/vtysh/vtysh.c
+++ b/vtysh/vtysh.c
@@ -46,139 +46,6 @@
   int fd;
 } vtysh_client[VTYSH_INDEX_MAX];
 
-/* When '^Z' is received from vty, move down to the enable mode. */
-int
-vtysh_end ()
-{
-  switch (vty->node)
-    {
-    case VIEW_NODE:
-    case ENABLE_NODE:
-      /* Nothing to do. */
-      break;
-    default:
-      vty->node = ENABLE_NODE;
-      break;
-    }
-  return CMD_SUCCESS;
-}
-
-DEFUNSH (VTYSH_ALL,
-	 vtysh_end_all,
-	 vtysh_end_all_cmd,
-	 "end",
-	 "End current mode and down to previous mode\n")
-{
-  return vtysh_end (vty);
-}
-
-DEFUNSH (VTYSH_ALL,
-	 vtysh_log_stdout,
-	 vtysh_log_stdout_cmd,
-	 "log stdout",
-	 "Logging control\n"
-	 "Logging goes to stdout\n")
-{
-  return CMD_SUCCESS;
-}
-
-DEFUNSH (VTYSH_ALL,
-	 no_vtysh_log_stdout,
-	 no_vtysh_log_stdout_cmd,
-	 "no log stdout",
-	 NO_STR
-	 "Logging control\n"
-	 "Logging goes to stdout\n")
-{
-  return CMD_SUCCESS;
-}
-
-DEFUNSH (VTYSH_ALL,
-	 vtysh_log_file,
-	 vtysh_log_file_cmd,
-	 "log file FILENAME",
-	 "Logging control\n"
-	 "Logging to file\n"
-	 "Logging filename\n")
-{
-  return CMD_SUCCESS;
-}
-
-DEFUNSH (VTYSH_ALL,
-	 no_vtysh_log_file,
-	 no_vtysh_log_file_cmd,
-	 "no log file [FILENAME]",
-	 NO_STR
-	 "Logging control\n"
-	 "Cancel logging to file\n"
-	 "Logging file name\n")
-{
-  return CMD_SUCCESS;
-}
-
-DEFUNSH (VTYSH_ALL,
-	 vtysh_log_syslog,
-	 vtysh_log_syslog_cmd,
-	 "log syslog",
-	 "Logging control\n"
-	 "Logging goes to syslog\n")
-{
-  return CMD_SUCCESS;
-}
-
-DEFUNSH (VTYSH_ALL,
-	 no_vtysh_log_syslog,
-	 no_vtysh_log_syslog_cmd,
-	 "no log syslog",
-	 NO_STR
-	 "Logging control\n"
-	 "Cancel logging to syslog\n")
-{
-  return CMD_SUCCESS;
-}
-
-DEFUNSH (VTYSH_ALL,
-	 vtysh_log_trap,
-	 vtysh_log_trap_cmd,
-	 "log trap (emergencies|alerts|critical|errors|warnings|notifications|informational|debugging)",
-	 "Logging control\n"
-	 "Limit logging to specifed level\n")
-{
-  return CMD_SUCCESS;
-}
-
-DEFUNSH (VTYSH_ALL,
-	 no_vtysh_log_trap,
-	 no_vtysh_log_trap_cmd,
-	 "no log trap",
-	 NO_STR
-	 "Logging control\n"
-	 "Permit all logging information\n")
-{
-  return CMD_SUCCESS;
-}
-
-DEFUNSH (VTYSH_ALL,
-	 vtysh_log_record_priority,
-	 vtysh_log_record_priority_cmd,
-	 "log record-priority",
-	 "Logging control\n"
-	 "Log the priority of the message within the message\n")
-{
-  return CMD_SUCCESS;
-}
-
-DEFUNSH (VTYSH_ALL,
-	 no_vtysh_log_record_priority,
-	 no_vtysh_log_record_priority_cmd,
-	 "no log record-priority",
-	 NO_STR
-	 "Logging control\n"
-	 "Do not log the priority of the message within the message\n")
-{
-  return CMD_SUCCESS;
-}
-
 void
 vclient_close (struct vtysh_client *vclient)
 {
@@ -187,10 +54,8 @@
   vclient->fd = -1;
 }
 
-
 /* Following filled with debug code to trace a problematic condition
-   under load - it SHOULD handle it.
-*/
+ * under load - it SHOULD handle it. */
 #define ERR_WHERE_STRING "vtysh(): vtysh_client_config(): "
 int
 vtysh_client_config (struct vtysh_client *vclient, char *line)
@@ -215,8 +80,7 @@
       return CMD_SUCCESS;
     }
 	
-  /* Allow enough room for buffer to read more than a few pages from socket
-   */
+  /* Allow enough room for buffer to read more than a few pages from socket. */
   bufsz = 5 * getpagesize() + 1;
   buf = XMALLOC(MTYPE_TMP, bufsz);
   memset(buf, 0, bufsz);
@@ -265,7 +129,7 @@
       pbuf += nbytes;
 
       /* See if a line exists in buffer, if so parse and consume it, and
-	 reset read position */
+       * reset read position. */
       if ((eoln = strrchr(buf, '\n')) == NULL)
 	continue;
 
@@ -283,7 +147,7 @@
       pbuf = buf + strlen(buf);
     }
 
-  /* parse anything left in the buffer */
+  /* Parse anything left in the buffer. */
   vtysh_config_parse (buf);
 
   XFREE(MTYPE_TMP, buf);
@@ -363,7 +227,7 @@
   FILE *fp = NULL;
   int closepager=0;
 
-  /* Split readline string up into the vector */
+  /* Split readline string up into the vector. */
   vline = cmd_make_strvec (line);
 
   if (vline == NULL)
@@ -412,17 +276,20 @@
 	      cmd_stat = vtysh_client_execute (&vtysh_client[VTYSH_INDEX_RIP],
 					       line, fp);
 	    if (cmd_stat != CMD_WARNING)
-	      cmd_stat = vtysh_client_execute (&vtysh_client[VTYSH_INDEX_RIPNG], line, fp);
+	      cmd_stat = vtysh_client_execute (&vtysh_client[VTYSH_INDEX_RIPNG],
+					       line, fp);
 	    if (cmd_stat != CMD_WARNING)
 	      cmd_stat = vtysh_client_execute (&vtysh_client[VTYSH_INDEX_OSPF],
 					       line, fp);
 	    if (cmd_stat != CMD_WARNING)
-	      cmd_stat = vtysh_client_execute (&vtysh_client[VTYSH_INDEX_OSPF6], line, fp);
+	      cmd_stat = vtysh_client_execute (&vtysh_client[VTYSH_INDEX_OSPF6],
+					       line, fp);
 	    if (cmd_stat != CMD_WARNING)
 	      cmd_stat = vtysh_client_execute (&vtysh_client[VTYSH_INDEX_BGP],
 					       line, fp);
 	    if (cmd_stat != CMD_WARNING)
-	      cmd_stat = vtysh_client_execute (&vtysh_client[VTYSH_INDEX_ISIS], line, fp);
+	      cmd_stat = vtysh_client_execute (&vtysh_client[VTYSH_INDEX_ISIS],
+					       line, fp);
 	    if (cmd_stat)
 	      {
 		line = "end";
@@ -523,14 +390,14 @@
 
       vline = cmd_make_strvec (vty->buf);
 
-      /* In case of comment line */
+      /* In case of comment line. */
       if (vline == NULL)
 	continue;
 
-      /* Execute configuration command : this is strict match */
+      /* Execute configuration command : this is strict match. */
       ret = cmd_execute_command_strict (vline, vty, &cmd);
 
-      /* Try again with setting node to CONFIG_NODE */
+      /* Try again with setting node to CONFIG_NODE. */
       if (ret != CMD_SUCCESS 
 	  && ret != CMD_SUCCESS_DAEMON
 	  && ret != CMD_WARNING)
@@ -700,9 +567,9 @@
   return 0;
 }
 
-/* result of cmd_complete_command() call will be stored here
-   and used in new_completion() in order to put the space in
-   correct places only */
+/* Result of cmd_complete_command() call will be stored here
+ * and used in new_completion() in order to put the space in
+ * correct places only. */
 int complete_status;
 
 char *
@@ -778,26 +645,23 @@
   return (char **) matched;
 }
 
-/* BGP node structure. */
+/* Vty node structures. */
 struct cmd_node bgp_node =
 {
   BGP_NODE,
   "%s(config-router)# ",
 };
 
-/* BGP node structure. */
 struct cmd_node rip_node =
 {
   RIP_NODE,
   "%s(config-router)# ",
 };
 
-/* ISIS node structure. */
 struct cmd_node isis_node =
 {
   ISIS_NODE,
   "%s(config-router)# ",
-  1
 };
 
 struct cmd_node interface_node =
@@ -806,6 +670,98 @@
   "%s(config-if)# ",
 };
 
+struct cmd_node rmap_node =
+{
+  RMAP_NODE,
+  "%s(config-route-map)# "
+};
+
+struct cmd_node zebra_node =
+{
+  ZEBRA_NODE,
+  "%s(config-router)# "
+};
+
+struct cmd_node bgp_vpnv4_node =
+{
+  BGP_VPNV4_NODE,
+  "%s(config-router-af)# "
+};
+
+struct cmd_node bgp_ipv4_node =
+{
+  BGP_IPV4_NODE,
+  "%s(config-router-af)# "
+};
+
+struct cmd_node bgp_ipv4m_node =
+{
+  BGP_IPV4M_NODE,
+  "%s(config-router-af)# "
+};
+
+struct cmd_node bgp_ipv6_node =
+{
+  BGP_IPV6_NODE,
+  "%s(config-router-af)# "
+};
+
+struct cmd_node ospf_node =
+{
+  OSPF_NODE,
+  "%s(config-router)# "
+};
+
+struct cmd_node ripng_node =
+{
+  RIPNG_NODE,
+  "%s(config-router)# "
+};
+
+struct cmd_node ospf6_node =
+{
+  OSPF6_NODE,
+  "%s(config-ospf6)# "
+};
+
+struct cmd_node keychain_node =
+{
+  KEYCHAIN_NODE,
+  "%s(config-keychain)# "
+};
+
+struct cmd_node keychain_key_node =
+{
+  KEYCHAIN_KEY_NODE,
+  "%s(config-keychain-key)# "
+};
+
+/* When '^Z' is received from vty, move down to the enable mode. */
+int
+vtysh_end ()
+{
+  switch (vty->node)
+    {
+    case VIEW_NODE:
+    case ENABLE_NODE:
+      /* Nothing to do. */
+      break;
+    default:
+      vty->node = ENABLE_NODE;
+      break;
+    }
+  return CMD_SUCCESS;
+}
+
+DEFUNSH (VTYSH_ALL,
+	 vtysh_end_all,
+	 vtysh_end_all_cmd,
+	 "end",
+	 "End current mode and down to previous mode\n")
+{
+  return vtysh_end (vty);
+}
+
 DEFUNSH (VTYSH_BGPD,
 	 router_bgp,
 	 router_bgp_cmd,
@@ -981,7 +937,6 @@
   return CMD_SUCCESS;
 }
 
-/* Enable command */
 DEFUNSH (VTYSH_ALL,
 	 vtysh_enable, 
 	 vtysh_enable_cmd,
@@ -992,7 +947,6 @@
   return CMD_SUCCESS;
 }
 
-/* Disable command */
 DEFUNSH (VTYSH_ALL,
 	 vtysh_disable, 
 	 vtysh_disable_cmd,
@@ -1004,7 +958,6 @@
   return CMD_SUCCESS;
 }
 
-/* Configration from terminal */
 DEFUNSH (VTYSH_ALL,
 	 vtysh_config_terminal,
 	 vtysh_config_terminal_cmd,
@@ -1199,7 +1152,7 @@
        "quit",
        "Exit current mode and down to previous mode\n")
 
-DEFUNSH (VTYSH_ZEBRA|VTYSH_RIPD|VTYSH_RIPNGD|VTYSH_OSPFD|VTYSH_OSPF6D|VTYSH_ISISD,
+DEFUNSH (VTYSH_INTERFACE,
 	 vtysh_interface,
 	 vtysh_interface_cmd,
 	 "interface IFNAME",
@@ -1210,6 +1163,7 @@
   return CMD_SUCCESS;
 }
 
+/* TODO Implement "no interface command in isisd. */
 DEFSH (VTYSH_ZEBRA|VTYSH_RIPD|VTYSH_RIPNGD|VTYSH_OSPFD|VTYSH_OSPF6D,
        vtysh_no_interface_cmd,
        "no interface IFNAME",
@@ -1217,6 +1171,8 @@
        "Delete a pseudo interface's configuration\n"
        "Interface's name\n")
 
+/* TODO Implement interface description commands in ripngd, ospf6d
+ * and isisd. */
 DEFSH (VTYSH_ZEBRA|VTYSH_RIPD|VTYSH_OSPFD,
        interface_desc_cmd,
        "description .LINE",
@@ -1229,7 +1185,7 @@
        NO_STR
        "Interface specific description\n")
 
-DEFUNSH (VTYSH_ZEBRA|VTYSH_RIPD|VTYSH_RIPNGD|VTYSH_OSPFD|VTYSH_OSPF6D|VTYSH_ISISD,
+DEFUNSH (VTYSH_INTERFACE,
 	 vtysh_exit_interface,
 	 vtysh_exit_interface_cmd,
 	 "exit",
@@ -1243,6 +1199,115 @@
        "quit",
        "Exit current mode and down to previous mode\n")
 
+/* Logging commands. */
+DEFUNSH (VTYSH_ALL,
+	 vtysh_log_stdout,
+	 vtysh_log_stdout_cmd,
+	 "log stdout",
+	 "Logging control\n"
+	 "Logging goes to stdout\n")
+{
+  return CMD_SUCCESS;
+}
+
+DEFUNSH (VTYSH_ALL,
+	 no_vtysh_log_stdout,
+	 no_vtysh_log_stdout_cmd,
+	 "no log stdout",
+	 NO_STR
+	 "Logging control\n"
+	 "Logging goes to stdout\n")
+{
+  return CMD_SUCCESS;
+}
+
+DEFUNSH (VTYSH_ALL,
+	 vtysh_log_file,
+	 vtysh_log_file_cmd,
+	 "log file FILENAME",
+	 "Logging control\n"
+	 "Logging to file\n"
+	 "Logging filename\n")
+{
+  return CMD_SUCCESS;
+}
+
+DEFUNSH (VTYSH_ALL,
+	 no_vtysh_log_file,
+	 no_vtysh_log_file_cmd,
+	 "no log file [FILENAME]",
+	 NO_STR
+	 "Logging control\n"
+	 "Cancel logging to file\n"
+	 "Logging file name\n")
+{
+  return CMD_SUCCESS;
+}
+
+DEFUNSH (VTYSH_ALL,
+	 vtysh_log_syslog,
+	 vtysh_log_syslog_cmd,
+	 "log syslog",
+	 "Logging control\n"
+	 "Logging goes to syslog\n")
+{
+  return CMD_SUCCESS;
+}
+
+DEFUNSH (VTYSH_ALL,
+	 no_vtysh_log_syslog,
+	 no_vtysh_log_syslog_cmd,
+	 "no log syslog",
+	 NO_STR
+	 "Logging control\n"
+	 "Cancel logging to syslog\n")
+{
+  return CMD_SUCCESS;
+}
+
+DEFUNSH (VTYSH_ALL,
+	 vtysh_log_trap,
+	 vtysh_log_trap_cmd,
+	 "log trap (emergencies|alerts|critical|errors|warnings|\
+		    notifications|informational|debugging)",
+	 "Logging control\n"
+	 "Limit logging to specifed level\n")
+{
+  return CMD_SUCCESS;
+}
+
+DEFUNSH (VTYSH_ALL,
+	 no_vtysh_log_trap,
+	 no_vtysh_log_trap_cmd,
+	 "no log trap",
+	 NO_STR
+	 "Logging control\n"
+	 "Permit all logging information\n")
+{
+  return CMD_SUCCESS;
+}
+
+DEFUNSH (VTYSH_ALL,
+	 vtysh_log_record_priority,
+	 vtysh_log_record_priority_cmd,
+	 "log record-priority",
+	 "Logging control\n"
+	 "Log the priority of the message within the message\n")
+{
+  return CMD_SUCCESS;
+}
+
+DEFUNSH (VTYSH_ALL,
+	 no_vtysh_log_record_priority,
+	 no_vtysh_log_record_priority_cmd,
+	 "no log record-priority",
+	 NO_STR
+	 "Logging control\n"
+	 "Do not log the priority of the message within the message\n")
+{
+  return CMD_SUCCESS;
+}
+
 DEFUN (vtysh_write_terminal,
        vtysh_write_terminal_cmd,
        "write terminal",
@@ -1305,28 +1370,26 @@
        "write-config (daemon|integrated)",
        "Specify config files to write to\n"
        "Write per daemon file\n"
-       "Write integrated file\n"
-      )
+       "Write integrated file\n")
 {
-	if (!strncmp(argv[0],"d",1)) {
-		vtysh_wc.daemon = 1;
-	} else if (!strncmp(argv[0],"i",1)) {
-		vtysh_wc.integrated = 1;
-	}
+	if (!strncmp(argv[0],"d",1))
+	  vtysh_wc.daemon = 1;
+	else if (!strncmp(argv[0],"i",1))
+	  vtysh_wc.integrated = 1;
+
 	return CMD_SUCCESS;
 }
 
 DEFUN (no_vtysh_write_config,
        no_vtysh_write_config_cmd,
        "no write-config (daemon|integrated)",
-       "Negate per daemon and/or integrated config files\n"
-      )
+       "Negate per daemon and/or integrated config files\n")
 {
-	if (!strncmp(argv[0],"d",1)) {
-		vtysh_wc.daemon = 0;
-	} else if (!strncmp(argv[0],"i",1)) {
-		vtysh_wc.integrated = 0;
-	}
+	if (!strncmp(argv[0],"d",1))
+	  vtysh_wc.daemon = 0;
+	else if (!strncmp(argv[0],"i",1))
+	  vtysh_wc.integrated = 0;
+
 	return CMD_SUCCESS;
 }
 
@@ -1337,23 +1400,23 @@
   FILE *fp;
   char *integrate_sav = NULL;
 
-  integrate_sav = malloc (strlen (integrate_default) 
-			    + strlen (CONF_BACKUP_EXT) + 1);
+  integrate_sav = malloc (strlen (integrate_default) +
+			  strlen (CONF_BACKUP_EXT) + 1);
   strcpy (integrate_sav, integrate_default);
   strcat (integrate_sav, CONF_BACKUP_EXT);
 
-
   fprintf (stdout,"Building Configuration...\n");
 
-  /* Move current configuration file to backup config file */
+  /* Move current configuration file to backup config file. */
   unlink (integrate_sav);
   rename (integrate_default, integrate_sav);
-  free   (integrate_sav);
+  free (integrate_sav);
  
   fp = fopen (integrate_default, "w");
   if (fp == NULL)
     {
-      fprintf (stdout,"%% Can't open configuration file %s.\n", integrate_default);
+      fprintf (stdout,"%% Can't open configuration file %s.\n",
+	       integrate_default);
       return CMD_SUCCESS;
     }
 
@@ -1394,14 +1457,12 @@
   int ret = CMD_SUCCESS;
   char line[] = "write memory\n";
   
-  /* if integrated Zebra.conf explicitely set */
-  if (vtysh_wc.integrated == 1) {
-  	ret = write_config_integrated();
-  }
+  /* If integrated Zebra.conf explicitely set. */
+  if (vtysh_wc.integrated == 1)
+    ret = write_config_integrated();
 
-  if (!vtysh_wc.daemon) {
-  	return ret;
-  }
+  if (!vtysh_wc.daemon)
+    return ret;
 
   fprintf (stdout,"Building Configuration...\n");
 	  
@@ -1607,76 +1668,6 @@
   return CMD_SUCCESS;
 }
 
-/* Route map node structure. */
-struct cmd_node rmap_node =
-{
-  RMAP_NODE,
-  "%s(config-route-map)# "
-};
-
-/* Zebra node structure. */
-struct cmd_node zebra_node =
-{
-  ZEBRA_NODE,
-  "%s(config-router)# "
-};
-
-struct cmd_node bgp_vpnv4_node =
-{
-  BGP_VPNV4_NODE,
-  "%s(config-router-af)# "
-};
-
-struct cmd_node bgp_ipv4_node =
-{
-  BGP_IPV4_NODE,
-  "%s(config-router-af)# "
-};
-
-struct cmd_node bgp_ipv4m_node =
-{
-  BGP_IPV4M_NODE,
-  "%s(config-router-af)# "
-};
-
-struct cmd_node bgp_ipv6_node =
-{
-  BGP_IPV6_NODE,
-  "%s(config-router-af)# "
-};
-
-struct cmd_node ospf_node =
-{
-  OSPF_NODE,
-  "%s(config-router)# "
-};
-
-/* RIPng node structure. */
-struct cmd_node ripng_node =
-{
-  RIPNG_NODE,
-  "%s(config-router)# "
-};
-
-/* OSPF6 node structure. */
-struct cmd_node ospf6_node =
-{
-  OSPF6_NODE,
-  "%s(config-ospf6)# "
-};
-
-struct cmd_node keychain_node =
-{
-  KEYCHAIN_NODE,
-  "%s(config-keychain)# "
-};
-
-struct cmd_node keychain_key_node =
-{
-  KEYCHAIN_KEY_NODE,
-  "%s(config-keychain-key)# "
-};
-
 void
 vtysh_install_default (enum node_type node)
 {
@@ -1723,7 +1714,8 @@
   if (sock < 0)
     {
 #ifdef DEBUG
-      fprintf(stderr, "vtysh_connect(%s): socket = %s\n", path, strerror(errno));
+      fprintf(stderr, "vtysh_connect(%s): socket = %s\n", path,
+	      strerror(errno));
 #endif /* DEBUG */
       return -1;
     }
@@ -1741,7 +1733,8 @@
   if (ret < 0)
     {
 #ifdef DEBUG
-      fprintf(stderr, "vtysh_connect(%s): connect = %s\n", path, strerror(errno));
+      fprintf(stderr, "vtysh_connect(%s): connect = %s\n", path,
+	      strerror(errno));
 #endif /* DEBUG */
       close (sock);
       return -1;
@@ -1764,8 +1757,7 @@
   vtysh_connect (&vtysh_client[VTYSH_INDEX_ISIS], ISIS_VTYSH_PATH);
 }
 
-
-/* To disable readline's filename completion */
+/* To disable readline's filename completion. */
 char *
 vtysh_completion_entry_function (const char *ignore, int invoking_key)
 {
@@ -1780,7 +1772,7 @@
   rl_completion_entry_function = vtysh_completion_entry_function;
   rl_attempted_completion_function = (CPPFunction *)new_completion;
   /* do not append space after completion. It will be appended
-     in new_completion() function explicitly */
+   * in new_completion() function explicitly. */
   rl_completion_append_character = '\0';
 }
 
@@ -1950,7 +1942,7 @@
   install_element (ENABLE_NODE, &vtysh_write_file_cmd);
   install_element (ENABLE_NODE, &vtysh_write_cmd);
 
-  /* write terminal command */
+  /* "write terminal" command. */
   install_element (ENABLE_NODE, &vtysh_write_terminal_cmd);
   install_element (CONFIG_NODE, &vtysh_write_terminal_cmd);
   install_element (BGP_NODE, &vtysh_write_terminal_cmd);
@@ -1968,7 +1960,7 @@
   install_element (KEYCHAIN_NODE, &vtysh_write_terminal_cmd);
   install_element (KEYCHAIN_KEY_NODE, &vtysh_write_terminal_cmd);
 
-  /* write memory command */
+  /* "write memory" command. */
   install_element (ENABLE_NODE, &vtysh_write_memory_cmd);
   install_element (CONFIG_NODE, &vtysh_write_memory_cmd);
   install_element (BGP_NODE, &vtysh_write_memory_cmd);
diff --git a/vtysh/vtysh.h b/vtysh/vtysh.h
index 5ccf41a..abfb3ec 100644
--- a/vtysh/vtysh.h
+++ b/vtysh/vtysh.h
@@ -29,8 +29,9 @@
 #define VTYSH_OSPF6D 0x10
 #define VTYSH_BGPD   0x20
 #define VTYSH_ISISD  0x40
-#define VTYSH_ALL    VTYSH_ZEBRA|VTYSH_RIPD|VTYSH_RIPNGD|VTYSH_OSPFD|VTYSH_OSPF6D|VTYSH_BGPD|VTYSH_ISISD
-#define VTYSH_RMAP   VTYSH_RIPD|VTYSH_RIPNGD|VTYSH_OSPFD|VTYSH_OSPF6D|VTYSH_BGPD
+#define VTYSH_ALL	  VTYSH_ZEBRA|VTYSH_RIPD|VTYSH_RIPNGD|VTYSH_OSPFD|VTYSH_OSPF6D|VTYSH_BGPD|VTYSH_ISISD
+#define VTYSH_RMAP	  VTYSH_RIPD|VTYSH_RIPNGD|VTYSH_OSPFD|VTYSH_OSPF6D|VTYSH_BGPD
+#define VTYSH_INTERFACE	  VTYSH_ZEBRA|VTYSH_RIPD|VTYSH_RIPNGD|VTYSH_OSPFD|VTYSH_OSPF6D|VTYSH_ISISD
 
 #define VTYSH_INDEX_ZEBRA 0
 #define VTYSH_INDEX_RIP   1
diff --git a/vtysh/vtysh_config.c b/vtysh/vtysh_config.c
index 9a0bff4..f518653 100644
--- a/vtysh/vtysh_config.c
+++ b/vtysh/vtysh_config.c
@@ -44,7 +44,7 @@
 };
 
 struct list *config_top;
-
+
 int
 line_cmp (char *c1, char *c2)
 {
@@ -164,13 +164,17 @@
       /* Store line to current configuration. */
       if (config)
 	{
-	  if (strncmp (line, " address-family vpnv4", strlen (" address-family vpnv4")) == 0)
+	  if (strncmp (line, " address-family vpnv4",
+	      strlen (" address-family vpnv4")) == 0)
 	    config = config_get (BGP_VPNV4_NODE, line);
-	  else if (strncmp (line, " address-family ipv4 multicast", strlen (" address-family ipv4 multicast")) == 0)
+	  else if (strncmp (line, " address-family ipv4 multicast",
+		   strlen (" address-family ipv4 multicast")) == 0)
 	    config = config_get (BGP_IPV4M_NODE, line);
-	  else if (strncmp (line, " address-family ipv6", strlen (" address-family ipv6")) == 0)
+	  else if (strncmp (line, " address-family ipv6",
+		   strlen (" address-family ipv6")) == 0)
 	    config = config_get (BGP_IPV6_NODE, line);
-	  else if (config->index == RMAP_NODE || config->index == INTERFACE_NODE )
+	  else if (config->index == RMAP_NODE ||
+	           config->index == INTERFACE_NODE )
 	    config_add_line_uniq (config->line, line);
 	  else
 	    config_add_line (config->line, line);
@@ -199,15 +203,20 @@
 	config = config_get (RMAP_NODE, line);
       else if (strncmp (line, "access-list", strlen ("access-list")) == 0)
 	config = config_get (ACCESS_NODE, line);
-      else if (strncmp (line, "ipv6 access-list", strlen ("ipv6 access-list")) == 0)
+      else if (strncmp (line, "ipv6 access-list",
+	       strlen ("ipv6 access-list")) == 0)
 	config = config_get (ACCESS_IPV6_NODE, line);
-      else if (strncmp (line, "ip prefix-list", strlen ("ip prefix-list")) == 0)
+      else if (strncmp (line, "ip prefix-list",
+	       strlen ("ip prefix-list")) == 0)
 	config = config_get (PREFIX_NODE, line);
-      else if (strncmp (line, "ipv6 prefix-list", strlen ("ipv6 prefix-list")) == 0)
+      else if (strncmp (line, "ipv6 prefix-list",
+	       strlen ("ipv6 prefix-list")) == 0)
 	config = config_get (PREFIX_IPV6_NODE, line);
-      else if (strncmp (line, "ip as-path access-list", strlen ("ip as-path access-list")) == 0)
+      else if (strncmp (line, "ip as-path access-list",
+	       strlen ("ip as-path access-list")) == 0)
 	config = config_get (AS_LIST_NODE, line);
-      else if (strncmp (line, "ip community-list", strlen ("ip community-list")) == 0)
+      else if (strncmp (line, "ip community-list",
+	       strlen ("ip community-list")) == 0)
 	config = config_get (COMMUNITY_LIST_NODE, line);
       else if (strncmp (line, "ip route", strlen ("ip route")) == 0)
 	config = config_get (IP_NODE, line);
@@ -253,13 +262,13 @@
 }
 
 /* Macro to check delimiter is needed between each configuration line
-   or not.  */
+ * or not. */
 #define NO_DELIMITER(I)  \
   ((I) == ACCESS_NODE || (I) == PREFIX_NODE || (I) == IP_NODE \
    || (I) == AS_LIST_NODE || (I) == COMMUNITY_LIST_NODE || \
    (I) == ACCESS_IPV6_NODE || (I) == PREFIX_IPV6_NODE)
 
-/* Display configuration to file pointer.  */
+/* Display configuration to file pointer. */
 void
 vtysh_config_dump (FILE *fp)
 {
@@ -328,7 +337,7 @@
   vtysh_execute_no_pager ("enable");
   vtysh_execute_no_pager ("configure terminal");
 
-  /* Execute configuration file */
+  /* Execute configuration file. */
   ret = vtysh_config_from_file (vty, confp);
 
   vtysh_execute_no_pager ("end");
diff --git a/vtysh/vtysh_main.c b/vtysh/vtysh_main.c
index 0d2808e..69a5358 100644
--- a/vtysh/vtysh_main.c
+++ b/vtysh/vtysh_main.c
@@ -40,7 +40,7 @@
 char *progname;
 
 /* Configuration file name.  Usually this is configurable, but vtysh
-   has static configuration file only.  */
+ * has static configuration file only. */
 char *config_file = NULL;
 
 /* Configuration file and directory. */
@@ -142,15 +142,13 @@
   if (status != 0)
     fprintf (stderr, "Try `%s --help' for more information.\n", progname);
   else
-    {    
-      printf ("Usage : %s [OPTION...]\n\n\
-Integrated shell for Quagga routing software suite. \n\n\
--b, --boot               Execute boot startup configuration\n\
--c, --command            Execute argument as command\n\
--h, --help               Display this help and exit\n\
-\n\
-Report bugs to %s\n", progname, ZEBRA_BUG_ADDRESS);
-    }
+    printf ("Usage : %s [OPTION...]\n\n" \
+	    "Integrated shell for Quagga routing software suite. \n\n"\
+	    "-b, --boot               Execute boot startup configuration\n" \
+	    "-c, --command            Execute argument as command\n "\
+	    "-h, --help               Display this help and exit\n\n" \
+	    "Report bugs to %s\n", progname, ZEBRA_BUG_ADDRESS);
+
   exit (status);
 }
 
@@ -171,7 +169,7 @@
 {
   HIST_ENTRY *last;
   /* If the buffer has already been allocated, return the memory
-     to the free pool. */
+   * to the free pool. */
   if (line_read)
     {
       free (line_read);
@@ -182,8 +180,7 @@
   line_read = readline (vtysh_prompt ());
      
   /* If the line has any text in it, save it on the history. But only if
-   * last command in history isn't the same one.
-   */
+   * last command in history isn't the same one. */
   if (line_read && *line_read)
     {
       using_history();
@@ -261,7 +258,7 @@
   /* Read vtysh configuration file. */
   vtysh_read_config (config_file, config_current, config_default);
 
-  /* If eval mode */
+  /* If eval mode. */
   if (eval_flag)
     {
       vtysh_execute_no_pager (eval_line);
