-- MIB file created 23-Nov-2010 22:41:19, by
--   SMICng version 2.2.11-beta(PRO)(Solaris), January 20, 2001. Enterprise key cisco.com

CISCO-FLOW-MONITOR-MIB DEFINITIONS ::= BEGIN

-- From file: "CISCO-FLOW-MONITOR-MIB.my"
-- Compile options "4 7 F H N O W 03 06 0B 0G 0N 0T"

IMPORTS
    AutonomousType, RowPointer, TimeStamp, TruthValue
            FROM SNMPv2-TC-v1
    SnmpAdminString
            FROM SNMP-FRAMEWORK-MIB
    InetAddressType, InetAddress, InetPortNumber
            FROM INET-ADDRESS-MIB
    VlanId
            FROM Q-BRIDGE-MIB
    CiscoAlarmSeverity, Layer2Cos
            FROM CISCO-TC
    ReportIntervalCount
            FROM CISCO-REPORT-INTERVAL-TC-MIB
    FlowMonitorIdentifier, FlowIdentifier, FlowPointType, 
    FlowPointIdentifier, FlowMetrics, FlowBitRateUnits, 
    FlowMetricValue, FlowMetricScale, FlowMetricPrecision, 
    FlowMonitorConditions, FlowMonitorConditionsProfile, 
    FlowMonitorConditionsProfileOrZero, 
    FlowMonitorConditionIdentifier, FlowMonitorAlarmGroupIdentifier, 
    FlowSetIdentifier
            FROM CISCO-FLOW-MONITOR-TC-MIB
    ciscoMgmt
            FROM CISCO-SMI
    Gauge, Counter
            FROM RFC1155-SMI
    OBJECT-TYPE
            FROM RFC-1212
    TRAP-TYPE
            FROM RFC-1215;

ciscoFlowMonitorMIB OBJECT IDENTIFIER ::= { ciscoMgmt 692 }
-- MODULE-IDENTITY
--  LastUpdated
--    200904080000Z
--  OrgName
--    Cisco Systems, Inc.
--  ContactInfo
--    Cisco Systems
--    Customer Service
--    
--    Postal:  170 W Tasman Drive
--    San Jose, CA 95134
--    
--    Tel:  +1 800 553-NETS
--    
--    E-mail:  cs-snmp@cisco.com
--  Descr
--    This MIB module defines objects that describe flow monitoring.
--    A typical application of this MIB module will facilitate
--    monitoring media flows, especially flows carrying video streams.
--    However, by no means does the definition of this MIB module
--    prevents other applications from using it.
--    
--    FLOW MONITORS
--    =================
--    
--    At the top level, this MIB module describes the notion of a flow
--    monitor.  A flow monitor is a hardware or software entity that
--    classifies traffic flows, collects data on conforming traffic
--    flows, and periodically computes metrics that reflect the
--    quality of the traffic flows.  Because a device can support more
--    than one flow monitor, the MIB module defines the
--    cfmFlowMonitorTable.  Consider an edge router that supports a
--    certain line card that has an integrated capability to monitor
--    video flows.  In this example, the cfmFlowMonitorTable would
--    contain a row describing each line card installed in the device.
--    
--    TRAFFIC FLOWS
--    =================
--    
--    At the next level, this MIB module describes the notion of a
--    traffic flow.  This MIB module uniquely identifies a traffic
--    flow using an auxiliary variable called cfmFlowId; however, an
--    implementation only has guarantee its uniqueness within the
--    scope of the flow monitor that has the responsibility for
--    monitoring the traffic flow.  Thus, we can think of the flow
--    monitor as a container for the traffic flows for which it
--    collects data and periodically computes metrics, as the figure
--    below illustrates.
--    
--                                   +============================+
--                                   | cfmFlowTable               |
--                                   |                            |
--    +======================+     +================================+
--    | cfmFlowMonitorId = 3 =====>|   +========================+   |
--    +======================+     |   | cfmFlowMonitorId = 3   |   |
--                                 |   | cfmFlowId = 101        |   |
--                                 |   +========================+   |
--                                 |   +========================+   |
--                                 |   | cfmFlowMonitorId = 3   |   |
--                                 |   | cfmFlowId = 102        |   |
--                                 |   +========================+   |
--                                 |       :                        |
--                                 |       :                        |
--                                 |   +========================+   |
--                                 |   | cfmFlowMonitorId = 3   |   |
--                                 |   | cfmFlowId = 150        |   |
--                                 |   +========================+   |
--                                 +================================+
--                                   |                            |
--    +======================+     +================================+
--    | cfmFlowMonitorId = 4 =====>|   +========================+   |
--    +======================+     |   | cfmFlowMonitorId = 4   |   |
--                                 |   | cfmFlowId = 1          |   |
--                                 |   +========================+   |
--                                 |   +========================+   |
--                                 |   | cfmFlowMonitorId = 4   |   |
--                                 |   | cfmFlowId = 2          |   |
--                                 |   +========================+   |
--                                 |       :                        |
--                                 |       :                        |
--                                 |   +========================+   |
--                                 |   | cfmFlowMonitorId = 4   |   |
--                                 |   | cfmFlowId = 150        |   |
--                                 |   +========================+   |
--                                 +================================+
--                                   |                            |
--                                   +============================+
--    
--    While the identifying of a traffic flow using this auxiliary
--    variable is convenient for the MIB module, it is does suffice
--    for an EMS/NMS trying to isolate faults in a network delivering
--    these traffic flows.  To aid an EMS/NMS in this task, this MIB
--    module defines a number of tables that provide layers of data
--    relating to a traffic flow, including:
--    
--        o cfmFlowL2VlanTable - describes L2 VLAN data relating to
--              traffic flows.
--    
--        o cfmFlowIpTable - describes IP data relating to traffic
--              flows.
--    
--        o cfmFlowUdpTable - describes UDP data relating to traffic
--              flows.
--    
--        o cfmFlowTcpTable - describes TCP data relating to traffic
--              flows.
--    
--        o cfmFlowRtpTable - describes RTP data relating to traffic
--              flows.
--    
--    Each of these tables have a sparse dependent relationship on the
--    cfmFlowTable, as there exist situations when the data may not be
--    available for a traffic flow, including:
--    
--        1)  The flow monitor simply may not collect the particular
--            data for the traffic flows that it has the
--            responsibility of monitoring.  For example, a flow
--            monitor may not have any concern for L2 VLAN data.
--    
--        2)  The data may not apply to a traffic flow.  For example,
--            a TCP and RTP data do not apply for a UDP traffic flow.
--    
--    To help an EMS/NMS navigate the data collected for a traffic
--    flow, the corresponding rows are daisy-chained using 'next
--    objects'.  An EMS/NMS starts with cfmFlowNext, which indicates a
--    reference to the row in the next table containing data related
--    to the traffic flow.  The first object contained by each of
--    these tables is a 'next object'.  Consider a RTP traffic flow
--    for which the flow monitor has collected IP, UDP, and RTP data.
--    The figure below illustrates how this MIB module daisy chains
--    this data through the relevant tables.
--    
--    +===========================================+
--    | cfmFlowTable                              |
--    | +=======================================+ |
--    | | cfmFlowMonitorId = 3                  | |
--    | | cfmFlowId = 42                        | |
--    | | cfmFlowNext = cfmFlowIpNext.3.42 ==========+
--    | +=======================================+ |  |
--    +===========================================+  |
--                                                   |
--    +===========================================+  |
--    | cfmFlowIpTable                            |  |
--    | +=======================================+ |  |
--    | | cfmFlowMonitorId = 3                  |<===+
--    | | cfmFlowId = 42                        | |
--    | | cfmFlowIpNext = cfmFlowUdpNext.3.42 =======+
--    | +=======================================+ |  |
--    +===========================================+  |
--                                                   |
--    +===========================================+  |
--    | cfmFlowUdpTable                           |  |
--    | +=======================================+ |  |
--    | | cfmFlowMonitorId = 3                  |<===+
--    | | cfmFlowId = 42                        | |
--    | | cfmFlowUdpNext = cfmFlowRtpNext.3.42 ======+
--    | +=======================================+ |  |
--    +===========================================+  |
--                                                   |
--    +===========================================+  |
--    | cfmFlowRtpTable                           |  |
--    | +=======================================+ |  |
--    | | cfmFlowMonitorId = 3                  |<===+
--    | | cfmFlowId = 42                        | |
--    | | cfmFlowRtpNext = zeroDotZero          | |
--    | +=======================================+ |
--    +===========================================+
--    
--    Observe that this structure simplifies the task of extending the
--    MIB module to support additional layers of data.  For example,
--    if there is a need for a device to collect data relating to the
--    MPEG-TS layer of a flow carrying a video stream, then it is as
--    simple as defining a table containing this data.  However, the
--    definition of such a table must comply with the following
--    requirements:
--    
--        1)  The table must have a sparse dependent relationship on
--            the cfmFlowTable.
--    
--        2)  The first object contained by the table must be a 'next
--            object' to support daisy chaining.
--    
--    REPORTING FLOW METRICS
--    ==========================
--    
--    At the next level, the MIB defines two tables that together form
--    the foundation for reporting metrics.  The cfmFlowMetricsTable
--    has a one-to-one dependent relationship on the cfmFlowTable, and
--    it contains data aggregate metrics and data relating to the
--    collection of metrics for the corresponding traffic flow.  A row
--    in this table also serves as a container for the historic
--    metrics computed by the corresponding flow monitor, as the
--    figure below illustrates.
--    
--                                  +============================+
--                                  | cfmFlowMetricsIntTable     |
--                                  |                            |
--    +======================+   +==================================+
--    | cfmFlowMetricsEntry  |==>| +==============================+ |
--    |                      |   | | cfmFlowMonitorId = 3         | |
--    | cfmFlowMonitorId = 3 |   | | cfmFlowId = 101              | |
--    | cfmFlowid = 101      |   | | cfmFlowMetricsIntNumber = 1  | |
--    +======================+   | +==============================+ |
--                               | +==============================+ |
--                               | | cfmFlowMonitorId = 3         | |
--                               | | cfmFlowId = 101              | |
--                               | | cfmFlowMetricsIntNumber = 2  | |
--                               | +==============================+ |
--                               |     :                            |
--                               |     :                            |
--                               | +==============================+ |
--                               | | cfmFlowMonitorId = 3         | |
--                               | | cfmFlowId = 101              | |
--                               | | cfmFlowMetricsIntNumber = N  | |
--                               | +==============================+ |
--                               +==================================+
--                                  |                            |
--                                  +============================+
--    
--    The device collects data for a traffic flow over a configured
--    measurement interval, indicated by cfmFlowMetricsIntervalTime.
--    At the end of a measurement interval, the device computes
--    metrics from this data, generating a report.  An EMS/NMS can
--    access this report using the cfmFlowMetricsIntTable.
--    cfmFlowMetricsMaxInterval indicates the maximum number of
--    reports a device will save for the corresponding traffic flow,
--    while cfmFlowMetricsIntervals indicates the number of reports
--    currently saved by the device.
--    
--    The cfmFlowMetricsTable and cfmFlowMetricsIntTable have the
--    intent of providing a foundation for reporting metrics for a
--    traffic flow.  Furthermore, it is the intent that additional MIB
--    modules define extensions to these tables describing specific
--    sets of metrics.  The following list provides some examples:
--    
--        o CISCO-FLOW-MON-MDI-MIB - this MIB module defines
--              extensions that describe MDI metrics defined by
--              RFC-4445.
--    
--        o CISCO-FLOW-MON-RTP-MIB - this MIB module defines
--              extensions that describe RTP metrics defined by
--              RFC-3550.
--    
--        o CISCO-FLOW-MON-IP-CBR-MIB - this MIB module defines
--              extension that describe IP CBR metrics.
--    
--    The tables defined by these MIB modules have a sparse dependent
--    relationhip on the cfmFlowMetricsTable and
--    cfmFlowMetricsIntTable.  An EMS/NMS can determine the metrics
--    collected for a traffic flow from the corresponding instance of
--    cfmFlowMetricsCollected, which is nothing more than a bit
--    string-value for which each bit corresponds to a different set
--    of metrics.
--    
--    FAULT MANAGEMENT
--    ====================
--    
--    At the next level, this MIB module defines tables that describe
--    standing conditions.  A standing condition is a lasting error,
--    fault, or warning resulting from the application of a set of
--    criteria to the state of an entity.
--    
--    For example, a flow monitor ceases monitoring a traffic flow
--    when it has not received any packets for that traffic flow in a
--    configured interval of time.  If flow monitor expires a
--    significantly large number of traffic flows during a measurement
--    interval, then this might signal a fault.
--    
--    In this example, the 'set of criteria' is a rising threshold and
--    the 'state of an entity' is the number of traffic flows
--    expired by a flow monitor.
--    
--    The cfmConditionTable describes the criteria applied to entities
--    managed by the device, specifically flow monitors and traffic
--    flows.  The table groups these criteria into 'conditions
--    profiles'.  The device periodically applies these criteria
--    to an entity and saves the results in a bit string-value
--    associated with the entity.
--    
--    An EMS/NMS can monitor the most recent standing conditions for a
--    flow monitor by retrieving the corresponding instance of
--    cfmFlowMonitorConditions.  Likewise, an EMS/NMS can monitor the
--    most recent standing conditions for a traffic flow by retrieving
--    the corresponding instance of cfmFlowMetricsConditions.
--    
--    It goes without saying that monitoring the standing conditions
--    for significantly large numbers of traffic flows becomes
--    problematic.  To aid an EMS/NMS in this task, this MIB module
--    defines many mechanisms.  The most basic of these mechanisms is
--    the notion of an alarm, which is simply a standing condition for
--    which the device signals changes in state.  This MIB module
--    provides for three means of signaling when the device raises or
--    clears an alarm condition:
--    
--        1)  Logging - the device creates a record of the event and
--                saves it in a historical account.
--    
--        2)  syslog - the device generates a syslog message
--                containing details of the event and sends it to one
--                or more configured syslog server.
--    
--        3)  SNMP - the device generates a SNMP notification
--                containing details of the event and sends it to one
--                or more configured targets.
--    
--    An EMS/NMS can monitor the most recent alarm conditions for a
--    flow monitor by retrieving the corresponding instance of
--    cfmFlowMonitorAlarms.  Likewise, the EMS/NMS can monitor the
--    most recent alarm conditions for a traffic flow by retrieving
--    the corresponding instance of cfmFlowMetricsAlarms.
--    
--    Additionally, the EMS/NMS can poll a summary of alarm conditions
--    maintained for each flow monitor and the traffic flows that it
--    monitors.  The following list summarizes the data contained by
--    this summary:
--    
--        o cfmFlowMonitorAlarmSeverity
--        o cfmFlowMonitorAlarmCriticalCount
--        o cfmFlowMonitorAlarmMajorCount
--        o cfmFlowMonitorAlarmMinorCount
--        o cfmFlowMonitorAlarmWarningCount
--        o cfmFlowMonitorAlarmInfoCount
--    
--    An EMS/NMS can also poll cfmAlarmHistoryLastId, which indicates
--    the value of the identifier assigned to the last record saved to
--    the historical account.  When it observes a change in the value
--    of this object, then it can retrieve the new records from the
--    cfmAlarmHistoryTable.
--    
--    The burden of monitoring alarm conditions for sufficiently large
--    numbers of traffic flows can itself become a daunting task.
--    Thus, this MIB module defines the notion of an alarm group,
--    which represents a single alarm condition that aggregates a
--    standing condition for a set of traffic flows.  The
--    cfmAlarmGroupTable describes the alarm groups configured for a
--    device, and the cfmAlarmGroupFlowTable describes the sets of
--    flows aggregated by these alarm groups.
--    
--    GLOSSARY
--    ============
--    
--    Alarm Action - a method used by the device to signal changes in
--        an alarm condition.
--    
--    Alarm Aggregation - a technique used to efficiently monitor the
--        same standing condition for a flow set.
--    
--    Alarm Condition - a standing condition for which the device
--        signals changes in state.
--    
--    Alarm Group - a flow set for which the device monitors a
--        configured standing condition, raising an alarm when a
--        configured number of flows in the flow set assert the
--        standing standing.
--    
--    Alarm Severity - the relative disposition of an alarm condition
--        when raised by the device.  For example, a provider may
--        regard a flow stop alarm as having a higher severity than a
--        flow's loss fraction exceeding a configured threshold.
--    
--    Flow Monitor - a hardware or software entity that classifies
--        traffic flows, collects flow data, and periodically
--        computes flow metrics.
--    
--    Flow Metric - a measurement that reflects the quality of a
--        traffic flow.
--    
--    Flow Point - represents the ingress or egress of a traffic flow.
--    
--    Flow Set - a group of traffic flows.
--    
--    Measurement Interval - the length of time over which a flow
--        monitor collects data related to a traffic flow, after which
--        the flow monitor computes flow metrics using the collected
--        data.
--    
--    Standing Condition - represents a lasting error, fault, or
--        warning resulting from the application of a set of criteria
--        to the state of an entity, such as a flow monitor or traffic
--        flow.  For example, a flow monitor may assert a standing
--        condition if the number of traffic flows that expire in a
--        measurement interval exceeds a configured threshold.
--    
--    Traffic Flow - 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.
--  RevDate
--    200904080000Z
--  RevDescr
--    The initial version of the MIB module.

