#!/bin/bash
set +x

#检查集群节点个数
G_INSPECT_MMLPATH="/opt/huawei/snas/script/inspect_mml"
source ${G_INSPECT_MMLPATH}/CheckItems
CurInspectNum="351"
CurInspectFun="$( GetInspectType $CurInspectNum )"
RESULTFILE="/tmp/tmpResult${CurInspectFun}"
>${RESULTFILE}

source /opt/node_type_recognize.sh
ofedConfigPath="/opt/driver/ib-driver"
LOG_FILE="/var/log/inspect.log"
RepeatTimes=(1 2 3)

EXPANDERTOOL228812="/opt/hardware_firmware/rh/ses/RH228812HDD/expanderTool"
EXPANDERTOOL228825="/opt/hardware_firmware/rh/ses/RH228825HDD/expanderTool"
EXPANDERTOOL528836="/opt/huawei/snas/bin/g3Xflash"
SANS_FILE="/opt/huawei/snas/etc/snas.ini"
RH5288V5_BoardID=("c2" "cf")
RH5288_BoardID=("ca" "cb")
RH2288_BoardID=("73" "75")
TS2280_BoardID=("4d")
TS5280_BoardID=("4d" "4c")
#获取当前节点上各个固件版本的ipmitool命令
CMD_GET_BMC_VER="/usr/bin/ipmitool raw 0x30 0x90 0x08 0x00 0x01 0x00 0x0e"
CMD_GET_MAINBOARD_BIOS_VER="/usr/bin/ipmitool raw 0x30 0x90 0x08 0x00 0x06 0x00 0x0e"
CMD_GET_MAINBOARD_CPLD_VER="/usr/bin/ipmitool raw 0x30 0x90 0x08 0x00 0x02 0x00 0x0e"
CMD_GET_TS_BBU_VER="/usr/bin/ipmitool raw 0x30 0x93 0xdb 0x07 0x00 0x55 0x00 0x01 0xD0 0x00 0x0d"
CMD_GET_TS_IOB_VERSION="/usr/bin/ipmitool raw 0x30 0x93 0xdb 0x07 0x00 0x36 0x22 0x00 0x01 0x10 0x00 0x00 0x08 0x00 0x75 0x08 0x42 0x43 0x38 0x32 0x49 0x4F 0x42 0x41 0x09 0x00"

CheckVersion=$(grep "^ProductVersion" /opt/huawei/snas/script/inspect_mml/quality_inspect.ini |awk -F"=" '{print $2}')
Product_Version=$( grep -w "ExternalVersion" /opt/huawei/deploy/package/version |awk -F"=" '{print $2}' )
source /opt/node_type_recognize.sh

function LOG
{
   time=$(date)
   echo [${time}][$$][$CurInspectFun]$@ >> $LOG_FILE
}

#RH结果是从第二个字段开始取
function RHhex2ascii()
{
    local idx=0
    local INPUT=$1
    local OUTPUT=""
    for i in $INPUT ; do
        idx=$((idx+1))
        if [ $idx -gt 1 ];then
            OUTPUT=$OUTPUT`echo -e "\\x$i"`
        fi
    done
    echo "$OUTPUT"
}

#ARM结果获取不固定，按实际传参
function TShex2ascii()
{
    local idx=0
    local INPUT=$1
    local idxstart=$2
    local OUTPUT=""
    for i in $INPUT ; do
        idx=$((idx+1))
        if [ $idx -gt $idxstart ];then
            OUTPUT=$OUTPUT`echo -e "\\x$i"`
        fi
    done
    echo "$OUTPUT"
}

function getbackcpld
{
    local verioncpld=""
    local FruValue=""
    local counts=0
    local productstyle=$1
    local BackCplds=$2

    #轮询机制确定获取正确BoardID 时使用到的FruValue
    for((i=1;i<256;i++))
    do
        FruValue=`printf "0x%x" $i`
        BoardID=`ipmitool raw 0x30 0x90 0x29 $FruValue 0x2 2>/dev/null`
        if [ "$BoardID" = "" ]; then
            continue
        fi

        for item in ${BackCplds[*]}
        do
            #ipmitool命令回显第一位是空格
            if [ " $item" = "$BoardID" ]; then
               raw_version=`ipmitool raw 0x30 0x90 0x08 $FruValue 0x02 0x00 0x0e`
               version_exp=`RHhex2ascii "$raw_version"`
               version_exp=`echo $version_exp|awk -F ")" '{print $2}'`
               verioncpld="$verioncpld $version_exp"
               LOG "[FUNCTION]verioncpld=$version_exp,BoardID=$BoardID"
               counts=$((counts+1))
               break
            fi
        done
        #5288两块背板，2288一块，找到之后直接break不再继续循环
        if [ "$productstyle" = "RH5288" -o "$productstyle" = "TS5280" ] && [ "$counts" = "2" ] ; then
            break
        elif [ "$productstyle" = "RH2288" -o "$productstyle" = "TS2280" ] && [ "$counts" = "1" ]; then
            break
        fi
    done

    if [ "$verioncpld" = "" ]; then
        verioncpld=null
    fi

    if [ "$productstyle" = "RH5288" -o "$productstyle" = "TS5280" ]; then
        echo "EXP and CPLD(4U): $verioncpld"
    else
        echo "EXP and CPLD: $verioncpld"
    fi
}

#需Web界面升级的固件
function getBMC()
{
    local Des_V3_BMC_Version=$(grep "^Des_V3_BMC_Version" /opt/huawei/snas/script/inspect_mml/quality_inspect.ini |awk -F"=" '{print $2}')
    local Des_V5_BMC_Version=$(grep "^Des_V5_BMC_Version" /opt/huawei/snas/script/inspect_mml/quality_inspect.ini |awk -F"=" '{print $2}')
    local Des_TS_BMC_Version=$(grep "^Des_TS_BMC_Version" /opt/huawei/snas/script/inspect_mml/quality_inspect.ini |awk -F"=" '{print $2}')
    local version_bmc=""
    local isPass=0
    #获取BMC固件版本
    raw_version=$($CMD_GET_BMC_VER)
    raw_version_test=$( echo ${raw_version} | grep -Ev ^[0-9,a-f,' ']+$ )
    if [ -z "${raw_version}" ] || [ ! -z "${raw_version_test}" ] ; then
        version_bmc="NULL"
    else
        version_bmc=$( RHhex2ascii "$raw_version" )
    fi

    IsRHV3Node
    isRetRH3=$?
    IsRHV5Node
    isRetRH5=$?
    IsTSNode
    isRetTS=$?
    if [ "$isRetRH3" == "0" ]; then
        if [ "X${Des_V3_BMC_Version}" != "X${version_bmc}" ]; then
            isPass=1
            echo "[ERR]INFO:BMC version ${version_bmc} is not match the standard version ${Des_V3_BMC_Version}" >>${RESULTFILE} 2>&1
        fi
    elif [ "$isRetRH5" == "0" ]; then
        if [ "X${Des_V5_BMC_Version}" != "X${version_bmc}" ]; then
            isPass=1
            echo "[ERR]INFO:BMC version ${version_bmc} is not match the standard version ${Des_V5_BMC_Version}" >>${RESULTFILE} 2>&1
        fi
    elif [ "$isRetTS" == "0" ]; then
        if [ "X${Des_TS_BMC_Version}" != "X${version_bmc}" ]; then
            isPass=1
            echo "[ERR]INFO:BMC version ${version_bmc} is not match the standard version ${Des_TS_BMC_Version}" >>${RESULTFILE} 2>&1
        fi
    fi

    echo "BMC_Version:${version_bmc}"
    return ${isPass}
}

