#!/bin/bash

log_label="xcat.genesis.getipmi"

allowcred.awk &
CREDPID=$!
if [ -z "$XCATDEST" ]; then
	XCATDEST=$1
fi

# This section only works in genesis
if [ -z "$XCATDEST" ]; then
	for parm in $(cat /proc/cmdline); do
		if echo "$parm" |grep -q xcatd=; then
			XCATDEST="$(echo "$parm" |awk -F= '{print $2}')"
		fi
	done
fi
# This section works in diskless/diskful
# The environment MASTER_IP and XCATDPORT is exported by mypostscript
if [ -z "$XCATDEST" ]; then
    XCATDEST=$MASTER_IP:$XCATDPORT
fi

for LANCHAN in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16; do
   if ipmitool channel info $LANCHAN 2> /dev/null | grep 802.3 > /dev/null 2>&1 && ipmitool raw 0xc 2 $LANCHAN 5 0 0 > /dev/null 2>&1;
     then break;
   fi;
done
BMCMAC="$(ipmitool lan print "$LANCHAN"|grep ^MAC|awk '{print $4}')" #bmcconfig may opt to use DHCP, if so we need to feed up the mac address
#TODO: need a way to get the DUID the service processor may use, perhaps reserve that for 'ibmsetup' since spec doesn't touch ipv6?
IPMIMFG="$(ipmitool mc info |grep "^Manufacturer ID"|awk  '{print $4}')"
XPROD="$(ipmitool mc info | grep "^Product ID"|awk '{print $4}')"
if [ "$IPMIMFG" == "42817" -a "$XPROD" == "16975" ]; then
    ISOPENBMC=1 # AC922
elif [ "$IPMIMFG" == "42817" -a "$XPROD" == "1" ]; then
    ISOPENBMC=1 # IC922
else
    ISOPENBMC=0
fi
echo "<xcatrequest>
<command>getbmcconfig</command>
<callback_port>300</callback_port>
<isopenbmc>$ISOPENBMC</isopenbmc>
<bmcmac>$BMCMAC</bmcmac>
</xcatrequest>" > /tmp/bmcreq.xml
rm -f /tmp/ipmicfg.xml
while [ ! -f /tmp/ipmicfg.xml ] || grep error /tmp/ipmicfg.xml; do
	if [ -f /tmp/ipmicfg.xml ]; then
		timer=60
		while [ $timer -gt 0 ]; do
			sleep 1
			echo -en  "Retrying in $timer seconds  \r"
			timer=$(($timer-1));
		done
	fi
	echo -en "                                                         \r";
	
	if [ -f /etc/xcat/cert.pem -a -f /etc/xcat/certkey.pem ]; then #use client cert if available
		openssl s_client -key /etc/xcat/certkey.pem -cert /etc/xcat/cert.pem -connect "$XCATDEST" -quiet 2> /dev/null < /tmp/bmcreq.xml > /tmp/ipmicfg.xml
	else
		openssl s_client -connect "$XCATDEST" -quiet 2> /dev/null < /tmp/bmcreq.xml > /tmp/ipmicfg.xml
	fi
done
rm /tmp/bmcreq.xml
kill $CREDPID
