11.1Smlelstv#!/bin/sh
21.1Smlelstv#
31.5Skre# $NetBSD: iscsid_volumes,v 1.5 2023/12/25 08:29:05 kre Exp $
41.1Smlelstv#
51.1Smlelstv
61.1Smlelstv# PROVIDE: iscsid_volumes
71.1Smlelstv# REQUIRE: iscsid
81.1Smlelstv# BEFORE:  securelevel mountcritremote
91.1Smlelstv
101.1Smlelstv$_rc_subr_loaded . /etc/rc.subr
111.1Smlelstv
121.1Smlelstvname="iscsid_volumes"
131.1Smlelstvrcvar=$name
141.1Smlelstvstart_cmd="iscsid_volumes_start"
151.1Smlelstvstop_cmd="iscsid_volumes_stop"
161.1Smlelstv
171.1Smlelstviscsid_volumes_start()
181.1Smlelstv{
191.2Smartin	test -f /etc/iscsi/volumes || return 0
201.1Smlelstv
211.1Smlelstv	while read host target digest auth user alias; do
221.1Smlelstv		case $host in
231.3Smlelstv		\#*|"") ;;
241.1Smlelstv		*)
251.1Smlelstv			topts=''
261.1Smlelstv			case $digest in
271.1Smlelstv			*d*) topts="$topts -d";;
281.1Smlelstv			esac
291.1Smlelstv			case $digest in
301.1Smlelstv			*h*) topts="$topts -h";;
311.1Smlelstv			esac
321.1Smlelstv
331.1Smlelstv			pass="-"
341.1Smlelstv			mpass="-"
351.1Smlelstv
361.3Smlelstv			if [ -f /etc/iscsi/auths ]; then
371.3Smlelstv				while read entry dummy; do
381.4Smlelstv
391.4Smlelstv					case $entry in
401.4Smlelstv					*:chap:*|\
411.4Smlelstv					*:CHAP:*|\
421.4Smlelstv					*:none:*)
431.4Smlelstv						dummy=${entry#*:}
441.4Smlelstv						entry=${entry%%:*}:${dummy#*:}
451.4Smlelstv						;;
461.4Smlelstv					esac
471.4Smlelstv
481.3Smlelstv					case $entry in
491.3Smlelstv					\#*|"") ;;
501.3Smlelstv					"$user":*) pass=${entry#*:} ;;
511.3Smlelstv					"$target":*) mpass=${entry#*:} ;;
521.3Smlelstv					esac
531.3Smlelstv				done < /etc/iscsi/auths
541.3Smlelstv			fi
551.1Smlelstv
561.1Smlelstv			case $host in
571.1Smlelstv			*:*)
581.1Smlelstv				port=${host#*:}
591.1Smlelstv				host=${host%%:*}
601.1Smlelstv				;;
611.1Smlelstv			*)
621.1Smlelstv				port=3260
631.1Smlelstv				;;
641.1Smlelstv			esac
651.1Smlelstv
661.1Smlelstv			echo "Add target ${alias:-$target}"
671.1Smlelstv
681.1Smlelstv			out=$(/sbin/iscsictl add_target$topts \
691.1Smlelstv				-a "$host" \
701.1Smlelstv				-p "$port" \
711.1Smlelstv				-n "$target" \
721.1Smlelstv				-t "$auth" \
731.1Smlelstv				-u "$user" \
741.1Smlelstv				-s "$pass" \
751.1Smlelstv				-S "$mpass" \
761.4Smlelstv				${alias:+-N} ${alias:+"$alias"})
771.1Smlelstv			echo "$out"
781.1Smlelstv
791.1Smlelstv			case $out in
801.1Smlelstv			Added\ Target\ [1-9]*,\ Portal\ [1-9]*\ )
811.1Smlelstv				out=${out% }
821.1Smlelstv				portal=${out##* }
831.1Smlelstv				echo "Login $target via Portal $portal"
841.1Smlelstv				/sbin/iscsictl login -P "$portal"
851.1Smlelstv				;;
861.1Smlelstv			esac
871.1Smlelstv		esac
881.1Smlelstv	done < /etc/iscsi/volumes
891.1Smlelstv}
901.1Smlelstv
911.1Smlelstviscsid_volumes_stop()
921.1Smlelstv{
931.2Smartin	test -f /etc/iscsi/volumes || return 0
941.1Smlelstv
951.1Smlelstv	while read host target digest auth user alias; do
961.1Smlelstv		case $host in
971.3Smlelstv		\#*|"") ;;
981.1Smlelstv		*)
991.1Smlelstv			echo "Remove target ${alias:-$target}"
1001.1Smlelstv
1011.5Skre			/sbin/iscsictl list_sessions |
1021.5Skre			    while read key1 num key2 sesstarget; do
1031.5Skre				if [ x"$key1" = x"Session" ] &&
1041.5Skre				   [ x"$key2" = x"Target"  ] &&
1051.5Skre				   [ x"$sesstarget" = x"$target" ]
1061.5Skre				then
1071.5Skre					/sbin/iscsictl logout -I "$num" |
1081.5Skre					    grep -v '^OK$'
1091.1Smlelstv				fi
1101.1Smlelstv			done
1111.1Smlelstv
1121.5Skre			/sbin/iscsictl list_targets |
1131.5Skre			    while read num talias ttarget; do
1141.1Smlelstv				if [ x"$ttarget" = x"$target" ]; then
1151.1Smlelstv					/sbin/iscsictl remove_target -I "$num"
1161.1Smlelstv				fi
1171.1Smlelstv			done
1181.1Smlelstv			;;
1191.1Smlelstv		esac
1201.1Smlelstv	done < /etc/iscsi/volumes
1211.1Smlelstv}
1221.1Smlelstv
1231.1Smlelstvload_rc_config $name
1241.1Smlelstvrun_rc_command "$1"
125