#!/bin/sh
#
# Print SCSI Enclosure Services (SES) info. The output is dependent on the name
# of the script/symlink used to call it.
#
helpstr="
enc:		Show disk enclosure w:x:y:z value.
slot:		Show disk slot number as reported by the enclosure.
encdev:		Show /dev/sg* device associated with the enclosure disk slot.
fault_led:	Show value of the disk enclosure slot fault LED.
locate_led:	Show value of the disk enclosure slot locate LED.
ses:		Show disk's enc, enc device, slot, and fault/locate LED values."

script="${0##*/}"
if [ "$1" = "-h" ] ; then
	echo "$helpstr" | grep "$script:" | tr -s '\t' | cut -f 2-
	exit
fi

if [ "$script" = "ses" ] ; then
	scripts='enc encdev slot fault_led locate_led'
else
	scripts="$script"
fi

for i in $scripts ; do
	# shellcheck disable=SC2154
	if [ -z "$VDEV_ENC_SYSFS_PATH" ] ; then
		echo "$i="
		continue
	fi

	val=""
	case $i in
	enc)
		if echo "$VDEV_ENC_SYSFS_PATH" | grep -q '/sys/bus/pci/slots' ; then
			val="$VDEV_ENC_SYSFS_PATH"
		else
			val="$(ls """$VDEV_ENC_SYSFS_PATH/../../""" 2>/dev/null)"
		fi
		;;
	slot)
		if echo "$VDEV_ENC_SYSFS_PATH" | grep -q '/sys/bus/pci/slots' ; then
			val="$(basename """$VDEV_ENC_SYSFS_PATH""")"
		else
			val="$(cat """$VDEV_ENC_SYSFS_PATH/slot""" 2>/dev/null)"
		fi
		;;
	encdev)
		val=$(ls "$VDEV_ENC_SYSFS_PATH/../device/scsi_generic" 2>/dev/null)
		;;
	fault_led)
		# JBODs fault LED is called 'fault', NVMe fault LED is called
		# 'attention'.
		if [ -f "$VDEV_ENC_SYSFS_PATH/fault" ] ; then
			val=$(cat "$VDEV_ENC_SYSFS_PATH/fault" 2>/dev/null)
		elif [ -f "$VDEV_ENC_SYSFS_PATH/attention" ] ; then
			val=$(cat "$VDEV_ENC_SYSFS_PATH/attention" 2>/dev/null)
		fi
		;;
	locate_led)
		val=$(cat "$VDEV_ENC_SYSFS_PATH/locate" 2>/dev/null)
		;;
	*)
		val=invalid
		;;
	esac
	echo "$i=$val"
done