function getBIOS()
{
    local Des_V3_BIOS_Ver=$(grep "^Des_V3_BIOS_Ver" /opt/huawei/snas/script/inspect_mml/quality_inspect.ini |awk -F"=" '{print $2}')
    local Des_V5_BIOS_Ver=$(grep "^Des_V5_BIOS_Ver" /opt/huawei/snas/script/inspect_mml/quality_inspect.ini |awk -F"=" '{print $2}')
    local Des_TS_BIOS_Ver=$(grep "^Des_TS_BIOS_Ver" /opt/huawei/snas/script/inspect_mml/quality_inspect.ini |awk -F"=" '{print $2}')
    local version_bios=""
    local isPass=0

    #获取BIOS固件版本
    raw_version=$($CMD_GET_MAINBOARD_BIOS_VER)
    raw_version_test=$( echo ${raw_version} |grep -Ev ^[0-9,a-f,' ']+$ )
    if [ -z "${raw_version}" ] || [ ! -z "${raw_version_test}" ] ; then
        version_bios="NULL"
    else
        version_bios=$( RHhex2ascii "${raw_version}" )
        version_bios=$( echo ${version_bios} | awk -F ")" '{print $2}' )
    fi

    IsRHV3Node
    isRetRH3=$?
    IsRHV5Node
    isRetRH5=$?
    IsTSNode
    isRetTS=$?
    if [ "$isRetRH3" == "0" ]; then
        if [ "X${Des_V3_BIOS_Ver}" != "X${version_bios}" ]; then
            isPass=1
            echo "[ERR]INFO:BIOS version ${version_bios} is not match the standard version ${Des_V3_BIOS_Ver}" >>${RESULTFILE} 2>&1
        fi
    elif [ "$isRetRH5" == "0" ]; then
        if [ "X${Des_V5_BIOS_Ver}" != "X${version_bios}" ]; then
            isPass=1
            echo "[ERR]INFO:BIOS version ${version_bios} is not match the standard version ${Des_V5_BIOS_Ver}" >>${RESULTFILE} 2>&1
        fi
    elif [ "$isRetTS" == "0" ]; then
        if [ "X${Des_TS_BIOS_Ver}" != "X${version_bios}" ]; then
            isPass=1
            echo "[ERR]INFO:BIOS version ${version_bios} is not match the standard version ${Des_TS_BIOS_Ver}" >>${RESULTFILE} 2>&1
        fi
    fi

    echo "BIOS_Version:${version_bios}"
    return ${isPass}
}

