#!/bin/sh

PREREQ=""

prereqs()
{
	echo "$PREREQ"
}

case $1 in
# get pre-requisites
prereqs)
	prereqs
	exit 0
	;;
esac

do_iscsi_login ()
{
	# Bring in the main config
	. /conf/initramfs.conf
	for conf in conf/conf.d/*; do
		[ -f ${conf} ] && . ${conf}
	done
	. /scripts/functions

    wait_for_udev

	configure_networking
	# write info file for later consumption by iscsi-network-interface.conf
	if [ -n "${DEVICE}" ] && [ -e "/run/net-${DEVICE}.conf" ]; then
		echo "${DEVICE}" >/run/initramfs/open-iscsi.interface
	fi

	modprobe iscsi_tcp
	modprobe crc32c

	if [ -z $ISCSI_AUTO ]; then
		if [ -z $ISCSI_INITIATOR ]; then
			. /etc/initiatorname.iscsi
			ISCSI_INITIATOR=$InitiatorName
		fi

		if [ -z $ISCSI_TARGET_PORT ]; then
			ISCSI_TARGET_PORT=3260
		fi

		if [ -z $ISCSI_TARGET_GROUP ]; then
			ISCSI_TARGET_GROUP=1
		fi

		iscsistart -i $ISCSI_INITIATOR -t $ISCSI_TARGET_NAME	\
			   -g $ISCSI_TARGET_GROUP -a $ISCSI_TARGET_IP	\
			   -p $ISCSI_TARGET_PORT \
			   ${ISCSI_USERNAME:+-u "$ISCSI_USERNAME"}	\
			   ${ISCSI_PASSWORD:+-w "$ISCSI_PASSWORD"}	\
			   ${ISCSI_IN_USERNAME:+-U "$ISCSI_IN_USERNAME"}\
			   ${ISCSI_IN_PASSWORD:+-W "$ISCSI_IN_PASSWORD"}
	else
		modprobe iscsi_ibft
		iscsistart -b
	fi

	if [ -z $ISCSI_TARGET_PORT ]; then
		ISCSI_TARGET_PORT=3260
	fi

	if [ -z $ISCSI_TARGET_GROUP ]; then
		ISCSI_TARGET_GROUP=1
	fi

	for i in $ISCSI_TARGET_IP; do
	iscsistart -i $ISCSI_INITIATOR -t $ISCSI_TARGET_NAME	\
		   -g $ISCSI_TARGET_GROUP -a $i \
		   -p $ISCSI_TARGET_PORT \
		   ${ISCSI_USERNAME:+-u "$ISCSI_USERNAME"}	\
		   ${ISCSI_PASSWORD:+-w "$ISCSI_PASSWORD"}	\
		   ${ISCSI_IN_USERNAME:+-U "$ISCSI_IN_USERNAME"}\
		   ${ISCSI_IN_PASSWORD:+-W "$ISCSI_IN_PASSWORD"}
	done
}

parse_iscsi_ops ()
{
	. /etc/iscsi.initramfs

	for x in $(cat /proc/cmdline); do
		case ${x} in
		iscsi_auto)
			ISCSI_AUTO=true
			;;
        	iscsi_initiator=*)
                	ISCSI_INITIATOR="${x#iscsi_initiator=}"
                	;;
        	iscsi_target_name=*)
                	ISCSI_TARGET_NAME="${x#iscsi_target_name=}"
                	;;
        	iscsi_target_ip=*)
                	ISCSI_TARGET_IP="${x#iscsi_target_ip=}"
                	;;
        	iscsi_target_port=*)
                	ISCSI_TARGET_PORT="${x#iscsi_target_port=}"
                	;;
		iscsi_target_group=*)
			ISCSI_TARGET_GROUP="${x#iscsi_target_group=}"
			;;
		iscsi_username=*)
			ISCSI_USERNAME="${x#iscsi_username=}"
			;;
		iscsi_password=*)
			ISCSI_PASSWORD="${x#iscsi_password=}"
			;;
		iscsi_in_username=*)
			ISCSI_IN_USERNAME="${x#iscsi_in_username=}"
			;;
		iscsi_in_password=*)
			ISCSI_IN_PASSWORD="${x#iscsi_in_password=}"
			;;
		esac
	done
}

if [ ! -x /sbin/iscsistart ]; then
	exit 0
fi

parse_iscsi_ops

if ( [ -z $ISCSI_TARGET_NAME ] || [ -z $ISCSI_TARGET_IP ] ) && [ -z $ISCSI_AUTO ]; then
	exit 0
fi

do_iscsi_login

udevadm settle

exit 0
