#!/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
	if [ -z "$VDEV_ENC_SYSFS_PATH" ] ; then
		echo "$i="
		continue
	fi

	val=""
	case $i in
	enc)
		val=$(ls "$VDEV_ENC_SYSFS_PATH/../../" 2>/dev/null)
		;;
	slot)
		val=$(cat "$VDEV_ENC_SYSFS_PATH/slot" 2>/dev/null)
		;;
	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)
		;;
	esac
	echo "$i=$val"
done

