-- *****************************************************************
-- NBAR Protocol Discovery MIB file.
--
-- August 2001, Richard Wellum
---
-- Copyright (c) 2001, 2002 by Cisco Systems, Inc.
-- All rights reserved.
-- *****************************************************************

CISCO-NBAR-PROTOCOL-DISCOVERY-MIB DEFINITIONS ::= BEGIN

IMPORTS
        MODULE-IDENTITY,
	OBJECT-TYPE,
       	NOTIFICATION-TYPE,	
       	Unsigned32,
       	Counter32,
       	Counter64,
       	TimeTicks
       	        FROM SNMPv2-SMI
       	MODULE-COMPLIANCE,
       	OBJECT-GROUP,
       	NOTIFICATION-GROUP
       	        FROM SNMPv2-CONF
       	TEXTUAL-CONVENTION,
       	TruthValue,
       	RowStatus
       	        FROM SNMPv2-TC
       	ifIndex, 
       	InterfaceIndex
	        FROM IF-MIB
       	ciscoMgmt
       	        FROM CISCO-SMI;

ciscoNbarProtocolDiscoveryMIB MODULE-IDENTITY
     LAST-UPDATED      "200208160000Z"
     ORGANIZATION      "Cisco Systems, Inc."
     CONTACT-INFO
         "	 Cisco Systems
	         Customer Service

	 Postal: 170 W. Tasman Drive
                 San Jose, CA  95134-1706
                 USA

	    Tel: +1 800 553-NETS

         E-mail: cs-cnpd-mib@cisco.com"

     DESCRIPTION
	 "Cisco NBAR Protocol Discovery MIB 
	 
	 NBAR - Network Based Application Recognition is
	 an intelligent classification engine that recognizes 
	 applications that are static (which use fixed TCP or
	 UDP port numbers), and stateful (which dynamically 
	 assign TCP or UDP port numbers). 
	 
	 Protocol Discovery - uses NBAR to show you the mix 
	 of applications currently running on the network. 
	 Key statistics are associated with each protocol. 
	 These statistics can be used to define traffic 
	 classes and QoS policies.
	 
	 Functionality:
	 1. To enable/disable Protocol Discovery per interface.
	 2. Display the protocols/applications which NBAR
	    currently recognizes.
	 3. To display various Protocol Discovery statistics.
	 4. A configurable top N table which lists
	    protocols using user defined criteria.
	 5. To configure notifications (traps) based 
	    on configurable statistic thresholds.
	 6. To maintain a history table of all notification 
	    events."

    REVISION	"200208160000Z"
    DESCRIPTION
	"Added comment that cnpdStatusLastUpdateTime becomes 
	zero when PD disabled.

	Added comment that during overflow in cnpdAllStatsTable, 
	the 32 bit counter not valid. There is no overflow 
	support for it. One should only use the HC (64 bit) 
	counters to get the stats in cnpdAllStatsTable
    
        Default cnpdTopNConfigStatsSelect changed from 
	'bitRateSum' to 'byteCountSum'.

	Added better rowStatus descriptions to TopNConfig and 
	ThresholdConfig tables.

	Added comment to explain what TopNSampleTime really does - 
	i.e only changes sample time for bitrate on an interface.

	Changed sizes of TopN and Threshold tables according to 
	memory requirements and recommendations from various 
	platforms.

	Added following objects to cnpdThresholdHistoryTable:
	  cnpdThresholdHistoryValue
	  cnpdThresholdHistoryType
	  cnpdThresholdHistoryProtocol
	  cnpdThresholdHistoryStatsSelect
	
	Changed reported objects in Notification Table to reflect
	changes in cnpdThresholdHistoryTable."
	 
    REVISION	"200112280000Z"
    DESCRIPTION
	"Initial version of this MIB module"
    ::= { ciscoMgmt 244 }

--
-- Textual Conventions
--
CiscoPdProtocolIndex ::= TEXTUAL-CONVENTION
    STATUS	current
    DESCRIPTION
	"An object which represents a unique 
	identifier for a protocol or application 
	which NBAR currently recognizes.
	
	The value of this object is defined in 
	the cnpdSupportedProtocolsTable."
    SYNTAX	Unsigned32
  
CiscoPdProtocolName ::=	TEXTUAL-CONVENTION
    STATUS	current
    DESCRIPTION
	"Name of an application or protocol, 
	which NBAR is capable of recognizing.
	
	For example: ftp, vdolive and citrix."
    SYNTAX	OCTET STRING (SIZE (1..255))

CiscoPdDataType ::= TEXTUAL-CONVENTION
    STATUS	current
    DESCRIPTION
	"These are the data types which NBAR
	can measure a particular protocol by.
	bitRateIn(1)      - incoming bitrate.
	bitRateOut(2)     - outgoing bitrate.
	bitRateSum(3)     - sum of incoming and 
	                    outgoing bitrate.
	byteCountIn(4)    - incoming bytecount.
	byteCountOut(5)   - outgoing bytecount.
	byteCountSum(6)   - sum of incoming and 
	                    outgoing bytecount.
	packetCountIn(7)  - incoming packetcount.
	packetCountOut(8) - outgoing packetcount.
	packetCountSum(9) - sum of incoming and 
	                    outgoing packetcount.
	UNITS:
	bitrate     - unit is kilo bits per second
	bytecount   - unit is bytes
	packetcount - unit is packets"
    SYNTAX	INTEGER 	{
	    bitRateIn		(1),
	    bitRateOut     	(2),
	    bitRateSum	   	(3),
	    byteCountIn    	(4),
	    byteCountOut   	(5),
	    byteCountSum	(6),
	    packetCountIn   	(7),
	    packetCountOut  	(8),
	    packetCountSum	(9)
	    }	
--
-- Overview of MIB Objects:
--

cnpdMIBNotifications 	
              OBJECT IDENTIFIER ::= { ciscoNbarProtocolDiscoveryMIB 0 }
cnpdMIBObjects  	
              OBJECT IDENTIFIER ::= { ciscoNbarProtocolDiscoveryMIB 1 }
cnpdMIBConformance 
              OBJECT IDENTIFIER ::= { ciscoNbarProtocolDiscoveryMIB 2 }
