#!/bin/bash
set +x

#
#ARP解析错误
#

G_INSPECT_MMLPATH="/opt/huawei/snas/script/inspect_mml"
source $G_INSPECT_MMLPATH/CheckItems
TMP_RESULT_FILE="/tmp/tmpfilelocalarperr"
CurInspectNum="117"
CurInspectFun="$(GetInspectType $CurInspectNum)"
RESULTFILE="/tmp/tmpResult${CurInspectFun}"
>${RESULTFILE}
LOG_FILE="/var/log/inspect.log"
CHECK_PASSED=0
CHECK_FAILED=1

ARP_ERR_MML=$G_INSPECT_MMLPATH/ShowArpErr

LOCAL_BACK_IP=""

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


#执行MML命令
function get_mml_result()
{
    source $G_INSPECT_MMLPATH/CommonFunc.sh
    LOCAL_BACK_IP=`GetLocalIp`
    if [ "${LOCAL_BACK_IP}X" == "X" ];then
        echo "[ERR]INFO:Can't get backend IP." >> ${RESULTFILE} 2>&1
        echo "${CurInspectFun}_Pass ${CHECK_FAILED}" >>${RESULTFILE} 2>&1
        LOG "[$LINENO]get local back ip failed."
        [ -f "${TMP_RESULT_FILE}" ] && rm "${TMP_RESULT_FILE}"
        exit 0;
    fi
    >${TMP_RESULT_FILE}
    ${ARP_ERR_MML} ${LOCAL_BACK_IP} > ${TMP_RESULT_FILE}
    if [ $? -ne 0 ]; then
        echo "[ERR]INFO:Failed to execute command(MmlBatch 4016 'cm arpstatus show')." >> ${RESULTFILE} 2>&1
        echo "${CurInspectFun}_Pass ${CHECK_FAILED}" >>${RESULTFILE} 2>&1
        LOG "[$LINENO]MML exec failed."
        [ -f "${TMP_RESULT_FILE}" ] && rm "${TMP_RESULT_FILE}"
        exit 0;
    fi
    return 0
}

function main()
{
    local isPass=0
    source "/opt/inspect/inspect_map.sh"

    get_mml_result

    IFS_OLD=$IFS
    IFS=$'\n'

    dos2unix -f ${TMP_RESULT_FILE} >/dev/null 2>&1
    sed -i -e 's/\x1B\[0;[3-4][0-9]m//g' -e 's/\x0D//g' -e 's/\x00//g' ${TMP_RESULT_FILE} >/dev/null 2>&1

    #解析数据
    arpinfo=""
    arpinfo=`cat $TMP_RESULT_FILE |grep 'ArpErrPort'|sed 's/^ *//g'|sed "/^$/d"`
    LOG "[$LINENO]$arpinfo"

    arperrport=""
    arperrname=""

    #没有数据错误
    if [ "$arpinfo" == "" ];then

        #显示结果
        LOG "[$LINENO]:$Result"
        echo "[ERR]INFO:Arp error port:no data" >> ${RESULTFILE} 2>&1

        #保存数据
        cat ${TMP_RESULT_FILE} >> $LOG_FILE 2>&1

        isPass=1
    else
        #没有网口解析错误数据
        arperrport=`echo $arpinfo | grep no`
        if [ "$arperrport" != "" ];then

            #显示结果
            LOG "[$LINENO]no port err:$Result"
            echo "Arp error port:none" >> ${RESULTFILE} 2>&1
        else
            #有错误的端口解析出端口名进行显示
            arperrname=`echo $arpinfo | awk '{print $2}'`

            #显示结果
            LOG "[$LINENO] have err port:$Result"
            echo "[ERR]INFO:Arp error port $arperrname" >> ${RESULTFILE} 2>&1
            isPass=1

            #保存数据
            cat ${TMP_RESULT_FILE} >> $LOG_FILE 2>&1
        fi
    fi


    IFS=$IFS_OLD

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

    return 0
}


main
[ -f "${TMP_RESULT_FILE}" ] && rm "${TMP_RESULT_FILE}"