]> git.puffer.fish Git - matthieu/frr.git/commitdiff
Added vtysh patch to allow 'write file' command to write either
authorpaul <paul>
Fri, 13 Dec 2002 20:49:00 +0000 (20:49 +0000)
committerpaul <paul>
Fri, 13 Dec 2002 20:49:00 +0000 (20:49 +0000)
per-daemon and/or integrated config file

ChangeLog
vtysh/ChangeLog
vtysh/vtysh.c

index 7448bfe1c6f2dd3407754ad98fe3bbd3fae529a2..bad4d0de4b4eafaaec2aa50bf8df1926025e9f84 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2002-12-13 Paul Jakma <paul@dishone.st>
+
+       * added support for vtysh 'write file' command to 
+       write either per-daamon and/or integrated file
+
 2002-07-07  Kunihiro Ishiguro  <kunihiro@ipinfusion.com>
 
        * zebra-0.93 released.
index 5818d5c0d3314ad86a30bf26faf2a3d19f1f335f..701101ad5f60c4374149c685339fa2d3d5f0f100 100644 (file)
@@ -1,3 +1,10 @@
+2002-09-30 Paul Jakma <paulzebra@rs250.org>
+       
+       * vtysh.c: add 'write-config (integrated|daemon)' option
+       to specifiy whether write config commands should write
+       integrated Zebra.conf file and/or per daemon files.
+       Defaults to per daemon, unless this is turned off.
+
 2002-07-07  Kunihiro Ishiguro  <kunihiro@ipinfusion.com>
 
        * zebra-0.93 released.
