<?xml version="1.0" encoding="windows-1251" ?>
<document type="SelFTrendxTest" version="2.0" xmlns:m="xTest">
    <xTest type="SNMP" alias="WAN_Health_Test" TitleRus="Тест оценки 'здоровья' WAN каналов" 
            TitleEng="WAN Health Check Test" 
            TitleRootRus="Тесты оценки «здоровья» оборудования, поддерживающего SNMP" 
            TitleRootEng="SNMP Devices Performance Tests"           
            TrafficLightsName="WAN Health Check Test"
            Version="1.2">
        <Files>
            <File type="conf" name="SNMP.WAN.xTest.xml" />
            <File type="help" name="XT.SNMP.index.html" />
            <File type="dll" name="x_snmp.dll" />
        </Files>
        <Keywords>
          <Keyword>SNMP</Keyword>
          <Keyword>Cisco</Keyword>
          <Keyword>Маршрутизатор</Keyword>
          <Keyword>WAN</Keyword>
        </Keywords>

      <!--        
    $Id: SNMP.WAN.xTest.xml,v 1.1 2008/09/16 09:19:41 slw Exp $
-->

        <xTestProps>
            <AverInervDuration>60</AverInervDuration>
            <pollinterval>30</pollinterval>
            <snmp_timeout_ms>5000</snmp_timeout_ms>
            <snmp_retry_count>3</snmp_retry_count>
            <log_level_def>1</log_level_def>
            <truncate_log>1</truncate_log>
        </xTestProps>
        <VarSet>
            <!--
	Value attributes:
		usetype: "hidden" | "pure" | "discovery" | "calculated"
		proctype: "absolute" | "delta"


		OID: for scalar values ("1.3.6.1.2.1.1.1")
		ROOT_OID: for tables  ("1.3.6.1.2.1.2.2.1" - A list of interface entries.)
		COLNUM_OID:  for table values
		alias: short ascii name w/o white spaaces

		discovery_func
		work_func
		tlights_func

-->
            <tlights_func>TLights_Proc</tlights_func>
            <discovery_func>OnDiscovery</discovery_func>
            <work_func>OnDataReceived</work_func>
            <common_attribs TitleRus="Список параметров (общие):" TitleEng="Parameters List (common):" SubTitleRus="Параметр" SubTitleEng="Parameter">
                <!-- Type: "String", "Bool", "Integer", "Double", "Enum" -->
                <Attrib Type="String" TitleRus="Исключаемые типы интерфейсов (через запятую)" TitleEng="Excluded intefaces types (comma separated)" Alias="excluded_if_types">""
                </Attrib>
                <Attrib Type="Bool" TitleRus="Только активные порты" TitleEng="Up ports only" Alias="ProcessOnlyUpPorts">
                    "Yes"
                </Attrib>
                <Attrib Type="Integer" TitleRus="Максимальный WAN Port Ratio IN/OUT" TitleEng="WAN Port Ratio IN/OUT Maximum" Alias="port_ratio_in_out_maximum">
                    "1000000"
                </Attrib>
            </common_attribs>
            <ScalarValues>
                <Value usetype="calculated" proctype="absolute" alias="Availability">
				"WAN Device SNMP Availability (%)"
			</Value>
            </ScalarValues>
            
            <TableValues>
                <Table name="A list of interface entries" ROOT_OID="1.3.6.1.2.1.2.2.1">
                    <Value usetype="discovery" proctype="absolute" COLNUM_OID="2" alias="ifDescr">
					    "Interface Description"
				    </Value>
                    <Value usetype="discovery" proctype="absolute" COLNUM_OID="3" alias="ifType">
					    "The type of interface"
				    </Value>
                    <Value usetype="discovery" proctype="absolute" COLNUM_OID="8" alias="ifOperStatus">
					    "The current operational state of the interface"
				    </Value>
                    <Value usetype="hidden" proctype="delta" COLNUM_OID="10" alias="ifInOctets">
					    "In Bytes received"
				    </Value>
                    <Value usetype="hidden" proctype="delta" COLNUM_OID="16" alias="ifOutOctets">
					    "Out Bytes transmitted"
				    </Value>
                    <Value usetype="hidden" proctype="absolute" COLNUM_OID="5" alias="ifSpeed">
					    "Link Speed"
				    </Value>
                    <Value usetype="hidden" proctype="delta" COLNUM_OID="14" alias="ifInErrors">
					    "Error In"
				    </Value>
                    <Value usetype="hidden" proctype="delta" COLNUM_OID="20" alias="ifOutErrors">
					    "Error Out"
				    </Value>
                    <Value usetype="hidden" proctype="delta" COLNUM_OID="11" alias="ifInUcastPkts">
					    "Pakets In Unicast"
				    </Value>
                    <Value usetype="hidden" proctype="delta" COLNUM_OID="12" alias="ifInNUcastPkts">
					    "Pakets In Brodcast"
				    </Value>
                    <Value usetype="hidden" proctype="delta" COLNUM_OID="17" alias="ifOutUcastPkts">
					    "Pakets Out Unicast"
				    </Value>
                    <Value usetype="hidden" proctype="delta" COLNUM_OID="18" alias="ifOutNUcastPkts">
					    "Pakets Out Brodcast"
				    </Value>
                    <Value usetype="hidden" proctype="delta" COLNUM_OID="13" alias="ifInDiscards">
					    "Discarded In Pakets"
				    </Value>
                    <Value usetype="hidden" proctype="delta" COLNUM_OID="19" alias="ifOutDiscards">
					    "Discarded Out Pakets"
				    </Value>
                </Table>
            </TableValues>
        </VarSet>
        <popupdisplay>
            <!--  Function: "EventCount", "Average", "Maximum", "Minimum"  -->
            <description ru="Тест оценки 'здоровья' WAN каналов" en="WAN Health Check Test"></description>
            <display_item ru="WAN Device SNMP Availability (%)" en="WAN Device SNMP Availability (%)" alias="Availability" sign="&lt;">
			90 94 96 99
		</display_item>
        </popupdisplay>
        <Script language="VBScript">
            <!--
