-- ***************************************************************** -- CISCO-FLOW-CLONE-MIB -- -- Feb 2010, Sunil Gogikari -- -- Copyright (c) 2009-2010 by cisco Systems, Inc. -- All rights reserved. -- ***************************************************************** CISCO-FLOW-CLONE-MIB DEFINITIONS ::= BEGIN IMPORTS MODULE-IDENTITY, OBJECT-TYPE, Counter64, Gauge32, Integer32, Unsigned32 FROM SNMPv2-SMI MODULE-COMPLIANCE, OBJECT-GROUP FROM SNMPv2-CONF RowStatus, StorageType, TimeStamp, TEXTUAL-CONVENTION FROM SNMPv2-TC SnmpAdminString FROM SNMP-FRAMEWORK-MIB InetAddressType, InetAddress FROM INET-ADDRESS-MIB InterfaceIndexOrZero FROM IF-MIB ciscoMgmt FROM CISCO-SMI; ciscoFlowCloneMIB MODULE-IDENTITY LAST-UPDATED "201010190000Z" ORGANIZATION "Cisco Systems, Inc." CONTACT-INFO "Cisco Systems Customer Service Postal: 170 West Tasman Drive San Jose, CA 95134 USA Tel: +1 800 553-NETS E-mail: cs-snmp@cisco.com" DESCRIPTION "This MIB module defines objects that manages flow cloning feature. A flow cloning can be described as a hardware or software entity, that is responsible to clone (or duplicate) flows to the specified destination port in the device. These cloned packets will be sent to an external device for a more fine-grained analysis of the flows. A typical application of this MIB module will facilitate cloning media flows. However, by no means does the definition of this MIB module prevents other applications from using it. CLONE PROFILE: ============== At the top level, this MIB module describes the notion of flow cloning. Further descriptive texts in this MIB will use clone profile to describe flow cloning. We can think of clone profile as a container for the traffic flows for which it will clone packets and send out on the specified egress interface. Because a device can support more than one clone profile, this MIB defines cfcCloneProfileTable. TRAFFIC FLOW: ============= At the next level, this MIB module describes the notion of a traffic flow associated with the clone profile. A traffic flow is a unidirectional stream of packets conforming to a classifier.For example, packets having a particular source IP address, destination IP address, protocol type, source port number, and destination port number. CLONE TARGET: ============= A clone target may represent an entity that the system provisions with a clone profile. Clone targets include, but are not necessarily limited to, the system, nodes (i.e., an instance of an operating system), interfaces, VRF instances, and bridge domains. IMPLEMENTATION GUIDANCE ======================= It might seem that the concepts presented by this MIB module lend themselves to a profile-based approach. However, this approach provides the most general abstraction and lends itself to implementations that can fall under two categories: global and per-interface. A global level clone profile will clone the specified flows that are monitored in the whole device. Per interface clone profile will clone the specified flows that are monitored on the specified interface. This MIB module can represent the global level clone profile using the following procedure: o Create a row in the cfcCloneProfileTable having the following attributes. Allocate a value for cfcCloneProfileId and a name for cfcCloneProfileName. For sake of discussion, let's say the value is and the name is 'XYZ'. cfcCloneProfileId = cfcCloneProfileName = . . cfcCloneTargetType = 'system' o Similarly per interface level clone profile implementation can be represented as follows. Create a row in the cfcCloneProfileTable having the following attributes. Allocate a value for cfcCloneProfileId and a name for cfcCloneProfileName. For sake of discussion, let's say the value is and the name is 'ABC'. cfcCloneProfileId = cfcCloneProfileName = . . cfcCloneTargetType = 'interface' cfcCloneTargetIfIndex = While this example illustrates how an implementation may represent global and per-interface configuration data, it is understood that an implementation may have other requirements. In these cases, use this example as a guide in satisfying these requirements." REVISION "201007080000Z" DESCRIPTION "Added: The initial version of the MIB module" ::= { ciscoMgmt 765 } -- ********************************************************************* -- * Top-Level Trees * -- ********************************************************************* ciscoFlowCloneMIBNotifications OBJECT IDENTIFIER ::= { ciscoFlowCloneMIB 0 } ciscoFlowCloneMIBObjects OBJECT IDENTIFIER ::= { ciscoFlowCloneMIB 1 } ciscoFlowCloneMIBConformance OBJECT IDENTIFIER ::= { ciscoFlowCloneMIB 2 } -- ********************************************************************* -- * Textual Conventions * -- ********************************************************************* CloneProfileIdentifier ::= TEXTUAL-CONVENTION DISPLAY-HINT "d" STATUS current DESCRIPTION "This textual convention denotes an arbitrary integer-value that uniquely identifies a clone profile." SYNTAX Unsigned32 (1..4294967295) CloneFlowIdentifier ::= TEXTUAL-CONVENTION DISPLAY-HINT "d" STATUS current DESCRIPTION "This textual convention denotes an arbitrary integer-value that uniquely identifies a traffic flow which is associated to a corresponding clone profile." SYNTAX Unsigned32 (1..4294967295) CloneProfilePointType ::= TEXTUAL-CONVENTION STATUS current DESCRIPTION "This textual convention represents a point at which a clone profile sends out the cloned flows: 'other' The implementation of the MIB module using this textual convention does not recognize the profile point. 'unknown' The device is unable to ascertain the point at which the clone profile is sending the cloned traffic flow out. 'none' There is no point at which the clone profile can send cloned flows out. 'interface' The profile point is an interface represented by a row in the ifTable (defined by the IF-MIB [RFC2863]. With the exception of the values 'unknown' and 'none', each definition of a concrete CloneProfilePointType value MUST have a corresponding textual convention for use with the particular type of profile point. To support future extensions, a MIB module SHOULD NOT sub-type the CloneProfilePointType textual convention in an object type definition. However, a compliance statement MAY sub-type it in order to require only a subset of the profile point types for a compliant implementation. Implementations must ensure that CloneProfilePointType objects and any dependent objects (e.g., CloneProfilePointIdentifier objects) are consistent. For example, an implementation must respond with an 'inconsistentValue' error if an attempt is made to modify a CloneProfilePointType object without changing the corresponding CloneProfilePointIdentifier object." REFERENCE "K. McCloghrie and F. Kastenholz, 'The Interfaces Group MIB', RFC-2863, June 2000." SYNTAX INTEGER { other(1), unknown(2), none(3), interface(4) } CloneProfilePointIdentifier ::= TEXTUAL-CONVENTION STATUS current DESCRIPTION "This textual convention specifies an ifindex value that identifies a point at which a clone profile sends out the cloned flows. Implementations must ensure that a CloneProfilePointIdentifier object remains consistent with the CloneProfilePointType object providing the context. For example, an implementation must respond with an 'inconsistentValue' error if an attempt is made to modify a CloneProfilePointIdentifier object without changing the corresponding CloneProfilePointType object. The value of a CloneProfilePointIdentifier object MUST BE 0, if the value of CloneProfilePointType object providing the context is 'unknown' or 'none'." SYNTAX InterfaceIndexOrZero -- ********************************************************************* -- * Objects * -- ********************************************************************* cfcCloneProfiles OBJECT IDENTIFIER ::= { ciscoFlowCloneMIBObjects 1 } cfcCloneProfileIdNext OBJECT-TYPE SYNTAX CloneProfileIdentifier MAX-ACCESS read-only STATUS current DESCRIPTION "This object specifies a value which is used as an index value for a new clone profile entry in cfcCloneProfileTable. Whenever read, the agent will get the next available non-conflicting value. This is to reduce the probability of errors during creation of new clone profile table entries" ::= { cfcCloneProfiles 1 } cfcCloneProfileTable OBJECT-TYPE SYNTAX SEQUENCE OF CfcCloneProfileEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table lists the clone profiles contained by the device." ::= { cfcCloneProfiles 2 } cfcCloneProfileEntry OBJECT-TYPE SYNTAX CfcCloneProfileEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "A peer SNMP entity may create a clone profile by setting an instance of cfcCloneProfileId to the value that is read from cfcCloneProfileIdNext, cfcCloneProfileName to the entry name and an instance of cfcCloneProfileStatus to 'createAndWait' or 'createAndGo'. Observe that an implementation that does not support these options must specify these limitations in an agent capabilities statement. Other management entities (e.g., the local console) may create a clone profile. In these cases, the system must automatically create a row in the cfcCloneProfileTable. A peer SNMP entity may destroy a clone profile by setting the corresponding instance of cfcCloneProfileStatus to 'destroy'. Observe that an implementation that does not support this option must specify this limitation in an agent capabilities statement. Other management entities may destroy a clone profile. In these cases, the system must automatically destroy the corresponding row in the cfcCloneProfileTable." INDEX { cfcCloneProfileId } ::= { cfcCloneProfileTable 1 } CfcCloneProfileEntry ::= SEQUENCE { cfcCloneProfileId CloneProfileIdentifier, cfcCloneProfileStatus RowStatus, cfcCloneProfileStorageType StorageType, cfcCloneProfileName SnmpAdminString, cfcCloneProfileDescription SnmpAdminString, cfcCloneProfileCreateTime TimeStamp, cfcCloneProfileFlowCount Gauge32, cfcCloneProfileFlowType INTEGER, cfcCloneTargetType INTEGER, cfcCloneTargetIfIndex Integer32, cfcCloneProfileEgressIfType CloneProfilePointType, cfcCloneProfileEgressIf CloneProfilePointIdentifier } cfcCloneProfileId OBJECT-TYPE SYNTAX CloneProfileIdentifier MAX-ACCESS not-accessible STATUS current DESCRIPTION "This object indicates an arbitrary integer-value that uniquely identifies a clone profile. An application using this MIB is responsible for making sure these are unique, although the SNMP RowStatus row creation process will help by not allowing it to create conflicting entries. Before creating a new entry, a value for this variable may be obtained by reading cfcCloneProfileIdNext to reduce the probability of a value collision. Observe that the value assigned to a clone profile does not necessarily persist across restarts." ::= { cfcCloneProfileEntry 1 } cfcCloneProfileStatus OBJECT-TYPE SYNTAX RowStatus MAX-ACCESS read-create STATUS current DESCRIPTION "The status of this conceptual row. This object manages creation, modification, and deletion of rows in this table. The following columns must be valid before activating a row: - cfcCloneProfileName - cfcCloneProfileStorageType - cfcCloneTargetType - cfcCloneTargetIfIndex cfcCloneTargetIfIndex is mandatory ONLY if cfcCloneTargetType is specified as 'interface'. Other writable objects in this table may be modified at any time, even while the row is 'active'. The entry may be deleted by setting the value to 'destroy', and if there are any associated traffic flow entries in the corresponding flow tables (cfcFlowIpTable in case of IP flows) they will also be deleted with this operation." ::= { cfcCloneProfileEntry 2 } cfcCloneProfileStorageType OBJECT-TYPE SYNTAX StorageType MAX-ACCESS read-create STATUS current DESCRIPTION "This object specifies the memory realization of the row." DEFVAL { volatile } ::= { cfcCloneProfileEntry 3 } cfcCloneProfileName OBJECT-TYPE SYNTAX SnmpAdminString (SIZE (1..32)) MAX-ACCESS read-create STATUS current DESCRIPTION "This object specifies an arbitrary name that uniquely identifies the clone profile." ::= { cfcCloneProfileEntry 4 } cfcCloneProfileDescription OBJECT-TYPE SYNTAX SnmpAdminString MAX-ACCESS read-create STATUS current DESCRIPTION "This object specifies a human-readable description configured to the clone profile. This object is optional while creating a row in this table and specifies a null string if no description is configured." ::= { cfcCloneProfileEntry 5 } cfcCloneProfileCreateTime OBJECT-TYPE SYNTAX TimeStamp MAX-ACCESS read-only STATUS current DESCRIPTION "This object provides the value of sysUpTime when the row was created." ::= { cfcCloneProfileEntry 6 } cfcCloneProfileFlowCount OBJECT-TYPE SYNTAX Gauge32 UNITS "traffic flows" MAX-ACCESS read-only STATUS current DESCRIPTION "This object provides the number of traffic flows currently associated with the clone profile." ::= { cfcCloneProfileEntry 7 } cfcCloneProfileFlowType OBJECT-TYPE SYNTAX INTEGER { ip(1) } MAX-ACCESS read-create STATUS current DESCRIPTION "Identifies the type of flows associated with the clone profile. Based on type the corresponding flow table will represent the traffic flows associated with the clone profile. Note that a clone profile can clone only one type of traffic flows. For example, if the cfcCloneProfileFlowType is set to 'ip' than all the IP flows ONLY can be associated (using cfcFlowIpTable) and cloned by this clone profile. New flow types can be added to this based on the requirement and hardware or software capability. For each new cfcCloneProfileFlowType defined in cfcCloneProfileTable a separate table can be added to this MIB to hold the corresponding flow entries. The following types of flows are supported: 'ip' IP flows are associated with this clone profile." ::= { cfcCloneProfileEntry 8 } cfcCloneTargetType OBJECT-TYPE SYNTAX INTEGER { other(1), system(2), interface(3) } MAX-ACCESS read-create STATUS current DESCRIPTION "This object specifies the clone profile target. Following targets are supported today 'other' The implementation of the MIB module using this textual convention does not recognize the clone profile target. 'system' The clone profile target is global or the entire system. 'interface' The clone profile target is an interface represented by a row in the ifTable defined by the IF-MIB [RFC2863]." ::= { cfcCloneProfileEntry 9 } cfcCloneTargetIfIndex OBJECT-TYPE SYNTAX Integer32 (0..2147483647) MAX-ACCESS read-create STATUS current DESCRIPTION "This object specifies the ifindex of an interface over which traffic flow to be cloned is received or transmitted. The interface may be physical or virtual. The value of a cfcCloneTargetIfIndex object MUST BE 0 if the value of the cfcCloneTargetType object providing the context is 'system' or 'other'." ::= { cfcCloneProfileEntry 10 } cfcCloneProfileEgressIfType OBJECT-TYPE SYNTAX CloneProfilePointType MAX-ACCESS read-create STATUS current DESCRIPTION "This object specifies the type of port/interface configured to the clone profile." ::= { cfcCloneProfileEntry 11 } cfcCloneProfileEgressIf OBJECT-TYPE SYNTAX CloneProfilePointIdentifier MAX-ACCESS read-create STATUS current DESCRIPTION "This object specifies the ifindex of an interface that is configured to the corresponding clone profile. All the flows configured within this profile set will be cloned to this interface." ::= { cfcCloneProfileEntry 12 } cfcCloneProfileTableChanged OBJECT-TYPE SYNTAX TimeStamp MAX-ACCESS read-only STATUS current DESCRIPTION "This object provides the value of sysUpTime the last time the device created or destroyed a row in cfcCloneProfileTable." ::= { cfcCloneProfiles 3 } cfcFlows OBJECT IDENTIFIER ::= { ciscoFlowCloneMIBObjects 2 } cfcFlowIpTable OBJECT-TYPE SYNTAX SEQUENCE OF CfcFlowIpEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table lists the IP traffic flows that are cloned by corresponding clone profile supported by the device. This table has an expansion dependent relationship on the cfcCloneProfileTable, containing zero or more rows for each clone profile. Below is an example, where multiple IP flows are associated with the single clone profile. +----------------------------+ | cfcFlowIpTable | | | +----------------------+ +--------------------------------+ | cfcCloneProfileId = 3----->| +-------------------------+ | +----------------------+ | | cfcCloneProfileId = 3 | | | | cfcFlowIndex = 3 | | | +-------------------------+ | | +-------------------------+ | | | cfcCloneProfileId = 3 | | | | cfcFlowIndex = 5 | | | +-------------------------+ | | : | | : | | +-------------------------+ | | | cfcCloneProfileId = 3 | | | | cfcFlowIndex = 10 | | | +-------------------------+ | +--------------------------------+ | | +----------------------+ +--------------------------------+ | cfcCloneProfileId = 4----->| +-------------------------+ | +----------------------+ | | cfcCloneProfileId = 4 | | | | cfcFlowIndex = 2 | | | +-------------------------+ | | +-------------------------+ | | | cfcCloneProfileId = 4 | | | | cfcFlowIndex = 6 | | | +-------------------------+ | | : | | : | | +-------------------------+ | | | cfcCloneProfileId = 4 | | | | cfcFlowIndex = 7 | | | +-------------------------+ | +--------------------------------+" ::= { cfcFlows 1 } cfcFlowIpEntry OBJECT-TYPE SYNTAX CfcFlowIpEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "An entry describes a IP traffic flow that are cloned by the corresponding clone profile. The device creates a row in the cfcFlowIpTable when a IP flow is associated with a clone profile to clone the monitored flows and send it to the configured egress interface. Likewise, the device destroys a row in the cfcFlowIpTable when a traffic flow disassociated with a clone profile. Note that the corresponding clone profile must make sure cfcCloneProfileFlowType is set to 'IP' before creating an entry in this table else the creation will fail." INDEX { cfcCloneProfileId, cfcFlowIndex } ::= { cfcFlowIpTable 1 } CfcFlowIpEntry ::= SEQUENCE { cfcFlowIndex CloneFlowIdentifier, cfcFlowIpStatus RowStatus, cfcFlowIpStorageType StorageType, cfcFlowIpAddrSrcType InetAddressType, cfcFlowIpAddrSrc InetAddress, cfcFlowIpAddrDstType InetAddressType, cfcFlowIpAddrDst InetAddress, cfcFlowIpCreateTime TimeStamp } cfcFlowIndex OBJECT-TYPE SYNTAX CloneFlowIdentifier MAX-ACCESS not-accessible STATUS current DESCRIPTION "This object indicates an arbitrary integer-value that uniquely identifies a configured traffic flow within a clone profile. While adding an entry in this table, application is responsible for making sure these are unique, although the SNMP RowStatus row creation process will help by not allowing it to create conflicting entries. Observe that the value assigned to a traffic flow does not necessarily persist across restarts or the removal-insertion of a physical entity supporting clone profile(s)." ::= { cfcFlowIpEntry 1 } cfcFlowIpStatus OBJECT-TYPE SYNTAX RowStatus MAX-ACCESS read-create STATUS current DESCRIPTION "The status of this conceptual row. This object manages creation, and deletion of rows in this table. The following columns must be valid before activating a row: - cfcFlowIpStorageType - cfcFlowIpAddrSrcType - cfcFlowIpAddrSrc - cfcFlowIpAddrDstType - cfcFlowIpAddrDst Once the row is active, object in this table can not be modified at any time. The entry may be deleted by setting the value to 'destroy'." ::= { cfcFlowIpEntry 2 } cfcFlowIpStorageType OBJECT-TYPE SYNTAX StorageType MAX-ACCESS read-create STATUS current DESCRIPTION "This object specifies the memory realization of the row." DEFVAL { volatile } ::= { cfcFlowIpEntry 3 } cfcFlowIpAddrSrcType OBJECT-TYPE SYNTAX InetAddressType MAX-ACCESS read-create STATUS current DESCRIPTION "This object specifies the type of IP address indicated by the corresponding instances of cfcFlowIpAddrSrc." ::= { cfcFlowIpEntry 4 } cfcFlowIpAddrSrc OBJECT-TYPE SYNTAX InetAddress MAX-ACCESS read-create STATUS current DESCRIPTION "This object specifies the source IP address of the corresponding traffic flow. This address will be of the type specified in cfcFlowIpAddrSrcType." ::= { cfcFlowIpEntry 5 } cfcFlowIpAddrDstType OBJECT-TYPE SYNTAX InetAddressType MAX-ACCESS read-create STATUS current DESCRIPTION "This object specifies the type of IP address indicated by the corresponding instances of cfcFlowIpAddrDst." ::= { cfcFlowIpEntry 6 } cfcFlowIpAddrDst OBJECT-TYPE SYNTAX InetAddress MAX-ACCESS read-create STATUS current DESCRIPTION "This object specifies the destination IP address of the corresponding traffic flow. This address will be of the type specified in cfcFlowIpAddrDstType." ::= { cfcFlowIpEntry 7 } cfcFlowIpCreateTime OBJECT-TYPE SYNTAX TimeStamp MAX-ACCESS read-only STATUS current DESCRIPTION "This object provides the value of sysUpTime when the row was created." ::= { cfcFlowIpEntry 8 } cfcFlowStats OBJECT IDENTIFIER ::= { ciscoFlowCloneMIBObjects 3 } cfcFlowStatsTable OBJECT-TYPE SYNTAX SEQUENCE OF CfcFlowStatsEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains data relating to the collection of statistics for the flows cloned by the corresponding clone profiles supported by the device. This table has a sparse dependent relationship on the flow tables, containing a row for each row in the flow table (cfcFlowIpTable in case of IP flows) for which the device is actively cloning the packets." ::= { cfcFlowStats 1 } cfcFlowStatsEntry OBJECT-TYPE SYNTAX CfcFlowStatsEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "An entry contains collection of statistics for a corresponding traffic flow. The device creates a row in the cfcFlowStatsTable when a clone profile is configured with a traffic flow and actively cloning the packets of that flow to the specified egress interface. Likewise, the device destroys a row in the cfcFlowStatsTable when the corresponding flow is removed from the clone profile." INDEX { cfcCloneProfileId, cfcFlowIndex } ::= { cfcFlowStatsTable 1 } CfcFlowStatsEntry ::= SEQUENCE { cfcFlowPkts Counter64, cfcFlowOctets Counter64 } cfcFlowPkts OBJECT-TYPE SYNTAX Counter64 UNITS "packets" MAX-ACCESS read-only STATUS current DESCRIPTION "This object provides the total number of packets that are cloned for a traffic flow by the corresponding clone profile." ::= { cfcFlowStatsEntry 1 } cfcFlowOctets OBJECT-TYPE SYNTAX Counter64 UNITS "octets" MAX-ACCESS read-only STATUS current DESCRIPTION "This object provides the total number of octets contained by the packets that are cloned for a traffic flow by the corresponding clone profile." ::= { cfcFlowStatsEntry 2 } -- ********************************************************************** -- * Conformance * -- ********************************************************************** ciscoFlowCloneMIBCompliances OBJECT IDENTIFIER ::= { ciscoFlowCloneMIBConformance 1 } ciscoFlowCloneMIBGroups OBJECT IDENTIFIER ::= { ciscoFlowCloneMIBConformance 2 } ciscoCloneFlowCompliance01 MODULE-COMPLIANCE STATUS current DESCRIPTION "This compliance statement specifies the minimal requirements an implementation must meet in order to claim full compliance with the definition of the CISCO-FLOW-CLONE-MIB." MODULE -- this module MANDATORY-GROUPS { cfcCloneProfileGroup, cfcFlowGroup, cfcFlowStatsGroup } ::= { ciscoFlowCloneMIBCompliances 1 } -- ********************************************************************** -- * Units of Conformance * -- ********************************************************************** cfcCloneProfileGroup OBJECT-GROUP OBJECTS { cfcCloneProfileIdNext, cfcCloneProfileStatus, cfcCloneProfileStorageType, cfcCloneProfileName, cfcCloneProfileDescription, cfcCloneProfileCreateTime, cfcCloneProfileFlowCount, cfcCloneProfileFlowType, cfcCloneTargetType, cfcCloneTargetIfIndex, cfcCloneProfileEgressIfType, cfcCloneProfileEgressIf, cfcCloneProfileTableChanged } STATUS current DESCRIPTION "This group contains objects describing clone profiles." ::= { ciscoFlowCloneMIBGroups 1 } cfcFlowGroup OBJECT-GROUP OBJECTS { cfcFlowIpStatus, cfcFlowIpStorageType, cfcFlowIpAddrSrcType, cfcFlowIpAddrSrc, cfcFlowIpAddrDstType, cfcFlowIpAddrDst, cfcFlowIpCreateTime } STATUS current DESCRIPTION "This group contains objects describing traffic flows." ::= { ciscoFlowCloneMIBGroups 2 } cfcFlowStatsGroup OBJECT-GROUP OBJECTS { cfcFlowPkts, cfcFlowOctets } STATUS current DESCRIPTION "This group contains objects describing traffic flow metrics." ::= { ciscoFlowCloneMIBGroups 3 } END