<?xml version="1.0" encoding="windows-1251"?>
<document type="SelFTrendxTest" version="0.0" xmlns:m="xTest">
     <xTest type="SNMP" alias="snmp_ether_rmon_test" 
           TitleRus="Тест оценки 'здоровья' коммутаторов, поддерживающих RMON" 
           TitleEng="RMON Switch Performance Test" 
           TitleRootRus="Тесты оценки «здоровья» оборудования, поддерживающего SNMP" 
           TitleRootEng="SNMP Devices Performance Tests" 
           TrafficLightsName="RMON Switch Performance Test"
           Version="2.0"
           >
	<Files>
		<File type="conf" name="SNMP.RMON.xTest.xml"/>
		<File type="help" name="SNMP.RMON.xTest.chm::/SNMP.RMON.xTest.html"/>
		<File type="dll" name="x_snmp.dll"/>
	</Files>

   <Keywords>
     <Keyword>SNMP</Keyword>
     <Keyword>RMON</Keyword>     
     <Keyword>Коммутатор</Keyword>
     <Keyword>Ошибки канального уровня</Keyword>
   </Keywords>

       <xTestProps>
		<AverInervDuration>60</AverInervDuration>
		<pollinterval>28</pollinterval>
        <snmp_timeout_ms>3000</snmp_timeout_ms>
       	<snmp_retry_count>1</snmp_retry_count>
   	    <log_level_def>0</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>

		<ScalarValues>
			<Value usetype="calculated" proctype="absolute" alias="MaxUtilDevice">"RMON Maximum Port Utilization (%)"</Value>
			<Value usetype="calculated" proctype="absolute" alias="MaxBroadcastDevice">"RMON Maximum Port Broadcast Packets (%)"</Value>
			<Value usetype="calculated" proctype="absolute" alias="MaxMulticastDevice">"RMON Maximum Port Multicast Packets (%)"</Value>
			<Value usetype="calculated" proctype="absolute" alias="MaxCRCAlignErrorsDevice">"RMON Maximum Port CRC-Align Errors (%)"</Value>
			<Value usetype="calculated" proctype="absolute" alias="MaxUndersizePktsDevice">"RMON Maximum Port Undersize Packets (%)"</Value>
			<Value usetype="calculated" proctype="absolute" alias="MaxOversizePktsDevice">"RMON Maximum Port Oversize Packets (%)"</Value>
			<Value usetype="calculated" proctype="absolute" alias="MaxFragmentsDevice">"RMON Maximum Port Fragments (%)"</Value>
			<Value usetype="calculated" proctype="absolute" alias="MaxJabbersDevice">"RMON Maximum Port Jabbers (%)"</Value>
			<Value usetype="calculated" proctype="absolute" alias="MaxCollisionsDevice">"RMON Maximum Port Collisions (%)"</Value>			
			<Value usetype="calculated" proctype="absolute" alias="Availability">"RMON Device SNMP Availability (%)"</Value>
        </ScalarValues>