cnpdStatus		
              OBJECT IDENTIFIER ::= { cnpdMIBObjects 1 }
cnpdAllStats 		
              OBJECT IDENTIFIER ::= { cnpdMIBObjects 2 }
cnpdTopNConfig 		
              OBJECT IDENTIFIER ::= { cnpdMIBObjects 3 }
cnpdTopNStats 		
              OBJECT IDENTIFIER ::= { cnpdMIBObjects 4 }
cnpdThresholdConfig 	
              OBJECT IDENTIFIER ::= { cnpdMIBObjects 5 }
cnpdThresholdHistory 	
              OBJECT IDENTIFIER ::= { cnpdMIBObjects 6 }
cnpdNotificationsConfig 	
              OBJECT IDENTIFIER ::= { cnpdMIBObjects 7 }
cnpdSupportedProtocols
              OBJECT IDENTIFIER ::= { cnpdMIBObjects 8 }
cnpdMIBCompliances 
              OBJECT IDENTIFIER ::= { cnpdMIBConformance 1 }
cnpdMIBGroups      
              OBJECT IDENTIFIER ::= { cnpdMIBConformance 2 }


-- The NBAR Protocol Discovery Supported Protocols table
--
cnpdSupportedProtocolsTable OBJECT-TYPE
    SYNTAX		SEQUENCE OF CnpdSupportedProtocolsEntry
    MAX-ACCESS		not-accessible
    STATUS      	current
    DESCRIPTION
	"The Supported Protocols table lists all the 
	protocols and applications which NBAR is currently
	capable of recognizing."
    ::= { cnpdSupportedProtocols 1 }
  
cnpdSupportedProtocolsEntry OBJECT-TYPE
    SYNTAX     		CnpdSupportedProtocolsEntry
    MAX-ACCESS 		not-accessible
    STATUS     		current
    DESCRIPTION
	"A entry in the Supported Protocols table reflecting
	key information about a protocol."
    INDEX { cnpdSupportedProtocolsIndex }
    ::= { cnpdSupportedProtocolsTable 1 }
 
CnpdSupportedProtocolsEntry ::= SEQUENCE {
    cnpdSupportedProtocolsIndex	CiscoPdProtocolIndex,
    cnpdSupportedProtocolsName  CiscoPdProtocolName
    } 
 
    cnpdSupportedProtocolsIndex OBJECT-TYPE
	SYNTAX		CiscoPdProtocolIndex (1..1024)
	MAX-ACCESS 	not-accessible
	STATUS     	current
	DESCRIPTION
	    "A unique identifier of a row in this table.
	    
	    Thus it also represents a unique identifier for a
	    protocol or application which NBAR currently
	    recognizes."
	::= { cnpdSupportedProtocolsEntry 1 }
    
    cnpdSupportedProtocolsName OBJECT-TYPE
	SYNTAX    	CiscoPdProtocolName
	MAX-ACCESS	read-only
	STATUS    	current
	DESCRIPTION
	    "This object reflects the valid string of a
	    protocol or application which NBAR currently
	    recognizes."
	::= { cnpdSupportedProtocolsEntry 2 }

--
-- The NBAR Protocol Discovery Statistics group 
--
-- This group is comprised of two tables, cnpdStatusTable 
-- to enable Protocol Discovery, and 
-- cnpdAllStatsTable to store Protocol Discovery 
-- statistics.
--

cnpdStatusTable OBJECT-TYPE
    SYNTAX    	SEQUENCE OF CnpdStatusEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
	"The cnpdStatusTable is used to enable and
	disable Protocol Discovery on an interface."
    ::= { cnpdStatus 1 }

cnpdStatusEntry OBJECT-TYPE
    SYNTAX      CnpdStatusEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
	"An entry in the cnpdStatusTable contains objects
	for enabling or disabling Protocol Discovery on a
	per interface basis."
    INDEX { ifIndex }
    ::= { cnpdStatusTable 1 }

CnpdStatusEntry ::= SEQUENCE {
    cnpdStatusPdEnable  	TruthValue,
    cnpdStatusLastUpdateTime   	TimeTicks
    }

    cnpdStatusPdEnable OBJECT-TYPE
	SYNTAX      	TruthValue
	MAX-ACCESS  	read-write
	STATUS      	current
	DESCRIPTION
	    "This object is used to enable or disable 
	    Protocol Discovery on an interface. 
	    
	    If set to 'true' - Protocol Discovery is 
	    enabled on this Interface. 
	    If set to 'false' - Protocol Discovery is 
	    disabled on this Interface."
	::= { cnpdStatusEntry 1 }

    cnpdStatusLastUpdateTime OBJECT-TYPE
	SYNTAX      	TimeTicks
	MAX-ACCESS  	read-only
	STATUS      	current
	DESCRIPTION
	    "The value of sysUpTime at the time Protocol 
	    Discovery was last enabled  on an interface.
	    If the interface does not have Protocol
	    Discovery enabled this value is zero."
	::= { cnpdStatusEntry 2 }

cnpdAllStatsTable OBJECT-TYPE
    SYNTAX		SEQUENCE OF CnpdAllStatsEntry
    MAX-ACCESS  	not-accessible
    STATUS      	current
    DESCRIPTION
	"The cnpdAllStatsTable contains all the statistics
	available for all the protocols/applications currently
	recognized by NBAR Protocol Discovery for a particular 
	interface.

	In the event of an overflow, the 32 bit counters are not 
	valid. There is no overflow support."
    ::= { cnpdAllStats 1 }

cnpdAllStatsEntry OBJECT-TYPE
    SYNTAX      	CnpdAllStatsEntry
    MAX-ACCESS  	not-accessible
    STATUS      	current
    DESCRIPTION
	"An entry in the cnpdAllStatsTable table. This entry 
	contains the statistics collected on all the protocols 
	which NBAR classifies for a particular interface."
    INDEX { ifIndex, cnpdAllStatsProtocolsIndex }
    ::= { cnpdAllStatsTable 1 }

