#!/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin
MEM_SIZE=1048576

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 fileio
	/usr/sbin/ietd
}
	
stop_server()
{
	for c in /proc/iscsi/target/*/session/*/conn/*/conn; do
		test -f $c || continue
		eval `echo $c | sed 's,\(.*\)conn/\(.*\)/conn,s=\1session;i=\2,'`
		echo conn remove $i > $s
		#echo remove > $l
	done
	sleep 1
	for s in /proc/iscsi/target/*/session/*/session; do
		test -f $s || continue
		eval `echo $s | sed 's,\(.*\)session/\(.*\)/session,t=\1target;i=\2,'`
		echo session remove $i > $t
		#echo remove > $s
	done
	sleep 1
	for l in /proc/iscsi/target/*/lun/*/device; do
		test -L $l || continue
		eval `echo $l | sed 's,\(.*\)lun/\(.*\),t=\1target;i=\2,'`
		echo device detach $i > $t
		#echo remove > $l
	done
	sleep 1
	for t in /proc/iscsi/target/*/target; do
		test -f $t || continue
		eval `echo $t | sed 's,.*target/\(.*\)/target,i=\1,'`
		echo target remove $i > /proc/iscsi/iscsi
		#echo remove > $t
	done
	sleep 1
	for d in /proc/iscsi/device/*/fd; do
		test -L $d || continue
		eval `echo $d | sed 's,.*device/\(.*\)/fd,i=\1,'`
		echo device remove $i > /proc/iscsi/iscsi
		#echo remove > $d
	done
	sleep 1

	killall ietd
	rmmod fileio
	rmmod iscsi_trgt
}

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

exit 0