Dim g_dBadValue

g_dBadValue = 1.0e+308
Rem Собирать статистику только по включенным портам в момент запуска программы (1-да, только включенные; 0-нет, собирать статистику по всем портам)
ProcessOnlyUpPorts = 0

Sub OnDiscovery(ByRef snmpDev)
    Dim portTab, lportTab
    Dim sValue, TabSet, ScalarTab, sifType
    Dim TablesCount, pIndx, tIndx, EnabledPortsCount
    Dim logMessage
    Dim community, snmpTimeout, SnmpData, snmpRetCode, snmpErrText

    'On Error Resume Next

    logMessage = "+=========================================================="
    snmpDev.LogMsg(logMessage)

    logMessage = "VBscrip discovery start, ip: " & snmpDev.IpAddress & " device: " & snmpDev.DeviceName
    snmpDev.LogMsg(logMessage)


    '//Set xml config short form
    snmpDev.XmlCfgForm = 0

    '// common properties output //////////////////////////////////////////////
    Val = snmpDev.ResSet.CommonProp.Attrib("excluded_if_types").Value
    logMessage = "VB script: Common property 'excluded_if_types' = " & Val
    snmpDev.LogMsg(logMessage)
    
    l_strArr_IfTypes = GetIfTypesArr(snmpDev, Val)
    
    Val = snmpDev.ResSet.CommonProp.Attrib("ProcessOnlyUpPorts").Value
    logMessage = "VB script: Common property 'ProcessOnlyUpPorts' = " & Val
    snmpDev.LogMsg(logMessage)
    
    If Val = True Then
        ProcessOnlyUpPorts = 1
    Else
        ProcessOnlyUpPorts = 0
    End If        
    
    '//////////////////////////////////////////////////////////////////////////


    snmpDev.ResSet.ClearEvents()
    snmpDev.ResSet.ClearTrafficLights()


    Set ScalarTab = snmpDev.ScalarTable
    Set TabSet = snmpDev.TablesSet
    Set portTab = TabSet.PPortsTableByName("A list of interface entries")

    TablesCount = portTab.Count

    EnabledPortsCount = 0

    'stop
    For tIndx = 0 To TablesCount - 1
        Set lportTab = portTab.Table(tIndx)

        Set sValue = lportTab.Value("ifDescr")
        Set sifType = lportTab.Value("ifType")
        Set PortifOperStatus = lportTab.Value("ifOperStatus")
        Set ifSpeed = lportTab.Value("ifSpeed")
        Set ifInOctets = lportTab.Value("ifInOctets")
        Set ifOutOctets = lportTab.Value("ifOutOctets")
        Set ifInErrors = lportTab.Value("ifInErrors")
        Set ifOutErrors = lportTab.Value("ifOutErrors")
        Set ifInUcastPkts = lportTab.Value("ifInUcastPkts")
        Set ifOutUcastPkts = lportTab.Value("ifOutUcastPkts")
        Set ifInNUcastPkts = lportTab.Value("ifInNUcastPkts")
        Set ifOutNUcastPkts = lportTab.Value("ifOutNUcastPkts")
        Set ifInDiscards = lportTab.Value("ifInDiscards")
        Set ifOutDiscards = lportTab.Value("ifOutDiscards")
        
        
        logMessage = Chr(60) & "-" & "-" & "Port Index: " & (tIndx +1)
        snmpDev.LogMsg(logMessage)
        
        logMessage = "ifDescr: " & Chr(34) & sValue.SValue   & Chr(34)
        snmpDev.LogMsg(logMessage)
        logMessage = "ifType: " & sifType.NumericValue
        snmpDev.LogMsg(logMessage)
        logMessage = "ifOperStatus: " & PortifOperStatus.NumericValue
        snmpDev.LogMsg(logMessage)
        
        logMessage = "ifSpeed: " & ifSpeed.NumericValue
        snmpDev.LogMsg(logMessage)
        logMessage = "ifInOctets: " & ifInOctets.NumericValue
        snmpDev.LogMsg(logMessage)
        logMessage = "ifOutOctets: " & ifOutOctets.NumericValue
        snmpDev.LogMsg(logMessage)
        
        logMessage = "ifInErrors: " & ifInErrors.NumericValue
        snmpDev.LogMsg(logMessage)
        logMessage = "ifOutErrors: " & ifOutErrors.NumericValue
        snmpDev.LogMsg(logMessage)
        
        logMessage = "ifInNUcastPkts: " & ifInNUcastPkts.NumericValue
        snmpDev.LogMsg(logMessage)
        logMessage = "ifOutNUcastPkts: " & ifInNUcastPkts.NumericValue
        snmpDev.LogMsg(logMessage)

        logMessage = "ifInUcastPkts: " & ifInUcastPkts.NumericValue
        snmpDev.LogMsg(logMessage)
        logMessage = "ifOutUcastPkts: " & ifOutUcastPkts.NumericValue
        snmpDev.LogMsg(logMessage)
     
        logMessage = "ifInDiscards: " & ifInDiscards.NumericValue
        snmpDev.LogMsg(logMessage)
        logMessage = "ifOutDiscards: " & ifOutDiscards.NumericValue
        snmpDev.LogMsg(logMessage)

        If  IsPortExcluded(snmpDev, sifType.NumericValue, l_strArr_IfTypes) Then
            lportTab.Disable = True
			logMessage = " Port[" &  (tIndx+1) & "] ifDescr: " &  Chr(34) & sValue.SValue & Chr(34) & " Disabled (in excluded list)"
			snmpDev.LogMsg(logMessage)
        Else
            If ProcessOnlyUpPorts = 1 and PortifOperStatus.NumericValue <> 1 Then
	            lportTab.Disable = True
                logMessage = "Device: " & snmpDev.IpAddress & " Port[" &  (tIndx+1) & "] ifDescr: " &  Chr(34) & sValue.SValue & Chr(34) & " PortifOperStatus: " & PortifOperStatus.NumericValue & " Disabled (ifOperStatus <> 1)"
                snmpDev.LogMsg(logMessage)
            Else
                lportTab.Disable = False
                logMessage = "Device: " & snmpDev.IpAddress & " Port[" &  (tIndx+1) & "] ifDescr: " & Chr(34) &  sValue.SValue & Chr(34) &  " PortifOperStatus: " & PortifOperStatus.NumericValue & " Enabled"
                snmpDev.LogMsg(logMessage)
                
                '// Add Calculated Events
                
                '// Create tag
                l_strTag = snmpDev.IpAddress & " " & sValue.SValue
                '// Save tag in "Link Speed" tab value for future use
                ifSpeed.Tag = l_strTag
                
                '// Init counters validations
                l_bUtilValid = False
                l_bPackets = False
                l_bInUtilValid = False
                l_bOutUtilValid = False
                
                '// Utilization (%)
                If ifSpeed.NumericValue <> g_dBadValue And ifInOctets.NumericValue <> g_dBadValue Then
                    l_bInUtilValid = True
                    logMessage = "Utilization IN: is valid"
                    snmpDev.LogMsg(logMessage)
                Else 
                    logMessage = "Utilization IN: is invalid"
                    snmpDev.LogMsg(logMessage)
                End If
                
                If ifSpeed.NumericValue <> g_dBadValue And ifOutOctets.NumericValue <> g_dBadValue Then
                    l_bOutUtilValid = True
                    
                    logMessage = "Utilization OUT: is valid"
                    snmpDev.LogMsg(logMessage)
                Else
                    logMessage = "Utilization OUT: is invalid"
                    snmpDev.LogMsg(logMessage)
                End If
                
                If l_bInUtilValid = True And  l_bOutUtilValid = True Then
                    l_bUtilValid = True
                    logMessage = "Utilization Sum: is valid"
                    snmpDev.LogMsg(logMessage)
                Else
                    logMessage = "Utilization Sum: is invalid"
                    snmpDev.LogMsg(logMessage)
                End If
                
                l_strEventName = sValue.SValue & ": WAN Port Utilization IN (%)" 
                If l_bInUtilValid Then
                    l_strAlias = l_strTag & "_utilization_in" & EnabledPortsCount 
                    
                    SLAError = snmpDev.ResSet.EventAddEx(l_strEventName, l_strAlias, "", l_strTag, -1)
                    logMessage = "Add Event: " & l_strEventName
                    snmpDev.LogMsg(logMessage)
                    
                    l_strTLName_ru = sValue.SValue & ": WAN Port Utilization IN (%)"
                    l_strTLName_en = sValue.SValue & ": WAN Port Utilization IN (%)"

                    TLError = snmpDev.ResSet.AddTrafficLight(l_strAlias, l_strTLName_ru, l_strTLName_en, "Average", ">", 80.0, 65.0, 50.0, 40.0)
                    logMessage = "VB script: snmpDev.ResSets.AddTrafficLight return: " & TLError  & " ('" & snmpDev.ResSet.InternalErrorInfo & "')"
                    snmpDev.LogMsg(logMessage)
                    l_bUtilValid = True
                Else
                    logMessage = l_strEventName & ": is invalid"
                    snmpDev.LogMsg(logMessage)
                End If    

                l_strEventName = sValue.SValue & ": WAN Port Utilization OUT (%)" 
                If l_bOutUtilValid Then
                    l_strAlias = l_strTag & "_utilization_out" & EnabledPortsCount 
                    
                    SLAError = snmpDev.ResSet.EventAddEx(l_strEventName, l_strAlias, "", l_strTag, -1)
                    logMessage = "Add Event: " & l_strEventName
                    snmpDev.LogMsg(logMessage)
                    
                    l_strTLName_ru = sValue.SValue & ": WAN Port Utilization OUT (%)"
                    l_strTLName_en = sValue.SValue & ": WAN Port Utilization OUT (%)"

                    TLError = snmpDev.ResSet.AddTrafficLight(l_strAlias, l_strTLName_ru, l_strTLName_en, "Average", ">", 80.0, 65.0, 50.0, 40.0)
                    logMessage = "VB script: snmpDev.ResSets.AddTrafficLight return: " & TLError  & " ('" & snmpDev.ResSet.InternalErrorInfo & "')"
                    snmpDev.LogMsg(logMessage)
                    l_bUtilValid = True
                Else
                    logMessage = l_strEventName & ": is invalid"
                    snmpDev.LogMsg(logMessage)
                End If
                
                '// WAN Port Ratio IN/OUT Bytes 
                l_strEventName = sValue.SValue & ": WAN Port Ratio IN/OUT Bytes" 
                If l_bInUtilValid And l_bOutUtilValid And ifInOctets.NumericValue <> g_dBadValue And ifOutOctets.NumericValue <> g_dBadValue Then
                    l_strAlias = l_strTag & "_port_ratio_in_out" & EnabledPortsCount 
                    logMessage = "Add Event: " & l_strEventName
                    snmpDev.LogMsg(logMessage)
                    
                    SLAError = snmpDev.ResSet.EventAddEx(l_strEventName, l_strAlias, "", l_strTag, -1)
                Else
                    logMessage = l_strEventName & ": is invalid"
                    snmpDev.LogMsg(logMessage)
                End If
                
                '// Packets counters validation
                If ifInUcastPkts.NumericValue <> g_dBadValue And ifInNUcastPkts.NumericValue <> g_dBadValue And ifOutUcastPkts.NumericValue <> g_dBadValue And ifOutNUcastPkts.NumericValue <> g_dBadValue Then
                    l_bPackets = True
                    logMessage = "Packets: is valid"
                    snmpDev.LogMsg(logMessage)
                Else
                    logMessage = "Packets: is invalid"
                    snmpDev.LogMsg(logMessage)
                End If                    
                

                '// Broadcast Packets (%)
                l_strEventName = sValue.SValue & ": WAN NonUnicast Packets (%)" 
                If l_bUtilValid = True  And l_bPackets = True Then
                    l_strAlias = l_strTag & "_broadcast_pkts_" & EnabledPortsCount
                    
                    SLAError = snmpDev.ResSet.EventAddEx(l_strEventName, l_strAlias, "", l_strTag, -1)
                    logMessage = "Add Event: " & l_strEventName
                    snmpDev.LogMsg(logMessage)
                    
                    l_strTLName_ru = sValue.SValue & ": WAN NonUnicast Packets (%)"
                    l_strTLName_en = sValue.SValue & ": WAN NonUnicast Packets (%)"

                    TLError = snmpDev.ResSet.AddTrafficLight(l_strAlias, l_strTLName_ru, l_strTLName_en, "Average", ">", 3.0, 1.0, 0.5, 0.0)
                    logMessage = "VB script: snmpDev.ResSets.AddTrafficLight return: " & TLError  & " ('" & snmpDev.ResSet.InternalErrorInfo & "')"
                    snmpDev.LogMsg(logMessage)
                Else
                    logMessage = l_strEventName & ": is invalid"
                    snmpDev.LogMsg(logMessage)
                End If    

                '// Errors (%)
                l_strEventName = sValue.SValue & ": WAN Port Errors (%)" 
                If l_bPackets = True And ifInErrors.NumericValue <> g_dBadValue And ifOutErrors.NumericValue <> g_dBadValue Then
                    l_strAlias = l_strTag & "_errors_" & EnabledPortsCount 
                    SLAError = snmpDev.ResSet.EventAddEx(l_strEventName, l_strAlias, "", l_strTag, -1)
                    logMessage = "Add Event: " & l_strEventName
                    snmpDev.LogMsg(logMessage)

                    l_strTLName_ru = sValue.SValue & ": WAN Port Errors (%)"
                    l_strTLName_en = sValue.SValue & ": WAN Port Errors (%)"

                    TLError = snmpDev.ResSet.AddTrafficLight(l_strAlias, l_strTLName_ru, l_strTLName_en, "Maximum", ">", 0.5, 0.1, 0.05, 0.01)
                    logMessage = "VB script: snmpDev.ResSets.AddTrafficLight return: " & TLError  & " ('" & snmpDev.ResSet.InternalErrorInfo & "')"
                    snmpDev.LogMsg(logMessage)
                Else
                    logMessage = l_strEventName & ": is invalid"
                    snmpDev.LogMsg(logMessage)
                End If
                
                '// Discarded (Dropped) packets (%)
                l_strEventName = sValue.SValue & ": WAN Discarded Packets (%)"
                If l_bPackets = True And ifInDiscards.NumericValue <> g_dBadValue And ifOutDiscards.NumericValue <> g_dBadValue Then
                    l_strAlias = l_strTag & "_discards_" & EnabledPortsCount
                    SLAError = snmpDev.ResSet.EventAddEx(l_strEventName, l_strAlias, "", l_strTag, -1)
                    logMessage = "Add Event: " & l_strEventName
                    snmpDev.LogMsg(logMessage)

                    l_strTLName_ru = sValue.sValue & ": WAN Discarded Packets (%)"
                    l_strTLName_en = sValue.sValue & ": WAN Discarded Packets (%)"

                    TLError = snmpDev.ResSet.AddTrafficLight(l_strAlias, l_strTLName_ru, l_strTLName_en, "Maximum", ">", 0.1, 0.05, 0.01, 0.0)
                    logMessage = "VB script: snmpDev.ResSets.AddTrafficLight return: " & TLError  & " ('" & snmpDev.ResSet.InternalErrorInfo & "')"
                    snmpDev.LogMsg(logMessage)
                Else
                    logMessage = l_strEventName & ": is invalid"
                    snmpDev.LogMsg(logMessage)
                End If
                
                If l_bPackets = False And l_bInUtilValid = False And l_bOutUtilValid = False Then
	                lportTab.Disable = True
                    logMessage = "Device: " & snmpDev.IpAddress & " Port[" &  (tIndx+1) & "] ifDescr: " &  sValue.SValue & " PortifOperStatus: " & PortifOperStatus.NumericValue & " Disabled (No valid counters)"
                    snmpDev.LogMsg(logMessage)
                Else
                    EnabledPortsCount = EnabledPortsCount +1
                End If    
                
            End If
        End If

        If lportTab.Disable = False Then
            lportTab.PortDescription = sValue.SValue
        End If
        
        logMessage = "-" & "-" & Chr(62)
        snmpDev.LogMsg(logMessage)
    Next

    logMessage = "Enabled Ports count: " & EnabledPortsCount
    snmpDev.LogMsg(logMessage)
    
    If EnabledPortsCount = 0 Then
        snmpDev.Disable = True
    End If

    logMessage = "VBscrip dump Device Data:"
    snmpDev.LogMsg(logMessage)

    snmpDev.Dump()

    logMessage = "+=========================================================="
    snmpDev.LogMsg(logMessage)

    logMessage = "VBscrip discovery end, ip: " & snmpDev.IpAddress & " device: " & snmpDev.DeviceName
    snmpDev.LogMsg(logMessage)