CnpdAllStatsEntry ::= SEQUENCE {
    cnpdAllStatsProtocolsIndex	CiscoPdProtocolIndex,
    cnpdAllStatsProtocolName	CiscoPdProtocolName,
    cnpdAllStatsInPkts    	Counter32,
    cnpdAllStatsOutPkts   	Counter32,
    cnpdAllStatsInBytes    	Counter32,
    cnpdAllStatsOutBytes	Counter32,
    cnpdAllStatsHCInPkts	Counter64,
    cnpdAllStatsHCOutPkts     	Counter64,
    cnpdAllStatsHCInBytes     	Counter64,
    cnpdAllStatsHCOutBytes   	Counter64,
    cnpdAllStatsInBitRate	Unsigned32,
    cnpdAllStatsOutBitRate 	Unsigned32
    }

    cnpdAllStatsProtocolsIndex OBJECT-TYPE
        SYNTAX		CiscoPdProtocolIndex (1..1024)
        MAX-ACCESS  	not-accessible
        STATUS      	current
        DESCRIPTION
	    "An object which represents a unique 
	    identifier for a protocol or application 
	    which NBAR currently recognizes.
	
	    This object is an index into the 
	    SupportedProtocolsTable where details
	    of the protocol can be found."
	::= { cnpdAllStatsEntry 1 }
        
    cnpdAllStatsProtocolName OBJECT-TYPE
	SYNTAX          CiscoPdProtocolName
        MAX-ACCESS      read-only
        STATUS          current
        DESCRIPTION
	    "Name of the application or protocol, a 
	    unique textual string, assigned in the
	    cnpdSupportedProtocolsTable."
	::= { cnpdAllStatsEntry 2 }

    cnpdAllStatsInPkts OBJECT-TYPE
        SYNTAX		Counter32
        UNITS  		"packets"
        MAX-ACCESS  	read-only
        STATUS      	current
        DESCRIPTION
	    "The packet count of inbound packets as 
	    determined by Protocol Discovery."
	::= { cnpdAllStatsEntry 3 }

    cnpdAllStatsOutPkts OBJECT-TYPE
        SYNTAX		Counter32
        UNITS  		"packets"
        MAX-ACCESS  	read-only
        STATUS      	current
        DESCRIPTION
	    "The packet count of outbound packets as 
	    determined by Protocol Discovery."
	::= { cnpdAllStatsEntry 4 }

    cnpdAllStatsInBytes OBJECT-TYPE
        SYNTAX      	Counter32
        UNITS       	"bytes"
        MAX-ACCESS  	read-only
        STATUS      	current
        DESCRIPTION
	    "The byte count of inbound octets as 
	    determined by Protocol Discovery."
	::= { cnpdAllStatsEntry 5 }

    cnpdAllStatsOutBytes OBJECT-TYPE
        SYNTAX      	Counter32
        UNITS       	"bytes"
        MAX-ACCESS  	read-only
        STATUS      	current
        DESCRIPTION
	    "The byte count of outbound octets as
	    determined by Protocol Discovery."
	::= { cnpdAllStatsEntry 6 }

    cnpdAllStatsHCInPkts OBJECT-TYPE
        SYNTAX		Counter64
        UNITS   	"packets"
        MAX-ACCESS  	read-only
        STATUS          current
        DESCRIPTION
	    "The packet count of inbound packets as 
	    determined by Protocol Discovery.
	    This is the 64-bit (High Capacity)
	    version of cnpdAllStatsInPkts."
	::= { cnpdAllStatsEntry 7 }

    cnpdAllStatsHCOutPkts OBJECT-TYPE
        SYNTAX		Counter64
        UNITS  		"packets"
        MAX-ACCESS  	read-only
        STATUS      	current
        DESCRIPTION
	    "The packet count of outbound packets as 
	    determined by Protocol Discovery.
	    This is the 64-bit (High Capacity)
	    version of cnpdAllStatsOutPkts."
	::= { cnpdAllStatsEntry 8 }

    cnpdAllStatsHCInBytes OBJECT-TYPE
        SYNTAX      	Counter64
        UNITS       	"bytes"
        MAX-ACCESS  	read-only
        STATUS      	current
        DESCRIPTION
	    "The byte count of inbound octets as 
	    determined by Protocol Discovery.
	    This is the 64-bit (High Capacity)
	    version of cnpdAllStatsInBytes."
	::= { cnpdAllStatsEntry 9 }

    cnpdAllStatsHCOutBytes OBJECT-TYPE
        SYNTAX      	Counter64
        UNITS       	"bytes"
        MAX-ACCESS  	read-only
        STATUS      	current
        DESCRIPTION
	    "The byte count of outbound octets as 
	    determined by Protocol Discovery.
	    This is the 64-bit (High Capacity)
	    version of cnpdAllStatsOutBytes."
	::= { cnpdAllStatsEntry 10 }

    cnpdAllStatsInBitRate OBJECT-TYPE
        SYNTAX		Unsigned32 (1..4294967295)
        UNITS       	"kilo bits per second"
        MAX-ACCESS  	read-only
        STATUS      	current
        DESCRIPTION
	    "The inbound bit rate as determined 
	    by Protocol Discovery."
	::= { cnpdAllStatsEntry 11 }

    cnpdAllStatsOutBitRate OBJECT-TYPE
        SYNTAX		Unsigned32 (1..4294967295)
        UNITS       	"kilo bits per second"
        MAX-ACCESS  	read-only
        STATUS      	current
        DESCRIPTION
	    "The outbound bit rate as determined 
	    by Protocol Discovery."
	::= { cnpdAllStatsEntry 12 }

-- The NBAR Protocol Discovery Top "N" Group
--
-- This group is used to prepare a list of
-- applications that top a list in order of
-- bandwidth used, over an interval specified
-- by the management station.
-- 

cnpdTopNConfigTable OBJECT-TYPE
    SYNTAX 		SEQUENCE OF CnpdTopNConfigEntry
    MAX-ACCESS 		not-accessible
    STATUS 		current
    DESCRIPTION
	"The cnpdTopNConfigTable is used to configure
	cnpdTopNStatsTable's."
    ::= { cnpdTopNConfig 1 }

