1#!/bin/sh
2#
3# Print SCSI Enclosure Services (SES) info. The output is dependent on the name
4# of the script/symlink used to call it.
5#
6helpstr="
7enc:		Show disk enclosure w:x:y:z value.
8slot:		Show disk slot number as reported by the enclosure.
9encdev:		Show /dev/sg* device associated with the enclosure disk slot.
10fault_led:	Show value of the disk enclosure slot fault LED.
11locate_led:	Show value of the disk enclosure slot locate LED.
12ses:		Show disk's enc, enc device, slot, and fault/locate LED values."
13
14script="${0##*/}"
15if [ "$1" = "-h" ] ; then
16	echo "$helpstr" | grep "$script:" | tr -s '\t' | cut -f 2-
17	exit
18fi
19
20if [ "$script" = "ses" ] ; then
21	scripts='enc encdev slot fault_led locate_led'
22else
23	scripts="$script"
24fi
25
26for i in $scripts ; do
27	# shellcheck disable=SC2154
28	if [ -z "$VDEV_ENC_SYSFS_PATH" ] ; then
29		echo "$i="
30		continue
31	fi
32
33	val=""
34	case $i in
35	enc)
36		if echo "$VDEV_ENC_SYSFS_PATH" | grep -q '/sys/bus/pci/slots' ; then
37			val="$VDEV_ENC_SYSFS_PATH"
38		else
39			val="$(ls """$VDEV_ENC_SYSFS_PATH/../../""" 2>/dev/null)"
40		fi
41		;;
42	slot)
43		if echo "$VDEV_ENC_SYSFS_PATH" | grep -q '/sys/bus/pci/slots' ; then
44			val="$(basename """$VDEV_ENC_SYSFS_PATH""")"
45		else
46			val="$(cat """$VDEV_ENC_SYSFS_PATH/slot""" 2>/dev/null)"
47		fi
48		;;
49	encdev)
50		val=$(ls "$VDEV_ENC_SYSFS_PATH/../device/scsi_generic" 2>/dev/null)
51		;;
52	fault_led)
53		# JBODs fault LED is called 'fault', NVMe fault LED is called
54		# 'attention'.
55		if [ -f "$VDEV_ENC_SYSFS_PATH/fault" ] ; then
56			val=$(cat "$VDEV_ENC_SYSFS_PATH/fault" 2>/dev/null)
57		elif [ -f "$VDEV_ENC_SYSFS_PATH/attention" ] ; then
58			val=$(cat "$VDEV_ENC_SYSFS_PATH/attention" 2>/dev/null)
59		fi
60		;;
61	locate_led)
62		val=$(cat "$VDEV_ENC_SYSFS_PATH/locate" 2>/dev/null)
63		;;
64	*)
65		val=invalid
66		;;
67	esac
68	echo "$i=$val"
69done
70