start_iscsi()
{
	local iname=iqn.linux.initrd
	local tname=
	local tgpt=1
	local address=
	local port=
	local username=
	local password=
	local username_in=
	local password_in=
	local luns=

	for p in $(substchar "$params" "," " "); do
		arg=${p#*=}
		case "$p" in
			initiator=*|initiatorname=*|iname=*|i=*) iname=$arg ;;
			target=*|targetname=*|tname=*|t=*) tname=$arg ;;
			tgpt=*|g=*) tgpt=$arg ;;
			addr=*|address=*|a=*) address=$arg ;;
			port=*|p=*) port=$arg ;;
			user=*|username=*|u=*) username=$arg ;;
			pass=*|password=*|w=*) password=$arg ;;
			user_in=*|username_in=*|userin=*|U=*) username_in=$arg ;;
			pass_in=*|password_in=*|passin=*|W=*) password_in=$arg ;;
			max_lun=*|luns=*) luns=$arg ;;
			*) echo "Unknown NBD parameter '$p' for type 'iscsi'" ;;
		esac
	done

	if ConfigIP; then
		local dev=$(NextSD)
		[ "${iname#*:}" = "${iname%:*}" ] && iname="$iname:$IPV4ADDR"
		modprobe -q iscsi_tcp ${luns:+max_lun=$luns} &&
		iscsistart -i $iname -t $tname -g $tgpt -a $address ${port:+-p $port} \
			${username:+-u $username} ${password:+-w $password} \
			${username_in:+-U $username_in} ${password_in:+-W $password_in}

		local r=${ROOT#/dev/}
		case "$r" in
			sd_*)	ROOT=$dev${r#sd_} ;;
			"")	ROOT=$dev ;;
		esac
	fi
}

start_iscsi
