Home | History | Annotate | Line # | Download | only in rc.d
iscsid_volumes revision 1.3
      1  1.1  mlelstv #!/bin/sh
      2  1.1  mlelstv #
      3  1.3  mlelstv # $NetBSD: iscsid_volumes,v 1.3 2023/02/18 07:51:52 mlelstv Exp $
      4  1.1  mlelstv #
      5  1.1  mlelstv 
      6  1.1  mlelstv # PROVIDE: iscsid_volumes
      7  1.1  mlelstv # REQUIRE: iscsid
      8  1.1  mlelstv # BEFORE:  securelevel mountcritremote
      9  1.1  mlelstv 
     10  1.1  mlelstv $_rc_subr_loaded . /etc/rc.subr
     11  1.1  mlelstv 
     12  1.1  mlelstv name="iscsid_volumes"
     13  1.1  mlelstv rcvar=$name
     14  1.1  mlelstv start_cmd="iscsid_volumes_start"
     15  1.1  mlelstv stop_cmd="iscsid_volumes_stop"
     16  1.1  mlelstv 
     17  1.1  mlelstv iscsid_volumes_start()
     18  1.1  mlelstv {
     19  1.2   martin 	test -f /etc/iscsi/volumes || return 0
     20  1.1  mlelstv 
     21  1.1  mlelstv 	while read host target digest auth user alias; do
     22  1.1  mlelstv 		case $host in
     23  1.3  mlelstv 		\#*|"") ;;
     24  1.1  mlelstv 		*)
     25  1.1  mlelstv 			topts=''
     26  1.1  mlelstv 			case $digest in
     27  1.1  mlelstv 			*d*) topts="$topts -d";;
     28  1.1  mlelstv 			esac
     29  1.1  mlelstv 			case $digest in
     30  1.1  mlelstv 			*h*) topts="$topts -h";;
     31  1.1  mlelstv 			esac
     32  1.1  mlelstv 
     33  1.1  mlelstv 			pass="-"
     34  1.1  mlelstv 			mpass="-"
     35  1.1  mlelstv 
     36  1.3  mlelstv 			if [ -f /etc/iscsi/auths ]; then
     37  1.3  mlelstv 				while read entry dummy; do
     38  1.3  mlelstv 					case $entry in
     39  1.3  mlelstv 					\#*|"") ;;
     40  1.3  mlelstv 					"$user":*) pass=${entry#*:} ;;
     41  1.3  mlelstv 					"$target":*) mpass=${entry#*:} ;;
     42  1.3  mlelstv 					esac
     43  1.3  mlelstv 				done < /etc/iscsi/auths
     44  1.3  mlelstv 			fi
     45  1.1  mlelstv 
     46  1.1  mlelstv 			case $host in
     47  1.1  mlelstv 			*:*)
     48  1.1  mlelstv 				port=${host#*:}
     49  1.1  mlelstv 				host=${host%%:*}
     50  1.1  mlelstv 				;;
     51  1.1  mlelstv 			*)
     52  1.1  mlelstv 				port=3260
     53  1.1  mlelstv 				;;
     54  1.1  mlelstv 			esac
     55  1.1  mlelstv 
     56  1.1  mlelstv 			echo "Add target ${alias:-$target}"
     57  1.1  mlelstv 
     58  1.1  mlelstv 			out=$(/sbin/iscsictl add_target$topts \
     59  1.1  mlelstv 				-a "$host" \
     60  1.1  mlelstv 				-p "$port" \
     61  1.1  mlelstv 				-n "$target" \
     62  1.1  mlelstv 				-t "$auth" \
     63  1.1  mlelstv 				-u "$user" \
     64  1.1  mlelstv 				-s "$pass" \
     65  1.1  mlelstv 				-S "$mpass" \
     66  1.1  mlelstv 				-N "${alias:--}")
     67  1.1  mlelstv 			echo "$out"
     68  1.1  mlelstv 
     69  1.1  mlelstv 			case $out in
     70  1.1  mlelstv 			Added\ Target\ [1-9]*,\ Portal\ [1-9]*\ )
     71  1.1  mlelstv 				out=${out% }
     72  1.1  mlelstv 				portal=${out##* }
     73  1.1  mlelstv 				echo "Login $target via Portal $portal"
     74  1.1  mlelstv 				/sbin/iscsictl login -P "$portal"
     75  1.1  mlelstv 				;;
     76  1.1  mlelstv 			esac
     77  1.1  mlelstv 		esac
     78  1.1  mlelstv 	done < /etc/iscsi/volumes
     79  1.1  mlelstv }
     80  1.1  mlelstv 
     81  1.1  mlelstv iscsid_volumes_stop()
     82  1.1  mlelstv {
     83  1.2   martin 	test -f /etc/iscsi/volumes || return 0
     84  1.1  mlelstv 
     85  1.1  mlelstv 	while read host target digest auth user alias; do
     86  1.1  mlelstv 		case $host in
     87  1.3  mlelstv 		\#*|"") ;;
     88  1.1  mlelstv 		*)
     89  1.1  mlelstv 			echo "Remove target ${alias:-$target}"
     90  1.1  mlelstv 
     91  1.1  mlelstv 			/sbin/iscsictl list_sessions \
     92  1.1  mlelstv 			| while read key1 num key2 sesstarget; do
     93  1.1  mlelstv 				if [ x"$key1" = x"Session" -a \
     94  1.1  mlelstv 				     x"$key2" = x"Target" -a \
     95  1.1  mlelstv 				     x"$sesstarget" = x"$target" ]; then
     96  1.1  mlelstv 					/sbin/iscsictl logout -I "$num" | grep -v '^OK$'
     97  1.1  mlelstv 				fi
     98  1.1  mlelstv 			done
     99  1.1  mlelstv 
    100  1.1  mlelstv 			/sbin/iscsictl list_targets \
    101  1.1  mlelstv 			| while read num talias ttarget; do
    102  1.1  mlelstv 				if [ x"$ttarget" = x"$target" ]; then
    103  1.1  mlelstv 					/sbin/iscsictl remove_target -I "$num"
    104  1.1  mlelstv 				fi
    105  1.1  mlelstv 			done
    106  1.1  mlelstv 			;;
    107  1.1  mlelstv 		esac
    108  1.1  mlelstv 	done < /etc/iscsi/volumes
    109  1.1  mlelstv }
    110  1.1  mlelstv 
    111  1.1  mlelstv load_rc_config $name
    112  1.1  mlelstv run_rc_command "$1"
    113