#!/bin/bash
set +x

G_INSPECT_MMLPATH="/opt/huawei/snas/script/inspect_mml"
source $G_INSPECT_MMLPATH/CheckItems
CurInspectNum="341"
CurInspectFun="$(GetInspectType $CurInspectNum)"
RESULTFILE="${G_TMP_INSPECT_PATH}tmpResult${CurInspectFun}"
>${RESULTFILE}

CHECK_PASSED=0
CHECK_FAILED=1
isPass=0
LOGFILE="/var/log/inspect.log"
product_name=$( dmidecode -t 1 | grep "Product Name:" | awk -F: '{print $2}' | sed 's/^\s*//;s/\s*$//' )

function LOG()
{
    echo [${time}][$$][$CurInspectFun]$@ >> $LOGFILE
}

function IsRHV5Node()
{
    if [ "$product_name"X = "2288H V5"X -o "$product_name"X = "2288 V5"X -o "$product_name"X = "5288 V5"X -o "$product_name"X = "R521G10"X -o "$product_name"X = "RS221G1"X -o "$product_name"X = "2288X V5"X -o "$product_name"X = "5288X V5"X -o "$product_name"X = "DP4200"X -o "$product_name"X = "DP2200"X ] || [[ "$product_name" =~ "NW8220X" ]]; then
        return 0
    else
        return 1
    fi
}

function checkIfUpgradeInterfaceAndChipCard()
{
    local isRhV5=0
    local isRH=0
    local checkPhase="${1}"
    local fwver_V24="V2.4"
    local fwver_V26="V2.6"
    local speed=2666   #λΪMHZ

    IsRHV5Node
    isRhV5=$?

    if [ ${isRhV5} -ne 0 ]; then
        LOG "[$LINENO]The server hardware type is not V5(${product_name}),no need to check."
        echo "HardwareType:${product_name}||NvdimmFwVer:--||NvdimmSpeed:--||UpgradePrecautions:--" >> ${RESULTFILE} 2>&1
        return
    fi

    # ȡNvdimmĹ̼汾
    NvdimmFwVer=$( /usr/local/nvdimm/nvdimm getfwver 2>/dev/null | grep "The FW Version" | awk -F: '{print $2}' | sed "s/ //g" )
    if [ X"${NvdimmFwVer}" == X"" ]; then
        LOG "[$LINENO]failed to get nvdimm firmware version by cmd:/usr/local/nvdimm/nvdimm getfwver."
        NvdimmFwVer="failed to get nvdimm firmware version by cmd(/usr/local/nvdimm/nvdimm getfwver)"
        echo "[ERR]HardwareType:${product_name}||NvdimmFwVer:${NvdimmFwVer}||NvdimmSpeed:--||UpgradePrecautions:--" >> ${RESULTFILE} 2>&1
        isPass=1
        return
    fi

    if [ X"${NvdimmFwVer}" != X"${fwver_V26}" ]; then
        echo "HardwareType:${product_name}||NvdimmFwVer:${NvdimmFwVer}||NvdimmSpeed:--||UpgradePrecautions:--" >> ${RESULTFILE} 2>&1
        LOG "[$LINENO]nvdimm firmware version is:${NvdimmFwVer},not ${fwver_V26},no need to check."
        return
    fi

    # ȡNvdimmƵ
    NvdimmSpeed=$( dmidecode -t17 | grep "Synchronous Non-Volatile" -C 5 | grep "Speed:" | awk -F " " '{print$2}' )
    if [ X"${NvdimmSpeed}" == X"" ]; then
        LOG "[$LINENO]failed to get nvdimm firmware speed by cmd:dmidecode -t17 | grep \"Synchronous Non-Volatile\" -C 5 | grep \"Speed:\"."
        NvdimmSpeed="failed to get nvdimm firmware speed by cmd(dmidecode -t17)"
        echo "[ERR]HardwareType:${product_name}||NvdimmFwVer:${NvdimmFwVer}||NvdimmSpeed:${NvdimmSpeed}||UpgradePrecautions:--" >> ${RESULTFILE} 2>&1
        isPass=1
        return
    fi

    if [ X"${NvdimmSpeed}" != X"${speed}" ]; then
        LOG "[$LINENO]nvdimm firmware speed is:${NvdimmSpeed},not ${speed} MHZ,no need to check."
        echo "HardwareType:${product_name}||NvdimmFwVer:${NvdimmFwVer}||NvdimmSpeed:${NvdimmSpeed}||UpgradePrecautions:--" >> ${RESULTFILE} 2>&1
        return
    fi

    # ǰfirmware versionV2.6汾ҹ̼speed2666Ѳ첻ʾѡ"ӿڿ&оƬ"
    isPass=1
    echo "[ERR]HardwareType:${product_name}||NvdimmFwVer:${NvdimmFwVer}||NvdimmSpeed:${NvdimmSpeed}||UpgradePrecautions:during the cluster upgrade, interface card and chip card cannot be selected" >> ${RESULTFILE} 2>&1
    
    return
}

checkIfUpgradeInterfaceAndChipCard $*
echo "${CurInspectFun}_Pass ${isPass}" >> ${RESULTFILE} 2>&1

exit 0