#!/bin/bash

# Usage: block-netapp

USER="root"
PASSWORD="PASSWORD"
VFILER="172.16.103.200"

dir=$(dirname "$0")
. "$dir/block-common.sh"

find_sdev()
{
  unset dev
  dev=`readlink /sys/class/iscsi_session/session$1/device/target$1:0:0/$1:0:0:$2/block*`
  dev=${dev##*/}
}

find_sdev_rev()
{
  unset tgt
  for session in /sys/class/iscsi_session/session*; do
    for block in $session/device/target*/*:0:*/block*; do
      dev=`readlink block`
      dev=${dev##*/}
      if [ "$dev" = "$1" ]; then
        tgt=`cat $session/targetname`
        return
      fi
    done
  done
}

case "$command" in
  add)
    # rescan the targets we are logged in to
    /usr/sbin/iscsiadm -m session --rescan
    par=`xenstore-read $XENBUS_PATH/params` || true
    CUSTOMER=`echo $par | sed "s/\/\/\(.*\)\/\(.*\)/\1/g"`
    TARGET=`echo $par | sed "s/\/\/\(.*\)\/\(.*\)/\2/g"`
    LUN=-1

    for target in `grep -l netapp /sys/class/iscsi_session/session*/targetname`; do
      HOST=`echo $target | sed "s/.*session\([0-9]\+\).*/\1/g"`
      IP=`cat /sys/class/iscsi_host/host$HOST/ipaddress`
      LUN=`/usr/sbin/netapp-lun.py $USER $VFILER $PASSWORD $CUSTOMER $TARGET` # n00b
      if [ $LUN -ne -1 ]; then
        find_sdev $HOST $LUN 
	xenstore-write $XENBUS_PATH/node /dev/$dev
	write_dev /dev/$dev
	exit 0
      fi
    done
    exit 1
    ;;

  remove)
    node=`xenstore-read $XENBUS_PATH/node` || true
    dev=$node; dev=${dev#/dev/}
    find_sdev_rev $dev
    if [ -x /sbin/blockdev -a -n "$node" ];  then blockdev --flushbufs "$node"; fi
    test -z "$tgt" && exit 2
    exit 1
    ;;
esac