cnpdTopNConfigEntry OBJECT-TYPE
    SYNTAX     		CnpdTopNConfigEntry
    MAX-ACCESS 		not-accessible
    STATUS     		current
    DESCRIPTION
	"This entry provides the objects to configure and thus
	initiate the generation of a cnpdTopNStatsTable.."
    INDEX { cnpdTopNConfigIndex }
    ::= { cnpdTopNConfigTable 1 }

CnpdTopNConfigEntry ::= SEQUENCE {
    cnpdTopNConfigIndex      		Unsigned32,
    cnpdTopNConfigIfIndex 		InterfaceIndex,
    cnpdTopNConfigStatsSelect   	CiscoPdDataType,
    cnpdTopNConfigSampleTime		Unsigned32,
    cnpdTopNConfigRequestedSize 	Unsigned32,
    cnpdTopNConfigGrantedSize   	Unsigned32,
    cnpdTopNConfigTime  		TimeTicks,
    cnpdTopNConfigStatus  		RowStatus
    }
	
    cnpdTopNConfigIndex OBJECT-TYPE
	SYNTAX 		Unsigned32 (1..50)
	MAX-ACCESS 	not-accessible
	STATUS 		current
	DESCRIPTION
	    "A monotonically increasing integer which
	    uniquely identifies a cnpdTopNConfigEntry 
	    in the cnpdTopNConfigTable."
	::= { cnpdTopNConfigEntry 1 }

    cnpdTopNConfigIfIndex OBJECT-TYPE
	SYNTAX 		InterfaceIndex
	MAX-ACCESS 	read-create
	STATUS 		current
	DESCRIPTION
	    "This object allows the management station
	    to select the interface, which Protocol Discovery
	    is running on, to be used to create this 
	    cnpdTopNConfigEntry."

	::= { cnpdTopNConfigEntry 2 }

    cnpdTopNConfigStatsSelect OBJECT-TYPE
	SYNTAX		CiscoPdDataType	
	MAX-ACCESS 	read-create
	STATUS 		current
	DESCRIPTION
	    "This object allows the management station to
	    select the statistic used to base the order
	    of the top-n table on.

	    For example: a cnpdTopNConfigStatsSelect of
	    bitRateSum means order this table based
	    on each applications/protocols combined
	    in and out bitrate."
	DEFVAL { byteCountSum }	
	::= { cnpdTopNConfigEntry 3 }

    cnpdTopNConfigSampleTime OBJECT-TYPE
	SYNTAX 		Unsigned32 (1..2048)
        UNITS       	"seconds"
	MAX-ACCESS 	read-create
	STATUS 		current
	DESCRIPTION
	    "If the cnpdTopNConfigStatsSelect is
	    bitRateIn, bitRateOut or bitRateSum, then
	    this value is the interval in seconds that 
	    the bitrate is sampled.

	    This has no effect if the cnpdTopNConfigStatsSelect
	    is byte or packet based.

	    When this object is modified by the management 
	    station, a new sample period is started regardless
	    of whether the original cnpdTopNConfigSampleTime
	    was finished."
	DEFVAL { 10 }
	::= { cnpdTopNConfigEntry 4 }

    cnpdTopNConfigRequestedSize OBJECT-TYPE
	SYNTAX 		Unsigned32 (1..500)
	MAX-ACCESS 	read-create
	STATUS 		current
	DESCRIPTION
	    "The requested size of the associated 
	    cnpdTopNStatsTable entry.
	    
	    For example a cnpdTopNConfigRequestedSize of
	    20 indicates the management station wants
	    to create an associated  cnpdTopNStatsTable 
	    entry of 20 protocol/application's"
	DEFVAL { 10 }
	::= { cnpdTopNConfigEntry 5 }

    cnpdTopNConfigGrantedSize OBJECT-TYPE
	SYNTAX 		Unsigned32 (1..500)
	MAX-ACCESS 	read-only
	STATUS 		current
	DESCRIPTION
	    "The actual size of the associated 	
	    cnpdTopNStatsTable entry.

	    The reason this may differ from 
	    cnpdTopNConfigRequestedSize is because a 
	    management station may request a number of 
	    protocols that is greater than the number of 
	    protocols actually found by Protocol Discovery."
	::= { cnpdTopNConfigEntry 6 }

    cnpdTopNConfigTime 	OBJECT-TYPE
	SYNTAX 		TimeTicks
	MAX-ACCESS 	read-only
	STATUS 		current
	DESCRIPTION
	    "The value of sysUpTime when the associated
 	    cnpdTopNStatsTable entry was created."
	::= { cnpdTopNConfigEntry 7 }

    cnpdTopNConfigStatus  OBJECT-TYPE
	SYNTAX      	RowStatus
	MAX-ACCESS  	read-create
	STATUS      	current
	DESCRIPTION
	    "This object is used to create or delete 
	    the row entry in cnpdTopNConfigTable.

	    When creating a row entry the management
	    station is required to specify a value
	    for cnpdTopNConfigIfIndex only.

	    'notReady' means that a row exists but 
	    either it has no valid IfIndex or it has 
	    not been set to createAndGo or active.

	    'active' means that a createAndGo or active 
	    has been issued, AND a valid ifIndex exists. 
	    Therefore if a row is 'active' it means a 
	    TopNStats entry has been generated.

	    If you set an 'active' row to createAndWait 
	    it will get the status 'notReady'. 

	    If you set any row to 'notReady' - it will go 
	    to the 'notReadystate'.

	    If you set any row to 'notInService' - it will 
	    go to the 'notInService' state and the corresponding 
	    TopNStatsEntry will be deleted.

	    The same TopNConfig entry can be re-used without 
	    changes by setting it to 'active'. The corresponding 
	    TopStatsTable entry will be regenerated. This can 
	    be used by the NMS to poll a particular TopNConfig 
	    Entry.

	    Changes to an existing TopNConfig entry can be made
	    by setting the status to 'createAndWait' and changing
	    the necessary objects. Setting it to 'createAndGo' or
	    'active' will cause the corresponding TopNStats entry
	    to be regenerated."
	::= { cnpdTopNConfigEntry 8 }