ciscoFlowMonitorMIBNotifs OBJECT IDENTIFIER ::= { ciscoFlowMonitorMIB 0 }
ciscoFlowMonitorMIBObjects OBJECT IDENTIFIER ::= { ciscoFlowMonitorMIB 1 }
ciscoFlowMonitorMIBConform OBJECT IDENTIFIER ::= { ciscoFlowMonitorMIB 2 }
ciscoFlowMonitorMIBIds OBJECT IDENTIFIER ::= { ciscoFlowMonitorMIB 3 }
cfmFlowMonitors OBJECT IDENTIFIER ::= { ciscoFlowMonitorMIBObjects 1 }
cfmFlows        OBJECT IDENTIFIER ::= { ciscoFlowMonitorMIBObjects 2 }
cfmFlowMetrics  OBJECT IDENTIFIER ::= { ciscoFlowMonitorMIBObjects 3 }
cfmConditions   OBJECT IDENTIFIER ::= { ciscoFlowMonitorMIBObjects 4 }
cfmAlarmGroups  OBJECT IDENTIFIER ::= { ciscoFlowMonitorMIBObjects 5 }
cfmAlarmHistory OBJECT IDENTIFIER ::= { ciscoFlowMonitorMIBObjects 6 }
cfmNotify       OBJECT IDENTIFIER ::= { ciscoFlowMonitorMIBObjects 7 }
cfmMonitoredElements OBJECT IDENTIFIER ::= { ciscoFlowMonitorMIBIds 1 }
ciscoFlowMonitorMIBCompliances OBJECT IDENTIFIER ::= { ciscoFlowMonitorMIBConform 1 }
ciscoFlowMonitorMIBGroups OBJECT IDENTIFIER ::= { ciscoFlowMonitorMIBConform 2 }

cfmeOther OBJECT IDENTIFIER ::= { cfmMonitoredElements 1 }
-- OBJECT-IDENTITY
--  Status
--    mandatory
--  Descr
--    This object identifier represents a monitored element not
--    recognized by this implementation of the MIB module.

cfmeFlowCount OBJECT IDENTIFIER ::= { cfmMonitoredElements 2 }
-- OBJECT-IDENTITY
--  Status
--    mandatory
--  Descr
--    This object identifier represents the monitored element
--    describing the number of traffic flows currently monitored by a
--    flow monitor (cfmFlowMonitorFlowCount).

cfmeFlowTimeouts OBJECT IDENTIFIER ::= { cfmMonitoredElements 3 }
-- OBJECT-IDENTITY
--  Status
--    mandatory
--  Descr
--    This object identifier represents the monitored element
--    describing the number of traffic flows that expired during the
--    last measurement interval.

cfmeFlowStop OBJECT IDENTIFIER ::= { cfmMonitoredElements 4 }
-- OBJECT-IDENTITY
--  Status
--    mandatory
--  Descr
--    This object identifier represents the monitored element
--    describing the condition that arises when a flow monitor does
--    not receive any packets for a traffic flow during the last
--    measurement interval.

cfmeFlowCumulativeBitRate OBJECT IDENTIFIER ::= { cfmMonitoredElements 5 }
-- OBJECT-IDENTITY
--  Status
--    mandatory
--  Descr
--    This object identifier represents the monitored element
--    describing the average rate at which a flow monitor processes
--    bits contained by packets for a traffic flow
--    (cfmFlowMetricsBitRate).

cfmeFlowCumulativePktRate OBJECT IDENTIFIER ::= { cfmMonitoredElements 6 }
-- OBJECT-IDENTITY
--  Status
--    mandatory
--  Descr
--    This object identifier represents the monitored element
--    describing the average rate at which a flow monitor processes
--    packets for a traffic flow (cfmFlowMetricsPktRate).

cfmeFlowBitRate OBJECT IDENTIFIER ::= { cfmMonitoredElements 7 }
-- OBJECT-IDENTITY
--  Status
--    mandatory
--  Descr
--    This object identifier represents the monitored element
--    describing the average rate at which a flow monitor processes
--    bits contained by packets for a traffic flow during the last
--    measurement interval (cfmFlowMetricsIntBitRate).

cfmeFlowPktRate OBJECT IDENTIFIER ::= { cfmMonitoredElements 8 }
-- OBJECT-IDENTITY
--  Status
--    mandatory
--  Descr
--    This object identifier represents the monitored element
--    describing the average rate at which a flow monitor processes
--    packets for a traffic flow during the last measurement interval
--    (cfmFlowMetricsIntPktRate).

cfmFlowMonitorTable OBJECT-TYPE
    SYNTAX SEQUENCE OF CfmFlowMonitorEntry
    ACCESS not-accessible
    STATUS mandatory
    DESCRIPTION
        "This table lists the flow monitors contained by the device."
    ::= { cfmFlowMonitors 1 }

cfmFlowMonitorEntry OBJECT-TYPE
    SYNTAX CfmFlowMonitorEntry
    ACCESS not-accessible
    STATUS mandatory
    DESCRIPTION
        "An entry describes a flow monitor, which represents a hardware
        or software entity that classifies traffic flows, monitors flow
        data, and periodically computes flow metrics.
        
        A simple device may only support a single flow monitor, where a
        more sophisticated device may support more than one flow
        monitor.
        
        A device supporting multiple flow monitors creates a row in the
        cfmFlowMonitorTable when it recognizes the addition of a new
        flow monitor, such as might occur upon the insertion of a
        line card that supports flow monitoring.  Likewise, such a
        device destroys a row in the cfmFlowMonitorTable when a flow
        monitor has been removed."
    INDEX { cfmFlowMonitorId }
    ::= { cfmFlowMonitorTable 1 }

CfmFlowMonitorEntry ::= SEQUENCE {
    cfmFlowMonitorId FlowMonitorIdentifier,
    cfmFlowMonitorDescr SnmpAdminString,
    cfmFlowMonitorCaps FlowMetrics,
    cfmFlowMonitorFlowCount Gauge,
    cfmFlowMonitorConditionsProfile FlowMonitorConditionsProfileOrZero,
    cfmFlowMonitorConditions FlowMonitorConditions,
    cfmFlowMonitorAlarms FlowMonitorConditions,
    cfmFlowMonitorAlarmSeverity CiscoAlarmSeverity,
    cfmFlowMonitorAlarmCriticalCount Gauge,
    cfmFlowMonitorAlarmMajorCount Gauge,
    cfmFlowMonitorAlarmMinorCount Gauge,
    cfmFlowMonitorAlarmWarningCount Gauge,
    cfmFlowMonitorAlarmInfoCount Gauge
    }

cfmFlowMonitorId OBJECT-TYPE
    SYNTAX FlowMonitorIdentifier
--    Rsyntax Gauge(1..4294967295)
    ACCESS not-accessible
    STATUS mandatory
    DESCRIPTION
        "This object indicates an arbitrary integer-value that uniquely
        identifies the flow monitor.  Observe that the value assigned to
        a flow monitor does not necessarily persist across restarts or
        the
        removal-insertion of a physical entity supporting flow
        monitor(s)."
    ::= { cfmFlowMonitorEntry 1 }

cfmFlowMonitorDescr OBJECT-TYPE
    SYNTAX SnmpAdminString
--    Rsyntax OCTET STRING(SIZE(0..255))
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates a human-readable description for the flow
        monitor."
    ::= { cfmFlowMonitorEntry 2 }

cfmFlowMonitorCaps OBJECT-TYPE
    SYNTAX FlowMetrics
--    Rsyntax OCTET STRING(SIZE(1..2))
--         BITS are:
--           mdi(0)
--           rtp(1)
--           ipCbr(2)
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the capabilities of the flow monitor.
        Specifically, the value of this column indicates a '1' for each
        set of flow metrics the flow monitor is capable of measuring."
    ::= { cfmFlowMonitorEntry 3 }

cfmFlowMonitorFlowCount OBJECT-TYPE
    SYNTAX Gauge
--  Units
--    traffic flows
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the number of traffic flows currently
        monitored by the flow monitor."
    ::= { cfmFlowMonitorEntry 4 }

cfmFlowMonitorConditionsProfile OBJECT-TYPE
    SYNTAX FlowMonitorConditionsProfileOrZero
--    Rsyntax Gauge(0..4294967295)
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the conditions profile that contains the
        descriptions of the standing conditions monitored for the flow
        monitor.
        
        If the flow monitor does not have an associated conditions
        profile, then the value of this column must be zero."
    ::= { cfmFlowMonitorEntry 5 }

cfmFlowMonitorConditions OBJECT-TYPE
    SYNTAX FlowMonitorConditions
