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