#1.12   3.11        1.15    3.15
function getCPLD4RH()
{
    local Des_2288V3_BackCPLD_Ver=$(grep "^Des_2288V3_BackCPLD_Ver" /opt/huawei/snas/script/inspect_mml/quality_inspect.ini |awk -F"=" '{print $2}')
    local Des_5288V3_BackCPLD_Ver=$(grep "^Des_5288V3_BackCPLD_Ver" /opt/huawei/snas/script/inspect_mml/quality_inspect.ini |awk -F"=" '{print $2}')
    local Des_2288V3_MBCPLD_Ver=$(grep "^Des_2288V3_MBCPLD_Ver" /opt/huawei/snas/script/inspect_mml/quality_inspect.ini |awk -F"=" '{print $2}')
    local Des_5288V3_MBCPLD_Ver=$(grep "^Des_5288V3_MBCPLD_Ver" /opt/huawei/snas/script/inspect_mml/quality_inspect.ini |awk -F"=" '{print $2}')
    local Des_2288V5_BackCPLD_Ver=$(grep "^Des_2288V5_BackCPLD_Ver" /opt/huawei/snas/script/inspect_mml/quality_inspect.ini |awk -F"=" '{print $2}')
    local Des_5288V5_BackCPLD_Ver=$(grep "^Des_5288V5_BackCPLD_Ver" /opt/huawei/snas/script/inspect_mml/quality_inspect.ini |awk -F"=" '{print $2}')
    local Des_2288V5_MBCPLD_Ver=$(grep "^Des_2288V5_MBCPLD_Ver" /opt/huawei/snas/script/inspect_mml/quality_inspect.ini |awk -F"=" '{print $2}')
    local Des_5288V5_MBCPLD_Ver=$(grep "^Des_5288V5_MBCPLD_Ver" /opt/huawei/snas/script/inspect_mml/quality_inspect.ini |awk -F"=" '{print $2}')
    local CPLD_Version=""
    local isPass=0

    #获取主板CPLD固件版本
    raw_version=$($CMD_GET_MAINBOARD_CPLD_VER)
    raw_version_test=$( echo ${raw_version} | grep -Ev ^[0-9,a-f,' ']+$ )
    if [ -z "${raw_version}" ] || [ ! -z "${raw_version_test}" ] ; then
        version_mb_cpld="NULL"
    else
        version_mb_cpld=$( RHhex2ascii "${raw_version}" )
        version_mb_cpld=$( echo ${version_mb_cpld} | awk -F ")" '{print $2}')
    fi

    IsRH2288Node
    if [ "$?" == "0" ]; then

        #获取2288背板固件版本
        Back_CPLD=$(echo $( getbackcpld "RH2288" "${RH2288_BoardID[*]}" ) | sed "s/ $//")
        Back_CPLD_Ver=$(echo ${Back_CPLD} | awk -F":" '{print $2}' | sed "s/^ //")
        IsRHV3Node
        if [ "$?" = "0" ]; then
            if [ "X${Des_2288V3_MBCPLD_Ver}" != "X${version_mb_cpld}" ]; then
            isPass=1
            echo "[ERR]INFO:MainBoard CPLD version ${version_mb_cpld} is not match the standard version ${Des_2288V3_MBCPLD_Ver}" >>${RESULTFILE} 2>&1
            fi

            if [ "${Des_2288V3_BackCPLD_Ver}" != "${Back_CPLD_Ver}" ]; then
            isPass=1
            echo "[ERR]INFO:BackBoard CPLD version ${Back_CPLD_Ver} is not match the standard version ${Des_2288V3_BackCPLD_Ver}" >>${RESULTFILE} 2>&1
            fi
        else
            if [ "X${Des_2288V5_MBCPLD_Ver}" != "X${version_mb_cpld}" ]; then
            isPass=1
            echo "[ERR]INFO:MainBoard CPLD version ${version_mb_cpld} is not match the standard version ${Des_2288V5_MBCPLD_Ver}" >>${RESULTFILE} 2>&1
            fi

            if [ "${Des_2288V5_BackCPLD_Ver}" != "${Back_CPLD_Ver}" ]; then
            isPass=1
            echo "[ERR]INFO:BackBoard CPLD version ${Back_CPLD_Ver} is not match the standard version ${Des_2288V5_BackCPLD_Ver}" >>${RESULTFILE} 2>&1
            fi
        fi
        CPLD_Version="CPLD_Version:MB_CPLD=${version_mb_cpld},Back_CPLD=${Back_CPLD}"
        echo "${CPLD_Version}"
    else
        IsRHV3Node
        if [ "$?" == "0" ]; then
            Back_CPLD=$(echo $( getbackcpld "RH5288" "${RH5288_BoardID[*]}" ) | sed "s/ $//")
        else
            Back_CPLD=$(echo $( getbackcpld "RH5288" "${RH5288V5_BoardID[*]}" ) | sed "s/ $//")
        fi
        Back_CPLD_Ver=$(echo ${Back_CPLD} | awk -F":" '{print $2}' | sed "s/^ //")

        IsRHV3Node
        if [ "$?" = "0" ]; then
            if [ "X${Des_5288V3_MBCPLD_Ver}" != "X${version_mb_cpld}" ]; then
                isPass=1
                echo "[ERR]INFO:MainBoard CPLD version ${version_mb_cpld} is not match the standard version ${Des_5288V3_MBCPLD_Ver}" >>${RESULTFILE} 2>&1
            fi

            if [ "${Des_5288V3_BackCPLD_Ver}" != "${Back_CPLD_Ver}" ]; then
                isPass=1
                echo "[ERR]INFO:BackBoard CPLD version ${Back_CPLD_Ver} is not match the standard version ${Des_5288V3_BackCPLD_Ver}" >>${RESULTFILE} 2>&1
            fi
        else
            if [ "X${Des_5288V5_MBCPLD_Ver}" != "X${version_mb_cpld}" ]; then
                isPass=1
                echo "[ERR]INFO:MainBoard CPLD version ${version_mb_cpld} is not match the standard version ${Des_5288V5_MBCPLD_Ver}" >>${RESULTFILE} 2>&1
            fi

            if [ "${Des_5288V5_BackCPLD_Ver}" != "${Back_CPLD_Ver}" ]; then
                isPass=1
                echo "[ERR]INFO:BackBoard CPLD version ${Back_CPLD_Ver} is not match the standard version ${Des_5288V5_BackCPLD_Ver}" >>${RESULTFILE} 2>&1
            fi
        fi

        CPLD_Version="CPLD_Version:MB_CPLD=${version_mb_cpld},Back_CPLD=${Back_CPLD}"
        echo "${CPLD_Version}"
    fi
    return ${isPass}
}

function getCPLD4TS()
{
    local Des_2280TS_BackCPLD_Ver=$(grep "^Des_2280TS_BackCPLD_Ver" /opt/huawei/snas/script/inspect_mml/quality_inspect.ini |awk -F"=" '{print $2}')
    local Des_5280TS_BackCPLD_Ver=$(grep "^Des_5280TS_BackCPLD_Ver" /opt/huawei/snas/script/inspect_mml/quality_inspect.ini |awk -F"=" '{print $2}')
    local Des_2280TS_MBCPLD_Ver=$(grep "^Des_2280TS_MBCPLD_Ver" /opt/huawei/snas/script/inspect_mml/quality_inspect.ini |awk -F"=" '{print $2}')
    local Des_5280TS_MBCPLD_Ver=$(grep "^Des_5280TS_MBCPLD_Ver" /opt/huawei/snas/script/inspect_mml/quality_inspect.ini |awk -F"=" '{print $2}')
    local CPLD_Version=""
    local isPass=0

    #获取主板CPLD固件版本
    raw_version=$($CMD_GET_MAINBOARD_CPLD_VER)
    raw_version_test=$( echo ${raw_version} | grep -Ev ^[0-9,a-f,' ']+$ )
    if [ -z "${raw_version}" ] || [ ! -z "${raw_version_test}" ] ; then
        version_mb_cpld="NULL"
    else
        version_mb_cpld=$( RHhex2ascii "${raw_version}" )
        version_mb_cpld=$( echo ${version_mb_cpld} | awk -F ")" '{print $2}')
    fi

    IsTS5280Node
    if [ "$?" == "0" ]; then
        #获取5280 背板固件版本
        Back_CPLD=$(echo $( getbackcpld "TS5280" "${TS5280_BoardID[*]}" ) | sed "s/ $//")
        Back_CPLD_Ver=$(echo ${Back_CPLD} | awk -F":" '{print $2}' | sed "s/^ //")
        if [ "X${Des_5280TS_MBCPLD_Ver}" != "X${version_mb_cpld}" ]; then
            isPass=1
            echo "[ERR]INFO:MainBoard CPLD version ${version_mb_cpld} is not match the standard version ${Des_5280TS_MBCPLD_Ver}" >>${RESULTFILE} 2>&1
        fi

        if [ "${Des_5280TS_BackCPLD_Ver}" != "${Back_CPLD_Ver}" ]; then
            isPass=1
            echo "[ERR]INFO:BackBoard CPLD version ${Back_CPLD_Ver} is not match the standard version ${Des_5280TS_BackCPLD_Ver}" >>${RESULTFILE} 2>&1
        fi
        CPLD_Version="CPLD_Version:MB_CPLD=${version_mb_cpld},Back_CPLD=${Back_CPLD}"
        echo "${CPLD_Version}"
    else
        Back_CPLD=$(echo $( getbackcpld "TS2280" "${TS2280_BoardID[*]}" ) | sed "s/ $//")
        Back_CPLD_Ver=$(echo ${Back_CPLD} | awk -F":" '{print $2}' | sed "s/^ //")
        if [ "X${Des_2280TS_MBCPLD_Ver}" != "X${version_mb_cpld}" ]; then
            isPass=1
            echo "[ERR]INFO:MainBoard CPLD version ${version_mb_cpld} is not match the standard version ${Des_2280TS_MBCPLD_Ver}" >>${RESULTFILE} 2>&1
        fi

        if [ "${Des_2280TS_BackCPLD_Ver}" != "${Back_CPLD_Ver}" ]; then
            isPass=1
            echo "[ERR]INFO:BackBoard CPLD version ${Back_CPLD_Ver} is not match the standard version ${Des_2280TS_BackCPLD_Ver}" >>${RESULTFILE} 2>&1
        fi

        CPLD_Version="CPLD_Version:MB_CPLD=${version_mb_cpld},Back_CPLD=${Back_CPLD}"
        echo "${CPLD_Version}"
    fi
    return ${isPass}
}

