-}
-
-function start_daemon {
- local DAEMON=$1
- shift
- local BINARY=$1
-
- # cd to daemon's run_dir so core files get dumped into a sensible place.
- eval local run_dir=\$${DAEMON}_RUN_DIR
- if [ ! -d "$run_dir" ]; then
- install -d -m 755 -o root -g root "$run_dir"
- fi
- cd "$run_dir"
-
- # Configure log levels.
- eval local syslog_loglevel=\$${DAEMON}_SYSLOG_LOGLEVEL
- eval local file_loglevel=\$${DAEMON}_FILE_LOGLEVEL
- eval local logfile=\$${DAEMON}_LOGFILE
- set -- "$@" -vANY:CONSOLE:EMER -vANY:SYSLOG:"$syslog_loglevel"
- if test -n "$file_loglevel" && test -n "$logfile"; then
- install -d -m 755 -o root -g root `dirname "$logfile"`
- set -- "$@" --log-file="$logfile" -vANY:FILE:"$file_loglevel"
- fi
-
- # Configure leak checker.
- eval local memleak_logfile=\$${DAEMON}_MEMLEAK_LOGFILE
- if test -n "$memleak_logfile"; then
- set -- "$@" --check-leaks="$memleak_logfile"
- if test -e "$memleak_logfile"; then
- mv "$memleak_logfile" "$memleak_logfile.prev"
- fi
- fi
-
- # Configure debugging wrappers.
- eval local strace_log=\$${DAEMON}_STRACE_LOG
- eval local strace_opt=\$${DAEMON}_STRACE_OPT
- eval local valgrind_log=\$${DAEMON}_VALGRIND_LOG
- eval local valgrind_opt=\$${DAEMON}_VALGRIND_OPT
- if test -n "$strace_log" && test -n "$valgrind_log"; then
- printf "Can not start with both VALGRIND and STRACE\n"
- exit 1
- elif test -n "$strace_log"; then
- local mode=strace
- set -- strace -o "$strace_log" $strace_opt "$@"
- elif test -n "$valgrind_log"; then
- local mode=valgrind
- set -- valgrind --log-file="$valgrind_log" $valgrind_opt "$@"
- else
- local mode=production
- eval local pidfile=\$${DAEMON}_PIDFILE
- install -d -m 755 -o root -g root `dirname $pidfile`
- set -- "$@" --pidfile="$pidfile" --detach $monitor_opt --no-chdir
- fi
-
- # Configure niceness.
- eval local priority=\$${DAEMON}_PRIORITY
- if test -n "$priority"; then
- set -- nice -n $priority "$@"
- fi
-
- if test $mode = production; then
- action "Starting `basename $BINARY`" "$@"
- else
- # Start in background and force a "success" message
- action "Starting `basename $BINARY` with $mode debugging" true
- ("$@") &
- fi
-}
-
-function start_ovsdb_server {
- set -- "$ovsdb_server" "$OVSDB_SERVER_DB"
- for remote in $OVSDB_SERVER_REMOTES; do
- set -- "$@" --remote="$remote"
- done
- set -- "$@" --private-key=db:SSL,private_key --certificate=db:SSL,certificate --bootstrap-ca-cert=db:SSL,ca_cert
- start_daemon OVSDB_SERVER "$@"
-}
-
-function start_vswitchd {
- local mlockall_opt=
- if [ "$VSWITCHD_MLOCKALL" != "no" ]; then
- mlockall_opt="--mlockall"
- fi
-
- start_daemon VSWITCHD "$vswitchd" $mlockall_opt "$VSWITCHD_OVSDB_SERVER"
- }
-
-function stop_daemon {
- local DAEMON=$1
- local BINARY=$2
- eval local pidfile=\$${DAEMON}_PIDFILE
- if test -f "$pidfile"; then
- local pid=$(cat "$pidfile")
- action "Killing `basename $BINARY` ($pid)" kill $pid
- for delay in .1 .25 .65 1 1 1 1; do
- if kill -0 $pid >/dev/null 2>&1; then
- sleep $delay
- else
- break
- fi
- done
- rm -f "$pidfile"
- fi
-}
-
-function restart_approval {
- if test ! -t 0; then
- # Don't prompt if invoked non-interactively.
- return 0