--    Rsyntax OCTET STRING(SIZE(0..255))
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the current standing conditions for the
        flow monitor.
        
        If the flow monitor does not have an associated conditions
        profile, then the value of this column must be the null string."
    ::= { cfmFlowMonitorEntry 6 }

cfmFlowMonitorAlarms OBJECT-TYPE
    SYNTAX FlowMonitorConditions
--    Rsyntax OCTET STRING(SIZE(0..255))
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the current alarm conditions for the flow
        monitor.
        
        If the flow monitor does not have an associated conditions
        profile, then the value of this column must be the null string."
    ::= { cfmFlowMonitorEntry 7 }

cfmFlowMonitorAlarmSeverity OBJECT-TYPE
    SYNTAX CiscoAlarmSeverity
--    Rsyntax INTEGER {
--        cleared(1),
--        indeterminate(2),
--        critical(3),
--        major(4),
--        minor(5),
--        warning(6),
--        info(7)
--        }
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the high severity alarm condition
        currently raised by the flow monitor and the traffic flows
        monitored by the flow monitor.
        
        If no alarm is raised for the flow monitor and the traffic
        flows monitored for the flow monitor, then the value of this
        column is 'cleared'."
    ::= { cfmFlowMonitorEntry 8 }

cfmFlowMonitorAlarmCriticalCount OBJECT-TYPE
    SYNTAX Gauge
--  Units
--    alarms
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the number of alarm conditions with a
        critical severity currently raised for traffic flows monitored
        by the flow monitor."
    ::= { cfmFlowMonitorEntry 9 }

cfmFlowMonitorAlarmMajorCount OBJECT-TYPE
    SYNTAX Gauge
--  Units
--    alarms
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the number of alarm conditions with a
        major severity currently raised for traffic flows monitored by
        the flow monitor."
    ::= { cfmFlowMonitorEntry 10 }

cfmFlowMonitorAlarmMinorCount OBJECT-TYPE
    SYNTAX Gauge
--  Units
--    alarms
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the number of alarm conditions with a
        minor severity currently raised for traffic flows monitored by
        the flow monitor."
    ::= { cfmFlowMonitorEntry 11 }

cfmFlowMonitorAlarmWarningCount OBJECT-TYPE
    SYNTAX Gauge
--  Units
--    alarms
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the number of alarm conditions with a
        warning severity currently raised for traffic flows monitored by
        the flow monitor."
    ::= { cfmFlowMonitorEntry 12 }

cfmFlowMonitorAlarmInfoCount OBJECT-TYPE
    SYNTAX Gauge
--  Units
--    alarms
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the number of alarm conditions with a
        informational severity currently raised for traffic flows
        monitored by the flow monitor."
    ::= { cfmFlowMonitorEntry 13 }

cfmFlowMonitorTableChanged OBJECT-TYPE
    SYNTAX TimeStamp
--    Rsyntax TimeTicks
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the value of sysUpTime the last time the
        device created or destroyed a row in cfmFlowMonitorTable."
    ::= { cfmFlowMonitors 2 }

cfmFlowTable OBJECT-TYPE
    SYNTAX SEQUENCE OF CfmFlowEntry
    ACCESS not-accessible
    STATUS mandatory
    DESCRIPTION
        "This table lists the traffic flows monitored by each flow
        monitor supported by the device.
        
        This table has an expansion dependent relationship on the
        cfmFlowMonitorTable, containing zero or more rows for each flow
        monitor."
    ::= { cfmFlows 1 }

cfmFlowEntry OBJECT-TYPE
    SYNTAX CfmFlowEntry
    ACCESS not-accessible
    STATUS mandatory
    DESCRIPTION
        "An entry describes a traffic flow monitored by a flow monitor.
        
        The device creates a row in the cfmFlowTable when a flow monitor
        starts monitoring a traffic flow.  Likewise, the device
        destroys a row in the cfmFlowTable when a traffic flow monitored
        by a flow monitor has timed out."
    INDEX { cfmFlowMonitorId, cfmFlowId }
    ::= { cfmFlowTable 1 }

CfmFlowEntry ::= SEQUENCE {
    cfmFlowId FlowIdentifier,
    cfmFlowDescr SnmpAdminString,
    cfmFlowNext RowPointer,
    cfmFlowCreateTime TimeStamp,
    cfmFlowDiscontinuityTime TimeStamp,
    cfmFlowExpirationTime Gauge,
    cfmFlowDirection INTEGER,
    cfmFlowAdminStatus INTEGER,
    cfmFlowOperStatus INTEGER,
    cfmFlowIngressType FlowPointType,
    cfmFlowIngress FlowPointIdentifier,
    cfmFlowEgressType FlowPointType,
    cfmFlowEgress FlowPointIdentifier
    }

cfmFlowId OBJECT-TYPE
    SYNTAX FlowIdentifier
--    Rsyntax Gauge(1..4294967295)
    ACCESS not-accessible
    STATUS mandatory
    DESCRIPTION
        "This object indicates an arbitrary integer-value that uniquely
        identifies a traffic flow in the scope of the flow monitor that
        learned it.  Observe that the value assigned to a flow does not
        necessarily persist across restarts or the removal-insertion of
        a
        physical entity supporting flow monitor(s)."
    ::= { cfmFlowEntry 1 }

cfmFlowDescr OBJECT-TYPE
    SYNTAX SnmpAdminString
--    Rsyntax OCTET STRING(SIZE(0..255))
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates a human-readable description of the
        traffic flow."
    ::= { cfmFlowEntry 2 }

cfmFlowNext OBJECT-TYPE
    SYNTAX RowPointer
--    Rsyntax OBJECT IDENTIFIER
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates a reference to a row in another table
        containing additional data relating to the traffic flow."
    ::= { cfmFlowEntry 3 }

cfmFlowCreateTime OBJECT-TYPE
    SYNTAX TimeStamp
--    Rsyntax TimeTicks
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the value of sysUpTime when the row was
        created."
    ::= { cfmFlowEntry 4 }

cfmFlowDiscontinuityTime OBJECT-TYPE
    SYNTAX TimeStamp
--    Rsyntax TimeTicks
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the value of sysUpTime on the most
        recent occasion at which any one or more of counters associated
        with the traffic flow suffered a discontinuity (e.g., process
        restart or failover event)."
    ::= { cfmFlowEntry 5 }

cfmFlowExpirationTime OBJECT-TYPE
    SYNTAX Gauge(0..4294967295)
--  Units
--    seconds
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the expiration interval for the traffic
        flow.  If the flow monitor receives no packets for the traffic
        flow in this interval, then it expires the flow; that is, it
        stops monitoring the traffic and removes the corresponding row
        from the cfmFlowTable.  If this column is '0', then the traffic
        flow was statically configured (as opposed to dynamically
        learned) and it will never expire."
    ::= { cfmFlowEntry 6 }

cfmFlowDirection OBJECT-TYPE
    SYNTAX INTEGER {
        unknown(1),
        ingress(2),
        egress(3)
        }
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the direction of the traffic flow where
        the flow monitor collects data:
        
            'unknown'
                The SNMP entity does not know the direction of the
                traffic flow at the point the flow monitor collects
                data.
        
            'ingress'
                The flow monitor collects data at the point where the
                traffic flow enters the devices
        
            'egress'
                The flow monitor collects data at the point where the
                traffic flow leaves the device."
    ::= { cfmFlowEntry 7 }

cfmFlowAdminStatus OBJECT-TYPE
    SYNTAX INTEGER {
        enabled(1),
        disabled(2),
        expire(3)
        }
    ACCESS read-write
    STATUS mandatory
    DESCRIPTION
        "This object specifies the desired state of the traffic flow:
        
        'enabled'
            The corresponding flow monitor is collecting data and
            computing metrics for the traffic flow.
        
        'disabled'
            The corresponding flow monitor is not collecting data or
            computing metrics for the traffic flow.  As long as a
            traffic flow remains in this state, the flow monitor
            will not expire the traffic flow.
        
        'expire'
            When this column is set to this value, it forces the
            traffic flow to expire.  It is not possible to return this
            value in a response to a retrieval operation."
    DEFVAL { enabled }
    ::= { cfmFlowEntry 8 }

cfmFlowOperStatus OBJECT-TYPE
    SYNTAX INTEGER {
        enabled(1),
        disabled(2)
        }
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the operational state of the traffic
        flow:
        
            'enabled'
                The corresponding flow monitor is actively monitoring
                the traffic flow.
        
            'disabled'
                The corresponding flow monitor is neither collecting
                data, nor computing metrics for the traffic flow."
    ::= { cfmFlowEntry 9 }

cfmFlowIngressType OBJECT-TYPE
    SYNTAX FlowPointType
--    Rsyntax INTEGER {
--        other(1),
--        unknown(2),
--        none(3),
--        interface(4),
--        dot1qVlan(5)
--        }
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the type of port that receives the
        traffic for this traffic flow."
    ::= { cfmFlowEntry 10 }

cfmFlowIngress OBJECT-TYPE
    SYNTAX FlowPointIdentifier
--    Rsyntax OCTET STRING(SIZE(0..255))
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object identifies the port that receives the traffic for
        this
        traffic flow."
    ::= { cfmFlowEntry 11 }

cfmFlowEgressType OBJECT-TYPE
    SYNTAX FlowPointType
--    Rsyntax INTEGER {
--        other(1),
--        unknown(2),
--        none(3),
--        interface(4),
--        dot1qVlan(5)
--        }
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the type of port that transmits the
        traffic for this traffic flow."
    ::= { cfmFlowEntry 12 }

cfmFlowEgress OBJECT-TYPE
    SYNTAX FlowPointIdentifier
--    Rsyntax OCTET STRING(SIZE(0..255))
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object identifies the port that transmits the traffic for
        this traffic flow."
    ::= { cfmFlowEntry 13 }

cfmFlowTableChanged OBJECT-TYPE
    SYNTAX TimeStamp
--    Rsyntax TimeTicks
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the value of sysUpTime the last time the
        device created or destroyed a row in cfmFlowTable."
    ::= { cfmFlows 2 }

cfmFlowL2VlanTable OBJECT-TYPE
    SYNTAX SEQUENCE OF CfmFlowL2VlanEntry
    ACCESS not-accessible
    STATUS mandatory
    DESCRIPTION
        "This table contains additional data relating to the L2 VLAN
        carrying traffic flows monitored by flow monitors.
        
        This table has a sparse dependent relationship on the
        cfmFlowTable."
    ::= { cfmFlows 3 }

cfmFlowL2VlanEntry OBJECT-TYPE
    SYNTAX CfmFlowL2VlanEntry
    ACCESS not-accessible
    STATUS mandatory
    DESCRIPTION
        "An entry describes data relating to the L2 VLAN carrying the
        corresponding traffic flow.
        
        A device creates a row in the cfmFlowL2VlanTable when a flow
        monitor has data relating to the L2 VLAN carrying a
        corresponding traffic flow.  The device destroys a row in the
        cfmFlowL2VlanTable when the corresponding traffic flow times
        out."
    INDEX { cfmFlowMonitorId, cfmFlowId }
    ::= { cfmFlowL2VlanTable 1 }

CfmFlowL2VlanEntry ::= SEQUENCE {
    cfmFlowL2VlanNext RowPointer,
    cfmFlowL2VlanId VlanId,
    cfmFlowL2VlanCos Layer2Cos
    }

cfmFlowL2VlanNext OBJECT-TYPE
    SYNTAX RowPointer
--    Rsyntax OBJECT IDENTIFIER
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates a reference to a row in another table
        containing additional data relating to the corresponding traffic
        flow."
    ::= { cfmFlowL2VlanEntry 1 }

cfmFlowL2VlanId OBJECT-TYPE
    SYNTAX VlanId
--    Rsyntax INTEGER(1..4094)
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the tag associated with the VLAN
        carrying the corresponding traffic flow."
    ::= { cfmFlowL2VlanEntry 2 }

cfmFlowL2VlanCos OBJECT-TYPE
    SYNTAX Layer2Cos
--    Rsyntax INTEGER(0..7)
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the layer 2 COS assigned to the
        corresponding traffic flow."
    ::= { cfmFlowL2VlanEntry 3 }

cfmFlowL2VlanTableChanged OBJECT-TYPE
    SYNTAX TimeStamp
--    Rsyntax TimeTicks
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the value of sysUpTime the last time the
        device changed the cfmFlowL2VlanTable."
    ::= { cfmFlows 4 }

cfmFlowIpTable OBJECT-TYPE
    SYNTAX SEQUENCE OF CfmFlowIpEntry
    ACCESS not-accessible
    STATUS mandatory
    DESCRIPTION
        "This table contains additional data relating to the IP carrying
        the corresponding traffic flow.
        
        This table has a sparse dependent relationship on the
        cfmFlowTable."
    ::= { cfmFlows 5 }

cfmFlowIpEntry OBJECT-TYPE
    SYNTAX CfmFlowIpEntry
    ACCESS not-accessible
    STATUS mandatory
    DESCRIPTION
        "An entry describes data relating to the IP carrying the
        corresponding traffic flow.
        
        A device creates a row in the cfmFlowIpTable when the flow
        monitor has data relating to the IP carrying the corresponding
        traffic flow.   The device destroys a row in this table when the
        corresponding traffic flow times out."
    INDEX { cfmFlowMonitorId, cfmFlowId }
    ::= { cfmFlowIpTable 1 }

