# This is a shell function library sourced by some Open vSwitch scripts.
# It is not intended to be invoked on its own.
-# Copyright (C) 2009, 2010, 2011, 2012 Nicira Networks, Inc.
+# Copyright (C) 2009, 2010, 2011, 2012 Nicira, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
bindir=${OVS_BINDIR-'@bindir@'} # /usr/bin
sbindir=${OVS_SBINDIR-'@sbindir@'} # /usr/sbin
+# /etc/openvswitch or /var/lib/openvswitch
+if test X"$OVS_DBDIR" != X; then
+ dbdir=$OVS_DBDIR
+elif test X"$OVS_SYSCONFDIR" != X; then
+ dbdir=$OVS_SYSCONFDIR/openvswitch
+else
+ dbdir='@DBDIR@'
+fi
+
+ovs_ctl_log () {
+ echo "$@" >> "${logdir}/ovs-ctl.log"
+}
+
+ovs_ctl () {
+ case "$@" in
+ *"=strace"*)
+ # In case of running the daemon with strace, piping the o/p causes
+ # the script to block (strace probably does not close the inherited
+ # pipe). So, do not log the o/p to ovs-ctl.log.
+ "${datadir}/scripts/ovs-ctl" "$@"
+ ;;
+ *)
+ echo "`date -u`:$@" >> "${logdir}/ovs-ctl.log"
+ "${datadir}/scripts/ovs-ctl" "$@" 2>&1 | tee -a "${logdir}/ovs-ctl.log"
+ ;;
+ esac
+}
+
VERSION='@VERSION@'
+DAEMON_CWD=/
+
LC_ALL=C; export LC_ALL
## ------------- ##
start_daemon () {
priority=$1
- shift
+ wrapper=$2
+ shift; shift
daemon=$1
+ strace=""
# drop core files in a sensible place
test -d "$DAEMON_CWD" || install -d -m 755 -o root -g root "$DAEMON_CWD"
set "$@" --pidfile="$rundir/$daemon.pid"
set "$@" --detach --monitor
+ # wrapper
+ case $wrapper in
+ valgrind)
+ if (valgrind --version) > /dev/null 2>&1; then
+ set valgrind -q --leak-check=full --time-stamp=yes \
+ --log-file="$logdir/$daemon.valgrind.log.%p" "$@"
+ else
+ log_failure_msg "valgrind not installed, running $daemon without it"
+ fi
+ ;;
+ strace)
+ if (strace -V) > /dev/null 2>&1; then
+ strace="strace -tt -T -s 256 -ff"
+ if (strace -DV) > /dev/null 2>&1; then
+ # Has the -D option.
+ set $strace -D -o "$logdir/$daemon.strace.log" "$@"
+ strace=""
+ fi
+ else
+ log_failure_msg "strace not installed, running $daemon without it"
+ fi
+ ;;
+ glibc)
+ set env MALLOC_CHECK_=2 MALLOC_PERTURB_=165 "$@"
+ ;;
+ '')
+ ;;
+ *)
+ log_failure_msg "unknown wrapper $wrapper, running $daemon without it"
+ ;;
+ esac
+
# priority
if test X"$priority" != X; then
set nice -n "$priority" "$@"
fi
action "Starting $daemon" "$@"
+
+ if test X"$strace" != X; then
+ # Strace doesn't have the -D option so we attach after the fact.
+ setsid $strace -o "$logdir/$daemon.strace.log" \
+ -p `cat $rundir/$daemon.pid` > /dev/null 2>&1 &
+ fi
}
-DAEMON_CWD=/
stop_daemon () {
if test -e "$rundir/$1.pid"; then
if pid=`cat "$rundir/$1.pid"`; then
- for action in TERM .1 .25 .65 1 1 1 1 KILL 1 1 1 1 FAIL; do
+ for action in TERM .1 .25 .65 1 1 1 1 KILL 1 1 1 2 10 15 30 FAIL; do
+ if pid_exists "$pid" >/dev/null 2>&1; then :; else
+ return 0
+ fi
case $action in
TERM)
action "Killing $1 ($pid)" kill $pid
return 1
;;
*)
- if pid_exists $pid >/dev/null 2>&1; then
- sleep $action
- else
- return 0
- fi
+ sleep $action
;;
esac
done