1
0
Fork 0
mirror of https://github.com/hermitcore/libhermit.git synced 2025-03-30 00:00:15 +01:00
libhermit/usr/rdma-core/srp_daemon/srpd.in
2017-10-06 15:13:04 +02:00

163 lines
3.4 KiB
Bash
Executable file

#!/bin/bash
# Licensed under the OpenIB.org BSD license (FreeBSD Variant) - See COPYING.md
#
# Manage the SRP client daemon (srp_daemon)
#
# chkconfig: - 25 75
# description: Starts/Stops InfiniBand SRP client service
# config: @CMAKE_INSTALL_FULL_SYSCONFDIR@/srp_daemon.conf
#
### BEGIN INIT INFO
# Provides: srpd
# Required-Start: $syslog @RDMA_SERVICE@
# Required-Stop: $syslog @RDMA_SERVICE@
# Default-Start: @SRP_DEFAULT_START@
# Default-Stop: @SRP_DEFAULT_STOP@
# Should-Start:
# Should-Stop:
# Short-Description: Starts and stops the InfiniBand SRP client service
# Description: The InfiniBand SRP client service attaches to SRP devices
# on the InfiniBand fabric and makes them appear as local disks to
# to the system. This service starts the client daemon that's
# responsible for initiating and maintaining the connections to
# remote devices.
### END INIT INFO
if [ -e /etc/rdma/rdma.conf ]; then
# RHEL / Fedora.
RDMA_CONFIG=/etc/rdma/rdma.conf
else
# OFED
RDMA_CONFIG=/etc/infiniband/openib.conf
fi
if [ -f $RDMA_CONFIG ]; then
. $RDMA_CONFIG
fi
pidfile=@CMAKE_INSTALL_FULL_RUNDIR@/srp_daemon.sh.pid
prog=@CMAKE_INSTALL_FULL_SBINDIR@/srp_daemon.sh
checkpid() {
[ -e "/proc/$1" ]
}
stop_srp_daemon() {
if ! running; then
return 1
fi
local pid=`cat $pidfile`
kill $pid
# timeout 30 seconds for termination
for i in `seq 300`; do
if ! checkpid $pid; then
return 0
fi
sleep 0.1
done
kill -9 $pid
# If srp_daemon executables didn't finish by now
# force kill
pkill -9 srp_daemon
return 0
}
# if the ib_srp module is loaded or built into the kernel return 0 otherwise
# return 1.
is_srp_mod_loaded() {
[ -e /sys/module/ib_srp ]
}
running() {
[ -f $pidfile ] && checkpid "$(cat $pidfile)"
}
start() {
if ! is_srp_mod_loaded; then
echo "SRP kernel module is not loaded, unable to start SRP daemon"
return 6
fi
if running; then
echo "Already started"
return 0
fi
echo -n "Starting SRP daemon service"
if [ "$SRP_DEFAULT_TL_RETRY_COUNT" ]; then
params=$params"-l $SRP_DEFAULT_TL_RETRY_COUNT "
fi
setsid $prog $params </dev/null >&/dev/null &
RC=$?
[ $RC -eq 0 ] && echo || echo " ...failed"
return $RC
}
stop() {
echo -n "Stopping SRP daemon service"
stop_srp_daemon
RC=$?
for ((i=0;i<5;i++)); do
if ! running; then
rm -f $pidfile
break
fi
sleep 1
done
[ $RC -eq 0 ] && echo || echo " ...failed"
return $RC
}
status() {
local ret
if [ ! -f $pidfile ]; then
ret=3 # program not running
else
checkpid "$(cat $pidfile)"
ret=$? # 1: pid file exists and not running / 0: running
fi
if [ $ret -eq 0 ] ; then
echo "$prog is running... pid=$(cat $pidfile)"
else
echo "$prog is not running."
fi
return $ret
}
restart() {
stop
start
}
condrestart() {
[ -f $pidfile ] && restart || return 0
}
usage() {
echo
echo "Usage: `basename $0` {start|stop|restart|condrestart|try-restart|force-reload|status}"
echo
return 2
}
case $1 in
start|stop|restart|condrestart|try-restart|force-reload)
[ `id -u` != "0" ] && exit 4 ;;
esac
case $1 in
start) start; RC=$? ;;
stop) stop; RC=$? ;;
restart) restart; RC=$? ;;
reload) RC=3 ;;
condrestart) condrestart; RC=$? ;;
try-restart) condrestart; RC=$? ;;
force-reload) condrestart; RC=$? ;;
status) status; RC=$? ;;
*) usage; RC=$? ;;
esac
exit $RC