CfmFlowIpEntry ::= SEQUENCE {
    cfmFlowIpNext RowPointer,
    cfmFlowIpAddrType InetAddressType,
    cfmFlowIpAddrSrc InetAddress,
    cfmFlowIpAddrDst InetAddress,
    cfmFlowIpValid OCTET STRING,
    cfmFlowIpTrafficClass Gauge,
    cfmFlowIpHopLimit Gauge
    }

cfmFlowIpNext OBJECT-TYPE
    SYNTAX RowPointer
--    Rsyntax OBJECT IDENTIFIER
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates a reference to a row in another table
        containing additional data relating to the corresponding traffic
        flow."
    ::= { cfmFlowIpEntry 1 }

cfmFlowIpAddrType OBJECT-TYPE
    SYNTAX InetAddressType
--    Rsyntax INTEGER {
--        ?? enum value of zero may cause problems
--        unknown(0),
--        ipv4(1),
--        ipv6(2),
--        ipv4z(3),
--        ipv6z(4),
--        dns(16)
--        }
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the type of IP address indicated by the
        corresponding instances of cfmFlowIpAddrSrc and
        cfmFlowIpAddrDst."
    ::= { cfmFlowIpEntry 2 }

cfmFlowIpAddrSrc OBJECT-TYPE
    SYNTAX InetAddress
--    Rsyntax OCTET STRING(SIZE(0..255))
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the source IP address of the
        corresponding traffic flow."
    ::= { cfmFlowIpEntry 3 }

cfmFlowIpAddrDst OBJECT-TYPE
    SYNTAX InetAddress
--    Rsyntax OCTET STRING(SIZE(0..255))
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the destination IP address of the
        corresponding traffic flow."
    ::= { cfmFlowIpEntry 4 }

cfmFlowIpValid OBJECT-TYPE
    SYNTAX OCTET STRING(SIZE(1..2))
        -- BITS are:
        --   trafficClass(0)
        --   hopLimit(1)
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates whether the corresponding instances of
        cfmFlowIpTrafficClass and cfmFlowIpHopLimit are valid."
    ::= { cfmFlowIpEntry 5 }

cfmFlowIpTrafficClass OBJECT-TYPE
    SYNTAX Gauge(0..255)
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the traffic class of the corresponding
        traffic flow.
        
        If version 4 of the IP carries the traffic flow, then the value
        of this column corresponds to the 'Type of Service' field of the
        IP header contained by packets in the traffic flow.
        
        If version 6 of the IP carries the traffic flow, then the value
        of this column corresponds to the '' field of the IP header
        contained by packets in the traffic flow.
        
        The value of this column is valid only if the 'trafficClass'
        bit of the corresponding instance of cfmFlowIpValid is '1'."
    REFERENCE
        "J. Postel, 'Internet Protocol', RFC-791, September 1981.
        
        J. Deering and R. Hinden, 'Internet Protocol, Version 6 (IPv6)
        Specification', RFC-2460, December 1998."
    ::= { cfmFlowIpEntry 6 }

cfmFlowIpHopLimit OBJECT-TYPE
    SYNTAX Gauge(0..255)
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the hop limit of the corresponding
        traffic flow.
        
        If version 4 of the IP carries the traffic flow, then the value
        of this column corresponds to the 'Time to Live' field of the IP
        header contained by packets in the traffic flow (as observed by
        the flow monitor).
        
        If version 6 of the IP carries the traffic flow, then the value
        of this column corresponds to the 'Hop Limit' field of the IP
        header contained by packets in the traffic flow (as observed by
        the flow monitor).
        
        The value of this column is valid only if the 'hopLimit' bit of
        the corresponding instance of cfmFlowIpValid is '1'."
    REFERENCE
        "J. Postel, 'Internet Protocol', RFC-791, September 1981.
        
        J. Deering and R. Hinden, 'Internet Protocol, Version 6
        (IPv6)
        Specification', RFC-2460, December 1998."
    ::= { cfmFlowIpEntry 7 }

cfmFlowIpTableChanged OBJECT-TYPE
    SYNTAX TimeStamp
--    Rsyntax TimeTicks
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the value of sysUpTime the last time the
        device changed the cfmFlowIpTable."
    ::= { cfmFlows 6 }

cfmFlowUdpTable OBJECT-TYPE
    SYNTAX SEQUENCE OF CfmFlowUdpEntry
    ACCESS not-accessible
    STATUS mandatory
    DESCRIPTION
        "This table contains additional data relating to the UDP
        carrying the corresponding traffic flow.
        
        This table has a sparse dependent relationship on the
        cfmFlowTable."
    ::= { cfmFlows 7 }

cfmFlowUdpEntry OBJECT-TYPE
    SYNTAX CfmFlowUdpEntry
    ACCESS not-accessible
    STATUS mandatory
    DESCRIPTION
        "An entry describes data relating to the UDP carrying the
        corresponding traffic flow.
        
        A device creates a row in the cfmFlowUdpTable when the flow
        monitor has data relating to the UDP carrying the corresponding
        traffic flow.  The device destroys a row in this table when the
        corresponding traffic flow times out."
    INDEX { cfmFlowMonitorId, cfmFlowId }
    ::= { cfmFlowUdpTable 1 }

CfmFlowUdpEntry ::= SEQUENCE {
    cfmFlowUdpNext RowPointer,
    cfmFlowUdpPortSrc InetPortNumber,
    cfmFlowUdpPortDst InetPortNumber
    }

cfmFlowUdpNext OBJECT-TYPE
    SYNTAX RowPointer
--    Rsyntax OBJECT IDENTIFIER
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates a reference to a row in another table
        containing additional data relating to the corresponding traffic
        flow."
    ::= { cfmFlowUdpEntry 1 }

cfmFlowUdpPortSrc OBJECT-TYPE
    SYNTAX InetPortNumber
--    Rsyntax Gauge(0..65535)
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the source UDP port number of the
        corresponding traffic flow."
    ::= { cfmFlowUdpEntry 2 }

cfmFlowUdpPortDst OBJECT-TYPE
    SYNTAX InetPortNumber
--    Rsyntax Gauge(0..65535)
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the destination UDP port number of the
        corresponding traffic flow."
    ::= { cfmFlowUdpEntry 3 }

cfmFlowUdpTableChanged OBJECT-TYPE
    SYNTAX TimeStamp
--    Rsyntax TimeTicks
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the value of sysUpTime the last time the
        device changed the cfmFlowUdpTable."
    ::= { cfmFlows 8 }

cfmFlowTcpTable OBJECT-TYPE
    SYNTAX SEQUENCE OF CfmFlowTcpEntry
    ACCESS not-accessible
    STATUS mandatory
    DESCRIPTION
        "This table contains additional data relating to the TCP
        carrying the corresponding traffic flow.
        
        This table has a sparse dependent relationship on the
        cfmFlowTable."
    ::= { cfmFlows 9 }

cfmFlowTcpEntry OBJECT-TYPE
    SYNTAX CfmFlowTcpEntry
    ACCESS not-accessible
    STATUS mandatory
    DESCRIPTION
        "An entry describes data relating to the TCP carrying the
        corresponding traffic flow.
        
        A device creates a row in the cfmFlowTcpTable when the flow
        monitor has data relating to the TCP carrying the corresponding
        traffic flow.  The device destroys a row in this table when the
        corresponding traffic flow times out."
    INDEX { cfmFlowMonitorId, cfmFlowId }
    ::= { cfmFlowTcpTable 1 }

CfmFlowTcpEntry ::= SEQUENCE {
    cfmFlowTcpNext RowPointer,
    cfmFlowTcpPortSrc InetPortNumber,
    cfmFlowTcpPortDst InetPortNumber
    }

cfmFlowTcpNext OBJECT-TYPE
    SYNTAX RowPointer
--    Rsyntax OBJECT IDENTIFIER
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates a reference to a row in another table
        containing additional data relating to the corresponding traffic
        flow."
    ::= { cfmFlowTcpEntry 1 }

cfmFlowTcpPortSrc OBJECT-TYPE
    SYNTAX InetPortNumber
--    Rsyntax Gauge(0..65535)
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the source TCP port number of the
        corresponding traffic flow."
    ::= { cfmFlowTcpEntry 2 }

cfmFlowTcpPortDst OBJECT-TYPE
    SYNTAX InetPortNumber
--    Rsyntax Gauge(0..65535)
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the destination TCP port number of the
        corresponding traffic flow."
    ::= { cfmFlowTcpEntry 3 }

cfmFlowTcpTableChanged OBJECT-TYPE
    SYNTAX TimeStamp
--    Rsyntax TimeTicks
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the value of sysUpTime the last time the
        device changed the cfmFlowTcpTable."
    ::= { cfmFlows 10 }

cfmFlowRtpTable OBJECT-TYPE
    SYNTAX SEQUENCE OF CfmFlowRtpEntry
    ACCESS not-accessible
    STATUS mandatory
    DESCRIPTION
        "This table contains additional data relating to the RTP
        carrying the corresponding traffic flow.
        
        This table has a sparse dependent relationship on the
        cfmFlowTable."
    ::= { cfmFlows 11 }

cfmFlowRtpEntry OBJECT-TYPE
    SYNTAX CfmFlowRtpEntry
    ACCESS not-accessible
    STATUS mandatory
    DESCRIPTION
        "An entry describes data relating to the RTP carrying the
        corresponding traffic flow.
        
        A device creates a row in the cfmFlowRtpTable when the flow
        monitor has data relating to the RTP carrying the corresponding
        traffic flow.  The device destroys a row in this table when the
        corresponding traffic flow times out."
    INDEX { cfmFlowMonitorId, cfmFlowId }
    ::= { cfmFlowRtpTable 1 }

CfmFlowRtpEntry ::= SEQUENCE {
    cfmFlowRtpNext RowPointer,
    cfmFlowRtpVersion Gauge,
    cfmFlowRtpSsrc Gauge,
    cfmFlowRtpPayloadType Gauge
    }

cfmFlowRtpNext OBJECT-TYPE
    SYNTAX RowPointer
--    Rsyntax OBJECT IDENTIFIER
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates a reference to a row in another table
        containing additional data relating to the corresponding traffic
        flow."
    ::= { cfmFlowRtpEntry 1 }

cfmFlowRtpVersion OBJECT-TYPE
    SYNTAX Gauge(0..3)
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the RTP version of the corresponding
        traffic flow."
    ::= { cfmFlowRtpEntry 2 }

cfmFlowRtpSsrc OBJECT-TYPE
    SYNTAX Gauge(0..4294967295)
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the RTP synchronized source (SSRC) of
        the corresponding traffic flow."
    ::= { cfmFlowRtpEntry 3 }

cfmFlowRtpPayloadType OBJECT-TYPE
    SYNTAX Gauge(0..127)
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the RTP payload type of the
        corresponding traffic flow."
    ::= { cfmFlowRtpEntry 4 }

cfmFlowRtpTableChanged OBJECT-TYPE
    SYNTAX TimeStamp
--    Rsyntax TimeTicks
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the value of sysUpTime the last time the
        device changed the cfmFlowRtpTable."
    ::= { cfmFlows 12 }

cfmFlowMetricsTable OBJECT-TYPE
    SYNTAX SEQUENCE OF CfmFlowMetricsEntry
    ACCESS not-accessible
    STATUS mandatory
    DESCRIPTION
        "This table contains aggregate metrics and data relating to the
        collection of metrics for the traffic flows monitored by each of
        the flow monitors supported by the device.
        
        This table has a sparse dependent relationship on the
        cfmFlowTable, containing a row for each row in the cfmFlowTable
        for which the device is actively monitoring."
    ::= { cfmFlowMetrics 1 }

cfmFlowMetricsEntry OBJECT-TYPE
    SYNTAX CfmFlowMetricsEntry
    ACCESS not-accessible
    STATUS mandatory
    DESCRIPTION
        "An entry contains aggregate metrics and data relating to the
        collection of metrics for a corresponding traffic flow.
        
        The device creates a row in the cfmFlowMetricsTable when a flow
        monitor starts monitoring a traffic flow.  Likewise, the device
        destroys a row in the cfmFlowMetricsTable when the corresponding
        flow monitor has ceased monitoring the traffic flow (e.g., when
        a traffic flow has timed out).  Observe that the device does not
        destroy the row unless it has not received packets for the
        corresponding flow for an interval of time equal to the flow's
        expiration time, thereby giving an EMS/NMS ample time to
        retrieve any data relating to the flow."
    INDEX { cfmFlowMonitorId, cfmFlowId }
    ::= { cfmFlowMetricsTable 1 }

