]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Add CLI command to test reconfiguration status
authorOndrej Zajicek (work) <santiago@crfreenet.org>
Wed, 12 Jun 2019 14:13:21 +0000 (16:13 +0200)
committerOndrej Zajicek (work) <santiago@crfreenet.org>
Wed, 12 Jun 2019 15:15:35 +0000 (17:15 +0200)
Based on patch from Kenth Eriksson <kenth.eriksson@infinera.com>.

conf/conf.c
conf/conf.h
sysdep/unix/config.Y
sysdep/unix/main.c
sysdep/unix/unix.h

index 439aa41d733d9c568c535a93df42632e0811ea17..d6b3e8e8e6808b9459df562223e8c3453c7fcd98 100644 (file)
@@ -444,6 +444,24 @@ config_undo(void)
   return CONF_PROGRESS;
 }
 
+int
+config_status(void)
+{
+  if (shutting_down)
+    return CONF_SHUTDOWN;
+
+  if (configuring)
+    return future_cftype ? CONF_QUEUED : CONF_PROGRESS;
+
+  return CONF_DONE;
+}
+
+btime
+config_timer_status(void)
+{
+  return tm_active(config_timer) ? tm_remains(config_timer) : -1;
+}
+
 extern void cmd_reconfig_undo_notify(void);
 
 static void
index 354a4da8b1c976d115f5dd0d820e5e873980aa68..51dcb989a03539fb2fec51b69c2ed4c062eaa6ca 100644 (file)
@@ -69,6 +69,8 @@ void config_free(struct config *);
 int config_commit(struct config *, int type, uint timeout);
 int config_confirm(void);
 int config_undo(void);
+int config_status(void);
+btime config_timer_status(void);
 void config_init(void);
 void cf_error(const char *msg, ...) NORET;
 void config_add_obstacle(struct config *);
index e7ecd735ba5872f27d571aefb78c534e7f042a43..2895a69e57ceae9c12e58a1eb73742018bb1cea0 100644 (file)
@@ -18,7 +18,7 @@ static struct log_config *this_log;
 CF_DECLS
 
 CF_KEYWORDS(LOG, SYSLOG, ALL, DEBUG, TRACE, INFO, REMOTE, WARNING, ERROR, AUTH, FATAL, BUG, STDERR, SOFT)
-CF_KEYWORDS(NAME, CONFIRM, UNDO, CHECK, TIMEOUT, DEBUG, LATENCY, LIMIT, WATCHDOG, WARNING)
+CF_KEYWORDS(NAME, CONFIRM, UNDO, CHECK, TIMEOUT, DEBUG, LATENCY, LIMIT, WATCHDOG, WARNING, STATUS)
 
 %type <i> log_mask log_mask_list log_cat cfg_timeout
 %type <t> cfg_name
@@ -124,6 +124,9 @@ CF_CLI(CONFIGURE CONFIRM,,, [[Confirm last configuration change - deactivate und
 CF_CLI(CONFIGURE UNDO,,, [[Undo last configuration change]])
 { cmd_reconfig_undo(); } ;
 
+CF_CLI(CONFIGURE STATUS,,, [[Show configuration status]])
+{ cmd_reconfig_status(); } ;
+
 CF_CLI(CONFIGURE CHECK, cfg_name, [\"<file>\"], [[Parse configuration and check its validity]])
 { cmd_check_config($3); } ;
 
index 921115b1a9cff12568e6ebe7a3bd0f7548fb27ff..c381b44fc9cf55e3d3d15576d0bf97875b060e86 100644 (file)
@@ -339,6 +339,28 @@ cmd_reconfig_undo(void)
   cmd_reconfig_msg(r);
 }
 
+void
+cmd_reconfig_status(void)
+{
+  int s = config_status();
+  btime t = config_timer_status();
+
+  switch (s)
+  {
+  case CONF_DONE:      cli_msg(-3, "Daemon is up and running"); break;
+  case CONF_PROGRESS:  cli_msg(-4, "Reconfiguration in progress"); break;
+  case CONF_QUEUED:    cli_msg(-5, "Reconfiguration in progress, next one enqueued"); break;
+  case CONF_SHUTDOWN:  cli_msg(-6, "Shutdown in progress"); break;
+  default:             break;
+  }
+
+  if (t >= 0)
+    cli_msg(-22, "Configuration unconfirmed, undo in %t s", t);
+
+  cli_msg(0, "");
+}
+
+
 /*
  *     Command-Line Interface
  */
index 0e1e98c0a229288f6f8740fba87d11f78799f84f..d5ce8ff99b6b3e09a34880731c53a3be6b9921be 100644 (file)
@@ -26,6 +26,7 @@ void cmd_check_config(char *name);
 void cmd_reconfig(char *name, int type, uint timeout);
 void cmd_reconfig_confirm(void);
 void cmd_reconfig_undo(void);
+void cmd_reconfig_status(void);
 void cmd_shutdown(void);
 
 #define UNIX_DEFAULT_CONFIGURE_TIMEOUT 300