#===============================================================================
# SSS Firmware
#===============================================================================
# File 			:	lib_diag
# Who			:	JWB
# Descripttion	:	libray of sss diagnostic function
#
# Copyright		:	LG ELECTRONICS INC.
# history 		:	2008.10.29 started first
#===============================================================================

. /etc/sss_script/event/lib_sss

spODDNODE="sr0"
spODDMODELLIST=(
"BD-RE  BH08NS20 "
"DVDRAM GH50N    "
)
spSWAPTOTAL=256952

DIAGLOGFILE="/var/log/diag.log"
#1 PART
#2 ODD
SCODE_ODD_CONNECT="0x21"	#ok
SCODE_ODD_NODE="0x22"		#ok
SCODE_ODD_MODEL="0x23"		#ok
SCODE_ODD_CMDTOUT="0x24"	#To Do
#3 SYS
SCODE_SYS_DEGRADED="0x31"	#
SCODE_SYS_LOWFREE="0x32"
#4 SWP
SCODE_SWP_SWAPON="0x41"
SCODE_SWP_DEGRADED="0x42"
#5 USR
SCODE_USR_VOL1="0x51"
SCODE_USR_MOUNT="0x52"
SCODE_USR_DEGRADED="0x53"
SCODE_USR_LOWFREE="0x54"
#6 NET
SCODE_NET_LINKDOWN="0x61"
SCODE_NET_IFDOWN="0x62"
SCODE_NET_IFCFG="0x63"
#7 APP
SCODE_APP_NAME=("ip_manager" "sss_main"	"oddmngrt" "key_eventd"	"cmsdaemon"	"httpd"	"smbd" "crond")
SCODE_APP_CODE=("0x71"		 "0x72"		"0x73"	   "0x74"		"0x75"		"0x76"	"0x77" "0x78" )

DIAG_RMT_ITEM_ENC=(
"PART"	#1
"ODD"	#2
"SYS"	#3
"SWP"	#4
"USR"	#5
"NET"	#6
"APP"	#7
)

DIAG_RMT_ITEM_HDD=(
"HDD"	#8
)

Fun_RmtT_ENC=(
"Fun_RmtODD"
"Fun_RmtSysSwap"
"Fun_RmtUSR"
"Fun_RmtNET"
"Fun_RmtAPP"
)
Fun_RmtT_HDD=(
"Fun_RmtHDD"
)

SMART_RET_Bay1=""
SMART_RET_Bay2=""
SMART_RET_Bay3=""
SMART_RET_Bay4=""

#1 ITEM #2 SCODE name
sEnc=0
sHdd=0

DIAG_ITEM_NAME=(
#"SVC"	#1 	: service code
#"SRN"	#2 	: Serial Number
"MAC"	#3 	: Mac Address
"VER"	#4 	:
"RTC"	#5
"FAN"	#6
"LED"	#7
"ODD"	#8
"VOL"	#9
"BAY"	#10
#"SMART" #9
)
SVC_SUB=(
'SVC_CODE' 		'Service Code'	'FunSvc'
)
SRN_SUB=(
'S/N' 		'Serial Number'	'FunSrn'
)
MAC_SUB=(
'MAC'		'Address'		'FunMac'
)
VER_SUB=(
'Version'	'Main IC'		'FunVerMain'
'Version'	'System'		'FunVerSys'
'Version'	'Uboot'			'FunVerUbt'
'Version'	'Micom'			'FunVerMcu'
'Version'	'Kernel'		'FunVerKnl'
)
RTC_SUB=(
'RTC'		'Sys Time'		'FunRtc'
)
FAN_SUB=(
'FAN'		'RPM'			'FunFanRpm'
)
ODD_SUB=(
'Blu-ray'	'ID'			'FunOddId'
'Blu-ray'	'F/W'			'FunOddVer'
)
VOL_SUB=(
'Volume'	'Node'			'FunVolNode'
'Volume'	'Mount'			'FunVolMount'
'Volume'	'RAID'			'FunVolRaid'
'Volume'	'Dev'			'FunVolRaidDev'
)
LED_SUB=(
'LED'		'BAY(1 2 3 4)'	'FunLed'
)
BAY_SUB=(
'Bay'		'ID'			'FunBayId'
'Bay'		'Capa'			'FunBayCapa'
'Bay'		'Temp SMART'	'FunBayGetSmart'
)
#===============================================================================
# Description	:	Service Code
# input 		:	1()
# output 		:   1()
#===============================================================================
Fun_RmtEncScode()
{
	sEnc=$1
}