CfmFlowMetricsEntry ::= SEQUENCE {
    cfmFlowMetricsCollected FlowMetrics,
    cfmFlowMetricsIntervalTime Gauge,
    cfmFlowMetricsMaxIntervals Gauge,
    cfmFlowMetricsElapsedTime Gauge,
    cfmFlowMetricsIntervals Gauge,
    cfmFlowMetricsInvalidIntervals Gauge,
    cfmFlowMetricsConditionsProfile FlowMonitorConditionsProfileOrZero,
    cfmFlowMetricsConditions FlowMonitorConditions,
    cfmFlowMetricsAlarms FlowMonitorConditions,
    cfmFlowMetricsAlarmSeverity CiscoAlarmSeverity,
    cfmFlowMetricsPkts Counter,
    cfmFlowMetricsOctets Counter,
    cfmFlowMetricsBitRateUnits FlowBitRateUnits,
    cfmFlowMetricsBitRate Gauge,
    cfmFlowMetricsPktRate Gauge
    }

cfmFlowMetricsCollected OBJECT-TYPE
    SYNTAX FlowMetrics
--    Rsyntax OCTET STRING(SIZE(1..2))
--         BITS are:
--           mdi(0)
--           rtp(1)
--           ipCbr(2)
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the metrics collected by the
        corresponding flow monitor for the corresponding traffic flow."
    ::= { cfmFlowMetricsEntry 1 }

cfmFlowMetricsIntervalTime OBJECT-TYPE
    SYNTAX Gauge(1..3600)
--  Units
--    seconds
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the length of the measurement interval
        for the corresponding traffic flow.  The flow monitor computes
        the collected metrics for the corresponding traffic flow with a
        frequency equal to the inverse of the value of this column."
    ::= { cfmFlowMetricsEntry 2 }

cfmFlowMetricsMaxIntervals OBJECT-TYPE
    SYNTAX Gauge(0..4294967295)
--  Units
--    intervals
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the maximum number of measurement
        intervals for which the corresponding flow monitor maintains
        metrics for the corresponding traffic flow.
        
        If the value of this column is '0', then the corresponding flow
        monitor does not maintain historical metrics for the
        corresponding traffic flow."
    ::= { cfmFlowMetricsEntry 3 }

cfmFlowMetricsElapsedTime OBJECT-TYPE
    SYNTAX Gauge
--  Units
--    seconds
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the time that has elapsed since the
        beginning of the current measurement interval."
    ::= { cfmFlowMetricsEntry 4 }

cfmFlowMetricsIntervals OBJECT-TYPE
    SYNTAX Gauge
--  Units
--    intervals
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the number of measurement intervals for
        which data has been collected."
    ::= { cfmFlowMetricsEntry 5 }

cfmFlowMetricsInvalidIntervals OBJECT-TYPE
    SYNTAX Gauge
--  Units
--    intervals
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the number of measurement intervals in
        the set of collected measurement intervals that contain invalid
        data."
    ::= { cfmFlowMetricsEntry 6 }

cfmFlowMetricsConditionsProfile OBJECT-TYPE
    SYNTAX FlowMonitorConditionsProfileOrZero
--    Rsyntax Gauge(0..4294967295)
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the conditions profile that contains the
        descriptions of the standing conditions monitored for the
        traffic flow.
        
        If the flow does not have an associated conditions profile,
        then the value of this column must be zero."
    ::= { cfmFlowMetricsEntry 7 }

cfmFlowMetricsConditions OBJECT-TYPE
    SYNTAX FlowMonitorConditions
--    Rsyntax OCTET STRING(SIZE(0..255))
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the current standing conditions for the
        corresponding traffic flow.
        
        If the flow does not have an associated conditions profile, then
        the value of this column must be the null string."
    ::= { cfmFlowMetricsEntry 8 }

cfmFlowMetricsAlarms OBJECT-TYPE
    SYNTAX FlowMonitorConditions
--    Rsyntax OCTET STRING(SIZE(0..255))
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the current alarm conditions for the
        corresponding traffic flow.
        
        If the flow does not have an associated conditions profile, then
        the value of this column must be the null string."
    ::= { cfmFlowMetricsEntry 9 }

cfmFlowMetricsAlarmSeverity OBJECT-TYPE
    SYNTAX CiscoAlarmSeverity
--    Rsyntax INTEGER {
--        cleared(1),
--        indeterminate(2),
--        critical(3),
--        major(4),
--        minor(5),
--        warning(6),
--        info(7)
--        }
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the highest severity alarm currently
        raised for the corresponding traffic flow.
        
        If no alarm is raised for the corresponding traffic flow, then
        the value of this column is 'cleared'."
    ::= { cfmFlowMetricsEntry 10 }

cfmFlowMetricsPkts OBJECT-TYPE
    SYNTAX --?? syntax is not convertable to SMIv1
           Counter
--  Units
--    packets
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the total number of packets processed by
        the corresponding flow monitor for the corresponding traffic
        flow."
    ::= { cfmFlowMetricsEntry 11 }

cfmFlowMetricsOctets OBJECT-TYPE
    SYNTAX --?? syntax is not convertable to SMIv1
           Counter
--  Units
--    octets
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the total number of octets contained by
        the packets processed by the corresponding flow monitor for the
        corresponding traffic flow."
    ::= { cfmFlowMetricsEntry 12 }

cfmFlowMetricsBitRateUnits OBJECT-TYPE
    SYNTAX FlowBitRateUnits
--    Rsyntax INTEGER {
--        bps(1),
--        kbps(2),
--        mbps(3),
--        gbps(4)
--        }
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the units for the corresponding instance
        of cfmFlowMetricsBitRate."
    ::= { cfmFlowMetricsEntry 13 }

cfmFlowMetricsBitRate OBJECT-TYPE
    SYNTAX Gauge
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the average bit rate at which the
        corresponding flow monitor is processing data for the
        corresponding traffic flow.  This value is cumulative over the
        lifetime of the traffic flow."
    ::= { cfmFlowMetricsEntry 14 }

cfmFlowMetricsPktRate OBJECT-TYPE
    SYNTAX Gauge
--  Units
--    packets per second
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the average packet rate at which the
        corresponding flow monitor is processing data for the
        corresponding traffic flow.  This value is cumulative over the
        lifetime of the traffic flow."
    ::= { cfmFlowMetricsEntry 15 }

cfmFlowMetricsTableChanged OBJECT-TYPE
    SYNTAX TimeStamp
--    Rsyntax TimeTicks
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the value of sysUpTime the last time the
        device created or destroyed a row in cfmFlowMetricsTable."
    ::= { cfmFlowMetrics 2 }

cfmFlowMetricsIntTable OBJECT-TYPE
    SYNTAX SEQUENCE OF CfmFlowMetricsIntEntry
    ACCESS not-accessible
    STATUS mandatory
    DESCRIPTION
        "This table contains historic metrics for the traffic flows
        monitored by each of the flow monitors supported by the device.
        
        This table has an expansion dependent relationship on the
        cfmFlowMetricsTable, containing zero or more rows for each
        traffic flow."
    ::= { cfmFlowMetrics 3 }

cfmFlowMetricsIntEntry OBJECT-TYPE
    SYNTAX CfmFlowMetricsIntEntry
    ACCESS not-accessible
    STATUS mandatory
    DESCRIPTION
        "An entry describes metrics collected for a previous
        measurement interval for a corresponding traffic flow."
    INDEX { cfmFlowMonitorId, cfmFlowId, cfmFlowMetricsIntNumber }
    ::= { cfmFlowMetricsIntTable 1 }

CfmFlowMetricsIntEntry ::= SEQUENCE {
    cfmFlowMetricsIntNumber Gauge,
    cfmFlowMetricsIntValid TruthValue,
    cfmFlowMetricsIntTime TimeStamp,
    cfmFlowMetricsIntConditions FlowMonitorConditions,
    cfmFlowMetricsIntAlarms FlowMonitorConditions,
    cfmFlowMetricsIntAlarmSeverity CiscoAlarmSeverity,
    cfmFlowMetricsIntPkts ReportIntervalCount,
    cfmFlowMetricsIntOctets ReportIntervalCount,
    cfmFlowMetricsIntBitRateUnits FlowBitRateUnits,
    cfmFlowMetricsIntBitRate ReportIntervalCount,
    cfmFlowMetricsIntPktRate ReportIntervalCount
    }

cfmFlowMetricsIntNumber OBJECT-TYPE
    SYNTAX Gauge(1..4294967295)
    ACCESS not-accessible
    STATUS mandatory
    DESCRIPTION
        "This object indicates the interval number identifying the
        measurement interval.  The measurement interval identified by
        the value '1' represents the most recent measurement interval,
        and the interval identified by the value (n) represents the
        interval immediately preceding the interval identified by the
        value (n-1)."
    ::= { cfmFlowMetricsIntEntry 1 }

cfmFlowMetricsIntValid OBJECT-TYPE
    SYNTAX TruthValue
--    Rsyntax INTEGER {
--        true(1),
--        false(2)
--        }
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates whether the data for the measurement
        interval is valid."
    ::= { cfmFlowMetricsIntEntry 2 }

cfmFlowMetricsIntTime OBJECT-TYPE
    SYNTAX TimeStamp
--    Rsyntax TimeTicks
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the value of sysUpTime when the
        measurement interval was captured."
    ::= { cfmFlowMetricsIntEntry 3 }

cfmFlowMetricsIntConditions OBJECT-TYPE
    SYNTAX FlowMonitorConditions
--    Rsyntax OCTET STRING(SIZE(0..255))
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates which standing conditions were asserted
        at least once during the measurement interval for the
        corresponding traffic flow."
    ::= { cfmFlowMetricsIntEntry 4 }

cfmFlowMetricsIntAlarms OBJECT-TYPE
    SYNTAX FlowMonitorConditions
--    Rsyntax OCTET STRING(SIZE(0..255))
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates which alarm conditions were raised at
        least once during the measurement interval for the
        corresponding traffic flow."
    ::= { cfmFlowMetricsIntEntry 5 }

cfmFlowMetricsIntAlarmSeverity OBJECT-TYPE
    SYNTAX CiscoAlarmSeverity
--    Rsyntax INTEGER {
--        cleared(1),
--        indeterminate(2),
--        critical(3),
--        major(4),
--        minor(5),
--        warning(6),
--        info(7)
--        }
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the highest severity alarm raised during
        the measurement interval for the corresponding traffic flow.
        
        If no alarm was raised during the measurement interval for the
        corresponding traffic flow, then the value of this column is
        'cleared'."
    ::= { cfmFlowMetricsIntEntry 6 }

cfmFlowMetricsIntPkts OBJECT-TYPE
    SYNTAX ReportIntervalCount
--    Rsyntax Gauge
--  Units
--    packets
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the number of packets processed by the
        corresponding flow monitor for the corresponding traffic
        flow during the measurement interval."
    ::= { cfmFlowMetricsIntEntry 7 }

cfmFlowMetricsIntOctets OBJECT-TYPE
    SYNTAX ReportIntervalCount
--    Rsyntax Gauge
--  Units
--    octets
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the number of octets contained by the
        packets processed by the corresponding flow monitor for the
        corresponding traffic flow during the measurement interval."
    ::= { cfmFlowMetricsIntEntry 8 }

cfmFlowMetricsIntBitRateUnits OBJECT-TYPE
    SYNTAX FlowBitRateUnits
--    Rsyntax INTEGER {
--        bps(1),
--        kbps(2),
--        mbps(3),
--        gbps(4)
--        }
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the units for the corresponding instance
        of cfmFlowMetricsIntBitRate."
    ::= { cfmFlowMetricsIntEntry 9 }

cfmFlowMetricsIntBitRate OBJECT-TYPE
    SYNTAX ReportIntervalCount
--    Rsyntax Gauge
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the bit rate at which the corresponding
        flow monitor processed data for the corresponding traffic flow
        during the measurement interval."
    ::= { cfmFlowMetricsIntEntry 10 }

cfmFlowMetricsIntPktRate OBJECT-TYPE
    SYNTAX ReportIntervalCount
--    Rsyntax Gauge
--  Units
--    packets per second
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the packet rate at which the
        corresponding flow monitor processed data for the corresponding
        traffic flow during the measurement interval."
    ::= { cfmFlowMetricsIntEntry 11 }

