#!/bin/bash
#
# Start the iSCSI-SCST Target.
#
### BEGIN INIT INFO
# Provides:          iscsi-scst
# Required-Start:    $remote_fs $network
# Should-Start:
# Required-Stop:     $remote_fs $network
# Should-Stop:
# Default-Start:     3 5
# Default-Stop:      
# Short-Description: iSCSI scst target daemon
# Description:
# Script to start and stop the iSCSI scst target daemon
### END INIT INFO

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
MEM_SIZE=1048576
SCST_CMD=/usr/local/sbin/scstadmin
SCST_CFG=/etc/scst.conf

# Additional modules to load/unload
ADD_MODULES="scst_vdisk scst"

configure_memsize()
{
    if [ -e /proc/sys/net/core/wmem_max ]; then
        echo ${MEM_SIZE} > /proc/sys/net/core/wmem_max
    fi

    if [ -e /proc/sys/net/core/rmem_max ]; then
        echo ${MEM_SIZE} > /proc/sys/net/core/rmem_max
    fi

    if [ -e /proc/sys/net/core/wmem_default ]; then
        echo ${MEM_SIZE} > /proc/sys/net/core/wmem_default
    fi

    if [ -e /proc/sys/net/core/rmem_default ]; then
        echo ${MEM_SIZE} > /proc/sys/net/core/rmem_default
    fi

    if [ -e /proc/sys/net/ipv4/tcp_mem ]; then
        echo "${MEM_SIZE} ${MEM_SIZE} ${MEM_SIZE}" > /proc/sys/net/ipv4/tcp_mem
    fi

    if [ -e  /proc/sys/net/ipv4/tcp_rmem ]; then
        echo "${MEM_SIZE} ${MEM_SIZE} ${MEM_SIZE}" > /proc/sys/net/ipv4/tcp_rmem
    fi

    if [ -e /proc/sys/net/ipv4/tcp_wmem ]; then
        echo "${MEM_SIZE} ${MEM_SIZE} ${MEM_SIZE}" > /proc/sys/net/ipv4/tcp_wmem
    fi
}

start_server()
{
#	configure_memsize

	modprobe iscsi-scst || { exit $? ; }
	for module in ${ADD_MODULES}; do
		modprobe ${module} || { exit 1 ; }
	done

	$SCST_CMD -config $SCST_CFG || { exit $? ; }

	/usr/sbin/iscsi-scstd
}

stop_server()
{
	killall iscsi-scstd
	rmmod -w iscsi-scst || { exit $? ; }
	rmmod ${ADD_MODULES} || { exit $? ; }
}

case "$1" in
	start)
		start_server
		;;
	stop)
		stop_server
		;;
	restart)
		stop_server
		start_server
		;;
	*)
		echo "Usage: {start|stop}" >&2
		exit 1
		;;
esac

exit $?
