home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / boot / i386 / root / sbin / iscsi_discovery < prev    next >
Text File  |  2006-11-29  |  3KB  |  125 lines

  1. #!/bin/bash
  2. #
  3. # Copyright (C) Voltaire Ltd. 2006.  ALL RIGHTS RESERVED.
  4. #
  5. # This program is free software; you can redistribute it and/or modify it under
  6. # the terms of the GNU General Public License as published by the Free Software
  7. # Foundation; either version 2 of the License, or (at your option) any later
  8. # version.
  9. #
  10. # This program is distributed in the hope that it will be useful, but WITHOUT
  11. # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  12. # FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
  13. # details.
  14. #
  15. # You should have received a copy of the GNU General Public License along with
  16. # this program; if not, write to the Free Software Foundation, Inc., 59 Temple
  17. # Place, Suite 330, Boston, MA 02111-1307 USA
  18. #
  19. # Author: Dan Bar Dov <danb@voltaire.com>
  20.  
  21. # iscsi_discovery:
  22. #    * does a send-targets discovery to the given IP
  23. #    * set the transport type to ISER
  24. #    * tries to login
  25. #    * if succeeds,
  26. #          o logout,
  27. #          o mark record autmatic 
  28. #    * else
  29. #          o reset transport type to TCP
  30. #          o try to login
  31. #          o if succeeded
  32. #                + logout
  33. #                + mark record automatic 
  34. #
  35.  
  36. dbg()
  37. {
  38.     $debug || echo $@
  39. }
  40.  
  41. initialize()
  42. {
  43.     trap "exit" 2
  44.     usage="Usage: $0 [-d] <IP> [<port>]"
  45.     debug=false
  46. }
  47.  
  48. parse_cmdline()
  49. {
  50.     if [ "$1" = "-d" ]; then
  51.         debug=true
  52.         shift
  53.     fi
  54.     if [ $# -lt 1 ]; then
  55.         echo ${usage}
  56.         exit 1
  57.     fi
  58.  
  59.     ip=$1
  60.     port=${2:-3260}
  61. }
  62.  
  63.  
  64. discover()
  65. {
  66.     connected=0
  67.     discovered=0
  68.     df=/tmp/discovered.$$
  69.  
  70.     dbg "starting discovery to $ip"
  71.     iscsiadm -m discovery --type sendtargets --portal ${ip}:${port} > ${df}
  72.     while read portal target
  73.     do
  74.         portal=${portal%,*}
  75.         select_transport  > /dev/tty
  76.     done < ${df}
  77.  
  78.     discovered=$(cat ${df} | wc -l)
  79.     if [ ${discovered} = 0 ]; then
  80.         echo "failed to discover targets at ${ip}"
  81.         exit 2
  82.     else 
  83.         echo "discovered ${discovered} targets at ${ip}, connected to ${connected}"
  84.     fi
  85.     /bin/rm -f ${df}
  86. }
  87.  
  88. set_auto_if_login()
  89. {
  90.     iscsiadm -m node --targetname ${target} --portal ${portal} --login >/dev/null 2>&1
  91.     ret=$?
  92.     if [ ${ret} = 0 ]; then
  93.             iscsiadm -m node --targetname ${target} --portal ${portal} --logout
  94.         iscsiadm -m node --targetname ${target} --portal ${portal} --op update -n node.conn[0].startup -v automatic
  95.         echo "Set target ${target} to automatic login over ${transport} to portal ${portal}"
  96.         ((connected++))
  97.     fi
  98.     return ${ret}
  99. }
  100.  
  101. set_transport()
  102. {
  103.     transport=$1
  104.     iscsiadm -m node --targetname ${target} --portal ${portal} \
  105.              --op update -n node.conn[0].iscsi.HeaderDigest -v None
  106.     iscsiadm -m node --targetname ${target} --portal ${portal} \
  107.              --op update -n node.transport_name -v ${transport}
  108. }
  109.  
  110. select_transport()
  111. {
  112.     set_transport iser
  113.     dbg "Testing iser-login to target ${target} portal ${portal}"
  114.     set_auto_if_login
  115.     if [ $? != 0 ]; then
  116.         set_transport tcp
  117.         dbg "starting to test tcp-login to target ${target} portal ${portal}"
  118.         set_auto_if_login
  119.     fi
  120. }
  121.  
  122. initialize
  123. parse_cmdline "$@"
  124. discover
  125.