cfmConditionTable OBJECT-TYPE
    SYNTAX SEQUENCE OF CfmConditionEntry
    ACCESS not-accessible
    STATUS mandatory
    DESCRIPTION
        "This table lists the standing conditions monitored by the
        device.  The table groups descriptions for standing conditions
        into condition profiles.
        
        The figure below illustrates the relationship between a flow
        monitor and a conditions profile.  Observe that a conditions
        profile can contain the descriptions for the standing conditions
        monitored for more than one flow monitor.  In this case, the
        instance of cfmFlowMonitorConditionsProfile for each of these
        flow monitors would reference the same conditions profile.
        
        +------------------------------------------------+
        | flow monitor 1                                 |
        |                                                |
        | cfmFlowMonitorConditionsProfile.1 = 42 -----+  |
        |                                             |  |
        | cfmFlowMonitorConditions.1                  |  |
        |  N       2 1 0                              |  |
        | +-+-...-+-+-+-+                             |  |
        | | |     | | | |                             |  |
        | +-+-...-+-+-+-+                             |  |
        |  ^       ^ ^ ^                              |  |
        |  |       | | |                              |  |
        +--|-------|-|-|------------------------------|--+
           |       | | |                              |
           |       | | |                              V               
           |       | | |               +-----------------------------+
           |       | | |               | conditions profile 42       |
           |       | | |               | +-------------------------+ |
           |       | | +-----------------| cfmConditionsDescr.42.0 | |
           |       | |                 | +-------------------------+ |
           |       | |                 | +-------------------------+ |
           |       | +-------------------| cfmConditionsDescr.42.1 | |
           |       |                   | +-------------------------+ |
           |       |                   | +-------------------------+ |
           |       +---------------------| cfmConditionsDescr.42.2 | |
           |                           | +-------------------------+ |
           |                           |     :                       |
           |                           |     :                       |
           |                           | +-------------------------+ |
           +-----------------------------| cfmConditionsDescr.42.N | |
                                       | +-------------------------+ |
                                       +-----------------------------+
        
        The figure below illustrates the relationship between a traffic
        flow and a conditions profile.  Observe that a conditions
        profile can contain the descriptions for the standing conditions
        monitored for more than one traffic flow.  In this case, the
        instance of cfmFlowMetricsConditionsProfile for each of these
        traffic flows would reference the same conditions profile.
        
        +------------------------------------------------+
        | traffic flow 201                               |
        |                                                |
        | cfmFlowMetricsConditionsProfile.1.201 = 54 -+  |
        |                                             |  |
        | cfmFlowMetricsConditions.1.201              |  |
        |  N       2 1 0                              |  |
        | +-+-...-+-+-+-+                             |  |
        | | |     | | | |                             |  |
        | +-+-...-+-+-+-+                             |  |
        |  ^       ^ ^ ^                              |  |
        |  |       | | |                              |  |
        +--|-------|-|-|------------------------------|--+
           |       | | |                              |
           |       | | |                              V               
           |       | | |               +-----------------------------+
           |       | | |               | conditions profile 54       |
           |       | | |               | +-------------------------+ |
           |       | | +-----------------| cfmConditionsDescr.54.0 | |
           |       | |                 | +-------------------------+ |
           |       | |                 | +-------------------------+ |
           |       | +-------------------| cfmConditionsDescr.54.1 | |
           |       |                   | +-------------------------+ |
           |       |                   | +-------------------------+ |
           |       +---------------------| cfmConditionsDescr.54.2 | |
           |                           | +-------------------------+ |
           |                           |     :                       |
           |                           |     :                       |
           |                           | +-------------------------+ |
           +-----------------------------| cfmConditionsDescr.54.N | |
                                       | +-------------------------+ |
                                       +-----------------------------+
        
        The figure below illustrates the relationship between the
        description of a standing condition and an alarm group if the
        standing condition indicates that the device aggregates the
        standing condition into an alarm group (i.e., the corresponding
        instance of cfmConditionAlarm is 'grouped').
        
        +-----------------------------------------+
        | conditions profile 42                   |
        | +-------------------------------------+ |
        | | cfmConditionAlarm.42.9 = 'grouped'  |<-------+
        | | cfmConditionAlarmGroup.42.9 = 4 -+  | |      |
        | +----------------------------------|--+ |<--+  |
        |                                    |    |   |  |
        +------------------------------------|----+   |  |
                                             V        |  |
        +-----------------------------------------+   |  |
        | alarm group 4                           |   |  |
        |                                         |   |  |
        | cfmAlarmGroupConditionsProfile.4 = 42 ------+  |
        | cfmAlarmGroupConditionId.4 = 9 ----------------+
        |                                         |
        +-----------------------------------------+"
    ::= { cfmConditions 1 }

cfmConditionEntry OBJECT-TYPE
    SYNTAX CfmConditionEntry
    ACCESS not-accessible
    STATUS mandatory
    DESCRIPTION
        "An entry describes a standing condition monitored by the
        device.  The cfmConditionTable groups descriptions for standing
        conditions into condition profiles.
        
        A device creates a row in the cfmConditionTable when it has been
        configured to monitor a standing condition for an entity, such
        as a flow monitor or traffic flow.  Likewise, the device
        destroys a row when it has been configured to cease monitoring a
        previously configured standing condition."
    INDEX { cfmConditionProfile, cfmConditionId }
    ::= { cfmConditionTable 1 }

CfmConditionEntry ::= SEQUENCE {
    cfmConditionProfile FlowMonitorConditionsProfile,
    cfmConditionId FlowMonitorConditionIdentifier,
    cfmConditionDescr SnmpAdminString,
    cfmConditionMonitoredElement AutonomousType,
    cfmConditionType INTEGER,
    cfmConditionThreshRiseScale FlowMetricScale,
    cfmConditionThreshRisePrecision FlowMetricPrecision,
    cfmConditionThreshRise FlowMetricValue,
    cfmConditionThreshFallScale FlowMetricScale,
    cfmConditionThreshFallPrecision FlowMetricPrecision,
    cfmConditionThreshFall FlowMetricValue,
    cfmConditionSampleType INTEGER,
    cfmConditionSampleWindow Gauge,
    cfmConditionAlarm INTEGER,
    cfmConditionAlarmActions OCTET STRING,
    cfmConditionAlarmSeverity CiscoAlarmSeverity,
    cfmConditionAlarmGroup FlowMonitorAlarmGroupIdentifier
    }

cfmConditionProfile OBJECT-TYPE
    SYNTAX FlowMonitorConditionsProfile
--    Rsyntax Gauge(1..4294967295)
    ACCESS not-accessible
    STATUS mandatory
    DESCRIPTION
        "This object indicates an arbitrary integer-value that uniquely
        identifies the condition profile that contains the standing
        condition.  Observe that the value assigned to a standing
        condition does not necessarily persist across restars."
    ::= { cfmConditionEntry 1 }

cfmConditionId OBJECT-TYPE
    SYNTAX FlowMonitorConditionIdentifier
--    Rsyntax Gauge(0..2039)
    ACCESS not-accessible
    STATUS mandatory
    DESCRIPTION
        "This object indicates an arbitrary integer-value that uniquely
        identifies the condition within the scope of the profile.  The
        value of this column corresponds to the bit position in a binary
        string-value representing the standing (or alarm) conditions for
        an entity, such as a flow monitor or traffic flow.  Observe that
        the value assigned to a standing condition does not necessarily
        persist across restarts."
    ::= { cfmConditionEntry 2 }

cfmConditionDescr OBJECT-TYPE
    SYNTAX SnmpAdminString
--    Rsyntax OCTET STRING(SIZE(0..255))
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates a human-readable description of the
        condition."
    ::= { cfmConditionEntry 3 }

cfmConditionMonitoredElement OBJECT-TYPE
    SYNTAX AutonomousType
--    Rsyntax OBJECT IDENTIFIER
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the monitored element used in
        determining the state of the standing condition."
    ::= { cfmConditionEntry 4 }

cfmConditionType OBJECT-TYPE
    SYNTAX INTEGER {
        other(1),
        boolean(2),
        risingThreshold(3),
        fallingThreshold(4),
        risingAndFallingThreshold(5)
        }
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the type of condition:
        
        'other'
             The implementation of the MIB does not recognize the
             condition described by this row.
        
        'boolean'
            The value monitored only can have one of two values: 'false'
           or 'true'.  In this case, the condition itself evaluates to 
               'true' if the value itself is 'true'.
        
        'risingThreshold'
            The condition evaluates to 'true' if the current sample
            of the monitored value is greater than the rising
            threshold and the last sample is less than or equal
            to the rising threshold.
        
        'fallingThreshold'
            The condition evaluates to 'true' if the current sample
            of the monitored value is less than the falling
            threshold and the last sample is greater than or equal
            to the falling threshold.
        
        'risingAndFallingThreshold'
            The condition evaluates to 'true' if one of the two
            criteria is satisfied:
        
            1)  The current sample of the monitored value is greater
                than the rising threshold and the last sample is
                less than or equal to the rising threhsold.
        
            2)  The current sample of the monitored value is less
                than the falling threshold and the last sample is
                greater than or equal to the falling threshold."
    ::= { cfmConditionEntry 5 }

cfmConditionThreshRiseScale OBJECT-TYPE
    SYNTAX FlowMetricScale
--    Rsyntax INTEGER {
--        yocto(1),
--        zepto(2),
--        atto(3),
--        femto(4),
--        pico(5),
--        nano(6),
--        micro(7),
--        milli(8),
--        units(9),
--        kilo(10),
--        mega(11),
--        giga(12),
--        tera(13),
--        exa(14),
--        peta(15),
--        zetta(16),
--        yotta(17)
--        }
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the scaling factor for the corresponding
        instance of cfmConditionThreshRise.
        
        This value of this column only has relevance if the
        corresponding instance of cfmConditionType is 'risingThreshold'
        or 'risingAndFallingThreshold'."
    ::= { cfmConditionEntry 6 }

cfmConditionThreshRisePrecision OBJECT-TYPE
    SYNTAX FlowMetricPrecision
--    Rsyntax INTEGER(-8..-1|1..9)
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the precision for the corresponding
        instance of cfmConditionThreshRise.
        
        This value of this column only has relevance if the
        corresponding instance of cfmConditionType is 'risingThreshold'
        or 'risingAndFallingThreshold'."
    ::= { cfmConditionEntry 7 }

cfmConditionThreshRise OBJECT-TYPE
    SYNTAX FlowMetricValue
--    Rsyntax INTEGER(-1000000000..1000000000)
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the value of the rising threshold.
        
        This value of this column only has relevance if the
        corresponding instance of cfmConditionType is 'risingThreshold'
        or 'risingAndFallingThreshold'."
    ::= { cfmConditionEntry 8 }

cfmConditionThreshFallScale OBJECT-TYPE
    SYNTAX FlowMetricScale
--    Rsyntax INTEGER {
--        yocto(1),
--        zepto(2),
--        atto(3),
--        femto(4),
--        pico(5),
--        nano(6),
--        micro(7),
--        milli(8),
--        units(9),
--        kilo(10),
--        mega(11),
--        giga(12),
--        tera(13),
--        exa(14),
--        peta(15),
--        zetta(16),
--        yotta(17)
--        }
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the scaling factor for the corresponding
        instance of cfmConditionThreshFall.
        
        The value of this column only has relevance if the
        corresponding instance of cfmConditionType is 'fallingThreshold'
        or 'risingAndFallingThreshold'."
    ::= { cfmConditionEntry 9 }

cfmConditionThreshFallPrecision OBJECT-TYPE
    SYNTAX FlowMetricPrecision
--    Rsyntax INTEGER(-8..-1|1..9)
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the precision for the corresponding
        instance of cfmConditionThreshFall.
        
        The value of this column only has relevance if the
        corresponding instance of cfmConditionType is 'fallingThreshold'
        or 'risingAndFallingThreshold'."
    ::= { cfmConditionEntry 10 }

cfmConditionThreshFall OBJECT-TYPE
    SYNTAX FlowMetricValue
--    Rsyntax INTEGER(-1000000000..1000000000)
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the value of the falling threshold.
        
        The value of this column only has relevance if the
        corresponding instance of cfmConditionType is 'fallingThreshold'
        or 'risingAndFallingThreshold'."
    ::= { cfmConditionEntry 11 }

cfmConditionSampleType OBJECT-TYPE
    SYNTAX INTEGER {
        other(1),
        raw(2),
        slidingWindowAvg(3),
        expDecayingAvg(4)
        }
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates how the device samples the monitored
        value before determining whether to assert the condition:
        
            'other'
                The implementation of the MIB does not recognize the
                how the device samples the monitored value.
        
            'raw'
                The device samples the monitored value and uses this
                value to determine whether to assert the condition.
        
            'slidingWindowAvg'
                The device samples the monitored value and maintains a
                average over a sliding window.  It uses this value of
                this average to determine whether to assert the 
                condition.  The corresponding instance of 
                cfmCOnditionSampleWindow indicates the length of the
                sliding window.
        
            'slidingWindowAverage'
                The device samples the monitored value and maintains a
                exponentially decaying average over a sliding window. 
        It
                uses this value of this average to determine whether to
                assert the condition.  The corresponding instance of 
                cfmCOnditionSampleWindow indicates the length of the
                sliding window."
    ::= { cfmConditionEntry 13 }

cfmConditionSampleWindow OBJECT-TYPE
    SYNTAX Gauge(0..4294967295)
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the sample window used by the device to
        compute an exponentially decaying average in the case that the
        corresponding instance of cfmConditionSampleType is 'averaged'.
        
        The value of this column only has relevance if the
        corresponding instance of cfmConditionSampleWindow is
        'slidingWindowAvg' or 'expDecayingAvg."
    ::= { cfmConditionEntry 14 }