#126,129 FirmWare：00.15.01.11 Platform version:00.11
function getSES()
{
    local Des_2288_SesVer=$(grep "^Des_2288_SesVer" /opt/huawei/snas/script/inspect_mml/quality_inspect.ini |awk -F"=" '{print $2}')
    local Des_5288_FirmVer=$(grep "^Des_5288_FirmVer" /opt/huawei/snas/script/inspect_mml/quality_inspect.ini |awk -F"=" '{print $2}')
    local Des_5288_PlatVer=$(grep "^Des_5288_PlatVer" /opt/huawei/snas/script/inspect_mml/quality_inspect.ini |awk -F"=" '{print $2}')
    local command_tool=""
    local isPass=0

    IsRH2288Node
    if [ "$?" == "0" ]; then
        devname=$(lsscsi -g |grep "Expander" |awk '{print $NF}');
        devicetype=$( grep -w "nodeType" ${SANS_FILE} | awk -F"=" '{print $2}' | sed 's/ //g')
        #12:P12E Node, 21:P12X Node, 27:F12B Node, 40:F12B-H Node.  13:P25E Node, 22:P25X Node, 28:F25B Node, 30:S25A Node, 31:S25B Node, 41:S25X Node
        if [[ "12" == "${devicetype}" || "21" == "${devicetype}" || "27" == "${devicetype}" || "40" == "${devicetype}" ]]; then
            command_tool="${EXPANDERTOOL228812}"
        elif [[ "13" == "${devicetype}" || "22" == "${devicetype}" || "28" == "${devicetype}" || "30" == "${devicetype}" || "31" == "${devicetype}" || "41" == "${devicetype}" ]]; then
            command_tool="${EXPANDERTOOL228825}"
        fi
        if [ "X" == "X${command_tool}" ]; then
            echo "SES_Version:NULL"
            isPass=1
            LOG "[${LINENO}] TOOL ${command_tool} is not exist"
            echo "[ERR]INFO:SES tool ${command_tool} is not exist,can not get SES version." >>${RESULTFILE} 2>&1
            return ${isPass}
        fi

        sesversion=$( ${command_tool} query ${devname} | grep "Image Version" | awk -F":" '{print $2}'| sed 's/ //g' )
        if [ "X${Des_2288_SesVer}" != "X${sesversion}" ]; then
            isPass=1
            echo "[ERR]INFO:SES version ${sesversion} is not match the standard version ${Des_2288_SesVer}" >>${RESULTFILE} 2>&1
            LOG "[${LINENO}] SES version ${sesversion} is not match the standard version ${Des_2288_SesVer}"
        fi
        echo "SES_Version:${sesversion}"

    else
        command_tool="${EXPANDERTOOL528836}"
        if [ ! -f "${command_tool}" ]; then
            isPass=1
            echo "SES_Version:NULL"
            echo "[ERR]INFO: The tool ${command_tool} does not exist,can not get SESVersion information,please apply the hot patch." >>${RESULTFILE} 2>&1
            return ${isPass}
        fi
        SES_Firmware=$( ${command_tool} -i 500605b0000273bf get ver | grep "Firmware" | awk -F":" '{print $2}'| sed 's/ //g' )
        SES_Platform=$( ${command_tool} -i 500605b0000273bf get ver 3 | grep "Platform Version" |awk -F":" '{print $2}' | sed 's/\t//g' )
        if [ "X${Des_5288_FirmVer}" != "X${SES_Firmware}" ]; then
            isPass=1
            echo "[ERR]INFO:SES Firmware version ${SES_Firmware} is not match the standard version ${Des_5288_FirmVer}" >>${RESULTFILE} 2>&1
        fi
        if [ "X${Des_5288_PlatVer}" != "X${SES_Platform}" ]; then
            isPass=1
            echo "[ERR]INFO:SES Firmware version ${SES_Platform} is not match the standard version ${Des_5288_PlatVer}" >>${RESULTFILE} 2>&1
            LOG "[${LINENO}] SES Firmware version ${SES_Platform} is not match the standard version ${Des_5288_PlatVer}"
        fi
        echo "SES_Version:SES_Firmware=${SES_Firmware},SES_Platform=${SES_Platform}"

    fi
    return ${isPass}
}

#获取节点上BBU的版本号
function getBBU()
{
    local version_ascii=""
    local bbuFwversion=""
    local isPass=0
    local Des_TS_BBU_Ver=$(grep "^Des_TS_BBU_Ver" /opt/huawei/snas/script/inspect_mml/quality_inspect.ini |awk -F"=" '{print $2}')

    #查询BIOS版本号,得到的是形如"80 32 2e 30 31"的十六进制的ASCII码.
    version_ascii=$($CMD_GET_TS_BBU_VER)
    if [ "X${version_ascii}" == "X" ]; then
        isPass=1
        echo "[ERR]INFO:get bbuFwversion failed." >>${RESULTFILE} 2>&1
        LOG "[${LINENO}]get bbuFwversion failed."
        return ${isPass}
    fi
    for ver in ${version_ascii[@]}
    do
        idx=$((idx+1))
        #版本号从第6~16字节,以'\0'结束
        if [ $idx -lt 6 ]; then
            continue
        fi

        local byt=$(echo -e "\x$ver")
        if [ -z $byt ]; then
            break
        fi
        bbuFwversion=${bbuFwversion}${byt}
    done

    if [ "X${Des_TS_BBU_Ver}" != "X${bbuFwversion}" ]; then
        isPass=1
        echo "[ERR]INFO:BBU version ${bbuFwversion} is not match the standard version ${Des_TS_BBU_Ver}" >>${RESULTFILE} 2>&1
        LOG "[${LINENO}] BBU version ${bbuFwversion} is not match the standard version ${Des_TS_BBU_Ver}"
    fi

    echo "BBU_Version:${bbuFwversion}"
    return ${isPass}
}

