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