index 965eb392910525e0199f63a4abbe61fcff6a5ee3..6e124752375577add175296849b038757c5fe2d7 100644 (file)
@@ -376,22 +376,22 @@ vtysh_execute_func (char *line, int pager)
     {
     case CMD_WARNING:
       if (vty->type == VTY_FILE)
-       printf ("Warning...\n");
+       fprintf (stdout,"Warning...\n");
       break;
     case CMD_ERR_AMBIGUOUS:
-      printf ("%% Ambiguous command.\n");
+      fprintf (stdout,"%% Ambiguous command.\n");
       break;
     case CMD_ERR_NO_MATCH:
-      printf ("%% Unknown command.\n");
+      fprintf (stdout,"%% Unknown command.\n");
       break;
     case CMD_ERR_INCOMPLETE:
-      printf ("%% Command incomplete.\n");
+      fprintf (stdout,"%% Command incomplete.\n");
       break;
     case CMD_SUCCESS_DAEMON:
       {
        if (pager && vtysh_pager_name)
          {
-           fp = popen ("more", "w");
+           fp = popen (vtysh_pager_name, "w");
            if (fp == NULL)
              {
                perror ("popen");
@@ -558,16 +558,16 @@ vtysh_config_from_file (struct vty *vty, FILE *fp)
        {
        case CMD_WARNING:
          if (vty->type == VTY_FILE)
-           printf ("Warning...\n");
+           fprintf (stdout,"Warning...\n");
          break;
        case CMD_ERR_AMBIGUOUS:
-         printf ("%% Ambiguous command.\n");
+         fprintf (stdout,"%% Ambiguous command.\n");
          break;
        case CMD_ERR_NO_MATCH:
-         printf ("%% Unknown command: %s", vty->buf);
+         fprintf (stdout,"%% Unknown command: %s", vty->buf);
          break;
        case CMD_ERR_INCOMPLETE:
-         printf ("%% Command incomplete.\n");
+         fprintf (stdout,"%% Command incomplete.\n");
          break;
        case CMD_SUCCESS_DAEMON:
          {
@@ -628,20 +628,20 @@ vtysh_rl_describe ()
 
   describe = cmd_describe_command (vline, vty, &ret);
 
-  printf ("\n");
+  fprintf (stdout,"\n");
 
   /* Ambiguous and no match error. */
   switch (ret)
     {
     case CMD_ERR_AMBIGUOUS:
       cmd_free_strvec (vline);
-      printf ("%% Ambiguous command.\n");
+      fprintf (stdout,"%% Ambiguous command.\n");
       rl_on_new_line ();
       return 0;
       break;
     case CMD_ERR_NO_MATCH:
       cmd_free_strvec (vline);
-      printf ("%% There is no matched command.\n");
+      fprintf (stdout,"%% There is no matched command.\n");
       rl_on_new_line ();
       return 0;
       break;
@@ -672,10 +672,10 @@ vtysh_rl_describe ()
          continue;
 
        if (! desc->str)
-         printf ("  %-s\n",
+         fprintf (stdout,"  %-s\n",
                  desc->cmd[0] == '.' ? desc->cmd + 1 : desc->cmd);
        else
-         printf ("  %-*s  %s\n",
+         fprintf (stdout,"  %-*s  %s\n",
                  width,
                  desc->cmd[0] == '.' ? desc->cmd + 1 : desc->cmd,
                  desc->str);
@@ -1175,7 +1175,7 @@ DEFUN (vtysh_write_terminal,
 
   if (vtysh_pager_name)
     {
-      fp = popen ("more", "w");
+      fp = popen (vtysh_pager_name, "w");
       if (fp == NULL)
        {
          perror ("popen");
@@ -1214,11 +1214,42 @@ DEFUN (vtysh_write_terminal,
   return CMD_SUCCESS;
 }
 
-DEFUN (vtysh_write_memory,
-       vtysh_write_memory_cmd,
-       "write memory",
-       "Write running configuration to memory, network, or terminal\n"
-       "Write configuration to the file (same as write file)\n")
+struct vtysh_writeconfig_t {
+       int daemon;
+       int integrated;
+} vtysh_wc = {-1,0};
+
+DEFUN (vtysh_write_config,
+               vtysh_write_config_cmd,
+               "write-config (daemon|integrated)",
+               "Specify config files to write to\n"
+               "Write per daemon 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;
+       }
+       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"
+)
+{
+       if (!strncmp(argv[0],"d",1)) {
+               vtysh_wc.daemon = 0;
+       } else if (!strncmp(argv[0],"i",1)) {
+               vtysh_wc.integrated = 0;
+       }
+       return CMD_SUCCESS;
+}
+
+int write_config_integrated(void)
 {
   int ret;
   mode_t old_umask;
@@ -1235,22 +1266,19 @@ DEFUN (vtysh_write_memory,
   strcat (integrate_sav, CONF_BACKUP_EXT);
 
 
-  printf ("Building Configuration...\n");
+  fprintf (stdout,"Building Configuration...\n");
 
   /* Move current configuration file to backup config file */
   unlink (integrate_sav);
   rename (integrate_default, integrate_sav);
-
   fp = fopen (integrate_default, "w");
   if (fp == NULL)
     {
-      printf ("%% Can't open configuration file %s.\n", integrate_default);
+      fprintf (stdout,"%% Can't open configuration file %s.\n", integrate_default);
       umask (old_umask);
       return CMD_SUCCESS;
     }
-  else
-    printf ("[OK]\n");
-         
 
   vtysh_config_write (fp);
 
@@ -1265,10 +1293,46 @@ DEFUN (vtysh_write_memory,
 
   fclose (fp);
 
+  fprintf(stdout,"Integrated configuration saved to %s\n",integrate_default);
+
+  fprintf (stdout,"[OK]\n");
+
   umask (old_umask);
   return CMD_SUCCESS;
 }
 
+DEFUN (vtysh_write_memory,
+       vtysh_write_memory_cmd,
+       "write memory",
+       "Write running configuration to memory, network, or terminal\n"
+       "Write configuration to the file (same as write file)\n")
+{
+  int ret;
+  char line[] = "write memory\n";
+  
+  /* if integrated Zebra.conf explicitely set */
+  if (vtysh_wc.integrated == 1) {
+       ret = write_config_integrated();
+  }
+
+  if (!vtysh_wc.daemon) {
+       return ret;
+  }
+
+  fprintf (stdout,"Building Configuration...\n");
+         
+  ret = vtysh_client_execute (&vtysh_client[VTYSH_INDEX_ZEBRA], line, stdout);
+  ret = vtysh_client_execute (&vtysh_client[VTYSH_INDEX_RIP], line, stdout);
+  ret = vtysh_client_execute (&vtysh_client[VTYSH_INDEX_RIPNG], line, stdout);
+  ret = vtysh_client_execute (&vtysh_client[VTYSH_INDEX_OSPF], line, stdout);
+  ret = vtysh_client_execute (&vtysh_client[VTYSH_INDEX_OSPF6], line, stdout);
+  ret = vtysh_client_execute (&vtysh_client[VTYSH_INDEX_BGP], line, stdout);
+
+  fprintf (stdout,"[OK]\n");
+
+  return CMD_SUCCESS;  
+}
+
 ALIAS (vtysh_write_memory,
        vtysh_copy_runningconfig_startupconfig_cmd,
        "copy running-config startup-config",  
@@ -1800,4 +1864,6 @@ vtysh_init_vty ()
   install_element (CONFIG_NODE, &no_vtysh_log_trap_cmd);
   install_element (CONFIG_NODE, &vtysh_log_record_priority_cmd);
   install_element (CONFIG_NODE, &no_vtysh_log_record_priority_cmd);
+  install_element (CONFIG_NODE, &vtysh_write_config_cmd);
+  install_element (CONFIG_NODE, &no_vtysh_write_config_cmd);
 }