#获取节点上Iob的版本号
function getIOB()
{
    local PICMG
    local version_ascii=""
    local iobVersion=""
    local Des_TS_IOB_Ver=$(grep "^Des_TS_IOB_Ver" /opt/huawei/snas/script/inspect_mml/quality_inspect.ini |awk -F"=" '{print $2}')

    #查询BIOS版本号,得到的是形如"80 32 2e 30 31"的十六进制的ASCII码.
    version_ascii=$($CMD_GET_TS_IOB_VERSION)
    PICMG=$(echo $version_ascii | awk '{print $1}') #第一个字节为PICMG码,为0表示命令执行成功.
    if [ "$PICMG" != "db" ]; then
        isPass=1
        echo "[ERR]INFO:get iobFwversion failed." >>${RESULTFILE} 2>&1
        LOG "[${LINENO}]get iobFwversion failed., version_ascii=$version_ascii, PICMG=$PICMG"
        return ${isPass}
    fi

    LOG "[${LINENO}]version_ascii=$version_ascii"
    for ver in ${version_ascii[@]}
    do
        idx=$((idx+1))
        #版本号从第9个字节开始,以'\0'结束
        if [ $idx -le 8 ]; then
            continue
        fi

        local byt=$(echo -e "\x$ver")
        if [ -z $byt ]; then
            break
        fi
        iobVersion=${iobVersion}${byt}
    done

    if [ "X${Des_TS_IOB_Ver}" != "X${iobVersion}" ]; then
        isPass=1
        echo "[ERR]INFO:IOB version ${iobVersion} is not match the standard version ${Des_TS_IOB_Ver}" >>${RESULTFILE} 2>&1
        LOG "[${LINENO}] IOB version ${iobVersion} is not match the standard version ${Des_TS_IOB_Ver}"
    fi

    echo "IOB_Version:${iobVersion}"
    return ${isPass}
}

function getIOBCPLD()
{
    local Des_TS_IOBCPLD_Ver=$(grep "^Des_TS_IOBCPLD_Ver" /opt/huawei/snas/script/inspect_mml/quality_inspect.ini |awk -F"=" '{print $2}')
    local isPass=0
    local verioncpld=""
    local FruValue=""
    local IobCpld="69"

    for((i=1;i<256;i++))
    do
        FruValue=`printf "0x%x" $i`
        BoardID=`ipmitool raw 0x30 0x90 0x29 $FruValue 0x2 2>/dev/null`
        if [ "$BoardID" = "" ];then
            continue
        fi

            #ipmitool命令回显第一位是空格
            if [ " $IobCpld" = "$BoardID" ];then
               raw_version=`ipmitool raw 0x30 0x90 0x08 $FruValue 0x02 0x00 0x0e`
               verioncpld=`TShex2ascii "$raw_version" 6`
               LOG "[FUNCTION]verioncpld=$verioncpld,BoardID=$BoardID"
               break
            fi
    done

    if [ "$verioncpld" != "$Des_TS_IOBCPLD_Ver" ];then
        isPass=1
        echo "[ERR]INFO:IOBCPLD version ${verioncpld} is not match the standard version ${Des_TS_IOBCPLD_Ver}" >>${RESULTFILE} 2>&1
        LOG "[${LINENO}] IOBCPLD version ${verioncpld} is not match the standard version ${Des_TS_IOBCPLD_Ver}"
    fi
    echo "IOBCPLD_Version:${verioncpld}"
    return ${isPass}
}

function getNVDIMM()
{
    local Des_8G_NVDIMM_Version=$(grep "^Des_8G_NVDIMM_Version" /opt/huawei/snas/script/inspect_mml/quality_inspect.ini |awk -F"=" '{print $2}')
    local Des_16G_NVDIMM_Version=$(grep "^Des_16G_NVDIMM_Version" /opt/huawei/snas/script/inspect_mml/quality_inspect.ini |awk -F"=" '{print $2}')
    local isPass=0
    local command_tool="/usr/local/nvdimm/nvdimm"
    NVDIMM_Version=$( ${command_tool} getfwver | grep "FW Version" |awk -F":" '{print $2}' )

    IsRHV3Node
    if [ "$?" == "0" ]; then
        if [ "X${Des_8G_NVDIMM_Version}" != "X${NVDIMM_Version}" ]; then
            isPass=1
            echo "[ERR]INFO:NVDIMM version ${NVDIMM_Version} is not match the standard version ${Des_8G_NVDIMM_Version}" >>${RESULTFILE} 2>&1
            LOG "[${LINENO}] NVDIMM version ${NVDIMM_Version} is not match the standard version ${Des_8G_NVDIMM_Version}"
        fi
    else
        if [ "X${Des_16G_NVDIMM_Version}" != "X${NVDIMM_Version}" ] && [ "$(dmidecode -t17 | grep "Synchronous Non-Volatile" -C 5 | grep "Speed:" | awk -F " " '{print$2}')" != "2933" ]; then
            #如果是镁光的版本则默认通过
            isPass=1
            echo "[ERR]INFO:NVDIMM version ${NVDIMM_Version} is not match the standard version ${Des_16G_NVDIMM_Version}" >>${RESULTFILE} 2>&1
            LOG "[${LINENO}] NVDIMM version ${NVDIMM_Version} is not match the standard version ${Des_16G_NVDIMM_Version}"
        fi
    fi

    echo "NVDIMM_Version:${NVDIMM_Version}"
    return ${isPass}
}