<TableValues>
<Table name="RMON etherStatsTable" ROOT_OID="1.3.6.1.2.1.16.1.1.1">
	<Value usetype="hidden" proctype="delta" COLNUM_OID="4" alias="etherStatsOctets">"Octets"</Value>
	<Value usetype="hidden" proctype="delta" COLNUM_OID="5" alias="etherStatsPkts">"Pkts"</Value>
	<Value usetype="hidden" proctype="delta" COLNUM_OID="6" alias="etherStatsBroadcastPkts">"BroadcastPkts"</Value>
	<Value usetype="hidden" proctype="delta" COLNUM_OID="7" alias="etherStatsMulticastPkts">"MulticastPkts"</Value>

	<Value usetype="hidden" proctype="delta" COLNUM_OID="8" alias="etherStatsCRCAlignErrors">"CRCAlignErrors"</Value>
	<Value usetype="hidden" proctype="delta" COLNUM_OID="9" alias="etherStatsUndersizePkts">"UndersizePkts"</Value>
	<Value usetype="hidden" proctype="delta" COLNUM_OID="10" alias="etherStatsOversizePkts">"OversizePkts"</Value>
	<Value usetype="hidden" proctype="delta" COLNUM_OID="11" alias="etherStatsFragments">"Fragments"</Value>
	<Value usetype="hidden" proctype="delta" COLNUM_OID="12" alias="etherStatsJabbers">"Jabbers"</Value>
	<Value usetype="hidden" proctype="delta" COLNUM_OID="13" alias="etherStatsCollisions">"Collisions"</Value>

	<Value usetype="calculated" proctype="absolute" alias="PercentMulticast">"RMON Multicast Packets (%)"</Value>
	<Value usetype="calculated" proctype="absolute" alias="PercentBroadcast">"RMON Broadcast Packets (%)"</Value>
	<Value usetype="calculated" proctype="absolute" alias="PercentUtilization">"RMON Utilization (%)"</Value>
	<Value usetype="calculated" proctype="absolute" alias="PercentCRCAlignErrors">"RMON CRC-Align Errors (%)"</Value>
	<Value usetype="calculated" proctype="absolute" alias="PercentUndersizePkts">"RMON Undersize Packets (%)"</Value>
	<Value usetype="calculated" proctype="absolute" alias="PercentOversizePkts">"RMON Oversize Packets (%)"</Value>
	<Value usetype="calculated" proctype="absolute" alias="PercentFragments">"RMON Fragments (%)"</Value>
	<Value usetype="calculated" proctype="absolute" alias="PercentJabbers">"RMON Jabbers (%)"</Value>
	<Value usetype="calculated" proctype="absolute" alias="PercentCollisions">"RMON Collisions (%)"</Value>
					
	<Value usetype="hidden" proctype="absolute" COLNUM_OID="2" alias="etherStatsDataSourceOID">"DataSourceOID"</Value>
</Table>
</TableValues>
</VarSet>

	<popupdisplay>
		<description ru="Тест оценки 'здоровья' оборудования RMON" en="RMON Ethernet Performance test"></description>
		<display_item ru="RMON Device SNMP Availability (%)" en="RMON Device SNMP Availability (%)" alias="Availability" sign="&lt;">90 94 96 99</display_item>
		<display_item ru="RMON Maximum Port Utilization (%)" en="RMON Maximum Port Utilization (%)" alias="MaxUtilDevice" sign="&gt;">40.0 35.0 30.0 25.0</display_item>
		<display_item ru="RMON Maximum Port Broadcast Packets (%)" en="RMON Maximum Port Broadcast Packets (%)" alias="MaxBroadcastDevice" sign="&gt;">8.0 7.0 6.0 5.0</display_item>
		<display_item ru="RMON Maximum Port Multicast Packets (%)" en="RMON Maximum Port Multicast Packets (%)" alias="MaxMulticastDevice" sign="&gt;">8.0 7.0 6.0 5.0</display_item>
		<display_item ru="RMON Maximum Port CRC-Align Errors (%)" en="RMON Maximum Port CRC-Align Errors (%)" alias="MaxCRCAlignErrorsDevice" sign="&gt;">0.05 0.025 0.01 0.005</display_item>
		<display_item ru="RMON Maximum Port Undersize Packets (%)" en="RMON Maximum Port Undersize Packets (%)" alias="MaxUndersizePktsDevice" sign="&gt;">0.05 0.025 0.01 0.005</display_item>
		<display_item ru="RMON Maximum Port Oversize Packets (%)" en="RMON Maximum Port Oversize Packets (%)" alias="MaxOversizePktsDevice" sign="&gt;">0.05 0.025 0.01 0.005</display_item>
		<display_item ru="RMON Maximum Port Fragments (%)" en="RMON Maximum Port Fragments (%)" alias="MaxFragmentsDevice" sign="&gt;">0.05 0.025 0.01 0.005</display_item>
		<display_item ru="RMON Maximum Port Jabbers (%)" en="RMON Maximum Port Jabbers (%)" alias="MaxJabbersDevice" sign="&gt;">0.05 0.025 0.01 0.005</display_item>
		<display_item ru="RMON Maximum Port Collisions (%)" en="RMON Maximum Port Collisions (%)" alias="MaxCollisionsDevice" sign="&gt;">10 7 4 1</display_item>		
	</popupdisplay>

