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