function getSAS()
{
    local Des_SAS_FW=$(grep "^Des_SAS_FW" /opt/huawei/snas/script/inspect_mml/quality_inspect.ini |awk -F"=" '{print $2}')
    local Des_SAS_NVDATA=$(grep "^Des_SAS_NVDATA" /opt/huawei/snas/script/inspect_mml/quality_inspect.ini |awk -F"=" '{print $2}')
    local Des_SAS_x86_BIOS=$(grep "^Des_SAS_x86_BIOS" /opt/huawei/snas/script/inspect_mml/quality_inspect.ini |awk -F"=" '{print $2}')
    local Des_SAS_EFI_BIOS=$(grep "^Des_SAS_EFI_BIOS" /opt/huawei/snas/script/inspect_mml/quality_inspect.ini |awk -F"=" '{print $2}')
    local command_tool="/opt/driver/lsisas-mpt3sas-driver/sas3flash"
    local isPass=0

    SAS_FW=$( ${command_tool} -list | grep "Firmware Version" | awk -F":" '{print $2}' |sed 's/ //g' )
    if [ "X" == "X${SAS_FW}" ]; then
        SAS_FW="NULL"
    fi
    SAS_NVDATA=$( ${command_tool} -list | grep "NVDATA Version (Default)" | awk -F":" '{print $2}' |sed 's/ //g' )
    if [ "X" == "X${SAS_NVDATA}" ]; then
        SAS_NVDATA="NULL"
    fi
    SAS_x86_BIOS=$( ${command_tool} -list | grep "BIOS Version" | awk -F":" '{print $2}' |sed 's/ //g')
    if [ "X" == "X${SAS_x86_BIOS}" ]; then
        SAS_x86_BIOS="NULL"
    fi
    SAS_EFI_BIOS=$( ${command_tool} -list | grep "UEFI BSD Version" | awk -F":" '{print $2}' | sed 's/ //g' )
    if [ "X" == "X${SAS_EFI_BIOS}" ]; then
        SAS_EFI_BIOS="NULL"
    fi

    if [ "X${Des_SAS_FW}" != "X${SAS_FW}" ]; then
        isPass=1
        echo "[ERR]INFO:SAS FW version ${SAS_FW} is not match the standard version ${Des_SAS_FW}" >>${RESULTFILE} 2>&1
        LOG "[${LINENO}] SAS FW version ${SAS_FW} is not match the standard version ${Des_SAS_FW}"
    fi
    if [ "X${Des_SAS_NVDATA}" != "X${SAS_NVDATA}" ]; then
        isPass=1
        echo "[ERR]INFO:SAS NVDATA version ${SAS_NVDATA} is not match the standard version ${Des_SAS_NVDATA}" >>${RESULTFILE} 2>&1
        LOG "[${LINENO}] SAS NVDATA version ${SAS_NVDATA} is not match the standard version ${Des_SAS_NVDATA}"
    fi
    if [ "X${Des_SAS_x86_BIOS}" != "X${SAS_x86_BIOS}" ]; then
        isPass=1
        echo "[ERR]INFO:SAS x86 BIOS version ${SAS_x86_BIOS} is not match the standard version ${Des_SAS_x86_BIOS}" >>${RESULTFILE} 2>&1
        LOG "[${LINENO}] SAS x86 BIOS version ${SAS_x86_BIOS} is not match the standard version ${Des_SAS_x86_BIOS}"
    fi
    if [ "X${Des_SAS_EFI_BIOS}" != "X${SAS_EFI_BIOS}" ]; then
        isPass=1
        echo "[ERR]INFO:SAS EFI BIOS version ${SAS_EFI_BIOS} is not match the standard version ${Des_SAS_EFI_BIOS}" >>${RESULTFILE} 2>&1
        LOG "[${LINENO}] SAS EFI BIOS version ${SAS_EFI_BIOS} is not match the standard version ${Des_SAS_EFI_BIOS}"
    fi
    echo "SAS_Version:SAS_FW=${SAS_FW},SAS_NVDATA=${SAS_NVDATA},SAS_x86_BIOS=${SAS_x86_BIOS},SAS_EFI_BIOS=${SAS_EFI_BIOS}"
    return ${isPass}

}

#获取OFED版本
function GetOFEDVersion()
{
    local ofedVer="NULL"
    local tmpInfo=""
    local iRet=0
    tmpInfo=$(ofed_info -s)
    iRet=$?
    if [ $? -ne 0 ]; then
        LOG "[$LINENO]get ofed info fail,iRet=${iRet},tmpInfo=${tmpInfo}"
        echo ${ofedVer}
        return 0
    fi

    if [[ "${tmpInfo}" =~ "MLNX_OFED_LINUX-3.2" ]]; then
        ofedVer="3.2"
    elif [[ "${tmpInfo}" =~ "MLNX_OFED_LINUX-4.2" ]]; then
        ofedVer="4.2"
    elif [[ "${tmpInfo}" =~ "OFED-internal-4.4" ]]; then
        ofedVer="4.4"
    elif [[ "${tmpInfo}" =~ "OFA-LINUX-4.17" ]]; then
        ofedVer="4.17"
    else
        ofedVer="NULL"
        LOG "[$LINENO]no match ofed info,tmpInfo=${tmpInfo}"
    fi

    echo ${ofedVer}
    return 0
}

