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