cnpdTopNStatsTable OBJECT-TYPE
    SYNTAX 		SEQUENCE OF CnpdTopNStatsEntry
    MAX-ACCESS 		not-accessible
    STATUS 		current
    DESCRIPTION
	"A cnpdTopNStatsTable describes an ordered
	list of protocols."
    ::= { cnpdTopNStats 1 }

cnpdTopNStatsEntry OBJECT-TYPE
    SYNTAX 		CnpdTopNStatsEntry
    MAX-ACCESS 		not-accessible
    STATUS 		current
    DESCRIPTION
	"This entry is used to store a set of objects which 
	describe a cnpdTopNStatsTable. A cnpdTopNStatsTable 
	is a number of protocols and statistics sorted 
	according to the criteria in the associated
	cnpdTopNConfigEntry.

	Therefore a cnpdTopNStatsTable can differ in content 
	and size according to what was configured in the associated
	cnpdTopNConfigTableEntry."
    INDEX { cnpdTopNConfigIndex, cnpdTopNStatsIndex }
    ::= { cnpdTopNStatsTable 1 }

CnpdTopNStatsEntry ::= SEQUENCE {
    cnpdTopNStatsIndex       	Unsigned32,
    cnpdTopNStatsProtocolName	CiscoPdProtocolName,
    cnpdTopNStatsRate		Counter32,
    cnpdTopNStatsHCRate		Counter64
    }

    cnpdTopNStatsIndex OBJECT-TYPE
	SYNTAX 		Unsigned32 (1..500)
	MAX-ACCESS 	not-accessible
	STATUS 		current
	DESCRIPTION
	    "A monotonically increasing integer which 
	    uniquely identifies a cnpdTopNStatsEntry 
	    in the cnpdTopNStatsTable."
	::= { cnpdTopNStatsEntry 1 }
    
    cnpdTopNStatsProtocolName OBJECT-TYPE
        SYNTAX      	CiscoPdProtocolName
        MAX-ACCESS  	read-only
        STATUS      	current
        DESCRIPTION
	    "Name of the application or protocol, 
	    a unique textual string, assigned in the
	    cnpdSupportedProtocolsTable."
	::= { cnpdTopNStatsEntry 2 }

    cnpdTopNStatsRate	OBJECT-TYPE
	SYNTAX      	Counter32
        MAX-ACCESS  	read-only
	STATUS      	current
	DESCRIPTION
	    "The amount of change in the selected statistic
	    during this sampling interval. The selected
	    statistic is the cnpdTopNConfigStatsSelect
	    from the associated cnpdTopNConfigStatsEntry."
	::= { cnpdTopNStatsEntry 3 }

    cnpdTopNStatsHCRate	OBJECT-TYPE
	SYNTAX      	Counter64
        MAX-ACCESS  	read-only
	STATUS      	current
	DESCRIPTION
	    "The amount of change in the selected statistic
	    during this sampling interval. The selected
	    statistic is the cnpdTopNConfigStatsSelect
	    from the associated cnpdTopNConfigStatsEntry.	

	    This is the 64-bit (High Capacity) version of 
	    cnpdTopNStatsRate."
	::= { cnpdTopNStatsEntry 4 }


-- The NBAR Protocol Discovery Threshold group 
--
-- This group is used to configure and store threshold 
-- events.
--

cnpdThresholdConfigTable OBJECT-TYPE
    SYNTAX     		SEQUENCE OF CnpdThresholdConfigEntry
    MAX-ACCESS 		not-accessible
    STATUS     		current
    DESCRIPTION
	"The cnpdThresholdConfigTable allows the management
	station to create thresholds for the purpose of
	sending notifications if breached, and creating a
	history of breached thresholds."
    ::= { cnpdThresholdConfig 1 }

cnpdThresholdConfigEntry OBJECT-TYPE
    SYNTAX      	CnpdThresholdConfigEntry
    MAX-ACCESS  	not-accessible
    STATUS      	current
    DESCRIPTION
	"This entry contains configuration information to 
	set thresholds for the purpose of notifications.
	
	The management station is allowed to set thresholds
	on individual statistics for individual protocols
	on an interface. If the threshold is breached by
	the protocol statistic, a new event is written to
	the cnpdThresholdHistoryTable, which in turn will 
	generate a Notification Event.
	
	This function has a hysteresis mechanism to limit
	the generation of events. This mechanism generates
	one event as a threshold is crossed in the
	appropriate direction. No more events are generated
	for that threshold until the opposite threshold is
	crossed. This stops repeated Notification events
	being generated each time the value is sampled,
	when the value is above the threshold. Instead one
	notification is sent when the threshold is breached
	and one notification when the statistic drops below
	the threshold value again."
    INDEX { cnpdThresholdConfigIndex }
    ::= { cnpdThresholdConfigTable 1 }

