| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| DAEMON=/usr/sbin/srp_daemon |
| IBDIR=/sys/class/infiniband |
| |
| PORTS="" |
| RETRIES="" |
| RETRIES_DEFAULT=60 |
| LOG="" |
| LOG_DEFAULT=/var/log/srp_daemon.log |
| |
| [ -x $DAEMON ] || exit 0 |
| |
| . /lib/lsb/init-functions |
| |
| [ -f /etc/default/srptools ] && . /etc/default/srptools |
| |
| max() { |
| echo $(($1 > $2 ? $1 : $2)) |
| } |
| |
| run_daemon() { |
| |
| |
| nohup start-stop-daemon --start --quiet -m \ |
| --pidfile "/var/run/srp_daemon.${HCA_ID}.${PORT}" \ |
| --exec $DAEMON -- -e -c -n \ |
| -i "${HCA_ID}" -p "${PORT}" -R "${RETRIES:-${RETRIES_DEFAULT}}" \ |
| >> "${LOG:-${LOG_DEFAULT}}" 2>&1 & |
| RETVAL=$(max "$RETVAL" $?) |
| } |
| |
| |
| for_all_ports() { |
| local cmd=$1 p |
| |
| if [ "$PORTS" = "ALL" ]; then |
| for p in ${IBDIR}/*/ports/*; do |
| [ -e "$p" ] || continue |
| PORT=$(basename "$p") |
| HCA_ID=$(basename "$(dirname "$(dirname "$p")")") |
| eval "$cmd" |
| done |
| else |
| for ADAPTER in $PORTS; do |
| HCA_ID=${ADAPTER%%:*} |
| PORT=${ADAPTER |
| [ -n "$HCA_ID" ] && [ -n "$PORT" ] && eval "$cmd" |
| done |
| fi |
| } |
| |
| start_daemon() { |
| local RETVAL=0 |
| |
| if [ "$PORTS" = "NONE" ] ; then |
| echo "srptools disabled." |
| exit 0 |
| fi |
| |
| for_all_ports run_daemon |
| case $RETVAL in |
| 0) log_success_msg "started $DAEMON";; |
| *) log_failure_msg "failed to start $DAEMON";; |
| esac |
| return $RETVAL |
| } |
| |
| stop_daemon() { |
| local RETVAL=0 PORTS=ALL |
| |
| for_all_ports 'start-stop-daemon --stop --quiet --oknodo -m --pidfile "/var/run/srp_daemon.${HCA_ID}.${PORT}"; RETVAL=$(max $RETVAL $?)' |
| case $RETVAL in |
| 0) log_success_msg "stopped $DAEMON";; |
| *) log_failure_msg "failed to stop $DAEMON";; |
| esac |
| return $RETVAL |
| } |
| |
| check_status() { |
| local pidfile=$1 pid |
| |
| [ -e "$pidfile" ] || return 3 |
| pid=$(<"$pidfile") |
| [ -n "$pid" ] || return 3 |
| [ -d "/proc/$pid" ] || return 1 |
| return 0 |
| } |
| |
| daemon_status() { |
| local RETVAL=0 |
| |
| for_all_ports 'check_status /var/run/srp_daemon.${HCA_ID}.${PORT} $DAEMON; RETVAL=$(max $RETVAL $?)' |
| case $RETVAL in |
| 0) log_success_msg "$DAEMON is running";; |
| *) log_failure_msg "$DAEMON is not running";; |
| esac |
| return $RETVAL |
| } |
| |
| case "$1" in |
| start) |
| start_daemon |
| ;; |
| stop) |
| stop_daemon |
| ;; |
| status) |
| daemon_status |
| ;; |
| restart | reload | force-reload ) |
| stop_daemon |
| start_daemon |
| ;; |
| esac |