#!/usr/local/bin/cbsd
#v11.2.0
MYARG=""
MYOPTARG="portal mode"
MYDESC="Init and/or show iSCSI discovery"
ADDHELP="mode - can be: show(default),flush,flushall,scan\n\
portal - specify portal for flush,scan mdoe\n"
CBSDMODULE="sys"

. ${subrdir}/nc.subr
. ${cbsdinit}

portal_show()
{
	/usr/bin/iscsictl -L --libxo xml > ${tmpdir}/iscsi_disc.$$
	trap "/bin/rm -f ${tmpdir}/iscsi_disc.$$" HUP INT ABRT BUS TERM EXIT

	local iscsi_discovery_num=0

	eval $( ${miscdir}/dump_iscsi_discovery ${tmpdir}/iscsi_disc.$$ 2>/dev/null )
	#echo "number: ${iscsi_discovery_num}"

	[ -z "${iscsi_discovery_num}" ] && return 0
	[ "${iscsi_discovery_num}" = "0" ] && return 0

	for i in $( /usr/bin/seq 0 ${iscsi_discovery_num} ); do

		[ ${i} -eq 0 ] && continue

		portal_id=$(( i - 1 ))

		_portal=
		_portal_name=
		_portal_state=

		eval _portal="\$portal${portal_id}"
		eval _portal_name="\$portal_name${portal_id}"
		eval _portal_state="\$portal_state${portal_id}"

		echo "Portal: ${_portal}"
		echo "Name: ${_portal_name}"
		echo "State: ${_portal_state}"
	done
}

portal_scan()
{
	[ -z "${portal}" ] && log_err 1 "${N1_COLOR}Empty portal for scan${N0_COLOR}"
	/usr/bin/iscsictl -A -d ${portal} -e off
}

portal_flush()
{
	[ -z "${portal}" ] && log_err 1 "${N1_COLOR}Empty portal for flush${N0_COLOR}"
	/usr/bin/iscsictl -R -p ${portal} > /dev/null 2>&1 ||true
}

portal_flush_all()
{
		/usr/bin/iscsictl -Ra
}

[ -z "${mode}" ] && mode="show"

case "${mode}" in
	show)
		portal_show
		;;
	scan)
		[ -z "${portal}" ] && log_err 1 "${N1_COLOR}Empty portal for scan${N0_COLOR}"
		# flush this portal first
		portal_flush
		portal_scan
		;;
	flush)
		[ -z "${portal}" ] && log_err 1 "${N1_COLOR}Empty portal for flush${N0_COLOR}"
		portal_flush
		;;
	flushall)
		portal_flush_all
		;;
esac