cfmConditionAlarm OBJECT-TYPE
    SYNTAX INTEGER {
        none(1),
        discrete(2),
        grouped(3)
        }
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates whether the device treats the standing
        condition as an alarm condition:
        
            'none'
                The device does not treat the standing condition as an
                alarm condition.
        
            'discrete'
                The device treats the standing condition as an alarm
                condition.
        
            'grouped'
                The device aggregates the standing condition into an
                alarm group."
    ::= { cfmConditionEntry 15 }

cfmConditionAlarmActions OBJECT-TYPE
    SYNTAX OCTET STRING(SIZE(1..2))
        -- BITS are:
        --   syslog(0)
        --   snmp(1)
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the actions taken by the device when the
        alarm condition changes state:
        
            'syslog'
                The device sends a syslog message.
        
            'snmp'
                The device sends a cfmNotifyAlarm notification if and
                only if cfmNotifyEnable is set to 'true'.
        
        The value of this column only has relevance if the
        corresponding instance of cfmConditionAlarm is 'discrete'"
    ::= { cfmConditionEntry 16 }

cfmConditionAlarmSeverity OBJECT-TYPE
    SYNTAX CiscoAlarmSeverity
--    Rsyntax INTEGER {
--        cleared(1),
--        indeterminate(2),
--        critical(3),
--        major(4),
--        minor(5),
--        warning(6),
--        info(7)
--        }
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the severity of the alarm condition.
        
        The value of this column only have relevance if the
        corresponding instance of cfmConditionAlarm is 'discrete'."
    ::= { cfmConditionEntry 17 }

cfmConditionAlarmGroup OBJECT-TYPE
    SYNTAX FlowMonitorAlarmGroupIdentifier
--    Rsyntax Gauge(1..4294967295)
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the alarm group the device aggregates the
        standing condition into.
        
        The value of this column only has relevance if the corresponding
        instance of cfmConditionAlarm is 'grouped'."
    ::= { cfmConditionEntry 18 }

cfmConditionTableChanged OBJECT-TYPE
    SYNTAX TimeStamp
--    Rsyntax TimeTicks
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the value of sysUpTime the last time the
        device made a change to the cfmConditionTable."
    ::= { cfmConditions 2 }

cfmAlarmGroupTable OBJECT-TYPE
    SYNTAX SEQUENCE OF CfmAlarmGroupEntry
    ACCESS not-accessible
    STATUS mandatory
    DESCRIPTION
        "This table lists alarm groups maintained by the device."
    ::= { cfmAlarmGroups 1 }

cfmAlarmGroupEntry OBJECT-TYPE
    SYNTAX CfmAlarmGroupEntry
    ACCESS not-accessible
    STATUS mandatory
    DESCRIPTION
        "An entry describes an alarm group.  An alarm group defines an
        alarm condition that is raised when a configured number of flows
        in a set of flows asserts a configured standing condition.
        
        The figure below illustrates the relationship between an alarm
        group, a conditions profile, and a flow set.
        
        +-----------------------------------------+
        | conditions profile 42                   |
        | +-------------------------------------+ |
        | | cfmConditionAlarm.42.9 = 'grouped'  |<-------+
        | | cfmConditionAlarmGroup.42.9 = 4 -+  | |      |
        | +----------------------------------|--+ |<--+  |
        |                                    |    |   |  |
        +------------------------------------|----+   |  |
                                             |        |  |
                                             v        |  |
        +-----------------------------------------+   |  |
        | alarm group 4                           |   |  |
        |                                         |   |  |
        | cfmAlarmGroupConditionsProfile.4 = 42 ------+  |
        | cfmAlarmGroupConditionId.4 = 9 ----------------+
        | cfmAlarmGroupFlowset.4 = 16 -------+    |
        |                                    |    |
        +------------------------------------|----+
                                             |
                                             v
        +-----------------------------------------+
        | flow set 16                             |
        |                                         |
        |  +------------------------------------+ |
        |  | cfmAlarmGroupFlowId.16.100         | |
        |  +------------------------------------+ |
        |  +------------------------------------+ |
        |  | cfmAlarmGroupFlowId.16.101         | |
        |  +------------------------------------+ |
        |  +------------------------------------+ |
        |  | cfmAlarmGroupFlowId.16.102         | |
        |  +------------------------------------+ |
        |      :                                  |
        |      :                                  |
        |  +------------------------------------+ |
        |  | cfmAlarmGroupFlowId.16.Y           | |
        |  +------------------------------------+ |
        +-----------------------------------------+
        
        A device creates a row in the cfmAlarmGroupTable when it
        configures a new alarm group.  Likewise, the device destroys a
        row when the alarm group ceases to exist."
    INDEX { cfmAlarmGroupId }
    ::= { cfmAlarmGroupTable 1 }

CfmAlarmGroupEntry ::= SEQUENCE {
    cfmAlarmGroupId FlowMonitorAlarmGroupIdentifier,
    cfmAlarmGroupDescr SnmpAdminString,
    cfmAlarmGroupConditionsProfile FlowMonitorConditionsProfile,
    cfmAlarmGroupConditionId FlowMonitorConditionIdentifier,
    cfmAlarmGroupFlowSet FlowSetIdentifier,
    cfmAlarmGroupFlowCount Gauge,
    cfmAlarmGroupThresholdUnits INTEGER,
    cfmAlarmGroupThreshold Gauge,
    cfmAlarmGroupRaised TruthValue,
    cfmAlarmGroupCurrentCount Gauge
    }

cfmAlarmGroupId OBJECT-TYPE
    SYNTAX FlowMonitorAlarmGroupIdentifier
--    Rsyntax Gauge(1..4294967295)
    ACCESS not-accessible
    STATUS mandatory
    DESCRIPTION
        "This object indicates an arbitrary integer-value that uniquely
        identifies the alarm group.  Observe that the value assigned to
        an alarm group does not necessarily persist across restarts."
    ::= { cfmAlarmGroupEntry 1 }

cfmAlarmGroupDescr OBJECT-TYPE
    SYNTAX SnmpAdminString
--    Rsyntax OCTET STRING(SIZE(0..255))
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates a human-readable description of the
        alarm group."
    ::= { cfmAlarmGroupEntry 2 }

cfmAlarmGroupConditionsProfile OBJECT-TYPE
    SYNTAX FlowMonitorConditionsProfile
--    Rsyntax Gauge(1..4294967295)
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the conditions profile that contains
        the description of the standing profile aggregated by the
        alarm group."
    ::= { cfmAlarmGroupEntry 3 }

cfmAlarmGroupConditionId OBJECT-TYPE
    SYNTAX FlowMonitorConditionIdentifier
--    Rsyntax Gauge(0..2039)
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the standing condition aggregated by the
        alarm group."
    ::= { cfmAlarmGroupEntry 4 }

cfmAlarmGroupFlowSet OBJECT-TYPE
    SYNTAX FlowSetIdentifier
--    Rsyntax Gauge(1..4294967295)
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the set of traffic flows aggregated by
        the alarm group."
    ::= { cfmAlarmGroupEntry 5 }

cfmAlarmGroupFlowCount OBJECT-TYPE
    SYNTAX Gauge
--  Units
--    traffic flows
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the number of traffic flows in the set of
        traffic flows indicated by the corresponding instance of
        cfmAlarmGroupFlowSet."
    ::= { cfmAlarmGroupEntry 6 }

cfmAlarmGroupThresholdUnits OBJECT-TYPE
    SYNTAX INTEGER {
        other(1),
        flows(2),
        percent(3)
        }
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the units for the corresponding instance
        of cfmAlarmGroupThreshold:
        
            'other'
                The MIB implementation does not recognize the units in
                which the value of the corresponding instance of
                cfmAlarmGroupThreshold has been expressed.
        
            'flows'
                The value of the corresponding instance of
                cfmAlarmGroupThreshold indicates a number of traffic
                flows.
        
            'percent'
                The value of the corresponding instance of
                cfmAlarmGroupThreshold indicates a percentage of traffic
                flows."
    ::= { cfmAlarmGroupEntry 7 }

cfmAlarmGroupThreshold OBJECT-TYPE
    SYNTAX Gauge(0..4294967295)
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates a number of flows that must assert the
        standing condition indicated by the corresponding instance of
        cfmAlarmGroupCondition before raising an alarm.
        
        If the corresponding instance of cfmAlarmGroupThresholdUnits is
        'percent', then the value of this column must be greater than
        or equal to zero and less than or equal to '100'."
    ::= { cfmAlarmGroupEntry 8 }

cfmAlarmGroupRaised OBJECT-TYPE
    SYNTAX TruthValue
--    Rsyntax INTEGER {
--        true(1),
--        false(2)
--        }
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates whether the alarm group has raised an
        alarm."
    ::= { cfmAlarmGroupEntry 9 }

cfmAlarmGroupCurrentCount OBJECT-TYPE
    SYNTAX Gauge
--  Units
--    traffic flows
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the number of traffic flows currently
        asserting the standing condition aggregated by the alarm group."
    ::= { cfmAlarmGroupEntry 10 }

cfmAlarmGroupTableChanged OBJECT-TYPE
    SYNTAX TimeStamp
--    Rsyntax TimeTicks
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the value of sysUpTime the last time the
        device made a change to the cfmAlarmGroupTable."
    ::= { cfmAlarmGroups 2 }

cfmAlarmGroupFlowTable OBJECT-TYPE
    SYNTAX SEQUENCE OF CfmAlarmGroupFlowEntry
    ACCESS not-accessible
    STATUS mandatory
    DESCRIPTION
        "This table lists the traffic flows contained by each set of
        flows configured for the alarm groups contained by the
        cfmAlarmGroupTable."
    ::= { cfmAlarmGroups 3 }

cfmAlarmGroupFlowEntry OBJECT-TYPE
    SYNTAX CfmAlarmGroupFlowEntry
    ACCESS not-accessible
    STATUS mandatory
    DESCRIPTION
        "An entry describes a traffic flow contained by a set of flows.
        
        An alarm group aggregates a standing condition from a set of
        flows.  cfmAlarmFlowSetId uniquely identifies a set of traffic
        flows.
        
        A device creates a row in the cfmAlarmGroupTable under one of
        the following circumstances:
        
            - It has configured a new alarm group, and hence a new set
              of traffic flows.
        
            - It has added a traffic flow to an existing set of flows.
        
        Likewise, a device destroys a row under one of the following
        circumstances:
        
            - It has destroyed the set of traffic flows.
        
            - It has removed the traffic flow from an existing set of
              flows."
    INDEX { cfmAlarmGroupFlowSetId, cfmAlarmGroupFlowMonitorId, cfmAlarmGroupFlowId }
    ::= { cfmAlarmGroupFlowTable 1 }

CfmAlarmGroupFlowEntry ::= SEQUENCE {
    cfmAlarmGroupFlowSetId FlowSetIdentifier,
    cfmAlarmGroupFlowMonitorId FlowMonitorIdentifier,
    cfmAlarmGroupFlowId FlowIdentifier
    }

cfmAlarmGroupFlowSetId OBJECT-TYPE
    SYNTAX FlowSetIdentifier
--    Rsyntax Gauge(1..4294967295)
    ACCESS not-accessible
    STATUS mandatory
    DESCRIPTION
        "This object indicates an arbitrary integer-value that uniquely
        identifies the set of traffic flows that contains the traffic
        flow represented by the row.  Observe that the value assigned
        to
        a flow set does not necessarily persist across restarts."
    ::= { cfmAlarmGroupFlowEntry 1 }

cfmAlarmGroupFlowMonitorId OBJECT-TYPE
    SYNTAX FlowMonitorIdentifier
--    Rsyntax Gauge(1..4294967295)
    ACCESS not-accessible
    STATUS mandatory
    DESCRIPTION
        "This object identifies the flow monitor responsible for the
        traffic flow."
    ::= { cfmAlarmGroupFlowEntry 2 }

cfmAlarmGroupFlowId OBJECT-TYPE
    SYNTAX FlowIdentifier
--    Rsyntax Gauge(1..4294967295)
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object identifies the traffic flow."
    ::= { cfmAlarmGroupFlowEntry 3 }

cfmAlarmGroupFlowTableChanged OBJECT-TYPE
    SYNTAX TimeStamp
--    Rsyntax TimeTicks
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the value of sysUpTime the last time the
        device made a change to the cfmAlarmGroupTable."
    ::= { cfmAlarmGroups 4 }

cfmAlarmHistorySize OBJECT-TYPE
    SYNTAX Gauge(1..4294967295)
    ACCESS read-write
    STATUS mandatory
    DESCRIPTION
        "This object specifies the maximum number of rows the
        cfmAlarmHistoryTable can contain at any given time.  If the
        device raises or clears an alarm and the cfmAlarmHistoryTable
        already contains a number of rows equal to the value of this
        object, then it destroys the oldest row before creating a new
        one."
    DEFVAL { 500 }
    ::= { cfmAlarmHistory 1 }

cfmAlarmHistoryLastId OBJECT-TYPE
    SYNTAX Gauge(1..4294967295)
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the value of cfmAlarmHistoryId
        corresponding to the last row created in the
        cfmAlarmHistoryTable."
    ::= { cfmAlarmHistory 2 }

