#!/bin/sh

source /opt/dell/srvadmin/lib64/srvadmin-omilcore/Funcs.sh

SYSIDFILEPATH8G=`GetRegVal "/opt/dell/srvadmin/etc/omreg.cfg" "openmanage.8gsyslistfile"`
SYSIDFILEPATH9G=`GetRegVal "/opt/dell/srvadmin/etc/omreg.cfg" "openmanage.9gsyslistfile"`

SYSID=`GetSysId`
TEST8G=`GetRegVal "${SYSIDFILEPATH8G}" "${SYSID}"`
TEST9G=`GetRegVal "${SYSIDFILEPATH9G}" "${SYSID}"`

SYSID_HEX="0x$SYSID"
SYSID_DEC=`printf "%d" $SYSID_HEX`
MIN_IDRAC_SYSID_HEX=0x0235
MAX_IDRAC_SYSID_HEX=0x048B
MIN_IDRAC7_SYSID_HEX=0x048C
DIAMAS_SYSID_HEX=0x04DD
COASTER_SYSID_HEX=0x04DE
SQUEEZE_SYSID_HEX=0x04D6
MIN_IDRAC_SYSID_DEC=`printf "%d" $MIN_IDRAC_SYSID_HEX`
MAX_IDRAC_SYSID_DEC=`printf "%d" $MAX_IDRAC_SYSID_HEX`
MIN_IDRAC7_SYSID_DEC=`printf "%d" $MIN_IDRAC7_SYSID_HEX`
DIAMAS_SYSID_DEC=`printf "%d" $DIAMAS_SYSID_HEX`
COASTER_SYSID_DEC=`printf "%d" $COASTER_SYSID_HEX`
SQUEEZE_SYSID_DEC=`printf "%d" $SQUEEZE_SYSID_HEX`

# check if $1 or $2 is -r. If it is then its Remote Racadm command. Use idracadm7 binary for remote
if [ $# -gt 0 ]; then
     if [ "$1"  == "-r" ] || [ "$1" == "-d" -a "$2" == "-r" ]; then
          [ -x /opt/dell/srvadmin/bin/idracadm7 ] &&
               exec /opt/dell/srvadmin/bin/idracadm7 "$@"
     fi
fi
# check local hardware and run matching binary, if found
if [ ! -z "${TEST9G}" -a -e /opt/dell/srvadmin/bin/racadm5 ]; then
    exec /opt/dell/srvadmin/bin/racadm5 "$@"
elif [ ! -z "${TEST8G}" -a -e /opt/dell/srvadmin/bin/racadm4 ]; then
    exec /opt/dell/srvadmin/bin/racadm4 "$@"
# Exception for DIAMAS (0x04DD)
elif [ $SYSID_DEC -eq $DIAMAS_SYSID_DEC ]; then
    exec /opt/dell/srvadmin/bin/idracadm "$@"
# Exception for COASTER (0x04DE)
elif [ $SYSID_DEC -eq $COASTER_SYSID_DEC ]; then
    exec /opt/dell/srvadmin/bin/idracadm "$@"
# Exception for SQUEEZE (0x04D6)
elif [ $SYSID_DEC -eq $SQUEEZE_SYSID_DEC ]; then
    exec /opt/dell/srvadmin/bin/idracadm "$@"
# if the system ID is from 0x0235 to 0x0482 use 11g Racadm binary
elif [ $SYSID_DEC -ge $MIN_IDRAC_SYSID_DEC -a -e /opt/dell/srvadmin/bin/idracadm ] && 
	[ $SYSID_DEC -le $MAX_IDRAC_SYSID_DEC -a -e /opt/dell/srvadmin/bin/idracadm ]; then
    exec /opt/dell/srvadmin/bin/idracadm "$@"
# if the system ID is greater than 0x0483 use 12g Racadm binary
elif [ $SYSID_DEC -ge $MIN_IDRAC7_SYSID_DEC -a -e /opt/dell/srvadmin/bin/idracadm7 ]; then
    exec /opt/dell/srvadmin/bin/idracadm7 "$@"
fi

# if we cant detect hardware, fallback to remote behaviour
for bin in /opt/dell/srvadmin/bin/idracadm /opt/dell/srvadmin/bin/racadm5 /opt/dell/srvadmin/bin/racadm4; do
    if [ -e $bin ]; then
       exec $bin "$@" 
    fi
done

echo "Unable to identify the RAC hardware"
exit 1

