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