Fun_RmtHddScode()
{
	sHdd=$1
}

Fun_RmtODD()
{
	#echo "Fun_RmtODD($*)"
	#SCODE_ODD_CONNECT ?
	#SCODE_ODD_NODE ?
	#SCODE_ODD_MODEL ?
	BAY_IsThereHostNum "host4"
	if [ $? = 0 ]; then
		sNODE=`DevFromHostNumWithSystem "host4"`
		if [ "$sNODE" != "$spODDNODE" ]; then Fun_RmtEncScode $SCODE_ODD_NODE; 	return 1; fi
		sVENDOR=`cat /sys/block/${sNODE}/device/vendor`
		sMODEL=`cat /sys/block/${sNODE}/device/model`
		bOMLcnt=${#spODDMODELLIST[*]}
	    bEcnt=0
	    while [ "$bEcnt" -lt "$bOMLcnt" ]; do
			if [ "$sMODEL" != "${spODDMODELLIST[$bEcnt]}" ]; then 
   	     		bEcnt=$(($bEcnt + 1))
				continue;
			else 
				sVERSION=`cat /sys/block/${sNODE}/device/rev`;
				return 0
			fi
		done
		Fun_RmtEncScode $SCODE_ODD_MODEL;   
		return 1
	else
		Fun_RmtEncScode $SCODE_ODD_CONNECT
		return 1
	fi
}

Fun_RmtSysSwap()
{
	for sHostN in 0 1 2 3
	do
		sBayNode=`DevFromHostNumWithSystem "host${sHostN}"`
		if [ -z "$sBayNode" ]; then
			continue
		else
			#SCODE_SYS_DEGRADED ?
			sMdQuerySys=(`mdadm -Q /dev/${sBayNode}1 | grep detail`)
			if [ $? != 0 ] || [ ${sMdQuerySys[6]} != "active" ]; then
				Fun_RmtEncScode $SCODE_SYS_DEGRADED
				return 1
			fi
			#SCODE_SWP_DEGRADED ?
			sMdQuerySwp=(`mdadm -Q /dev/${sBayNode}2 | grep detail`)
			if [ $? != 0 ] || [ ${sMdQuerySwp[6]} != "active" ]; then
				Fun_RmtEncScode $SCODE_SWP_DEGRADED
				return 1
			fi
		fi
	done
	#SCODE_SYS_LOWFREE ?
	sUse=(`df | grep 'rootfs'`)
	if [ "${sUse[4]%\%}" -gt "80" ] ; then
		Fun_RmtEncScode $SCODE_SYS_LOWFREE
		return 1;
	fi
	#SCODE_SWP_SWAPON ?
	sSwap=(`cat /proc/meminfo |grep 'SwapTotal'`)
	if [ "${sSwap[1]}" = "" ] || [ "${sSwap[1]}" -lt "$spSWAPTOTAL" ] ; then
		Fun_RmtEncScode $SCODE_SWP_SWAPON
		return 1;
	fi
	return 0;
}

Fun_RmtUSR()
{
	#echo "Fun_RmtUSR($*)"
	# check is there Vol1 ?
	sVolConf=(`cat ${VOLCONF} |grep Vol1`)
	if [ $? != 0 ] || [ -z "${sVolConf[1]}" ]; then
		#no volume1
		Fun_RmtEncScode $SCODE_USR_VOL1
		return 1;
	fi
	
	# volume all mount ?
	bVolCnt=0
	while [ "$bVolCnt" -lt 4 ] ;	do
		bVolCnt=$(($bVolCnt + 1))
		sVolConf=(`cat ${VOLCONF} | grep "Vol${bVolCnt}"`)
		if [ ! -z "${sVolConf[1]}" ]; then 
			# SCODE_USR_DEGRADED ?
			if [ "${sVolConf[1]//[0-9]/}" = "md" ]; then 
				mdadm -D /dev/${sVolConf[1]} |grep 'State :'|grep -i 'degraded' > /dev/null 2>&1
				if [ $? = 0 ]; then
					Fun_RmtEncScode $SCODE_USR_DEGRADED
					return 1;
				fi
			fi
			# SCODE_USR_MOUNT ?
			sTemp=(`mount |grep "/fs/Vol${bVolCnt}"`)
			if [ $? != 0 ]; then
				Fun_RmtEncScode $SCODE_USR_MOUNT
				return 1;
			fi
			# SCODE_USR_LOWFREE ?
			sUse=(`df | grep /dev/"${sVolConf[1]}"`)
			if [ "${sUse[4]%\%}" -gt "90" ] ; then
				Fun_RmtEncScode $SCODE_USR_LOWFREE
				return 1;
			fi
		else
			continue
		fi
	done
	return 0;
}

Fun_RmtNET()
{
	#SCODE_NET_LINKDOWN ?
	grep 'link up' /etc/sss_script/network/link_status > /dev/null 2>&1
	if [ $? != 0 ]; then
		Fun_RmtEncScode $SCODE_NET_LINKDOWN
		return 1; 
	fi
	#SCODE_NET_IFDOWN ?
	ifconfig | grep egiga0 > /dev/null 2>&1
	if [ $? != 0 ]; then
		Fun_RmtEncScode $SCODE_NET_IFDOWN
		return 1; 
	fi
	#SCODE_NET_IFCFG ?
	if [ ! -f /etc/sss_script/network/ifcfg-egiga0 ]; then
		Fun_RmtEncScode $SCODE_NET_IFCFG
		return 1; 
	fi
	grep 'IPADDR' /etc/sss_script/network/ifcfg-egiga0 > /dev/null 2>&1
	if [ $? != 0 ]; then
		Fun_RmtEncScode $SCODE_NET_IFCFG
		return 1; 
	fi
	return 0;
}

Fun_RmtAPP()
{
	#echo "Fun_RmtAPP($*)"
	bCnt=0
	bTCnt=${#SCODE_APP_NAME[*]}
	sPS=`ps -w` 
	while [ "$bCnt" -lt "$bTCnt" ]; do
		echo $sPS | grep  -i ${SCODE_APP_NAME[$bCnt]} > /dev/null 2>&1
		if [ $? != 0 ]; then
			Fun_RmtEncScode ${SCODE_APP_CODE[$bCnt]}
			return 1;
		fi
		bCnt=$(($bCnt + 1))
	done
	return 0
}

Fun_RmtHDD()
{
	sHddFail=0
	sHdd=0
	#while [ "$bHCnt" -gt 1 ] ;	
	for bCnt in 1 2 3 4 
	do
		BAY_IsThereHdd "Bay"${bCnt}
		if [ $? != 0 ]; then
			continue
		fi
		sTempSmart=`FunBaySmart $bCnt`
		if [ $? != 0 ]; then
			sHddFail=$(( 0x80 >> $(($bCnt -1)) ))
		else
			sHddFail=0
		fi
		FunBaySetSmart $bCnt $sTempSmart
		Fun_RmtHddScode $(($sHdd | $sHddFail ))
	done
}
Fun_RmtTest_ENC()
{
	bTcnt=${#Fun_RmtT_ENC[*]}
	bEcnt=0
	while [ "$bEcnt" -lt "$bTcnt" ]; do
		${Fun_RmtT_ENC[$bEcnt]}
		if [ $? != 0 ]; then
			return 1
		fi
		bEcnt=$(($bEcnt + 1))
	done
	return 0
}
Fun_RmtTest_HDD()
{
	bTcnt=${#Fun_RmtT_HDD[*]}
	bHcnt=0
	while [ "$bHcnt" -lt "$bTcnt" ]; do
		${Fun_RmtT_HDD[$bHcnt]}
		if [ $? != 0 ]; then
			return 1
		fi
		bHcnt=$(($bHcnt + 1))
	done
	return 0
}

Diag_Rmt_Boot()
{
	Fun_RmtTest_ENC
	ret_Enc=$?
	#Fun_RmtTest_HDD
	#ret_Hdd=$?
	SSS_SetSvcCode `printf "0x%02x" ${sEnc}` `printf "0x%02x" ${sHdd}`
	sTemp=SC[`printf "%02x" ${sEnc}`_`printf "%02x" ${sHdd}`]
	#if [ "$ret_Enc" != 0 ] || [ "$ret_Hdd" != 0 ]; then
	if [ "$ret_Enc" != 0 ]; then
		MSG_Once "${sTemp}"
	fi
	return 0
}
#===============================================================================
# Description	:	Web Display
# input 		:	1()
# output 		:   1()
#===============================================================================
FunSvc()
{
	Fun_RmtTest_ENC
	Fun_RmtTest_HDD
	sSvcCode=SVC_CODE[`printf "%02x" ${sEnc}`_`printf "%02x" ${sHdd}`]
	#MSG_Once "${sSvcCode}"
	#echo $sSvcCode
}
FunSrn()
{
	sTemp=`fw_printenv serialNo`
	if [ "${sTemp}" != "" ]; then
		echo ${sTemp##*=}
	else
		echo No Serial Number
	fi
}
FunMac()
{
	sTemp=`fw_printenv ethaddr`
	sTemp=${sTemp##*=}
	echo ${sTemp//:/" "}
}
FunVerMain()
{
	echo `cat /proc/soc_type`
}
FunVerSys()
{
	echo `cat /etc/sss_script/event/sss_fw_version | grep -i 'sss firmware version'|cut -d ':' -f 2`
}
FunVerUbt()
{
	sTemp=`cat /dev/mtdblock0 |grep 'U-Boot 1.1.'`
	echo ${sTemp//:/"/"}
}
FunVerMcu()
{
	SSS_VerMcu
	echo $version
}
FunVerKnl()
{
	sTemp=`uname -a`
	echo ${sTemp//:/"/"}
}
FunRtc()
{
	sTemp=`date`
	echo ${sTemp//:/"/"}
}
FunFanRpm()
{
	echo `SSS_IoRead $IO_ID_GET_FAN_RPM | awk '{print $2 * 256 + $3}'`
}
FunOddId()
{
	sNODE=`cat /etc/sss_script/disk/scsi_list |grep "host4"|awk '{print $1}'`
	sVENDOR=`cat /sys/block/${sNODE}/device/vendor`
	sMODEL=`cat /sys/block/${sNODE}/device/model`
	echo ${sVENDOR} ${sMODEL}
}
FunOddVer()
{
	sNODE=`cat /etc/sss_script/disk/scsi_list |grep "host4"|awk '{print $1}'`
	sVERSION=`cat /sys/block/${sNODE}/device/rev`
	echo ${sVERSION}
}
FunLed()
{
	sTemp=(`cat /etc/sss_script/disk/disk_led_status|awk '{print $2}'`)
	if [ "$BAY_NAME_CONVERT" = "on" ]; then
		echo ${sTemp[3]} ${sTemp[2]} ${sTemp[1]} ${sTemp[0]}
	else
		echo ${sTemp[0]} ${sTemp[1]} ${sTemp[2]} ${sTemp[3]}
	fi
}

FunVolNode()
{
	sTemp=(`cat ${VOLCONF} | grep "Vol${1}"`)
	if [ "${sTemp[1]%%[0-9]}" = 'md' ]; then
		echo ${sTemp[1]}
	else
		echo ${sTemp[4]}
	fi
}
FunVolMount()
{
	sTemp=(`mount |grep "/fs/Vol${1}"`)
	if [ $? = 0 ]; then
		echo ${sTemp[2]}
	else
		echo Not Mounted
	fi
}
FunVolRaid()
{
	sTemp=(`cat ${VOLCONF} | grep "Vol${1}"`)
	echo ${sTemp[2]}
}
FunVolRaidDev()
{
	sTemp=(`cat ${VOLCONF} | grep "Vol${1}"`)
	echo `BAY_ToDisplayBayName ${sTemp[4]} ${sTemp[5]} ${sTemp[6]} ${sTemp[7]}`
}

FunBayId()
{
	sNode=`VOL_BayToDev Bay${1}`
	sVendor=`cat /sys/block/${sNode}/device/vendor`
	sModel=`cat /sys/block/${sNode}/device/model`
	echo $sVendor $sModel
}
FunBayCapa()
{
	sCapaUnit=("B" "K" "M" "G" "T")
	sNode=`VOL_BayToDev Bay${1}`
	sSecSize=`cat /sys/block/${sNode}/size`
	sSize=$((${sSecSize} * 512)) #Byte
	bCapaCnt=0
	while :
	do
		if [ "${sSize}" -gt 1000 ]; then
			sSize=$((${sSize} / 1000)) #KByte
		else
			break
		fi
		bCapaCnt=$((${bCapaCnt} + 1))
	done
	echo ${sSize}${sCapaUnit[${bCapaCnt}]}
}
FunBaySmart()
{
	#echo "39C OK"
	#echo "39C NG A8"
	sNode=`VOL_BayToDev Bay${1}`
	sDev="/dev/"${sNode}
	sSmartData=`/sbin/smartctl -s on -A -d marvell ${sDev}`
	[ $? = 0 ] || return 0;
	
	sTemper=`echo ${sSmartData##*Temperature_Celsius }|awk '{print $8}'`
	sSpinup=`echo ${sSmartData##*Spin_Up_Time }|awk '{if($2>$4) print "0x0"; else print "0x80";}'`
	sRsc=`echo ${sSmartData##*Reallocated_Sector_Ct }|awk '{if($2>$4) print "0x0"; else print "0x40";}'`
	sSer=`echo ${sSmartData##*Seek_Error_Rate }|awk '{if($2>$4) print "0x0"; else print "0x20";}'`
	sCpsc=`echo ${sSmartData##*Current_Pending_Sector }|awk '{if($2>$4) print "0x0"; else print "0x10";}'`
	sUcer=`echo ${sSmartData##*UDMA_CRC_Error_Count }|awk '{if($2>$4) print "0x0"; else print "0x8";}'`
	
	sSmartRet=$(( ${sSpinup} | ${sRsc} | ${sSer} | ${sCpsc} | ${sUcer} ))
	if [ "$sSmartRet" != 0 ]; then
		sSmartRet="NG "`printf "%0X" ${sSmartRet}`
		echo ${sTemper}"C" ${sSmartRet}
		return 1
	else
		sSmartRet="OK"
		echo ${sTemper}"C" ${sSmartRet}
		return 0
	fi
	#sSmartSelf=`echo FunBaySelf`
}
FunBayGetSmart()
{	
	case "$1" in
	"1")	
		echo $SMART_RET_Bay1
		;;
	"2")
		echo $SMART_RET_Bay2
		;;
	"3")
		echo $SMART_RET_Bay3
		;;
	"4")
		echo $SMART_RET_Bay4
		;;
	esac
}
FunBaySetSmart()
{	
	case "$1" in
	"1")	
		SMART_RET_Bay1=$2
		;;
	"2")
		SMART_RET_Bay2=$2
		;;
	"3")
		SMART_RET_Bay3=$2
		;;
	"4")
		SMART_RET_Bay4=$2
		;;
	esac
}
DIAG_Init()
{
	DIAG_ITEM=""
	DIAG_SUBITEM=""
	DIAG_RET=""
	cat /dev/null > ${DIAGLOGFILE}
}
DIAG_Log()
{
	echo ${DIAG_ITEM}:${DIAG_SUBITEM}:${DIAG_RET} >> ${DIAGLOGFILE}
}

DIAG_Item()
{
	DIAG_ITEM=$*
}
DIAG_SubItem()
{
	DIAG_SUBITEM=$*
}
DIAG_Ret()
{
	DIAG_RET=$*
	DIAG_Log
}

DIAG_SRN()
{
	#echo "DIAG_SRN($*)"
	bSubCnt=0
	while [ "$bSubCnt" -lt ${#SRN_SUB[*]} ] ;	do
		DIAG_Item 		${SRN_SUB[$bSubCnt]}
		DIAG_SubItem 	${SRN_SUB[$(($bSubCnt + 1))]}
		DIAG_Ret		`${SRN_SUB[$(($bSubCnt + 2))]}`
		bSubCnt=$(($bSubCnt + 3))
	done
}

DIAG_MAC()
{
	#echo "DIAG_MAC($*)"
	bSubCnt=0
	while [ "$bSubCnt" -lt ${#MAC_SUB[*]} ] ;	do
		DIAG_Item 		${MAC_SUB[$bSubCnt]}
		DIAG_SubItem 	${MAC_SUB[$(($bSubCnt + 1))]}
		DIAG_Ret		`${MAC_SUB[$(($bSubCnt + 2))]}`
		bSubCnt=$(($bSubCnt + 3))
	done
}

DIAG_VER()
{
	#echo "DIAG_VER($*)"
	bSubCnt=0
	while [ "$bSubCnt" -lt ${#VER_SUB[*]} ] ;	do
		DIAG_Item 		${VER_SUB[$bSubCnt]}
		DIAG_SubItem 	${VER_SUB[$(($bSubCnt + 1))]}
		DIAG_Ret		`${VER_SUB[$(($bSubCnt + 2))]}`
		bSubCnt=$(($bSubCnt + 3))
	done
}

DIAG_RTC()
{
	#echo "DIAG_RTC($*)"
	bSubCnt=0
	while [ "$bSubCnt" -lt ${#RTC_SUB[*]} ] ;	do
		DIAG_Item 		${RTC_SUB[$bSubCnt]}
		DIAG_SubItem 	${RTC_SUB[$(($bSubCnt + 1))]}
		DIAG_Ret		`${RTC_SUB[$(($bSubCnt + 2))]}`
		bSubCnt=$(($bSubCnt + 3))
	done
}

DIAG_FAN()
{
	#echo "DIAG_FAN($*)"
	bSubCnt=0
	while [ "$bSubCnt" -lt ${#FAN_SUB[*]} ] ;	do
		DIAG_Item 		${FAN_SUB[$bSubCnt]}
		DIAG_SubItem 	${FAN_SUB[$(($bSubCnt + 1))]}
		DIAG_Ret		`${FAN_SUB[$(($bSubCnt + 2))]}`
		bSubCnt=$(($bSubCnt + 3))
	done
}

DIAG_ODD()
{
	#echo "DIAG_ODD($*)"
	bSubCnt=0
	sSubItem=""
	sRet=""
	while [ "$bSubCnt" -lt ${#ODD_SUB[*]} ] ;	do
		sSubItem=${sSubItem}${ODD_SUB[$(($bSubCnt + 1))]}" "
		sRet=${sRet}`${ODD_SUB[$(($bSubCnt + 2))]}`" " 
		bSubCnt=$(($bSubCnt + 3))
	done
	DIAG_Item ${ODD_SUB[0]}${1}
	DIAG_SubItem $sSubItem
	DIAG_Ret $sRet
}

DIAG_LED()
{
	#echo "DIAG_LED($*)"
	bSubCnt=0
	while [ "$bSubCnt" -lt ${#LED_SUB[*]} ] ;	do
		DIAG_Item 		${LED_SUB[$bSubCnt]}
		DIAG_SubItem 	${LED_SUB[$(($bSubCnt + 1))]}
		DIAG_Ret		`${LED_SUB[$(($bSubCnt + 2))]}`
		bSubCnt=$(($bSubCnt + 3))
	done
}

DIAG_VOL_SUB()
{
	#echo "DIAG_VOL_SUB($*)"
	bSubCnt=0
	sSubItem=""
	sRet=""
	while [ "$bSubCnt" -lt ${#VOL_SUB[*]} ] ;	do
		sSubItem=${sSubItem}${VOL_SUB[$(($bSubCnt + 1))]}" "
		sRet=${sRet}`${VOL_SUB[$(($bSubCnt + 2))]} ${1}`" " 
		bSubCnt=$(($bSubCnt + 3))
	done
	
	DIAG_Item ${VOL_SUB[0]}${1}
	DIAG_SubItem $sSubItem
	DIAG_Ret $sRet
}
#input 1 2 3 4
DIAG_BAY_SUB()
{
	#echo "DIAG_BAY_SUB($*)"
	bSubCnt=0
	sSubItem=""
	sRet=""
	DIAG_Item `BAY_ToDisplayBayName ${BAY_SUB[0]}${1}`
	BAY_IsThereHdd "Bay"${1}
	if [ $? != 0 ]; then
		sSubItem="Not detected"
		sRet="Cannot detect HDD"
	else
		while [ "$bSubCnt" -lt ${#BAY_SUB[*]} ] ;	do
			sSubItem=${sSubItem}${BAY_SUB[$(($bSubCnt + 1))]}" "
			sRet=${sRet}`${BAY_SUB[$(($bSubCnt + 2))]} ${1}`" " 
			bSubCnt=$(($bSubCnt + 3))
		done
	fi
	DIAG_SubItem $sSubItem
	DIAG_Ret $sRet
}

DIAG_VOL()
{
	#echo "DIAG_VOL($*)"
	bVolCnt=0
	while [ "$bVolCnt" -lt 4 ] ;	do
		bVolCnt=$(($bVolCnt + 1))
		sTemp=(`cat ${VOLCONF} | grep "Vol${bVolCnt}"`)
		if [ "${sTemp[1]}" != "" ]; then 
			DIAG_VOL_SUB $bVolCnt
		else
			continue
		fi
	done
}

DIAG_BAY()
{
	#echo "DIAG_BAY($*)"
	bBayCnt=5
	while [ "$bBayCnt" -gt 1 ] ;	do
		bBayCnt=$(($bBayCnt - 1))
		DIAG_BAY_SUB $bBayCnt
	done
}

DIAG_WebLog()
{
	#MSG_Once "N4B1 Diag Test..."
	MSG_Once "LG NAS Diag ..."
	
	svcpw=`cat /etc/shadow |grep svcuser: | cut -d':' -f2`
	[ ! -z "${svcpw//$/}" ] && /usr/sbin/telnetd -f /etc/issue;
	
	bWCnt=0
	DIAG_Init

	DIAG_Item 		'SVC_CODE'
	DIAG_SubItem 	'Service Code'
	FunSvc
	DIAG_Ret		"${sSvcCode}"
	SSS_SetSvcCode `printf "0x%02x" ${sEnc}` `printf "0x%02x" ${sHdd}`
	MSG_Once "${sSvcCode}"
	
		
	while [ "$bWCnt" -lt ${#DIAG_ITEM_NAME[*]} ] ;	do
		DIAG_${DIAG_ITEM_NAME[$bWCnt]}
		bWCnt=$(($bWCnt + 1))
	done
}