End Sub


Sub OnDataReceived(ByRef snmpDev)
    
    logMessage = "+=========================================================="
    snmpDev.LogMsg(logMessage)

    logMessage = "VBscrip OnDataReceived start, ip: " & snmpDev.IpAddress & " device: " & snmpDev.DeviceName
    snmpDev.LogMsg(logMessage)


    Set ScalarTab = snmpDev.ScalarTable
    Set TabSet = snmpDev.TablesSet

    PORT_RATIO_IN_OUT_MAXIMUM = snmpDev.ResSet.CommonProp.Attrib("port_ratio_in_out_maximum").Value

    'logMessage = "VBscrip OnDataReceived: PortTab count: "& TabSet.Count
    'snmpDev.LogMsg(logMessage)

    Set portTab = TabSet.PPortsTableByName("A list of interface entries")
    TablesCount = portTab.Count
    'logMessage = "VBscrip OnDataReceived: Ports count: "& TablesCount
    'snmpDev.LogMsg(logMessage)

    'logMessage = "VBscrip OnDataReceived: BAD Data Value: " & g_dBadValue
    'snmpDev.LogMsg(logMessage)

    '// Set bad Value to all calculated Events
    ResetCalculatedEvenst(ScalarTab)


    For tIndx = 0 To TablesCount - 1
        Set TabOnPort = portTab.Table(tIndx)
        
        Set InOctets	= TabOnPort.Value("ifInOctets")
        Set OutOctets	= TabOnPort.Value("ifOutOctets")
        Set BandWith	= TabOnPort.Value("ifSpeed")
        Set PacketsInPort_u	= TabOnPort.Value("ifInUcastPkts")
        Set PacketsOutPort_u = TabOnPort.Value("ifOutUcastPkts")
        Set PacketsInPort_b = TabOnPort.Value("ifInNUcastPkts")
        Set PacketsOutPort_b = TabOnPort.Value("ifOutNUcastPkts")
        Set ErrPortIn = TabOnPort.Value("ifInErrors")
        Set ErrPortOut = TabOnPort.Value("ifOutErrors")
        Set ifInDiscards = TabOnPort.Value("ifInDiscards")
        Set ifOutDiscards = TabOnPort.Value("ifOutDiscards")
       
            
        l_strAlias = BandWith.Tag & "_utilization_in" &  tIndx
        Set UtilPortIn	= ScalarTab.Value(l_strAlias)

        l_strAlias = BandWith.Tag & "_utilization_out" &  tIndx
        Set UtilPortOut	= ScalarTab.Value(l_strAlias)

        l_strAlias = BandWith.Tag & "_broadcast_pkts_" &  tIndx
        Set BrodcastPackets = ScalarTab.Value(l_strAlias)
        
        l_strAlias = BandWith.Tag & "_errors_" &  tIndx
        Set ErrPortSum = ScalarTab.Value(l_strAlias)
        
        l_strAlias = BandWith.Tag & "_discards_" &  tIndx
        Set DiscardsPkts = ScalarTab.Value(l_strAlias)

        
        l_strAlias = BandWith.Tag & "_port_ratio_in_out" &  tIndx
        Set PortRatioInOut = ScalarTab.Value(l_strAlias)

        logMessage = "Port: " & BandWith.Tag
        snmpDev.LogMsg(logMessage)
        
     '   logMessage = "InOctets CVal[" & tIndx+1 & "]: " & InOctets.NumericValue
     '   snmpDev.LogMsg(logMessage)
     '   logMessage = "OutOctets CVal[" & tIndx+1 & "]: " & OutOctets.NumericValue
     '   snmpDev.LogMsg(logMessage)
        SetCounter UtilPortIn, 0
        SetCounter UtilPortOut, 0
        
        l_bUtilValid = False
        l_bInUtilValid = False
        l_bOutUtilValid = False
        l_bPackets = False
        l_bErrors = False
        l_bDicards = False

        If GetCounter(BandWith) = g_dBadValue Or GetCounter(InOctets) = g_dBadValue Then
            SetCounter UtilPortIn, g_dBadValue
        Else
            If BandWith.NumericValue = 0.0 Then
                SetCounter UtilPortIn, g_dBadValue
                SetCounter ErrPortSum, g_dBadValue
                SetCounter BrodcastPackets, g_dBadValue
            Else
                If UtilPortIn.NumericValue <>	 g_dBadValue Then        
                    UtilPortIn.NumericValue = (InOctets.NumericValue)/BandWith.NumericValue
                    UtilPortIn.NumericValue = UtilPortIn.NumericValue * 800.0
                    l_bInUtilValid= True
                End If
            End If
        End If

        If BandWith.NumericValue = g_dBadValue Or GetCounter(OutOctets) = g_dBadValue Then
            SetCounter UtilPortOut, g_dBadValue
        Else
            If BandWith.NumericValue = 0.0 Then
                SetCounter UtilPortOut, g_dBadValue
                SetCounter ErrPortSum, g_dBadValue
                SetCounter BrodcastPackets, g_dBadValue
            Else
                If UtilPortOut.NumericValue <>	 g_dBadValue Then        
                    UtilPortOut.NumericValue = (OutOctets.NumericValue)/BandWith.NumericValue
                    UtilPortOut.NumericValue = UtilPortOut.NumericValue * 800.0
                    l_bOutUtilValid = True
                End If
            End If
        End If
        
        If l_bInUtilValid = True And l_bOutUtilValid = True Then
            l_bUtilValid = True
            UtilTotal = UtilPortIn.NumericValue + UtilPortOut.NumericValue
        End If    
       
        If GetCounter(InOctets) = g_dBadValue Or GetCounter(OutOctets) = g_dBadValue Then
            SetCounter PortRatioInOut, g_dBadValue         
        Else
            If InOctets.NumericValue > 0 And OutOctets.NumericValue = 0 Then
                PortRatioInOut.NumericValue = PORT_RATIO_IN_OUT_MAXIMUM
            ElseIf InOctets.NumericValue = 0 And OutOctets.NumericValue = 0 Then
                PortRatioInOut.NumericValue = g_dBadValue
            Else
                PortRatioInOut.NumericValue = InOctets.NumericValue/OutOctets.NumericValue
            End If                
        End If 
        
        If l_bUtilValid = True And GetCounter(PacketsInPort_u) <> g_dBadValue And GetCounter(PacketsOutPort_u) <> g_dBadValue And GetCounter(PacketsInPort_b) <> g_dBadValue And GetCounter(PacketsOutPort_b) <> g_dBadValue Then
            l_bPackets = True
            If ErrPortIn.NumericValue <> g_dBadValue And ErrPortOut.NumericValue <> g_dBadValue Then
                l_bErrors = True
            End If
            
            If ifInDiscards.NumericValue <> g_dBadValue And ifOutDiscards.NumericValue <> g_dBadValue Then
                l_bDicards = True
            End If
            
                
        End If  

        '// Packets And Errors
        If l_bPackets = True Then

            PacketsSum = PacketsInPort_u.NumericValue + PacketsOutPort_u.NumericValue + PacketsInPort_b.NumericValue + PacketsOutPort_b.NumericValue
            If l_bErrors = True Then 
                ErrPortSum.NumericValue = ErrPortIn.NumericValue + ErrPortOut.NumericValue
                PacketsSum = PacketsSum + ErrPortSum.NumericValue
            End If


            If l_bDicards = True Then 
                DiscardsPkts.NumericValue = ifInDiscards.NumericValue + ifInDiscards.NumericValue
                PacketsSum = PacketsSum + DiscardsPkts.NumericValue
            End If

            If l_bErrors = True Then 
                If PacketsSum > 0 Then
                    ErrPortSum.NumericValue = (ErrPortSum.NumericValue * 100)/PacketsSum
                Else
                    ErrPortSum.NumericValue = 0     
                End If    
            End If

            If l_bDicards = True Then 
                If PacketsSum > 0 Then
                    DiscardsPkts.NumericValue = (DiscardsPkts.NumericValue * 100)/PacketsSum
                Else
                    DiscardsPkts.NumericValue = 0                
                End If    
            End If

                            
            If UtilTotal > 1.0 Then
                If PacketsSum > 0 Then
                    NunicastPkts = PacketsInPort_b.NumericValue + PacketsOutPort_b.NumericValue
                    BrodcastPackets.NumericValue = (NunicastPkts * 100)/PacketsSum
                Else 
                    BrodcastPackets.NumericValue = 0    
                End If    
            Else   
                ErrPortSum.NumericValue = 0
                BrodcastPackets.NumericValue = 0
                DiscardsPkts.NumericValue = 0
            End If

        End If
    Next


    logMessage = "+=========================================================="
    snmpDev.LogMsg(logMessage)

    logMessage = "VBscrip OnDataReceived end, ip: " & snmpDev.IpAddress & " device: " & snmpDev.DeviceName
    snmpDev.LogMsg(logMessage)

