Home | History | Annotate | Line # | Download | only in rc.d
      1  1.1  mlelstv #!/bin/sh
      2  1.1  mlelstv #
      3  1.5      kre # $NetBSD: iscsid_volumes,v 1.5 2023/12/25 08:29:05 kre 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.4  mlelstv 
     39  1.4  mlelstv 					case $entry in
     40  1.4  mlelstv 					*:chap:*|\
     41  1.4  mlelstv 					*:CHAP:*|\
     42  1.4  mlelstv 					*:none:*)
     43  1.4  mlelstv 						dummy=${entry#*:}
     44  1.4  mlelstv 						entry=${entry%%:*}:${dummy#*:}
     45  1.4  mlelstv 						;;
     46  1.4  mlelstv 					esac
     47  1.4  mlelstv 
     48  1.3  mlelstv 					case $entry in
     49  1.3  mlelstv 					\#*|"") ;;
     50  1.3  mlelstv 					"$user":*) pass=${entry#*:} ;;
     51  1.3  mlelstv 					"$target":*) mpass=${entry#*:} ;;
     52  1.3  mlelstv 					esac
     53  1.3  mlelstv 				done < /etc/iscsi/auths
     54  1.3  mlelstv 			fi
     55  1.1  mlelstv 
     56  1.1  mlelstv 			case $host in
     57  1.1  mlelstv 			*:*)
     58  1.1  mlelstv 				port=${host#*:}
     59  1.1  mlelstv 				host=${host%%:*}
     60  1.1  mlelstv 				;;
     61  1.1  mlelstv 			*)
     62  1.1  mlelstv 				port=3260
     63  1.1  mlelstv 				;;
     64  1.1  mlelstv 			esac
     65  1.1  mlelstv 
     66  1.1  mlelstv 			echo "Add target ${alias:-$target}"
     67  1.1  mlelstv 
     68  1.1  mlelstv 			out=$(/sbin/iscsictl add_target$topts \
     69  1.1  mlelstv 				-a "$host" \
     70  1.1  mlelstv 				-p "$port" \
     71  1.1  mlelstv 				-n "$target" \
     72  1.1  mlelstv 				-t "$auth" \
     73  1.1  mlelstv 				-u "$user" \
     74  1.1  mlelstv 				-s "$pass" \
     75  1.1  mlelstv 				-S "$mpass" \
     76  1.4  mlelstv 				${alias:+-N} ${alias:+"$alias"})
     77  1.1  mlelstv 			echo "$out"
     78  1.1  mlelstv 
     79  1.1  mlelstv 			case $out in
     80  1.1  mlelstv 			Added\ Target\ [1-9]*,\ Portal\ [1-9]*\ )
     81  1.1  mlelstv 				out=${out% }
     82  1.1  mlelstv 				portal=${out##* }
     83  1.1  mlelstv 				echo "Login $target via Portal $portal"
     84  1.1  mlelstv 				/sbin/iscsictl login -P "$portal"
     85  1.1  mlelstv 				;;
     86  1.1  mlelstv 			esac
     87  1.1  mlelstv 		esac
     88  1.1  mlelstv 	done < /etc/iscsi/volumes
     89  1.1  mlelstv }
     90  1.1  mlelstv 
     91  1.1  mlelstv iscsid_volumes_stop()
     92  1.1  mlelstv {
     93  1.2   martin 	test -f /etc/iscsi/volumes || return 0
     94  1.1  mlelstv 
     95  1.1  mlelstv 	while read host target digest auth user alias; do
     96  1.1  mlelstv 		case $host in
     97  1.3  mlelstv 		\#*|"") ;;
     98  1.1  mlelstv 		*)
     99  1.1  mlelstv 			echo "Remove target ${alias:-$target}"
    100  1.1  mlelstv 
    101  1.5      kre 			/sbin/iscsictl list_sessions |
    102  1.5      kre 			    while read key1 num key2 sesstarget; do
    103  1.5      kre 				if [ x"$key1" = x"Session" ] &&
    104  1.5      kre 				   [ x"$key2" = x"Target"  ] &&
    105  1.5      kre 				   [ x"$sesstarget" = x"$target" ]
    106  1.5      kre 				then
    107  1.5      kre 					/sbin/iscsictl logout -I "$num" |
    108  1.5      kre 					    grep -v '^OK$'
    109  1.1  mlelstv 				fi
    110  1.1  mlelstv 			done
    111  1.1  mlelstv 
    112  1.5      kre 			/sbin/iscsictl list_targets |
    113  1.5      kre 			    while read num talias ttarget; do
    114  1.1  mlelstv 				if [ x"$ttarget" = x"$target" ]; then
    115  1.1  mlelstv 					/sbin/iscsictl remove_target -I "$num"
    116  1.1  mlelstv 				fi
    117  1.1  mlelstv 			done
    118  1.1  mlelstv 			;;
    119  1.1  mlelstv 		esac
    120  1.1  mlelstv 	done < /etc/iscsi/volumes
    121  1.1  mlelstv }
    122  1.1  mlelstv 
    123  1.1  mlelstv load_rc_config $name
    124  1.1  mlelstv run_rc_command "$1"
    125