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