#!/bin/bash
set +x

source /opt/node_type_recognize.sh
. /opt/install_os_common_func.sh
G_INSPECT_MMLPATH="/opt/huawei/snas/script/inspect_mml"
source $G_INSPECT_MMLPATH/CheckItems
source $G_INSPECT_MMLPATH/CheckRoCE
source $G_INSPECT_MMLPATH/CommonFunc.sh
CurInspectNum="158"
CurInspectFun="$(GetInspectType $CurInspectNum)"
RESULTFILE="/tmp/tmpResult${CurInspectFun}"
>"${RESULTFILE}"

LOG_FILE="/var/log/inspect.log"

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

# 返回值0、1、2、3、4分别表示通过、不通过、未完成检查、不涉及和建议优化
# RoCE网络状态检查
function CheckPCIOrderingStatus()
{
    local isPass=3
    LOG "[$FUNCNAME][${LINENO}]CheckPCIOrderingStatus start!"
    IsTSNode
    isTS=$?
    LOG "[$LINENO]IsRHNode=${isRH}, IsTSNode=${isTS}."

    # 只有ARM 需要检查，其它类型节点返回“不涉及”
    if [ ${isTS} -ne 0 ];then
        LOG "[$FUNCNAME][${LINENO}]not TS, so ‘not involve’."
        PrintRoCECheckTip "${CurInspectFun}" "${isPass}" "${RESULTFILE}" "Node is not TS, is not involved"
        PrintRoCECheckResult "${CurInspectFun}" "${isPass}" "${RESULTFILE}"
        return ${isPass}
    fi

    GetOFED
    if [ $? -ne 1 ];then
        # 后端不是CX4 Card，返回“不涉及”
        LOG "[$FUNCNAME][${LINENO}]There is no CX4 Card on the node, so ‘not involve’."
        PrintRoCECheckTip "${CurInspectFun}" "${isPass}" "${RESULTFILE}" "Node is without CX4 card, is not involved"
        PrintRoCECheckResult "${CurInspectFun}" "${isPass}" "${RESULTFILE}"
        return ${isPass}
    fi

    mst start >/dev/null 2>&1
    ls /dev/mst/ >/tmp/mst_result
    while read line;
    do
        /opt/huawei/snas/script/inspect_mml/mlxconfig -d /dev/mst/${line} -b /opt/huawei/snas/script/inspect_mml/mlxconfig_host.db q |grep PCI_WR_ORDERING  > /tmp/temp 2>&1
        mkey=$(tail -n 1 /tmp/temp | awk '{print $2}')
        if [ x${mkey} != "xforce_relax(1)" ]; then
            isPass=$(check_pass $isPass 0)
            LOG "[$FUNCNAME][${LINENO}] /dev/mst/${line} pass(${isPass})"            
            PrintRoCECheckTip "${CurInspectFun}" 0 "${RESULTFILE}" "${line} is ${mkey}"
        else
            isPass=$(check_pass $isPass 1)
            LOG "[$FUNCNAME][${LINENO}] /dev/mst/${line} not pass(${isPass})"
            PrintRoCECheckTip "${CurInspectFun}" 1 "${RESULTFILE}" "${line} is ${mkey}"            
        fi
    done</tmp/mst_result
    PrintRoCECheckResult "${CurInspectFun}" "${isPass}" "${RESULTFILE}"
    rm -f /tmp/temp
    rm -f /tmp/mst_result
    return ${isPass}
}

CheckPCIOrderingStatus
exit 0


