#!/bin/sh
set +x
G_MML_FILE_PATH="/opt/huawei/snas/script/inspect_mml"
source $G_MML_FILE_PATH/CheckItems
source ${G_MML_FILE_PATH}/CommonFunc.sh
CurInspectNum="213"
CurInspectFun="$(GetInspectType $CurInspectNum)"
RESULTFILE="${G_TMP_INSPECT_PATH}tmpResult${CurInspectFun}"
LOG_FILE="/var/log/inspect.log"
G_ISPASS=0
>${RESULTFILE}

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

function checkLink()
{
    local tmpfile="${G_TMP_INSPECT_PATH}tmpfileChckComLink$$.tmp"
    local localip=""
    local JavaId=""
    local iRet=0
    local isFind=0
    local lineinfo=""
    local Result=""
    local local_ip_last_digt=0
    local peer_ip_last_digit=0
    local local_ip_mod=0
    local peer_ip_mod=0
    # (˵SLOT4-0,SLOT5-0)һ㶼IPһ(SLOT4-0)ȺSLOT4-0ں˽AżIPһ(SLOT5-0)ȺSLOT5-0ڽB
    # SLOT4-0(SLOT5-0)ڽAϣڽBϣôͿܳᴩҪرע⣬Ǻ˽֮䲻ܻͨʱ򲹶ʱӰҵ
    local crossover_risk="NO"
 
    localip=`GetLocalIpNoPing`
    if [ "${localip}X" = "X" ];then
        echo "[ERR]Node:$(hostname)||INFO:Can't get backend IP." >> ${RESULTFILE}
        LOG "[$LINENO]get ip fail"
        G_ISPASS=1
        return
    fi

    cat /proc/sys/lnet/peers >${tmpfile}
    #ȡ·Ϣ
    if [ ! -s "${tmpfile}" ];then
        echo "[ERR]Node:${localip}||INFO:Can not get /proc/sys/lnet/peers information" >> ${RESULTFILE}
        LOG "[$LINENO]Can not get /proc/sys/lnet/peers information"
        G_ISPASS=1
        return
    fi
    #ݿȡнڵĺIP
    JavaId=`sqlite3 /opt/huawei/snas/etc/cm_conf.db 'select IP_ADDR from CM_NODE_IP_T where SUBNET_ID=1;' | sort|uniq`
    iRet=$?
    if [ $iRet -ne 0 ] || [ "${JavaId}X" = "X" ];then
        LOG "[$LINENO]JavaId($JavaId), ret($iRet)"
        G_ISPASS=1
        echo "[ERR]Node:${localip}||INFO:Failed to get the back ip of all node." >> ${RESULTFILE}
        return
    fi
 
    while read row
    do
        #Ҫעں(988)MONCMĳ̣Ѳ첻ע
        lineinfo=`echo $row | awk '{print $2}' | grep '4004\|4020\|4016\|988\|peernid'`
        if [ "${lineinfo}" != "" ];then
            status=`echo $row | awk '{print $4}'|sed 's/^ *//g'|sed "/^$/d"`
            tmpinfo=`echo $status | grep down`

            if [ "$status" == "NA" ]; then
                continue
            fi
            isFind=0

            if [ "$status" == "down" ] || [ "${tmpinfo}" != "" ];then
                LOG "[$LINENO]status:$status,status info:$tmpinfo"
                crossover_risk="NO"
                isFind=0
                peer_ip=`echo $row | awk '{print $2}' | sed 's/@.*$//g' |sed 's/^ *//g' |sed "/^$/d"`
                local_ip=`echo $row | awk '{print $1}' | sed 's/@.*$//g' |sed 's/^ *//g' |sed "/^$/d"`
                local_ip_last_digt=$( echo "${local_ip}" | awk -F. '{print $NF}' )
                peer_ip_last_digit=$( echo "${peer_ip}" | awk -F. '{print $NF}' )
                local_ip_mod=$( expr ${local_ip_last_digt} % 2 )
                peer_ip_mod=$( expr ${peer_ip_last_digit} % 2 )
                if [ "X${local_ip_mod}" == "X0" -o "X${local_ip_mod}" == "X1" ]
                then
                    if [ "X${local_ip_mod}" != "X${peer_ip_mod}" ]; then
                        crossover_risk="YES"
                    fi
                fi
 
                for line in $JavaId; do
                    if [ "${line}" == "${peer_ip}" ];then
                        G_ISPASS=1
                        echo "[ERR]Node:${line}||INFO:$row||CROSSOVER_FLAG:${crossover_risk}" >> ${RESULTFILE}
                        isFind=1
                        break
                    fi
                done
            fi
        fi
    done  <  ${tmpfile}

    if [ ${G_ISPASS} -eq 0 ];then
        echo "INFO:All links are OK" >> ${RESULTFILE}
    fi

    if [ -f "${tmpfile}" ];then
        rm -f ${tmpfile}
    fi
    return
}

checkLink
echo "${CurInspectFun}_Pass ${G_ISPASS}" >>${RESULTFILE}
exit 0