cfmAlarmHistoryTable OBJECT-TYPE
    SYNTAX SEQUENCE OF CfmAlarmHistoryEntry
    ACCESS not-accessible
    STATUS mandatory
    DESCRIPTION
        "This table lists a history of the changes in the state of alarm
        conditions monitored by the device."
    ::= { cfmAlarmHistory 3 }

cfmAlarmHistoryEntry OBJECT-TYPE
    SYNTAX CfmAlarmHistoryEntry
    ACCESS not-accessible
    STATUS mandatory
    DESCRIPTION
        "An entry describes the change in the state of an alarm
        condition observed by the device.
        
        The device creates a row in the cfmAlarmHistoryTable when it
        observes a change in the state of an alarm condition.
        
        The device destroys a row in the cfmAlarmHistoryTable when it
        needs to create a new row, but the number of rows contained by
        the cfmAlarmHistoryTable is equal to the value of
        cfmAlarmHistorySize."
    INDEX { cfmAlarmHistoryId }
    ::= { cfmAlarmHistoryTable 1 }

CfmAlarmHistoryEntry ::= SEQUENCE {
    cfmAlarmHistoryId Gauge,
    cfmAlarmHistoryType INTEGER,
    cfmAlarmHistoryEntity RowPointer,
    cfmAlarmHistoryConditionsProfile FlowMonitorConditionsProfile,
    cfmAlarmHistoryConditionId FlowMonitorConditionIdentifier,
    cfmAlarmHistorySeverity CiscoAlarmSeverity,
    cfmAlarmHistoryTime TimeStamp
    }

cfmAlarmHistoryId OBJECT-TYPE
    SYNTAX Gauge(1..4294967295)
    ACCESS not-accessible
    STATUS mandatory
    DESCRIPTION
        "This object indicates an arbitrary integer-value that uniquely
        identifies the event.  Observe that the value assigned to a
        alarm history entry does not necessarily persist across
        restarts."
    ::= { cfmAlarmHistoryEntry 1 }

cfmAlarmHistoryType OBJECT-TYPE
    SYNTAX INTEGER {
        cleared(1),
        raised(2)
        }
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the type of event:
        
        'cleared'
            The event signaled an alarm condition transitioning to
            the cleared state.
        
        'raised'
            The event signalled an alarm condition transitioning to
            the raised state."
    ::= { cfmAlarmHistoryEntry 2 }

cfmAlarmHistoryEntity OBJECT-TYPE
    SYNTAX RowPointer
--    Rsyntax OBJECT IDENTIFIER
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the entity that caused the event.
        
        If the alarm condition has an association with a flow monitor,
        then the value of this column is a row in the
        cfmFlowMonitorTable.
        
        If the alarm condition has an association with a traffic flow,
        then the value of this column is a row in the cfmFlowTable.
        
        If the alarm condition has an association with a alarm group,
        then the value of this column is a row in the
        cfmAlarmGroupTable."
    ::= { cfmAlarmHistoryEntry 3 }

cfmAlarmHistoryConditionsProfile OBJECT-TYPE
    SYNTAX FlowMonitorConditionsProfile
--    Rsyntax Gauge(1..4294967295)
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the conditions profile containing the
        description of the alarm condition that changed state."
    ::= { cfmAlarmHistoryEntry 4 }

cfmAlarmHistoryConditionId OBJECT-TYPE
    SYNTAX FlowMonitorConditionIdentifier
--    Rsyntax Gauge(0..2039)
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the alarm condition that changed state."
    ::= { cfmAlarmHistoryEntry 5 }

cfmAlarmHistorySeverity OBJECT-TYPE
    SYNTAX CiscoAlarmSeverity
--    Rsyntax INTEGER {
--        cleared(1),
--        indeterminate(2),
--        critical(3),
--        major(4),
--        minor(5),
--        warning(6),
--        info(7)
--        }
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the severity of the alarm condition that
        changed state."
    ::= { cfmAlarmHistoryEntry 6 }

cfmAlarmHistoryTime OBJECT-TYPE
    SYNTAX TimeStamp
--    Rsyntax TimeTicks
    ACCESS read-only
    STATUS mandatory
    DESCRIPTION
        "This object indicates the value of sysUpTime when the alarm
        condition changed state.
        
        In the case the device updates standing/alarm conditions at the
        same time it captures a measurement interval, the value of this
        column should correlate with the corresponding value of
        cfmFlowMetricsIntTime.  This assures that the EMS/NMS can
        easily correlate alarms with the metrics captured in the course
        of a measurement interval."
    ::= { cfmAlarmHistoryEntry 7 }

cfmNotifyEnable OBJECT-TYPE
    SYNTAX TruthValue
--    Rsyntax INTEGER {
--        true(1),
--        false(2)
--        }
    ACCESS read-write
    STATUS mandatory
    DESCRIPTION
        "This object specifies whether the device generates a
        cfmNotifyAlarm notification when an alarm condition changes
        state."
    ::= { cfmNotify 1 }

cfmNotifyAlarm TRAP-TYPE
-- Reverse mappable trap
    ENTERPRISE ciscoFlowMonitorMIB
    VARIABLES {
        cfmAlarmHistoryType, cfmAlarmHistoryEntity, 
        cfmAlarmHistoryConditionsProfile, 
        cfmAlarmHistoryConditionId, cfmAlarmHistorySeverity, 
        cfmAlarmHistoryTime }
--  Status
--    mandatory
    DESCRIPTION
        "The device generates this notification when an alarm condition
        has changed state and the value of cfmNOtifyEnable is 'true'."
    ::= 1

cfmFlowMonitorGroup OBJECT IDENTIFIER ::= { ciscoFlowMonitorMIBGroups 1 }
-- OBJECT-GROUP
--  Status
--    mandatory
--  Descr
--    This group contains objects describing flow monitors.
--  objects
--    cfmFlowMonitorDescr, cfmFlowMonitorCaps, 
--    cfmFlowMonitorFlowCount, cfmFlowMonitorConditionsProfile, 
--    cfmFlowMonitorConditions, cfmFlowMonitorAlarms, 
--    cfmFlowMonitorAlarmSeverity, cfmFlowMonitorAlarmCriticalCount, 
--    cfmFlowMonitorAlarmMajorCount, cfmFlowMonitorAlarmMinorCount, 
--    cfmFlowMonitorAlarmWarningCount, cfmFlowMonitorAlarmInfoCount, 
--    cfmFlowMonitorTableChanged

cfmFlowGroup OBJECT IDENTIFIER ::= { ciscoFlowMonitorMIBGroups 2 }
-- OBJECT-GROUP
--  Status
--    mandatory
--  Descr
--    This group contains objects describing traffic flows.
--  objects
--    cfmFlowDescr, cfmFlowNext, cfmFlowCreateTime, 
--    cfmFlowDiscontinuityTime, cfmFlowExpirationTime, 
--    cfmFlowDirection, cfmFlowAdminStatus, cfmFlowOperStatus, 
--    cfmFlowIngressType, cfmFlowIngress, cfmFlowEgressType, 
--    cfmFlowEgress, cfmFlowTableChanged, cfmFlowL2VlanNext, 
--    cfmFlowL2VlanId, cfmFlowL2VlanCos, cfmFlowL2VlanTableChanged, 
--    cfmFlowIpNext, cfmFlowIpAddrType, cfmFlowIpAddrSrc, 
--    cfmFlowIpAddrDst, cfmFlowIpValid, cfmFlowIpTrafficClass, 
--    cfmFlowIpHopLimit, cfmFlowIpTableChanged, cfmFlowUdpNext, 
--    cfmFlowUdpPortSrc, cfmFlowUdpPortDst, cfmFlowUdpTableChanged, 
--    cfmFlowTcpNext, cfmFlowTcpPortSrc, cfmFlowTcpPortDst, 
--    cfmFlowTcpTableChanged, cfmFlowRtpNext, cfmFlowRtpVersion, 
--    cfmFlowRtpSsrc, cfmFlowRtpPayloadType, cfmFlowRtpTableChanged

cfmFlowMetricsGroup OBJECT IDENTIFIER ::= { ciscoFlowMonitorMIBGroups 3 }
-- OBJECT-GROUP
--  Status
--    mandatory
--  Descr
--    This group contains objects describing traffic flow metrics.
--  objects
--    cfmFlowMetricsCollected, cfmFlowMetricsIntervalTime, 
--    cfmFlowMetricsMaxIntervals, cfmFlowMetricsElapsedTime, 
--    cfmFlowMetricsIntervals, cfmFlowMetricsInvalidIntervals, 
--    cfmFlowMetricsConditionsProfile, cfmFlowMetricsConditions, 
--    cfmFlowMetricsAlarms, cfmFlowMetricsAlarmSeverity, 
--    cfmFlowMetricsPkts, cfmFlowMetricsOctets, 
--    cfmFlowMetricsBitRateUnits, cfmFlowMetricsBitRate, 
--    cfmFlowMetricsPktRate, cfmFlowMetricsTableChanged, 
--    cfmFlowMetricsIntValid, cfmFlowMetricsIntTime, 
--    cfmFlowMetricsIntConditions, cfmFlowMetricsIntAlarms, 
--    cfmFlowMetricsIntAlarmSeverity, cfmFlowMetricsIntPkts, 
--    cfmFlowMetricsIntOctets, cfmFlowMetricsIntBitRateUnits, 
--    cfmFlowMetricsIntBitRate, cfmFlowMetricsIntPktRate

cfmFlowConditionsGroup OBJECT IDENTIFIER ::= { ciscoFlowMonitorMIBGroups 4 }
-- OBJECT-GROUP
--  Status
--    mandatory
--  Descr
--    This group contains objects describing standing/alarm
--    conditions.
--  objects
--    cfmConditionDescr, cfmConditionMonitoredElement, 
--    cfmConditionType, cfmConditionThreshRiseScale, 
--    cfmConditionThreshRisePrecision, cfmConditionThreshRise, 
--    cfmConditionThreshFallScale, cfmConditionThreshFallPrecision, 
--    cfmConditionThreshFall, cfmConditionSampleType, 
--    cfmConditionSampleWindow, cfmConditionAlarm, 
--    cfmConditionAlarmActions, cfmConditionAlarmSeverity, 
--    cfmConditionAlarmGroup, cfmConditionTableChanged

cfmAlarmAggregationGroup OBJECT IDENTIFIER ::= { ciscoFlowMonitorMIBGroups 5 }
-- OBJECT-GROUP
--  Status
--    mandatory
--  Descr
--    This group contains object describing alarm aggregation.
--  objects
--    cfmAlarmGroupDescr, cfmAlarmGroupConditionsProfile, 
--    cfmAlarmGroupConditionId, cfmAlarmGroupFlowSet, 
--    cfmAlarmGroupFlowCount, cfmAlarmGroupThresholdUnits, 
--    cfmAlarmGroupThreshold, cfmAlarmGroupRaised, 
--    cfmAlarmGroupCurrentCount, cfmAlarmGroupTableChanged, 
--    cfmAlarmGroupFlowId, cfmAlarmGroupFlowTableChanged

cfmAlarmHistoryGroup OBJECT IDENTIFIER ::= { ciscoFlowMonitorMIBGroups 6 }
-- OBJECT-GROUP
--  Status
--    mandatory
--  Descr
--    This group contains objects describing alarm history.
--  objects
--    cfmAlarmHistorySize, cfmAlarmHistoryLastId, 
--    cfmAlarmHistoryType, cfmAlarmHistoryEntity, 
--    cfmAlarmHistoryConditionsProfile, cfmAlarmHistoryConditionId, 
--    cfmAlarmHistorySeverity, cfmAlarmHistoryTime

cfmNotifySupportGroup OBJECT IDENTIFIER ::= { ciscoFlowMonitorMIBGroups 7 }
-- OBJECT-GROUP
--  Status
--    mandatory
--  Descr
--    This group contains objects supporting notification.
--  objects
--    cfmNotifyEnable

cfmNotifyGroup OBJECT IDENTIFIER ::= { ciscoFlowMonitorMIBGroups 8 }
-- NOTIFICATION-GROUP
--  Status
--    mandatory
--  Descr
--    This group contains notifications supporting flow monitoring.
--  notifications
--    cfmNotifyAlarm

ciscoFlowMonitorCompliance01 OBJECT IDENTIFIER ::= { ciscoFlowMonitorMIBCompliances 1 }
-- MODULE-COMPLIANCE
--  Status
--    mandatory
--  Descr
--    This compliance statement specifies the minimal requirements an
--    implementation must meet in order to claim full compliance with
--    the definition of the CISCO-FLOW-MONITOR-MIB.
--  Module
--    >>current<<
--   MandGroup
--    cfmFlowMonitorGroup
--   MandGroup
--    cfmFlowGroup
--   MandGroup
--    cfmFlowMetricsGroup
--   MandGroup
--    cfmFlowConditionsGroup
--   MandGroup
--    cfmAlarmAggregationGroup
--   MandGroup
--    cfmAlarmHistoryGroup
--   MandGroup
--    cfmNotifySupportGroup
--   MandGroup
--    cfmNotifyGroup


END