<Script language="VBScript">
<!--
Dim g_dBadValue
g_dBadValue = 1.0e+308

Sub OnDiscovery(ByRef snmpDev)
    Dim portTab, lportTab, dataSrcIns, snmpErr, portDescr
    Dim sValue, TabSet, ScalarTab, sifType
    Dim TablesCount, pIndx, tIndx, EnabledPortsCount
    Dim logMessage

    'On Error Resume Next

    logMessage = "+=========================================================="
    snmpDev.LogMsg(logMessage)

    logMessage = "VBscrip discovery start, ip: " & snmpDev.IpAddress & " device: " & snmpDev.DeviceName
    snmpDev.LogMsg(logMessage)

    Set ScalarTab = snmpDev.ScalarTable
    Set TabSet = snmpDev.TablesSet
    Set portTab = TabSet.PPortsTableByName("RMON etherStatsTable")

    TablesCount = portTab.Count

    EnabledPortsCount = 0

    For tIndx = 0 To TablesCount - 1
        Set lportTab = portTab.Table(tIndx)
        Set sValue = lportTab.Value("etherStatsDataSourceOID")
        
        portinDescr = sValue.SValue
        
        lportTab.Disable = False
        EnabledPortsCount = EnabledPortsCount +1
        
        MyVar = Mid(portinDescr, 20) 
        dataSrcIns="1.3.6.1.2.1.2.2.1.2" & MyVar
        logMessage = "Instanse in DataSource: " & dataSrcIns
        snmpDev.LogMsg(logMessage)

        portDescr = snmpDev.SnmpGet(dataSrcIns, snmpErr)

        If snmpErr = 0 Then
            lportTab.PortDescription=portDescr
            logMessage = "Port Description on row: " & (tIndx+1) & " " & portDescr
            snmpDev.LogMsg(logMessage)
        Else
            lportTab.Disable = True
            logMessage = "SnmpGet Error: " & snmpDev.GetSnmpErrorText()
            snmpDev.LogMsg(logMessage)
        End If
        
    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)

    Set portTab = snmpDev.TablesSet.PPortsTableByName("RMON etherStatsTable")
    TablesCount = portTab.Count
    
	' Process scalar table data	/////////////////////////////////////////////////////////
	Set ScalarTab = snmpDev.ScalarTable
    Set MaxUtilDevice = ScalarTab.Value("MaxUtilDevice")
    Set MaxBroadcastDevice = ScalarTab.Value("MaxBroadcastDevice")
    Set MaxMulticastDevice = ScalarTab.Value("MaxMulticastDevice")
    Set MaxCRCAlignErrorsDevice = ScalarTab.Value("MaxCRCAlignErrorsDevice")
    Set MaxUndersizePktsDevice = ScalarTab.Value("MaxUndersizePktsDevice")
    Set MaxOversizePktsDevice = ScalarTab.Value("MaxOversizePktsDevice")
    Set MaxFragmentsDevice = ScalarTab.Value("MaxFragmentsDevice")
    Set MaxJabbersDevice = ScalarTab.Value("MaxJabbersDevice")                
    Set MaxCollisionsDevice = ScalarTab.Value("MaxCollisionsDevice")   

	MaxUtilDevice.NumericValue = g_dBadValue
	MaxBroadcastDevice.NumericValue = 0
	MaxMulticastDevice.NumericValue = 0
	MaxCRCAlignErrorsDevice.NumericValue = g_dBadValue
	MaxUndersizePktsDevice.NumericValue = g_dBadValue
	MaxOversizePktsDevice.NumericValue = g_dBadValue
	MaxFragmentsDevice.NumericValue = g_dBadValue
	MaxJabbersDevice.NumericValue = g_dBadValue
	MaxCollisionsDevice.NumericValue = g_dBadValue

    For tIndx = 0 To TablesCount - 1

        Set TabOnPort = portTab.Table(tIndx)
        
        Set etherStatsOctets = TabOnPort.Value("etherStatsOctets")
        Set etherStatsPkts = TabOnPort.Value("etherStatsPkts")
        Set etherStatsBroadcastPkts = TabOnPort.Value("etherStatsBroadcastPkts")
        Set etherStatsMulticastPkts = TabOnPort.Value("etherStatsMulticastPkts")
        Set etherStatsDataSourceOID = TabOnPort.Value("etherStatsDataSourceOID")
        
        If etherStatsOctets.NumericValue <> g_dBadValue and etherStatsPkts.NumericValue <> g_dBadValue Then
        
			Set PercentMulticast = TabOnPort.Value("PercentMulticast")
			Set PercentBroadcast = TabOnPort.Value("PercentBroadcast")
			Set PercentUtilization = TabOnPort.Value("PercentUtilization")
			Set PercentCRCAlignErrors = TabOnPort.Value("PercentCRCAlignErrors")
			Set PercentUndersizePkts = TabOnPort.Value("PercentUndersizePkts")
			Set PercentOversizePkts = TabOnPort.Value("PercentOversizePkts")
			Set PercentFragments = TabOnPort.Value("PercentFragments")
			Set PercentJabbers = TabOnPort.Value("PercentJabbers")
			Set PercentCollisions = TabOnPort.Value("PercentCollisions")
			
			Set etherStatsCRCAlignErrors = TabOnPort.Value("etherStatsCRCAlignErrors")
			Set etherStatsUndersizePkts = TabOnPort.Value("etherStatsUndersizePkts")
			Set etherStatsOversizePkts = TabOnPort.Value("etherStatsOversizePkts")
			Set etherStatsFragments = TabOnPort.Value("etherStatsFragments")
			Set etherStatsJabbers = TabOnPort.Value("etherStatsJabbers")
			Set etherStatsCollisions = TabOnPort.Value("etherStatsCollisions")

			If etherStatsPkts.NumericValue = 0 Then
				PercentMulticast.NumericValue = 0
				PercentBroadcast.NumericValue = 0
				PercentUtilization.NumericValue = 0
				PercentCRCAlignErrors.NumericValue = 0
				PercentUndersizePkts.NumericValue = 0
				PercentOversizePkts.NumericValue = 0
				PercentFragments.NumericValue = 0
				PercentJabbers.NumericValue = 0
				PercentCollisions.NumericValue = 0
			Else
				PercentMulticast.NumericValue = etherStatsMulticastPkts.NumericValue / etherStatsPkts.NumericValue * 100
				PercentBroadcast.NumericValue = etherStatsBroadcastPkts.NumericValue / etherStatsPkts.NumericValue * 100
				PercentCRCAlignErrors.NumericValue = TabOnPort.Value("etherStatsCRCAlignErrors").NumericValue / etherStatsPkts.NumericValue * 100
				PercentUndersizePkts.NumericValue = TabOnPort.Value("etherStatsUndersizePkts").NumericValue / etherStatsPkts.NumericValue * 100
				PercentOversizePkts.NumericValue = TabOnPort.Value("etherStatsOversizePkts").NumericValue / etherStatsPkts.NumericValue * 100
				PercentFragments.NumericValue = TabOnPort.Value("etherStatsFragments").NumericValue / etherStatsPkts.NumericValue * 100
				PercentJabbers.NumericValue = TabOnPort.Value("etherStatsJabbers").NumericValue / etherStatsPkts.NumericValue * 100
				PercentCollisions.NumericValue = TabOnPort.Value("etherStatsCollisions").NumericValue / etherStatsPkts.NumericValue * 100
			End if
			
			strPortSpeed = Mid(etherStatsDataSourceOID.SValue, 20)
			strPortSpeed = "1.3.6.1.2.1.2.2.1.5" + strPortSpeed
			PortSpeed = snmpDev.SnmpGet(strPortSpeed, snmpErr)


            'ASN_OCTETSTRING        = 4
            'ASN_INTEGER            = 2
            'ASN_TIMETICKS          = 67
            'ASN_COUNTER32          = 65
            'ASN_GAUGE32            = 66
            'ASN_UNSIGNED32         = 71

            'stroid = "1.3.6.1.2.1.1.4.0"
            'snmpData = "Admin23"
            'snmpErr = snmpDev.SnmpSend(stroid, ASN_OCTETSTRING, snmpData)

			If snmpErr = 0 And PortSpeed > 0 Then 
				PercentUtilization.NumericValue = ((64 * etherStatsPkts.NumericValue) + (8 * etherStatsOctets.NumericValue)) * 100 / PortSpeed
			Else
				PercentUtilization.NumericValue = g_dBadValue
			End If
			
			If PercentUtilization.NumericValue <> g_dBadValue Then
				If MaxUtilDevice.NumericValue = g_dBadValue Then
					MaxUtilDevice.NumericValue = PercentUtilization.NumericValue
				Else
					If MaxUtilDevice.NumericValue < PercentUtilization.NumericValue Then
						MaxUtilDevice.NumericValue = PercentUtilization.NumericValue
					End If
				End If
			End If
			
			If PercentUtilization.NumericValue > 1 and PercentUtilization.NumericValue <> g_dBadValue Then
				If MaxBroadcastDevice.NumericValue < PercentBroadcast.NumericValue or MaxBroadcastDevice.NumericValue = g_dBadValue Then
					MaxBroadcastDevice.NumericValue = PercentBroadcast.NumericValue
				End If

				If MaxMulticastDevice.NumericValue < PercentMulticast.NumericValue or MaxMulticastDevice.NumericValue = g_dBadValue Then
					MaxMulticastDevice.NumericValue = PercentMulticast.NumericValue
				End If
			End If
			
			If MaxCRCAlignErrorsDevice.NumericValue < PercentCRCAlignErrors.NumericValue or MaxCRCAlignErrorsDevice.NumericValue = g_dBadValue Then
				MaxCRCAlignErrorsDevice.NumericValue = PercentCRCAlignErrors.NumericValue
			End If

			If MaxUndersizePktsDevice.NumericValue < PercentUndersizePkts.NumericValue or MaxUndersizePktsDevice.NumericValue = g_dBadValue Then
				MaxUndersizePktsDevice.NumericValue = PercentUndersizePkts.NumericValue
			End If

			If MaxOversizePktsDevice.NumericValue < PercentOversizePkts.NumericValue or MaxOversizePktsDevice.NumericValue = g_dBadValue Then
				MaxOversizePktsDevice.NumericValue = PercentOversizePkts.NumericValue
			End If

			If MaxFragmentsDevice.NumericValue < PercentFragments.NumericValue or MaxFragmentsDevice.NumericValue = g_dBadValue Then
				MaxFragmentsDevice.NumericValue = PercentFragments.NumericValue
			End If

			If MaxJabbersDevice.NumericValue < PercentJabbers.NumericValue or MaxJabbersDevice.NumericValue = g_dBadValue Then
				MaxJabbersDevice.NumericValue = PercentJabbers.NumericValue
			End If

			If MaxCollisionsDevice.NumericValue < PercentCollisions.NumericValue or MaxCollisionsDevice.NumericValue = g_dBadValue Then
				MaxCollisionsDevice.NumericValue = PercentCollisions.NumericValue
			End If
			
			If PercentUtilization.NumericValue > 1 and PercentUtilization.NumericValue <> g_dBadValue Then
				If MaxBroadcastDevice.NumericValue < PercentBroadcast.NumericValue Then MaxBroadcastDevice.NumericValue = PercentBroadcast.NumericValue
				If MaxMulticastDevice.NumericValue < PercentMulticast.NumericValue Then MaxMulticastDevice.NumericValue = PercentMulticast.NumericValue
			End If
        End IF
	Next
End Sub

-->
</Script>
    </xTest>
</document>