CnpdThresholdConfigEntry ::= SEQUENCE {
    cnpdThresholdConfigIndex		Unsigned32,
    cnpdThresholdConfigIfIndex  	InterfaceIndex,
    cnpdThresholdConfigInterval   	Unsigned32,
    cnpdThresholdConfigSampleType 	INTEGER,
    cnpdThresholdConfigProtocol   	CiscoPdProtocolIndex,
    cnpdThresholdConfigProtocolAny  	TruthValue,
    cnpdThresholdConfigStatsSelect    	CiscoPdDataType,
    cnpdThresholdConfigStartup    	INTEGER,
    cnpdThresholdConfigRising     	Unsigned32,
    cnpdThresholdConfigFalling    	Unsigned32,
    cnpdThresholdConfigStatus  		RowStatus
    }

    cnpdThresholdConfigIndex OBJECT-TYPE
	SYNTAX 		Unsigned32 (1..100)
	MAX-ACCESS 	not-accessible
	STATUS 		current
	DESCRIPTION
	    "A monotonically increasing integer which 
	    uniquely identifies an entry in the 
	    cnpdThresholdConfigTable."
	::= { cnpdThresholdConfigEntry 1 }

    cnpdThresholdConfigIfIndex OBJECT-TYPE
	SYNTAX 		InterfaceIndex
	MAX-ACCESS 	read-create
	STATUS 		current
	DESCRIPTION
	    "This object allows the management station to 
	    select the interface, which Protocol Discovery is 
	    running on, to be used to create this 
	    cnpdThresholdConfigTable entry."
	::= { cnpdThresholdConfigEntry 2 }

    cnpdThresholdConfigInterval OBJECT-TYPE
	SYNTAX     	Unsigned32 (1..2048)
	UNITS         	"seconds"
        MAX-ACCESS 	read-create
	STATUS     	current
	DESCRIPTION
	    "The interval in seconds over which the data is
	    sampled and compared with cnpdThresholdConfigRising
	    and cnpdThresholdConfigFalling thresholds."
	DEFVAL { 10 }	
	::= { cnpdThresholdConfigEntry 3 }

    cnpdThresholdConfigSampleType OBJECT-TYPE
	SYNTAX	INTEGER {
	        absoluteValue	(1),
	        deltaValue	(2)
		}
	MAX-ACCESS	read-create
	STATUS 		current
	DESCRIPTION
	    "The method of sampling the selected statistic and
	    calculating the value to be compared against 
	    cnpdThresholdConfigRising or 
	    cnpdThresholdConfigFalling thresholds. 
			
	    If the value of this object is absoluteValue(1), 
	    the value at the end of the sampling interval 
	    cnpdThresholdConfigInterval, will be compared 
	    with the cnpdThresholdConfigRising and 
	    cnpdThresholdConfigFalling thresholds. 

	    In this mode, when cnpdThresholdConfigStatsSelect is
	    byte or packet based, a maximum of two 
	    cnpdThresholdHistory entries will be created per
	    application, as these byte and packet counts 
	    monotonically increase from zero.
			
	    If the value of this object is deltaValue(2), 
	    the difference between the samples at the 
	    beginning and end of the cnpdThresholdConfigInterval 
	    will be compared with the cnpdThresholdConfigRising 
	    and cnpdThresholdConfigFalling thresholds.
			
	    Because the difference in the previous and current
	    samples are compared over the sample period
	    cnpdThresholdConfigInterval, this mode provides 
	    more granularity to the thresholds because the NMS 
	    is now provided with the gradient or change in the 
	    cnpdThresholdConfigStatsSelect.

	    Note that even though the sample value is monotonically
	    increasing for byte and packet counts, 
	    cnpdThresholdConfigSampleType set to deltaValue, can 
	    generate falling cnpdThresholdHistory entries, because
	    the gradient can be lower than the 
	    cnpdThresholdConfigFalling value."
	DEFVAL { absoluteValue }
	::= { cnpdThresholdConfigEntry 4 }

    cnpdThresholdConfigProtocol OBJECT-TYPE
        SYNTAX      	CiscoPdProtocolIndex (1..1024)
        MAX-ACCESS  	read-create
        STATUS      	current
        DESCRIPTION
	    "The application or protocol which the
	    management station wishes to configure a
	    threshold on.

	    This object is an index into the 
	    SupportedProtocolsTable where details
	    of the protocol can be found.

	    If cnpdThresholdConfigProtocolAny is set
	    to TRUE this value will be ignored. If it
	    is set to FALSE, then cnpdThresholdConfigProtocol
	    will be the only protocol that is checked
	    to see if it has breached the threshold."
	::= { cnpdThresholdConfigEntry 5 }

    cnpdThresholdConfigProtocolAny OBJECT-TYPE
	SYNTAX      	TruthValue
	MAX-ACCESS  	read-create
	STATUS      	current
	DESCRIPTION
	    "If set to 'true' - this threshold is configured
	    to check for any protocol which meets the threshold
	    criteria. This means that multiple protocols can
	    generate ThresholdHistoryTable entries. Each
	    protocol is subject to the hysterisis mechanism.

	    If set to 'false' - this threshold is configured
	    to check for the protocol which meets the threshold
	    criteria referred to by cnpdThresholdConfigProtocol."
	DEFVAL { true }
	::= { cnpdThresholdConfigEntry 6 }

    cnpdThresholdConfigStatsSelect OBJECT-TYPE
        SYNTAX		CiscoPdDataType
	MAX-ACCESS  	read-create
        STATUS      	current
        DESCRIPTION
	    "This object allows the management station to
	    select the statistic used to base the threshold
	    on.

	    For example a cnpdThresholdConfigStatsSelect of
	    bitRateSum means cnpdThresholdConfigRising and
	    cnpdThresholdConfigFalling are values based on
	    the combined value of in and out bitrates."
	DEFVAL { bitRateSum }
	::= { cnpdThresholdConfigEntry 7 }

    cnpdThresholdConfigStartup OBJECT-TYPE
	SYNTAX	INTEGER {
	        rising		(1),
		falling		(2),
		risingOrFalling	(3)
		}
	MAX-ACCESS 	read-create
	STATUS 		current
	DESCRIPTION
	    "This controls the type of notification that is 
	    sent when this threshold entry is first enabled. 
	    
	    Because there is no previous sampling history,
	    choosing one of these options determines the type
	    of notification generated - Rising or Falling.
	    
	    If the first sample after this entry is enabled 
	    is greater than or equal to cnpdThresholdConfigRising and
	    this object is equal to rising(1) or risingOrFalling(3), 
	    then a single rising notification will be generated. 
	    
	    If the first sample after this entry is enabled
	    is less than or equal to cnpdThresholdConfigFalling
	    and this object is equal to falling(2) or 
	    risingOrFalling(3), then a single falling notification 
	    will be generated."
	DEFVAL { risingOrFalling }
	::= { cnpdThresholdConfigEntry 8 }

    cnpdThresholdConfigRising OBJECT-TYPE
	SYNTAX 		Unsigned32 (1..4294967295)
	MAX-ACCESS 	read-create
	STATUS 		current
	DESCRIPTION
	    "This is the threshold object which the managment
	    station sets to determine if it gets breached. It 
	    indicates the statistic being sampled was
	    rising.

	    When the current sample is greater than or 
	    equal to this object, and the value at the last 
	    sampling interval was less than this object (in 
	    other words the value is rising), an entry in the 
	    cnpdThresholdHistoryTable will be created.
	    
	    After a rising event is generated, another such 
	    event will not be generated until the sampled value
	    falls below this threshold and reaches the
	    cnpdThresholdConfigFalling value.
	    
	    This ensures that samples which are taken
	    after a cnpdThresholdConfigRising threshold event
	    has been created, do not create further thresholds
	    and therefore notifications, until the 
	    cnpdThresholdConfigFalling threshold has been met.
	    
	    Thus a very short cnpdThresholdConfigInterval can be
	    chosen without risk of multiple notifications for
	    the same threshold breach condition."
	::= { cnpdThresholdConfigEntry 9 }

    cnpdThresholdConfigFalling OBJECT-TYPE
	SYNTAX 		Unsigned32 (1..4294967295)
	MAX-ACCESS 	read-create
	STATUS 		current
	DESCRIPTION
	    "This is the threshold object which the management 
	    station sets to determine if it gets breached. It 
	    indicates the statistic being sampled was
	    falling. 
	    
	    When current sample is less than or equal 
	    to this object, and the value at the last sampling
	    interval was greater than this object (in other 
	    words the value is falling), an entry in the 
	    cnpdThresholdHistoryTable will be created. 
			
	    After a falling event is generated, another 
	    such event will not be generated until the sampled 
	    value rises above this object and reaches the
	    cnpdThresholdConfigRising value."
	::= { cnpdThresholdConfigEntry 10 }

    cnpdThresholdConfigStatus  OBJECT-TYPE
	SYNTAX  	RowStatus
	MAX-ACCESS  	read-create
	STATUS      	current
	DESCRIPTION
	    "This object is used to create or delete 
	    the row entry in cnpdThresholdConfigTable.
	     
	    When creating a row entry the management station 
	    is required to specify a value for 
	    cnpdThresholdConfigIfIndex, cnpdThresholdConfigRising 
	    and cnpdThresholdConfigFalling.

	    'active' means that a createAndGo or active has 
	    been issued, AND a valid ifIndex exists. And therefore 
	    if a row is 'active' it means a ThresholdHistory entry 
	    may have been generated if the value was breached.
	    
	    If you set an 'active' row to 'createAndWait' - it will 
	    in fact get the status 'notReady'. 
	    
	    Likewise if you set any row to 'notInService' or 'notReady' 
	    it will go to the 'notReady' state."
	::= { cnpdThresholdConfigEntry 12 }

