#!/bin/sh

TYPE=`echo ${XENBUS_PATH} | cut -f 2 -d '/'`
DOMID=`echo ${XENBUS_PATH} | cut -f 3 -d '/'`
DEVID=`echo ${XENBUS_PATH} | cut -f 4 -d '/'`

DEVNAME=$TYPE-$DOMID-$DEVID

SYSFS_PATH=/sys/devices/xen-backend/$DEVNAME

XAPI=/xapi/${DOMID}/hotplug/${TYPE}/${DEVID}

HOTPLUG="${XAPI}/hotplug"

KTHREAD_PID="${XENBUS_PATH}/kthread-pid"

PAUSE="${XENBUS_PATH}/pause"
PAUSE_DONE="${XENBUS_PATH}/pause-done"

SHUTDOWN="${XENBUS_PATH}/shutdown-request"
SHUTDOWN_DONE="${XENBUS_PATH}/shutdown-done"

syslog ()
{
	logger -pdaemon.info -tscripts-block -- "$DEVNAME[$ACTION]: $*"
}

case "$ACTION" in
add)
	syslog "writing $HOTPLUG = online"
	xenstore write "$HOTPLUG" "online"

	# RUNNING          (1<<0)
	# PAUSE_DONE       (1<<1)
	# SHUTDOWN_DONE    (1<<2)
	# PAUSE_REQUEST    (1<<3)
	# SHUTDOWN_REQUEST (1<<4)

	# echo $(((1<<1) | (1<<3))) > $SYSFS_PATH/queue_events # unpaused|paused
	;;

change)
	if pid=$(xenstore read "$KTHREAD_PID" 2>/dev/null)
	then
		state=running
	else
		state=stopped
	fi

	syslog "kthread-pid = '$pid'"

	case "$state" in
		stopped)
			if xenstore exists "$PAUSE"
			then
				syslog "writing $PAUSE_DONE"
				xenstore write "$PAUSE_DONE" ""
			fi
			if xenstore exists "$SHUTDOWN"
			then
				syslog "writing $SHUTDOWN_DONE"
				xenstore write "$SHUTDOWN_DONE" ""
			fi
			;;
		running)
			if xenstore exists "$PAUSE_DONE"
			then
				syslog "removing $PAUSE_DONE"
				xenstore rm "$PAUSE_DONE"
			fi
			if xenstore exists "$SHUTDOWN_DONE"
			then
				syslog "WARNING: queue restart in shutdown state."
			fi
			;;
	esac
	;;

remove)
	syslog "removing $HOTPLUG"
	xenstore rm "$HOTPLUG"
	;;
esac
