| #!/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 |