cnpdThresholdHistoryTable OBJECT-TYPE
    SYNTAX		SEQUENCE OF CnpdThresholdHistoryEntry
    MAX-ACCESS 		not-accessible
    STATUS     		current
    DESCRIPTION
	"The Threshold History table. Notifications
	are unreliable so this table provides a
	history of the last 5000 threshold breached
	events. A notification can be traced back to
	its cnpdThresholdHistoryEntry."
    ::= { cnpdThresholdHistory 1 }
  
cnpdThresholdHistoryEntry OBJECT-TYPE
    SYNTAX		CnpdThresholdHistoryEntry
    MAX-ACCESS 		not-accessible
    STATUS     		current
    DESCRIPTION
	"This entry is created each time a threshold 
	is breached. 
	
	Thus there is not necessarily a one to one 
	relationship to cnpdThresholdConfigTable 
	as not every Threshold configured will 
	be breached."
    INDEX { cnpdThresholdHistoryIndex }
    ::= { cnpdThresholdHistoryTable 1 }
 
CnpdThresholdHistoryEntry ::= SEQUENCE {
    cnpdThresholdHistoryIndex		Unsigned32,
    cnpdThresholdHistoryConfigIndex 	Unsigned32,
    cnpdThresholdHistoryValue	 	Unsigned32,
    cnpdThresholdHistoryType    	INTEGER,
    cnpdThresholdHistoryTime  		TimeTicks,
    cnpdThresholdHistoryProtocol	CiscoPdProtocolIndex,
    cnpdThresholdHistoryStatsSelect	CiscoPdDataType
    }
	
    cnpdThresholdHistoryIndex OBJECT-TYPE
	SYNTAX		Unsigned32 (1..1000)
	MAX-ACCESS	not-accessible
	STATUS    	current
	DESCRIPTION
	    "A monotonically increasing integer
	    which uniquely identifies this 
	    cnpdThresholdHistoryEntry in the 
	    cnpdThresholdHistory table."
	::= { cnpdThresholdHistoryEntry 1 }

    cnpdThresholdHistoryConfigIndex OBJECT-TYPE
	SYNTAX		Unsigned32 (1..1000)
	MAX-ACCESS 	read-only
	STATUS     	current
	DESCRIPTION
	    "The cnpdThresholdConfigTable entry 
	    which generated this entry. Using this 
	    object the management station can backtrack 
	    to the appropriate cnpdThresholdConfigEntry."
	::= { cnpdThresholdHistoryEntry 2 }
 
    cnpdThresholdHistoryValue OBJECT-TYPE
        SYNTAX      	Unsigned32 (1..4294967295)
	MAX-ACCESS 	read-only
	STATUS     	current
	DESCRIPTION
	    "The actual value of the statistic when 
	    the sampling was made."
	::= { cnpdThresholdHistoryEntry 3 }

    cnpdThresholdHistoryType OBJECT-TYPE
	SYNTAX	INTEGER {
	        risingBreach	(1),
	        fallingBreach	(2)
		}
	MAX-ACCESS	read-only
	STATUS 		current
	DESCRIPTION
	    "Describes whether this is an
	    event caused by a rising
	    or falling threshold breach."
	::= { cnpdThresholdHistoryEntry 4 }

    cnpdThresholdHistoryTime OBJECT-TYPE
	SYNTAX  	TimeTicks
	MAX-ACCESS 	read-only
	STATUS     	current
	DESCRIPTION
	    "The value of sysUpTime of the running 
	    configuration when the event occurred."
	::= { cnpdThresholdHistoryEntry 5 }

    cnpdThresholdHistoryProtocol OBJECT-TYPE
        SYNTAX      	CiscoPdProtocolIndex (1..1024)
        MAX-ACCESS  	read-only
        STATUS      	current
        DESCRIPTION
	    "The application or protocol which the
	    management station configured a
	    threshold on.

	    This object is an index into the 
	    SupportedProtocolsTable where details
	    of the protocol can be found."
	::= { cnpdThresholdHistoryEntry 6 }

    cnpdThresholdHistoryStatsSelect OBJECT-TYPE
        SYNTAX		CiscoPdDataType
	MAX-ACCESS  	read-only
        STATUS      	current
        DESCRIPTION
	    "This is the statistic used to base the threshold
	    on."
	::= { cnpdThresholdHistoryEntry 7 }

