[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: A Data collection MIB






Nalin,


I think this is an interesting idea. It has some similarities with the
RMON-II usrHistory as defined in RFC-2021. You might want to investigate
that MIB as a source of reference for this as well. The RMON_II table
does not support monitoring of anything that is not an integer base like
your MIB does. But it has the advantage that it can support a history of
information. Thus you can configure the agent to go monitor the
attribute at five minute intervals, then once an hour use get-bulk or
the file transfer to extract the data from the agent.
Carl

Nalin Pai wrote:
> 
> Folks,
> 
> Hoping to kick off a discussion on a MIB idea that I have been playing
> around with for sometime now. I have been in touch with Bryan Levin
> and David Battle regarding merging this idea with theirs
> (draft-ietf-eos-snmp-bulkdata-00.txt)
> 
> We thought it would be best to throw this open to eos.
> 
> This MIB is intended to help periodic data retrievals, when the data
> itself is a set of discontiguous rows spread across multiple tables.
> Likely applications are performance and accounting applications.
> 
> For e.g.
> The user wants to periodically fetch
> - ifInOctets, ifOutOctets from ifTable
> - ifHCInOctets, ifHCOutOctets from ifXTable
> - dot3StatsLateCollisions, dot3StatsSingleCollisionFrames from
>   dot3StatsTable.
> 
> and is interested only in a set of interfaces, lets say
> having ifIndex
> 1,5,10-12,23-25.
> 
> The use of get-bulk to fetch the required object instances would be
> inefficient since a lot of unnecessary object instances would also be
> retrieved. Also since all 3 tables need not have the same number of
> rows, it again may not be possible to use a single get-bulk
> request to fetch rows from all 3 tables simultaneously.
> 
> The other option is to use get-exact request PDUs specifying the
> exact instances *everytime* the user is interested in the data. Also
> this does not take advantage of any sequential ifIndex ranges.
> 
> Both of the above options are not too efficient.
> 
> The idea here is to design a MIB that has the following properties.
> 
> 1) Allows user to specify objects (columns) of interest.
>    The objects can belong to different tables, as long as they are
>    semantically related.
>    This is a one time operation.
> 
> 2) Allows user to specify object instances of interest (rows)
>    Multiple row instances can be specified for maximum flexibility.
>    This is a one time operation.
> 
> 3) Row instances can be single indexed or multi-indexed.
> 
> 4) Has an access table which is more like a "view" that contains
>    exactly what the user has requested. The user can then issue
>    get-bulk requests on the access table to retrieve the data.
> 
> 5) Supports a file transfer kind of a mechanism as defined in the
>    current draft-ietf-eos-snmp-bulkdata-00.txt. This gives the
>    flexibility of either using SNMP requests on the access table
>    or populating a file which can then be transferred off the device.
> 
> 6) The access table has a mechanism to indicate sparse object
>    instances (holes). Holes would be plugged in with a dummy instance
>    and the same would be indicated using a bit map for each row.
> 
> This MIB according to me has the following advantages.
> 
> 1) The access table will contain only those object instances that the
>    user interested in. This will encourage use of get-bulks and make
>    the use of a get-bulk PDU to retrieve discontiguous object instances
>    more efficient.
> 
> 2) The access table provides a conceptual view based
>    on multiple MIB tables. Again the use of a get-bulk allows the user
>    to retrieve objects from multiple tables as if they belong to the
>    same table. For e.g the user is interested in retrieving objects
>    for ethernet interfaces from the IF-MIB and the ETHER-LIKE-MIB.
> 
> 3) Since the user will typically use a get-bulk to retrieve entries
>    from the access table, MIB implementation optimizations can be
>    done to increase efficiency of data access for frequently polled
>    MIBS like IF-MIB etc.
>    (For e.g by pre-fetching a set of rows, knowing that the get-bulk
>     will require them)
> 
> 4) It is possible to support sparse objects, by having a sparse object
>    indicator for every row in the access table. This object is a bit
>    map that indicates whether an object instance in the row is valid
>    or not. By plugging NULL object instances with a dummy, we can
>    avoid re-ordering and maintain row semantics.
> 
> 5) When combined with the file transfer mechanism defined in
>    draft-ietf-eos-snmp-bulkdata-00.txt, the user has the flexibility
>    of using SNMP requests or file transfers to get the required data.
> 
> I am attaching a rough and a basic MIB draft. It also contains some
> text recommending a way for NMS's to fetch data from the access table.
> I have not included the file transfer mechanism as supported by
> draft-ietf-eos-snmp-bulkdata-00.txt.
> 
> Hoping to receive responses.
> 
> Thanks,
> Nalin
> 
>   ------------------------------------------------------------------------
> --
> -- MIB description
> --
> --
> -- This MIB module facilitates data retrieval of tabular objects.
> -- This MIB can be used for performance/accounting purposes, where
> -- several row instances of a set of objects are polled over a
> -- period of time.
> --
> -- The MIB provides the user a way to specify which objects and which
> -- instances are required. In addition the MIB provides 2 ways in
> -- which this data can be retrieved.
> --
> -- Access tables.
> -- --------------
> -- The MIB provides access tables (dcmAccessRowTable &
> -- dcmAccessObjectTable) which can be queried to retrieve the set
> -- of required varbinds.
> -- The access tables provide a 'view' of exactly what the user wants.
> -- This makes it possible for the user to retrieve the contents of the
> -- access table using existing bulk mechanisms like the get-bulk PDU.
> --
> -- The access tables support the notion of 'data rows'. The objects
> -- specified in the dcmObjectsTable & dcmObjectInstanceTable, should
> -- belong to the same conceptual table. The conceptual table can contain
> -- attributes (columns) belonging to different MIB tables, but it should
> -- be semantically possible to relate these columns in a tabular
> -- relationship. Each data row has a corresponding sparse object indicator,
> -- dcmAccessRowSparseInd. This object indicates which object instance of
> -- the row is valid/invalid. This guarantees that each data row in the
> -- access tables contains objects qualified by the same instance.
> --
> --
> --
> -- E.g dcmObjectsTable (objects of interest):
> -- -----------------------------------------
> -- dcmObjectsIndex    dcmObjectsOid
> -- --------------------------------
> --       1             ifInOctets
> --       2             ifOutOctets
> --       3             ifHCInOctets
> --       4             ifHCOutOctets
> --
> -- dcmObjectInstanceTable (objects of interest):
> -- ----------------------------------------------
> -- dcmObject     dcmObject    dcmObject      dcmObject
> -- InstanceIndex InstanceType InstanceOid    InstanceOidEnd
> --                             (ifIndex)     (ifIndex)
> --       1       individual        1
> --       2       individual        5
> --       3       range             10         12
> --       4       range             23         25
> --
> -- dcmAccessRowTable (objects of interest):
> -- ----------------------------------------------
> -- dcmAccessRowIndex  dcmAccessRowSparseInd dcmAccessRowInstOid
> --       1                 0                     1
> --       2                 0                     5
> --       3                 24                    10
> --       4                 24                    11
> --       5                 24                    12
> --       6                 0                     23
> --       7                 0                     24
> --       8                 0                     25
> --
> -- dcmAccessObjectTable (objects of interest):
> -- ----------------------------------------------
> -- dcmAccess    dcmAccess       dcmAccess          dcmAccess
> -- ObjectIndex  ObjectRowIndex  ObjectCounter32Val ObjectCounter64Val
> -- ------------------------------------------------------------------
> -- ####### ifInOctets
> --       1          1               356
> --       1          2               400
> --     cont..
> --       1          8               4566
> -- ####### ifOutOctets
> --       2          1               2000
> --       2          2               3000
> --     cont..
> --       2          8               4000
> -- ####### ifHCInOctets
> --       3          1                                 356
> --       3          2                                 400
> --       3          3                               (invalid)
> --       3          4                               (invalid)
> --    cont..
> --       3          8                                 4566
> -- ####### ifHCOutOctets
> --       3          1                                 2000
> --       3          2                                 3000
> --       3          3                               (invalid)
> --       3          4                               (invalid)
> --    cont..
> --       3          8                                 4000
> --
> --
> -- To retrieve the objects 'row wise' the NMS can issue a get-bulk
> -- as shown:
> -- getbulk -v2c 0 8  dcmAccessRowSparseInd            ### sparse indicator
> --              dcmAccessRowInstanceOid          ### ifIndex
> --              dcmAccessObjectCounter32Val.1 \  ### ifInOctets
> --              dcmAccessObjectCounter32Val.2 \  ### ifOutOctets
> --              dcmAccessObjectCounter64Val.3 \  ### ifHCInOctets
> --              dcmAccessObjectCounter64Val.4    ### ifHCOutOctets
> --
> -- After retrieving the required rows, the
> -- NMS has to simply replace all occurences of
> -- dcmAccessObjectCounter32Val.1 by ifInOctets,
> -- dcmAccessObjectCounter32Val.2 by ifOutOctets,
> -- dcmAccessObjectCounter64Val.3 by ifHCInOctets,
> -- dcmAccessObjectCounter64Val.4 by ifHCOutOctets
> -- and for all the objects,
> -- replace dcmAccessObjectRowIndex by the value of dcmAccessRowInstanceOid.
> --
> -- File mode:
> -- ----------
> -- The MIB also provides a mechanism by which the object instances
> -- specified in dcmObjectsTable & dcmObjectInstanceTable are retrieved
> -- and populated in a file. This MIB also supports transfer of this
> -- file to off the box locations.
> -- This idea is similar to that described in
> -- draft-ietf-eos-snmp-bulkdata-00.txt
> --
> -- The MIB shown below does not have objects to support file transfer
> -- yet. These objects have already been defined in
> -- draft-ietf-eos-snmp-bulkdata-00.txt, and the design can be reused
> -- here.
> --
> 
> DATA-COLLECTION-MIB DEFINITIONS ::= BEGIN
> 
> IMPORTS
>         MODULE-IDENTITY, OBJECT-TYPE,
>         Counter32, Integer32,
>         Unsigned32, Counter64,
>         IpAddress                       FROM SNMPv2-SMI
>         RowStatus                       FROM SNMPv2-TC
>         MODULE-COMPLIANCE,
>         OBJECT-GROUP                    FROM SNMPv2-CONF
>         SnmpAdminString                 FROM SNMP-FRAMEWORK-MIB
>         ciscoMgmt                       FROM CISCO-SMI;
> 
> dataCollMIB MODULE-IDENTITY
>     LAST-UPDATED "200111041420Z"
>     ORGANIZATION "Cisco Systems, Inc."
>     CONTACT-INFO "Cisco Systems
>                   Customer Service
> 
>                   Postal: 170 W Tasman Drive
>                   San Jose, CA  95134
>                   USA
> 
>                   Tel: +1 800 553-NETS
> 
>                   E-mail:"
>     DESCRIPTION
>         "The MIB module for facilitating periodic collection of bulk
>          and performance/accounting data."
> 
>     ::= { ciscoMgmt 1099 }
> 
> dataCollMIBObjects OBJECT IDENTIFIER ::= { dataCollMIB 1 }
> 
> dcmConfig                     OBJECT IDENTIFIER ::= { dataCollMIBObjects 1 }
> dcmAccess                     OBJECT IDENTIFIER ::= { dataCollMIBObjects 2 }
> dcmStatus                     OBJECT IDENTIFIER ::=  { dataCollMIBObjects 3 }
> 
> nullOID OBJECT IDENTIFIER ::= { 0 0 }
> 
> dcmConfigTable OBJECT-TYPE
>     SYNTAX      SEQUENCE OF DcmConfigEntry
>     MAX-ACCESS  not-accessible
>     STATUS      current
>     DESCRIPTION
>         "A table of data collection configuration entries. Each entry
>          represents a set of objects whose values need to fetched for
>          the specified instances."
>     ::= { dcmConfig 1 }
> 
> dcmConfigEntry OBJECT-TYPE
>     SYNTAX      DcmConfigEntry
>     MAX-ACCESS  not-accessible
>     STATUS      current
>     DESCRIPTION
>         "An individual entry in the dcmConfigTable."
>     INDEX { dcmConfigIndex }
>     ::= { dcmConfigTable 1 }
> 
> DcmConfigEntry ::= SEQUENCE {
>     dcmConfigIndex              Unsigned32,
>     dcmConfigComment            SnmpAdminString,
>     dcmConfigRowStatus          RowStatus
> }
> 
> dcmConfigIndex OBJECT-TYPE
>     SYNTAX      Unsigned32 (1..4294967295)
>     MAX-ACCESS  not-accessible
>     STATUS      current
>     DESCRIPTION
>         "An arbitrary integer to uniquely identify this entry.  To
>          create an entry a management application should pick a
>          random number."
>     ::= { dcmConfigEntry 1 }
> 
> dcmConfigComment OBJECT-TYPE
>     SYNTAX      SnmpAdminString
>     MAX-ACCESS  read-create
>     STATUS      current
>     DESCRIPTION
>         "A writable string, useful for administrative purposes."
>     ::= { dcmConfigEntry 2 }
> 
> dcmConfigRowStatus OBJECT-TYPE
>     SYNTAX      RowStatus
>     MAX-ACCESS  read-create
>     STATUS      current
>     DESCRIPTION
>         "Control row creation/deletion operations. This object also
>          controls row operations for dcmObjectsTable &
>          dcmObjectInstanceTable."
>     ::= { dcmConfigEntry 3 }
> 
> dcmObjectsTable OBJECT-TYPE
>     SYNTAX      SEQUENCE OF DcmObjectsEntry
>     MAX-ACCESS  not-accessible
>     STATUS      current
>     DESCRIPTION
>         "A table to specify the objects whose values need to be
>          collected."
>     ::= { dcmConfig 2 }
> 
> dcmObjectsEntry OBJECT-TYPE
>     SYNTAX      DcmObjectsEntry
>     MAX-ACCESS  not-accessible
>     STATUS      current
>     DESCRIPTION
>         "An individual entry in the dcmObjectsTable."
>     INDEX { dcmConfigIndex, dcmObjectsIndex }
>     ::= { dcmObjectsTable 1 }
> 
> DcmObjectsEntry ::= SEQUENCE {
>     dcmObjectsIndex             Unsigned32,
>     dcmObjectsOid               OBJECT IDENTIFIER
> }
> 
> dcmObjectsIndex  OBJECT-TYPE
>     SYNTAX      Unsigned32 (1..2039)
>     MAX-ACCESS  not-accessible
>     STATUS      current
>     DESCRIPTION
>         "An arbitrary small integer for the purpose of identifying
>          individual objects within a data collection group identified
>          by dcmConfigIndex. The range is so specified to
>          match the range of dcmAccessRowSparseInd."
>      ::= { dcmObjectsEntry 1 }
> 
> dcmObjectsOid OBJECT-TYPE
>     SYNTAX      OBJECT IDENTIFIER
>     MAX-ACCESS  read-create
>     STATUS      current
>     DESCRIPTION
>         "The OBJECT IDENTIFIER (OID) of the object represented by this
>          entry. The OID must be the complete OID of the object."
>     ::= { dcmObjectsEntry 2 }
> 
> dcmObjectInstanceTable  OBJECT-TYPE
>     SYNTAX      SEQUENCE OF DcmObjectInstanceEntry
>     MAX-ACCESS  not-accessible
>     STATUS      current
>     DESCRIPTION
>         "Table containing the row instance OIDs of objects whose
>          values need to be fetched. Row instance OIDs can be specified
>          as individual instances, range instances or subTree instances."
>     ::= { dcmConfig 3 }
> 
> dcmObjectInstanceEntry OBJECT-TYPE
>     SYNTAX      DcmObjectInstanceEntry
>     MAX-ACCESS  not-accessible
>     STATUS      current
>     DESCRIPTION
>         "An individual entry in the dcmObjectInstanceTable."
>     INDEX { dcmConfigIndex, dcmObjectInstanceIndex }
>     ::= { dcmObjectInstanceTable 1 }
> 
> DcmObjectInstanceEntry ::= SEQUENCE {
>     dcmObjectInstanceIndex              Unsigned32,
>     dcmObjectInstanceType               INTEGER,
>     dcmObjectInstanceOid                OBJECT IDENTIFIER,
>     dcmObjectInstanceOidEnd             OBJECT IDENTIFIER,
>     dcmObjectInstanceNumRepitions       Unsigned32
> }
> 
> dcmObjectInstanceIndex OBJECT-TYPE
>     SYNTAX      Unsigned32 (1..4294967295)
>     MAX-ACCESS  not-accessible
>     STATUS      current
>     DESCRIPTION
>         "An arbitrary small integer for the purpose of identifying
>          individual row instances for a data collection group
>          identified by dcmConfigIndex."
>     ::= { dcmObjectInstanceEntry 1 }
> 
> dcmObjectInstanceType OBJECT-TYPE
>     SYNTAX      INTEGER { individual(1), range(2), subTree(3) }
>     MAX-ACCESS  read-create
>     STATUS      current
>     DESCRIPTION
>         "Specifies whether the instance represented by this entry is
>          an individual instance or a instance range or an instance
>          subTree."
>     DEFVAL { subTree }
>     ::= { dcmObjectInstanceEntry 2 }
> 
> dcmObjectInstanceOid OBJECT-TYPE
>     SYNTAX      OBJECT IDENTIFIER
>     MAX-ACCESS  read-create
>     STATUS      current
>     DESCRIPTION
>         "The instance OID identifying the row(s) to be fetched.
>          If dcmObjectInstanceType is 'individual' then this object
>          should contain the complete instance OID of the row.
>          If dcmObjectInstanceType is 'range' then this object
>          contains the start OID of the range. The value need not be
>          fully instantiated.
>          If dcmObjectInstanceType is 'subTree' then this object
>          contains a partially instantiated row instance. It can
>          contain a NULL OID which indicates that the entire subTree
>          (all instances of each object) should be fetched.
> 
>          SMIv2 mandates the OBJECT IDENTIFIER types should
>          have atleast 2 sub-ids and the first sub-id has to be one of
>          0,1,2. To satisfy this requirement the first 2 sub-ids of
>          cdcObjectInstanceOid will always be 0.0."
>     DEFVAL { nullOID }
>     ::= { dcmObjectInstanceEntry 3 }
> 
> dcmObjectInstanceOidEnd OBJECT-TYPE
>     SYNTAX      OBJECT IDENTIFIER
>     MAX-ACCESS  read-create
>     STATUS      current
>     DESCRIPTION
>         "This object is used when dcmObjectInstanceType is set to
>          range. This object contains the end OID of a range of rows
>          that need to be fetched. This OID has to be lexicographically
>          higher than dcmObjectInstanceOid.
> 
>          SMIv2 mandates the OBJECT IDENTIFIER types should
>          have atleast 2 sub-ids and the first sub-id has to be one of
>          0,1,2. To satisfy this requirement the first 2 sub-ids of
>          cdcObjectInstanceEndOid will always be 0.0."
> 
>     DEFVAL { nullOID }
>     ::= { dcmObjectInstanceEntry 4 }
> 
> dcmObjectInstanceNumRepitions OBJECT-TYPE
>     SYNTAX      Unsigned32
>     MAX-ACCESS  read-create
>     STATUS      current
>     DESCRIPTION
>         "This object provides an alternative method of specifying a
>          range. It specifies the number of lexicographically next
>          instances to fetch, starting from dcmObjectInstanceOid."
>     DEFVAL { 0 }
>     ::= { dcmObjectInstanceEntry 5 }
> 
> dcmAccessRowTable OBJECT-TYPE
>     SYNTAX      SEQUENCE OF DcmAccessRowEntry
>     MAX-ACCESS  not-accessible
>     STATUS      current
>     DESCRIPTION
>         "Table containing instances of objects as specified
>          in dcmObjectsTable & dcmObjectInstanceTable."
>     ::= { dcmAccess 1 }
> 
> dcmAccessRowEntry OBJECT-TYPE
>     SYNTAX      DcmAccessRowEntry
>     MAX-ACCESS  not-accessible
>     STATUS      current
>     DESCRIPTION
>         "An entry describing a row instance."
>     INDEX { dcmConfigIndex, dcmAccessRowIndex }
>     ::= { dcmAccessRowTable 1 }
> 
> DcmAccessRowEntry ::= SEQUENCE {
>     dcmAccessRowIndex           Unsigned32,
>     dcmAccessRowSparseInd       OCTET STRING,
>     dcmAccessRowInstOid         OBJECT IDENTIFIER
> }
> 
> dcmAccessRowIndex OBJECT-TYPE
>     SYNTAX      Unsigned32 (1..4294967295)
>     MAX-ACCESS  not-accessible
>     STATUS      current
>     DESCRIPTION
>         "An index uniquely identifying an instance of a row for the
>          data collection group identified by dcmConfigIndex. This is
>          a running counter starting from 1, for each data collection
>          group."
>     ::= { dcmAccessRowEntry 1 }
> 
> dcmAccessRowSparseInd OBJECT-TYPE
>     SYNTAX      OCTET STRING (SIZE (1..255))
>     MAX-ACCESS  read-only
>     STATUS      current
>     DESCRIPTION
>         "Indicates which objects of this row instance are valid and
>          which are invalid. The Octet String is treated as a bit
>          string, if a bit is set then the corresponding bit position
>          identifies the (object) dcmObjectsIndex which is sparse for
>          this row. Bit position '0' is not used, owing to the fact the
>          dcmObjectsIndex is never 0."
>     ::= { dcmAccessRowEntry 2 }
> 
> dcmAccessRowInstOid OBJECT-TYPE
>     SYNTAX      OBJECT IDENTIFIER
>     MAX-ACCESS  read-only
>     STATUS      current
>     DESCRIPTION
>         "The instance OID of a row. This is the OID representation of
>          the index of the object instances."
>     ::= { dcmAccessRowEntry 3 }
> 
> dcmAccessObjectTable OBJECT-TYPE
>     SYNTAX      SEQUENCE OF DcmAccessObjectEntry
>     MAX-ACCESS  not-accessible
>     STATUS      current
>     DESCRIPTION
>         "A table containing object instances of a row. Applications can
>          retrieve values row-wise by using the index combination of
>          { dcmConfigIndex, dcmObjectIndex, * }."
>     ::= { dcmAccess 2 }
> 
> dcmAccessObjectEntry OBJECT-TYPE
>     SYNTAX      DcmAccessObjectEntry
>     MAX-ACCESS  not-accessible
>     STATUS      current
>     DESCRIPTION
>         "An entry containing a single object's value."
>     INDEX { dcmConfigIndex, dcmAccessObjectIndex, dcmAccessObjectRowIndex }
>     ::= { dcmAccessObjectTable 1 }
> 
> DcmAccessObjectEntry ::= SEQUENCE {
>     dcmAccessObjectIndex                Unsigned32,
>     dcmAccessObjectRowIndex             Unsigned32,
>     dcmAccessObjectCounter32Val         Counter32,
>     dcmAccessObjectUnsigned32Val        Unsigned32,
>     dcmAccessObjectInteger32Val         Integer32,
>     dcmAccessObjectIpAddressVal         IpAddress,
>     dcmAccessObjectOctetStringVal       OCTET STRING,
>     dcmAccessObjectOidVal               OBJECT IDENTIFIER,
>     dcmAccessObjectCounter64Val         Counter64
> }
> 
> dcmAccessObjectIndex OBJECT-TYPE
>     SYNTAX      Unsigned32 (1..4294967295)
>     MAX-ACCESS  not-accessible
>     STATUS      current
>     DESCRIPTION
>         "The dcmObjectsIndex which is represented by one of
>          the value objects instances in this table."
>     ::= { dcmAccessObjectEntry 1 }
> 
> dcmAccessObjectRowIndex OBJECT-TYPE
>     SYNTAX      Unsigned32 (1..4294967295)
>     MAX-ACCESS  not-accessible
>     STATUS      current
>     DESCRIPTION
>         "The dcmAccessRowIndex which is represented by one of
>          the value object instances in this table."
>     ::= { dcmAccessObjectEntry 2 }
> 
> dcmAccessObjectCounter32Val OBJECT-TYPE
>     SYNTAX      Counter32
>     MAX-ACCESS  read-only
>     STATUS      current
>     DESCRIPTION
>         "The value of a Counter32 type object."
>     ::= { dcmAccessObjectEntry 3 }
> 
> dcmAccessObjectUnsigned32Val OBJECT-TYPE
>     SYNTAX      Unsigned32
>     MAX-ACCESS  read-only
>     STATUS      current
>     DESCRIPTION
>         "The value of a Unsigned32 type object."
>     ::= { dcmAccessObjectEntry 4 }
> 
> dcmAccessObjectInteger32Val OBJECT-TYPE
>     SYNTAX      Integer32
>     MAX-ACCESS  read-only
>     STATUS      current
>     DESCRIPTION
>         "The value of a Integer32 type object."
>     ::= { dcmAccessObjectEntry 5 }
> 
> dcmAccessObjectIpAddressVal OBJECT-TYPE
>     SYNTAX      IpAddress
>     MAX-ACCESS  read-only
>     STATUS      current
>     DESCRIPTION
>         "The value of a IpAddress type object."
>     ::= { dcmAccessObjectEntry 6 }
> 
> dcmAccessObjectOctetStringVal  OBJECT-TYPE
>     SYNTAX      OCTET STRING (SIZE (0..65536))
>     MAX-ACCESS  read-only
>     STATUS      current
>     DESCRIPTION
>         "The value of a OCTET STRING type object."
>     ::= { dcmAccessObjectEntry 7 }
> 
> dcmAccessObjectOidVal OBJECT-TYPE
>     SYNTAX      OBJECT IDENTIFIER
>     MAX-ACCESS  read-only
>     STATUS      current
>     DESCRIPTION
>         "The value of a OBJECT IDENTIFIER type object."
>     ::= { dcmAccessObjectEntry 8 }
> 
> dcmAccessObjectCounter64Val OBJECT-TYPE
>     SYNTAX      Counter64
>     MAX-ACCESS  read-only
>     STATUS      current
>     DESCRIPTION
>         "The value  of a Counter64 type object."
>     ::= { dcmAccessObjectEntry 9 }
> 
> --
> -- Conformance
> --
> 
> dataCollMIBConformance OBJECT IDENTIFIER ::= { dataCollMIB 3 }
> dataCollMIBCompliances OBJECT IDENTIFIER ::= { dataCollMIBConformance 1 }
> dataCollMIBGroups      OBJECT IDENTIFIER ::= { dataCollMIBConformance 2 }
> 
> -- Compliance
> dataCollMIBCompliance MODULE-COMPLIANCE
>         STATUS current
>         DESCRIPTION
>                 "The compliance statement for entities which implement
>                 the Data Collection MIB."
>         MODULE  -- this module
>                 MANDATORY-GROUPS {
>                         dcmConfigGroup,
>                         dcmAccessGroup
>                 }
> 
>         ::= { dataCollMIBCompliances 1 }
> 
> -- Units of Conformance
> dcmConfigGroup OBJECT-GROUP
>         OBJECTS {
>                 dcmConfigComment,
>                 dcmConfigRowStatus,
>                 dcmObjectsOid,
>                 dcmObjectInstanceType,
>                 dcmObjectInstanceOid,
>                 dcmObjectInstanceOidEnd,
>                 dcmObjectInstanceNumRepitions
>         }
>         STATUS current
>         DESCRIPTION
>                 "MIB configuration objects."
>         ::= { dataCollMIBGroups 1 }
> 
> dcmAccessGroup OBJECT-GROUP
>         OBJECTS {
>                 dcmAccessRowSparseInd,
>                 dcmAccessRowInstOid,
>                 dcmAccessObjectCounter32Val,
>                 dcmAccessObjectUnsigned32Val,
>                 dcmAccessObjectInteger32Val,
>                 dcmAccessObjectIpAddressVal,
>                 dcmAccessObjectOctetStringVal,
>                 dcmAccessObjectOidVal,
>                 dcmAccessObjectCounter64Val
>         }
>         STATUS current
>         DESCRIPTION
>                 "Access related objects."
>         ::= { dataCollMIBGroups 2 }
> 
> END

-- 
Carl W. Kalbfleisch
www.verio.net