function CheckRoceIBFirmware()
{
    local mstInfo="$1"
    local idx=""
    local netType=""
    local netName=""
    local curfwVersion=""
    local tmpCardtype=""
    local flintInfo=""
    local businfo=""
    local tmpPSID=""
    local tmpinfo=""
    local linkinfo=""
    local iret=0
    local Result=""

    for idx in ${ROCE_IB_LIST[@]}; do
        #获取网口名字，businfo
        tmpinfo=$(echo "${mstInfo}" | grep -A1 "${idx}" | grep "bus:dev.fn" | awk '{print $1}' | awk -F'=' '{print $2}')
        businfo=$(echo "${tmpinfo}" | awk -F':' '{print $2 ":" $3}')
        linkinfo=$(find /sys/class/net -maxdepth 1 -type l -exec readlink -e {} \; | grep "${tmpinfo}" | head -1)
        netName=$(basename ${linkinfo})

        #获取当前网卡固件版本与PSID
        flintInfo=$(flint -d ${idx} q 2>&1)
        if [ $? -ne 0 ]; then
            echo "[ERR]INFO:BDF (${businfo}) NetName (${netName}). Get network adapter information failed." >>${RESULTFILE} 2>&1
            isPass=1
            LOG "[${LINENO}] Get network adapter information failed,idx=[${idx}],businfo:${businfo},netName:${netName},flintInfo=[${flintInfo}]"
            continue
        fi
        curfwVersion=$(echo "${flintInfo}" | grep "FW Version:" | awk '{print $NF}')
        tmpPSID=$(echo "${flintInfo}" | grep PSID | awk '{print $NF}')

        #获取网卡类型，PSID为HUA0010110034的网卡做特殊处理，看实际工作是在10g,还是25g，其他类型的依据配置文件获取
        if [ "${tmpPSID}" == "HUA0010110034" ]; then
            tmpinfo=$(ethtool "${netName}" 2>&1)
            iret=$?
            tmpCardtype=$(echo "${tmpinfo}" | grep "Speed:" | awk '{gsub("Mb/s","",$2);printf "%d",$2/1000}')
            if [ $? -eq 0 ] && [ "${tmpCardtype}" == "10" -o "${tmpCardtype}" == "25" ]; then
                netType="${tmpCardtype}g RoCE(V3)"
            else
                echo "[ERR]INFO:BDF (${businfo}) NetName (${netName}). get network adapter type failed." >>${RESULTFILE} 2>&1
                isPass=1
                LOG "[${LINENO}] cannot recognize the type of card,idx=[${idx}],PSID:${tmpPSID},tmpCardtype=[${tmpCardtype}]，iret=${iret}"
                continue
            fi
        elif [ "${tmpPSID}" == "HUA0000000001" ]; then
            #此卡为外购卡没有配套关系，不需要检查
            echo "[ERR]INFO:BDF (${businfo}) NetName (${netName}). No check is required because there is no mapping relationship." >>${RESULTFILE} 2>&1
            LOG "[${LINENO}] skip it,idx=[${idx}],PSID:${tmpPSID}"
            continue
        else
            netType=$(grep ";${tmpPSID};" "${ofedConfigPath}/ofed${OFED_VER}.conf" 2>&1 | grep -v '^#' | head -1 |awk -F';' '{print $1}')
            if [ "${netType}X" == "X" ]; then
                echo "[ERR]INFO:BDF (${businfo}) NetName (${netName}). get network adapter type failed." >>${RESULTFILE} 2>&1
                isPass=1
                LOG "[${LINENO}] cannot recognize the type of card,idx=[${idx}],PSID:${tmpPSID}"
                continue
            fi
        fi

        #拼接字符串(网卡类型;网卡PSID;网卡固件版本;OFED版本)
        tmpinfo="${netType};${tmpPSID};${curfwVersion};${OFED_VER}"
        #在配套表格中查询
        cat "${ofedConfigPath}/ofed${OFED_VER}.conf" | grep -v "^#" | grep "${tmpinfo}" >/dev/null
        iret=$?
        #判断是否与配置文件中固件配套关系匹配
        if [ ${iret} -eq 0 ]; then
            Result="Type=${netType},Version=${curfwVersion};${Result[@]}"
        else
            local Des_fwVersion=`cat "${ofedConfigPath}/ofed${OFED_VER}.conf" | grep ${tmpPSID} | grep ${OFED_VER} | grep "${netType}"| awk -F';' '{print $3}'`
            isPass=1
            echo "[ERR]INFO:NET version ${curfwVersion} is not match the standard version ${Des_fwVersion}." >>${RESULTFILE}
        fi
        LOG "[${LINENO}]tmpPSID:${tmpPSID},Type:${netType},BDF:${businfo},NetName:${netName},OFED_Version:${OFED_VER},Firmware_Version:${curfwVersion},iret=[${iret}]."
    done

    echo "Firmware_Version:${Result}"
    return ${isPass}
}

#ARMofed4.17目前不检查Firmware_Version,只检查ofed版本和网卡配套关系(ofed4.17-->Hi1822#driver: hinic)
function Checkofed_417()
{
    local ethName=$(ls /etc/sysconfig/network-scripts/ifcfg-* | grep -wv lo | sed 's/\/etc\/sysconfig\/network-scripts\/ifcfg-//' | grep -v '\.')
    local ethInfo=""
    local curfwVersion=""
    local businfo=""
    local iRet=0
    local errInfo=""
    local driver=""
    local netType=""
    local Result=""
    local isPass=0
    for item in ${ethName};do
        if [[ "${item}" =~ "NIC" ]]; then
            LOG "[$LINENO]no check nic,item=${item}"
            continue
        fi
        netName="${item}"
        ethInfo=$(ethtool -i ${item} 2>&1)
        iRet=$?
        if [ ${iRet} -ne 0 ]; then
            errInfo="INFO:NetName (${netName}). get network adapter info failed."
            LOG "[${LINENO}]INFO:NetName (${netName}). get network adapter info failed.iRet=${iRet}"
            break
        fi


        businfo=$(echo "${ethInfo}" | grep -w "bus-info" | awk -F':' '{print $3 ":" $4}')
        curfwVersion=$(echo "${ethInfo}" | grep -w "firmware-version" | awk -F':' '{sub("^[ \t]*","",$2);print $2}')
        driver=$(echo "${ethInfo}" | grep -w "driver" | awk -F':' '{sub("^[ \t]*","",$2);print $2}')

        if [ "${driver}X" = "hinicX" ]; then
            ethInfo=$(ethtool "${netName}" 2>&1)
            iRet=$?
            tmpCardtype=$(echo "${ethInfo}" | grep "Speed:" | awk '{gsub("Mb/s","",$2);printf "%d",$2/1000}')
            if [ ${iRet} -eq 0 ] && [ "${tmpCardtype}" == "10" -o "${tmpCardtype}" == "25" ]; then
                netType="${tmpCardtype}g RoCE(1822)"
            else
                errInfo="INFO:BDF (${businfo}) NetName (${netName}). get network adapter type failed."
                isPass=1
                LOG "[${LINENO}]INFO:BDF (${businfo}) NetName (${netName}). get network adapter type failed. iRet=$iRet"
                break
            fi
        else
            errInfo="INFO:BDF (${businfo}) NetName(${netName}),The OFED (${OFED_VER}) version does not match the network adapter."
            LOG "[${LINENO}]INFO:NetName (${netName}). driver=${driver},businfo=${businfo}"
            break
        fi
        Result="Type=${netType},Version=${curfwVersion};${Result[@]}"
    done

    if [ "${errInfo}X" != "X" ]; then
        isPass=1
        echo "[ERR]${errInfo}" >>${RESULTFILE}
    else
        echo "Firmware_Version:${Result}"
    fi

    return ${isPass}
}