-- The NBAR Protocol Discovery Notifications Config table
--

cnpdNotificationsEnable OBJECT-TYPE
    SYNTAX     		TruthValue
    MAX-ACCESS 		read-write
    STATUS   	  	current
    DESCRIPTION
	"This object is used to enable or disable 
	Notifications on a global basis. 
	
	If set to 'true' - Notifications are
	enabled.
	If set to 'false' - Notifications are
	disabled."
    DEFVAL { false }
    ::= { cnpdNotificationsConfig 1 }
    
-- The NBAR Protocol Discovery Notifications Group
--
-- NOTIFICATIONS
--

cnpdThresholdRisingEvent NOTIFICATION-TYPE
    OBJECTS {
       cnpdThresholdConfigIfIndex,
       cnpdThresholdConfigStatsSelect,
       cnpdThresholdHistoryValue,
       cnpdThresholdConfigRising,
       cnpdThresholdConfigProtocol,
       cnpdThresholdHistoryTime
       }	
    STATUS  current
    DESCRIPTION
	"A cnpdThresholdRisingEvent is sent whenever 
	a notification entry crosses its rising threshold 
	and generates an event that is added to the
	cnpdThresholdHistoryTable."
    ::= { cnpdMIBNotifications 1 }

cnpdThresholdFallingEvent NOTIFICATION-TYPE
    OBJECTS {
       cnpdThresholdConfigIfIndex,
       cnpdThresholdConfigStatsSelect,
       cnpdThresholdHistoryValue,
       cnpdThresholdConfigFalling,
       cnpdThresholdConfigProtocol,
       cnpdThresholdHistoryTime
       }
    STATUS  current
    DESCRIPTION
	"A cnpdThresholdConfigFallingEvent is sent 
	whenever a notification entry crosses its 
	falling threshold and generates an event 
	that is added to the cnpdThresholdHistoryTable."
    ::= { cnpdMIBNotifications 2 }

-- compliance statements

cnpdMIBCompliance MODULE-COMPLIANCE
    STATUS      current
    DESCRIPTION
	"The compliance statement for entities that 
	implement NBAR Protocol Discovery on a Cisco 
	router."
    MODULE -- this module
    MANDATORY-GROUPS { 
       cnpdStatsGroup, 
       cnpdTopNGroup,
       cnpdThresholdGroup, 
       cnpdMIBNotificationsGroup,
       cnpdMIBNotificationsConfigGroup,
       cnpdSupportedProtocolsGroup
       }
    ::= { cnpdMIBCompliances 1 }

cnpdStatsGroup OBJECT-GROUP
    OBJECTS {
       cnpdStatusPdEnable,
       cnpdStatusLastUpdateTime,
       cnpdAllStatsProtocolName,
       cnpdAllStatsInPkts,
       cnpdAllStatsOutPkts,
       cnpdAllStatsInBytes,
       cnpdAllStatsOutBytes,
       cnpdAllStatsHCInPkts,
       cnpdAllStatsHCOutPkts,
       cnpdAllStatsHCInBytes,
       cnpdAllStatsHCOutBytes,
       cnpdAllStatsInBitRate,
       cnpdAllStatsOutBitRate
       }
     STATUS      current
     DESCRIPTION
	 "Required objects to provide protocol 
	 application discovery info."
     ::= { cnpdMIBGroups 1 }

cnpdTopNGroup OBJECT-GROUP
    OBJECTS {
       cnpdTopNConfigIfIndex,
       cnpdTopNConfigStatsSelect,
       cnpdTopNConfigRequestedSize,
       cnpdTopNConfigSampleTime,
       cnpdTopNConfigGrantedSize,
       cnpdTopNConfigTime,
       cnpdTopNConfigStatus,	
       cnpdTopNStatsProtocolName,
       cnpdTopNStatsRate,
       cnpdTopNStatsHCRate	
       }	
    STATUS  current
    DESCRIPTION
	"The set of objects supported to record
        notification events."
    ::= { cnpdMIBGroups 2 }

cnpdThresholdGroup OBJECT-GROUP
    OBJECTS {
       cnpdThresholdConfigIfIndex,
       cnpdThresholdConfigInterval,
       cnpdThresholdConfigSampleType,
       cnpdThresholdConfigProtocol,
       cnpdThresholdConfigStatsSelect,
       cnpdThresholdConfigProtocolAny,
       cnpdThresholdConfigStartup,
       cnpdThresholdConfigRising,
       cnpdThresholdConfigFalling,
       cnpdThresholdConfigStatus,
       cnpdThresholdHistoryConfigIndex,
       cnpdThresholdHistoryValue,
       cnpdThresholdHistoryType,
       cnpdThresholdHistoryTime,
       cnpdThresholdHistoryProtocol,
       cnpdThresholdHistoryStatsSelect
       }
    STATUS  current
    DESCRIPTION
	"The set of objects supported to record
        notification events."
    ::= { cnpdMIBGroups 3 }

cnpdMIBNotificationsGroup NOTIFICATION-GROUP
    NOTIFICATIONS {
       cnpdThresholdRisingEvent,
       cnpdThresholdFallingEvent
       }	
    STATUS  current
    DESCRIPTION
	"The set of notification events supported."
    ::= { cnpdMIBGroups 4 }

cnpdMIBNotificationsConfigGroup OBJECT-GROUP
    OBJECTS {
       cnpdNotificationsEnable
       }	
    STATUS  current
    DESCRIPTION
	"The set of notification configuration events."
    ::= { cnpdMIBGroups 5 }

cnpdSupportedProtocolsGroup OBJECT-GROUP
    OBJECTS {
       cnpdSupportedProtocolsName
       }		
    STATUS  current
    DESCRIPTION
	"The set of objects describing a protocol 
	or application."
    ::= { cnpdMIBGroups 6 }

END
