summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Lamparter <equinox@opensourcerouting.org>2019-01-24 18:17:40 +0100
committerDavid Lamparter <equinox@diac24.net>2019-02-19 21:34:31 +0100
commit3ec9556728c7fe17bb1c47e62abf75bbff29502f (patch)
tree8edbd514dcbae0913a0e344ec6d5677d75c67050
parentae132a9497af5fd881db897a35288382cc557b9b (diff)
watchfrr: build in defaults for -r/-s/-k
There's no good reason to not have these options default to the installation path of tools/watchfrr.sh. Doing so allows us to ditch watchfrr_options from daemons/daemons.conf completely. Fixes: #3652 Signed-off-by: David Lamparter <equinox@diac24.net>
-rwxr-xr-xconfigure.ac1
-rw-r--r--tools/etc/frr/daemons2
-rw-r--r--tools/frrcommon.sh.in9
-rw-r--r--tools/frrinit.sh.in2
-rw-r--r--tools/watchfrr.sh.in2
-rw-r--r--watchfrr/watchfrr.c14
6 files changed, 25 insertions, 5 deletions
diff --git a/configure.ac b/configure.ac
index 8ae1a7bbc6..4a05c0d69a 100755
--- a/configure.ac
+++ b/configure.ac
@@ -2157,6 +2157,7 @@ AC_SUBST([CFG_LIBYANG_PLUGINS])
AC_DEFINE_UNQUOTED([MODULE_PATH], ["$CFG_MODULE"], [path to modules])
AC_DEFINE_UNQUOTED([YANG_MODELS_PATH], ["$CFG_YANGMODELS"], [path to YANG data models])
AC_DEFINE_UNQUOTED([LIBYANG_PLUGINS_PATH], ["$CFG_LIBYANG_PLUGINS"], [path to libyang plugins])
+AC_DEFINE_UNQUOTED([WATCHFRR_SH_PATH], ["${CFG_SBIN%/}/watchfrr.sh"], [path to watchfrr.sh])
dnl ------------------------------------
dnl Enable RPKI and add librtr to libs
diff --git a/tools/etc/frr/daemons b/tools/etc/frr/daemons
index 2d56fe1b98..0fca541137 100644
--- a/tools/etc/frr/daemons
+++ b/tools/etc/frr/daemons
@@ -55,7 +55,7 @@ bfdd_options=" -A 127.0.0.1"
fabricd_options="-A 127.0.0.1"
# The list of daemons to watch is automatically generated by the init script.
-watchfrr_options="-r '/usr/lib/frr/watchfrr.sh restart %s' -s '/usr/lib/frr/watchfrr.sh start %s' -k '/usr/lib/frr/watchfrr.sh stop %s'"
+#watchfrr_options=""
# for debugging purposes, you can specify a "wrap" command to start instead
# of starting the daemon directly, e.g. to use valgrind on ospfd:
diff --git a/tools/frrcommon.sh.in b/tools/frrcommon.sh.in
index 588aa6d103..37abfeb30d 100644
--- a/tools/frrcommon.sh.in
+++ b/tools/frrcommon.sh.in
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
#
# This is a "library" of sorts for use by the other FRR shell scripts. It
# has most of the daemon start/stop logic, but expects the following shell
@@ -288,6 +288,13 @@ load_old_config "$C_PATH/daemons.conf"
load_old_config "/etc/default/frr"
load_old_config "/etc/sysconfig/frr"
+if declare -p watchfrr_options | grep -q '^declare \-a'; then
+ log_warning_msg "watchfrr_options contains a bash array value." \
+ "The configured value is intentionally ignored since it is likely wrong." \
+ "Please remove or fix the setting."
+ unset watchfrr_options
+fi
+
#
# other defaults and dispatch
#
diff --git a/tools/frrinit.sh.in b/tools/frrinit.sh.in
index 3dddf5bd44..0f5ed85864 100644
--- a/tools/frrinit.sh.in
+++ b/tools/frrinit.sh.in
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
#
### BEGIN INIT INFO
# Provides: frr
diff --git a/tools/watchfrr.sh.in b/tools/watchfrr.sh.in
index 3051d91044..712f962a0a 100644
--- a/tools/watchfrr.sh.in
+++ b/tools/watchfrr.sh.in
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
#
# This is NOT the init script! This is the watchfrr start/stop/restart
# command handler, passed to watchfrr with the -s/-r/-k commands. It is used
diff --git a/watchfrr/watchfrr.c b/watchfrr/watchfrr.c
index 2a0b6d890c..34f8dabdf1 100644
--- a/watchfrr/watchfrr.c
+++ b/watchfrr/watchfrr.c
@@ -53,6 +53,10 @@
#define DEFAULT_MIN_RESTART 60
#define DEFAULT_MAX_RESTART 600
+#define DEFAULT_RESTART_CMD WATCHFRR_SH_PATH " restart %s"
+#define DEFAULT_START_CMD WATCHFRR_SH_PATH " start %s"
+#define DEFAULT_STOP_CMD WATCHFRR_SH_PATH " stop %s"
+
#define PING_TOKEN "PING"
DEFINE_MGROUP(WATCHFRR, "watchfrr")
@@ -124,6 +128,9 @@ static struct global_state {
.loglevel = DEFAULT_LOGLEVEL,
.min_restart_interval = DEFAULT_MIN_RESTART,
.max_restart_interval = DEFAULT_MAX_RESTART,
+ .restart_command = DEFAULT_RESTART_CMD,
+ .start_command = DEFAULT_START_CMD,
+ .stop_command = DEFAULT_STOP_CMD,
};
typedef enum {
@@ -227,14 +234,17 @@ Otherwise, the interval is doubled (but capped at the -M value).\n\n",
-r, --restart Supply a Bourne shell command to use to restart a single\n\
daemon. The command string should include '%%s' where the\n\
name of the daemon should be substituted.\n\
+ (default: '%s')\n\
-s, --start-command\n\
Supply a Bourne shell to command to use to start a single\n\
daemon. The command string should include '%%s' where the\n\
name of the daemon should be substituted.\n\
+ (default: '%s')\n\
-k, --kill-command\n\
Supply a Bourne shell to command to use to stop a single\n\
daemon. The command string should include '%%s' where the\n\
name of the daemon should be substituted.\n\
+ (default: '%s')\n\
--dry Do not start or restart anything, just log.\n\
-p, --pid-file Set process identifier file name\n\
(default is %s/watchfrr.pid).\n\
@@ -247,7 +257,9 @@ Otherwise, the interval is doubled (but capped at the -M value).\n\n",
-h, --help Display this help and exit\n",
frr_vtydir, DEFAULT_LOGLEVEL, LOG_EMERG, LOG_DEBUG, LOG_DEBUG,
DEFAULT_MIN_RESTART, DEFAULT_MAX_RESTART, DEFAULT_PERIOD,
- DEFAULT_TIMEOUT, DEFAULT_RESTART_TIMEOUT, frr_vtydir);
+ DEFAULT_TIMEOUT, DEFAULT_RESTART_TIMEOUT,
+ DEFAULT_RESTART_CMD, DEFAULT_START_CMD, DEFAULT_STOP_CMD,
+ frr_vtydir);
}
static pid_t run_background(char *shell_cmd)