End Sub


Function GetIfTypesArr(ByRef snmpDev, strExclIfTypes)
    l_strArr_IfTypes = Split(strExclIfTypes, ",", -1, 1)
    l_iLenArr = UBound(l_strArr_IfTypes)
    
    For l_iIndx = 0 To l_iLenArr
        l_strArr_IfTypes(l_iIndx) = Trim(l_strArr_IfTypes(l_iIndx))
    Next

    GetIfTypesArr = l_strArr_IfTypes

End Function

Function IsPortExcluded(ByRef snmpDev, PortType, Arr_Exclude_IfTypes)
    l_iLenArr = UBound(Arr_Exclude_IfTypes)
    
    IsPortExcluded = False
    
    For l_iIndx = 0 To l_iLenArr
        If IsNumeric(Arr_Exclude_IfTypes(l_iIndx) ) Then
            If CInt(Arr_Exclude_IfTypes(l_iIndx)) = PortType Then
                IsPortExcluded = True
                Exit Function           
            End If
        End If
    Next

End Function

Sub ResetCalculatedEvenst(ByRef ScalarTab)

    l_iValCount =  ScalarTab.Count

    For l_iIndx = 0 To l_iValCount - 1
        Set SValue = ScalarTab.ValueByIndx(l_iIndx)
        SValue.NumericValue = g_dBadValue
    Next
End Sub

Sub SetCounter(ByRef ScalarVal, Value)
    If Not (ScalarVal Is Nothing) Then
        ScalarVal.NumericValue = Value   
    End If
End Sub

Function GetCounter(ByRef ScalarVal)
    l_dVal = g_dBadValue
    
    If Not (ScalarVal Is Nothing) Then
        l_dVal = ScalarVal.NumericValue
    End If    
    
    GetCounter = l_dVal
End Function
                       

--></Script>
    </xTest>
</document>
