iscsid_volumes revision 1.2
11.1Smlelstv#!/bin/sh
21.1Smlelstv#
31.2Smartin# $NetBSD: iscsid_volumes,v 1.2 2023/02/06 11:53:03 martin 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.1Smlelstv		\#*) ;;
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.1Smlelstv			while read entry dummy; do
371.1Smlelstv				case $entry in
381.1Smlelstv				\#*) ;;
391.1Smlelstv				"$user":*) pass=${entry#*:} ;;
401.1Smlelstv				"$target":*) mpass=${entry#*:} ;;
411.1Smlelstv				esac
421.1Smlelstv			done < /etc/iscsi/auths
431.1Smlelstv
441.1Smlelstv			case $host in
451.1Smlelstv			*:*)
461.1Smlelstv				port=${host#*:}
471.1Smlelstv				host=${host%%:*}
481.1Smlelstv				;;
491.1Smlelstv			*)
501.1Smlelstv				port=3260
511.1Smlelstv				;;
521.1Smlelstv			esac
531.1Smlelstv
541.1Smlelstv			echo "Add target ${alias:-$target}"
551.1Smlelstv
561.1Smlelstv			out=$(/sbin/iscsictl add_target$topts \
571.1Smlelstv				-a "$host" \
581.1Smlelstv				-p "$port" \
591.1Smlelstv				-n "$target" \
601.1Smlelstv				-t "$auth" \
611.1Smlelstv				-u "$user" \
621.1Smlelstv				-s "$pass" \
631.1Smlelstv				-S "$mpass" \
641.1Smlelstv				-N "${alias:--}")
651.1Smlelstv			echo "$out"
661.1Smlelstv
671.1Smlelstv			case $out in
681.1Smlelstv			Added\ Target\ [1-9]*,\ Portal\ [1-9]*\ )
691.1Smlelstv				out=${out% }
701.1Smlelstv				portal=${out##* }
711.1Smlelstv				echo "Login $target via Portal $portal"
721.1Smlelstv				/sbin/iscsictl login -P "$portal"
731.1Smlelstv				;;
741.1Smlelstv			esac
751.1Smlelstv		esac
761.1Smlelstv	done < /etc/iscsi/volumes
771.1Smlelstv}
781.1Smlelstv
791.1Smlelstviscsid_volumes_stop()
801.1Smlelstv{
811.2Smartin	test -f /etc/iscsi/volumes || return 0
821.1Smlelstv
831.1Smlelstv	while read host target digest auth user alias; do
841.1Smlelstv		case $host in
851.1Smlelstv		\#*) ;;
861.1Smlelstv		*)
871.1Smlelstv			echo "Remove target ${alias:-$target}"
881.1Smlelstv
891.1Smlelstv			/sbin/iscsictl list_sessions \
901.1Smlelstv			| while read key1 num key2 sesstarget; do
911.1Smlelstv				if [ x"$key1" = x"Session" -a \
921.1Smlelstv				     x"$key2" = x"Target" -a \
931.1Smlelstv				     x"$sesstarget" = x"$target" ]; then
941.1Smlelstv					/sbin/iscsictl logout -I "$num" | grep -v '^OK$'
951.1Smlelstv				fi
961.1Smlelstv			done
971.1Smlelstv
981.1Smlelstv			/sbin/iscsictl list_targets \
991.1Smlelstv			| while read num talias ttarget; do
1001.1Smlelstv				if [ x"$ttarget" = x"$target" ]; then
1011.1Smlelstv					/sbin/iscsictl remove_target -I "$num"
1021.1Smlelstv				fi
1031.1Smlelstv			done
1041.1Smlelstv			;;
1051.1Smlelstv		esac
1061.1Smlelstv	done < /etc/iscsi/volumes
1071.1Smlelstv}
1081.1Smlelstv
1091.1Smlelstvload_rc_config $name
1101.1Smlelstvrun_rc_command "$1"
111