--- /dev/null
+#!/bin/bash
+#
+# osd_login : This script is part of the autologin feature
+# mandated by the pnfs-objects standard.
+# It is called from objlayoutdriver.ko in the kernel.
+
+# Copyright (C) 2012, Sachin Bhamare <sbhamare@panasas.com>
+# Copyright (C) 2012, Boaz Harrosh <bharrosh@panasas.com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301 USA
+
+umask 022
+
+PATH="/sbin:/usr/sbin:/bin:/usr/bin"
+
+iscsiadm=/sbin/iscsiadm
+
+PARENT_PID=$BASHPID
+WATCHDOG_TIMEOUT=15
+
+protocol=""
+portal=""
+uri=""
+osdname=""
+systemid=""
+
+usage()
+{
+ echo "Usage: $0 -u <URI> -o <OSDNAME> -s <SYSTEMID>"
+ echo "Options:"
+ echo "-u target uri e.g. iscsi://<ip>:<port>"
+ echo "-o osdname of the target OSD"
+ echo "-s systemid of the target OSD"
+}
+
+parse_cmdline()
+{
+ argc=$#
+ if [ $# -lt 3 ]; then
+ usage
+ exit 1
+ fi
+
+ # parse the input arguments
+ while getopts "u:o:s:" options; do
+ case $options in
+ u ) uri=$OPTARG;;
+ o ) osdname=$OPTARG;;
+ s ) systemid=$OPTARG;;
+ \? ) usage
+ exit 1;;
+ * ) usage
+ exit 1;;
+ esac
+ done
+
+ echo "-u : $uri"
+ echo "-o : $osdname"
+ echo "-s : $systemid"
+
+ protocol=`echo $uri | awk -F ':' '{print $1}'`
+ portal=`echo $uri | awk -F '//' '{print $2}'`
+}
+
+watchdog()
+{
+ timeout=$1
+ portal=$2
+
+ sleep $timeout
+ if kill -9 $PARENT_PID; then
+ echo "watchdog : Timed out (>$timeout seconds) while login into $portal" | logger -t "osd_login"
+ fi
+ echo "watchdog: exiting .."
+ exit 2
+}
+
+login_iscsi_osd()
+{
+ echo "login into: $1"
+ if ! $iscsiadm -m discovery -o nonpersistent -t sendtargets -p $1 --login; then
+ echo "$iscsiadm -m discovery -t sendtargets -p $1 --login returned error $? !"
+ sleep 1;
+ fi
+}
+
+echo "============= osd_login ========="
+echo "progname : $0"
+parse_cmdline "$@"
+echo "protocol: $protocol"
+echo "portal: $portal"
+
+watchdog $WATCHDOG_TIMEOUT $portal &
+watchdog_pid=$!
+
+case $protocol in
+iscsi)
+ login_iscsi_osd $portal |& logger -t "osd_login"
+ ;;
+*)
+ echo "Error: protocol $protocol not supported !" | logger -t "osd_login"
+ ;;
+esac
+
+kill -9 $watchdog_pid
+exit 0