#!/bin/bash

IQN=$1

PrintIQN() {
	IQN=$1

	IQNTEST=$(grep -h ${IQN} /sys/class/iscsi_session/*/targetname)
	if [ "${IQNTEST}" != "${IQN}" ]; then
		echo "IQN not found"
		echo ""

		exit
	fi

	SESSIONFOLDER=$(grep -l ${IQN} /sys/class/iscsi_session/*/targetname | xargs realpath)
	SESSION=$(echo "${SESSIONFOLDER}" | sed 's/.*session\([0-9]*\).*/\1/g')
	HOST=$(echo "${SESSIONFOLDER}" | sed 's/.*host\([0-9]*\).*/\1/g')

	SCSIADDRESS=$(echo "${SESSIONFOLDER}" | sed 's/\(.*\)\/iscsi_session.*/\1/g' | xargs ls -1 | grep "target${HOST}" | sed 's/target//g')
	MAJOR=$(echo "${SCSIADDRESS}" | cut -d ":" -f 2)
	MINOR=$(echo "${SCSIADDRESS}" | cut -d ":" -f 3)

	FULLSCSIADDRESS=$(echo "${SESSIONFOLDER}" | sed "s/\(.*\)\/iscsi_session.*/\1\/target${SCSIADDRESS}/g" | xargs ls -1 | grep ":")
	LUN=$(echo "${FULLSCSIADDRESS}" | cut -d ":" -f 4)

	BLOCKDEVICE=$(echo "${SESSIONFOLDER}" | sed "s/\(.*\)\/iscsi_session.*/\1\/target${SCSIADDRESS}\/${FULLSCSIADDRESS}\/block/g" | xargs ls -1 | xargs printf "/dev/%s")
	MOUNTPOINT=$(grep "${BLOCKDEVICE}" /proc/mounts | head -n 1 | cut -d " " -f 2)

	echo "IQN:            ${IQN}"
	#echo "    Session:    ${SESSION}";
	#echo "    Host:       ${HOST}";
	#echo "    Channel:    ${MAJOR}";
	#echo "    Id:         ${MINOR}";
	#echo "    LUN:        ${LUN}";
	echo "    Address:    [${SESSION}] scsi$HOST:${MAJOR}:${MINOR}:${LUN}"
	echo "    Device:     ${BLOCKDEVICE}";
	echo "    Mountpoint: ${MOUNTPOINT}";
	echo
}

if [[ -z "${IQN}" ]]; then
	IQNLIST=$(cat /sys/class/iscsi_session/*/targetname)
	for IQN in ${IQNLIST}; do
		PrintIQN ${IQN}
	done;
else
	PrintIQN ${IQN}
fi