function getIBandRoce()
{
    local ofedVersion=""
    local mstinfo=""
    local iret=0
    local IsRoceFlag=0
    local IsIBFlag=0
    local RoceorIB_Version=""

    #获取OFED版本号
    OFED_VER="$(GetOFEDVersion)"
    ofedVersion="${OFED_VER}"
    if [ "${ofedVersion}" = "NULL" ]; then
        echo "[ERR]INFO:Get ofed version failed." >>${RESULTFILE}
        isPass=1
        LOG "[$LINENO]get ofed version error"
        return 1
    fi

    #arm里面ofed4.4按照V5逻辑从配置文件ofed4.4.conf中获取信息; ofed4.17做特殊处理
    if [ "${OFED_VER}" = "4.17" ]; then
        RoceorIB_Version=$(Checkofed_417)
        if [ "$?" != 0 ]; then
            isPass=1
        fi
        echo "${RoceorIB_Version}"
        return ${isPass}
    fi

    mst start >/dev/null
    iret=$?
    if [ ${iret} -ne 0 ]; then
        echo "[ERR]INFO:Execute command (mst start) failed!" >>${RESULTFILE}
        isPass=1
        LOG "[${LINENO}]mst start exec failed,iret=$iret."
        return 1
    fi

    #列出当前系统设备上的ROCE与IB卡对应的MST设备
    mstinfo=$(mst status)
    iret=$?
    if [ ${iret} -ne 0 ]; then
        echo "[ERR]INFO:Execute command (mst status) failed!" >>${RESULTFILE}
        isPass=1
        LOG "[${LINENO}]mst status exec failed,iret=$iret."
        return 1
    fi

    ROCE_IB_LIST=$(echo "${mstinfo}" | grep -E "mt4117_pciconf|mt4099_pci_|mt4115_pciconf|mt4119_pciconf" | awk '{print $1}')
    if [ -z "${ROCE_IB_LIST}" ] ; then
        echo "[ERR]INFO:No check is required because no IB/RoCE network adapter exists." >>${RESULTFILE}
        LOG "[${LINENO}]No check is required because no IB/RoCE network adapter exists."
        return 0
    fi

    #检查配置文件是否存在
    if [ ! -f "${ofedConfigPath}/ofed${OFED_VER}.conf" ]; then
        echo "[ERR]INFO:Get network adapter information failed." >>${RESULTFILE}
        isPass=1
        LOG "[${LINENO}]Get Congfig file(${ofedConfigPath}/ofed${OFED_VER}.conf) failed"
        return 1
    fi

    RoceorIB_Version=$(CheckRoceIBFirmware "${mstinfo}")
    if [ "$?" != 0 ]; then
        isPass=1
    fi
    echo "${RoceorIB_Version}"
    return ${isPass}
}

function CheckHardwareVersion4RH()
{
    local isPass=0

    IBandRock_Version=$( getIBandRoce )
    if [ $? -ne 0 ]; then
        isPass=1
    fi

    BMC_Version=$( getBMC )
    if [ $? -ne 0 ]; then
        isPass=1
    fi

    NVDIMM_Version=$( getNVDIMM )
    if [ $? -ne 0 ]; then
        isPass=1
    fi

    SES_Version=$( getSES  )
    if [ $? -ne 0 ]; then
        isPass=1
    fi

    SAS_Version=$( getSAS )
    if [ $? -ne 0 ]; then
        isPass=1
    fi

    BIOS_Version=$( getBIOS )
    if [ $? -ne 0 ]; then
        isPass=1
    fi

    CPLD_Version=$( getCPLD4RH )
    if [ $? -ne 0 ]; then
        isPass=1
    fi

    #注意：TS和RH混合场景需保持输出的参数一致
    BBU_Version="BBU_Version:--"
    IOB_Version="IOB_Version:--"
    IOBCPLD_Version="IOBCPLD_Version:--"

    echo "${SES_Version}||${SAS_Version}||${IBandRock_Version}||${BMC_Version}||${BIOS_Version}||${CPLD_Version}||${NVDIMM_Version}||${BBU_Version}||${IOB_Version}||${IOBCPLD_Version}" >>${RESULTFILE} 2>&1
    echo "${CurInspectFun}_Pass ${isPass}" >>${RESULTFILE} 2>&1
    LOG "[$FUNCNAME]${CurInspectFun}_Pass ${isPass},Only check 7.1.0 version"
}

function CheckHardwareVersion4TS()
{
    local isPass=0

    IBandRoce_Version=$( getIBandRoce )
    if [ $? -ne 0 ]; then
        isPass=1
    fi

    BMC_Version=$( getBMC )
    if [ $? -ne 0 ]; then
        isPass=1
    fi

    BBU_Version=$( getBBU )
    if [ $? -ne 0 ]; then
        isPass=1
    fi

    IOB_Version="IOB_Version:--"
    IOBCPLD_Version="IOBCPLD_Version:--"
    IsTS5280Node
    if [ "$?" == "0" ]; then
        IOB_Version=$( getIOB )
        if [ $? -ne 0 ]; then
            isPass=1
        fi

        IOBCPLD_Version=$( getIOBCPLD )
        if [ $? -ne 0 ]; then
            isPass=1
        fi
    fi

    BIOS_Version=$( getBIOS )
    if [ $? -ne 0 ]; then
        isPass=1
    fi

    CPLD_Version=$( getCPLD4TS )
    if [ $? -ne 0 ]; then
        isPass=1
    fi

	#注意：TS和RH混合场景需保持输出的参数一致
	SES_Version="SES_Version:--"
	SAS_Version="SAS_Version:--"
	NVDIMM_Version="NVDIMM_Version:--"

    echo "${SES_Version}||${SAS_Version}||${IBandRoce_Version}||${BMC_Version}||${BIOS_Version}||${CPLD_Version}||${NVDIMM_Version}||${BBU_Version}||${IOB_Version}||${IOBCPLD_Version}" >>${RESULTFILE} 2>&1
    echo "${CurInspectFun}_Pass ${isPass}" >>${RESULTFILE} 2>&1
    LOG "[$FUNCNAME]${CurInspectFun}_Pass ${isPass},Only check 7.1.0 version"
}


function CheckHardwareVersion()
{
    local isPass=0

    #检查当前集群版本号
    if [ "X${CheckVersion}" != "X${Product_Version}" ]; then
        isPass=0
        echo "[ERR]INFO:Only check ${CheckVersion} version,Other versions of nodes are not checked." >>${RESULTFILE} 2>&1
        echo "${CurInspectFun}_Pass ${isPass}" >>${RESULTFILE} 2>&1
        LOG "[$FUNCNAME]${CurInspectFun}_Pass ${isPass},Only check ${CheckVersion} version,current version ${Product_Version}."
        exit 0
    fi

    #只检查RH和TS节点
    IsRHNode
    iRetRH=$?
    IsTSNode
    iRetTs=$?
    if [ "${iRetRH}" == "0" ]; then
        CheckHardwareVersion4RH
    elif [ "${iRetTs}" == "0" ]; then
        CheckHardwareVersion4TS
    else
        isPass=0
        echo "[ERR]INFO:Only check RH or TS Node,Other types of nodes are not checked." >>${RESULTFILE} 2>&1
        echo "${CurInspectFun}_Pass ${isPass}" >>${RESULTFILE} 2>&1
        LOG "[$FUNCNAME]${CurInspectFun}_Pass ${isPass},Only check RH or TS Node"
    fi
}

CheckHardwareVersion
exit 0


