HCNUM-TC DEFINITIONS ::= BEGIN

IMPORTS
  MODULE-IDENTITY, mib-2, Counter64
      FROM SNMPv2-SMI
  TEXTUAL-CONVENTION
      FROM SNMPv2-TC;

hcnumTC MODULE-IDENTITY
  LAST-UPDATED "200006080000Z"

  ORGANIZATION "IETF OPS Area"
  CONTACT-INFO
        "        E-mail: mibs@ops.ietf.org
                 Subscribe: majordomo@psg.com
                   with msg body: subscribe mibs

                 Andy Bierman
                 Cisco Systems Inc.
                 170 West Tasman Drive
                 San Jose, CA 95134 USA
                 +1 408-527-3711
                 abierman@cisco.com

                 Keith McCloghrie
                 Cisco Systems Inc.
                 170 West Tasman Drive
                 San Jose, CA 95134 USA
                 +1 408-526-5260
                 kzm@cisco.com

                 Randy Presuhn
                 BMC Software, Inc.
                 Office 1-3141
                 2141 North First Street
                 San Jose,  California 95131 USA
                 +1 408 546-1006
                 rpresuhn@bmc.com"
  DESCRIPTION
        "A MIB module containing textual conventions
         for high capacity data types. This module
         addresses an immediate need for data types not directly
         supported in the SMIv2. This short-term solution
         is meant to be deprecated as a long-term solution
         is deployed."
  REVISION        "200006080000Z"
  DESCRIPTION
        "Initial Version of the High Capacity Numbers
         MIB module, published as RFC 2856."
  ::= { mib-2 78 }

CounterBasedGauge64 ::= TEXTUAL-CONVENTION
  STATUS       current
  DESCRIPTION
        "The CounterBasedGauge64 type represents a non-negative
        integer, which may increase or decrease, but shall never
        exceed a maximum value, nor fall below a minimum value. The
        maximum value can not be greater than 2^64-1
        (18446744073709551615 decimal), and the minimum value can

        not be smaller than 0.  The value of a CounterBasedGauge64
        has its maximum value whenever the information being modeled
        is greater than or equal to its maximum value, and has its
        minimum value whenever the information being modeled is
        smaller than or equal to its minimum value.  If the
        information being modeled subsequently decreases below
        (increases above) the maximum (minimum) value, the
        CounterBasedGauge64 also decreases (increases).

        Note that this TC is not strictly supported in SMIv2,
        because the 'always increasing' and 'counter wrap' semantics
        associated with the Counter64 base type are not preserved.
        It is possible that management applications which rely
        solely upon the (Counter64) ASN.1 tag to determine object
        semantics will mistakenly operate upon objects of this type
        as they would for Counter64 objects.

        This textual convention represents a limited and short-term
        solution, and may be deprecated as a long term solution is
        defined and deployed to replace it."
  SYNTAX Counter64

ZeroBasedCounter64 ::= TEXTUAL-CONVENTION
  STATUS current
  DESCRIPTION
        "This TC describes an object which counts events with the
        following semantics: objects of this type will be set to
        zero(0) on creation and will thereafter count appropriate
        events, wrapping back to zero(0) when the value 2^64 is
        reached.

        Provided that an application discovers the new object within
        the minimum time to wrap it can use the initial value as a
        delta since it last polled the table of which this object is
        part.  It is important for a management station to be aware
        of this minimum time and the actual time between polls, and
        to discard data if the actual time is too long or there is
        no defined minimum time.

        Typically this TC is used in tables where the INDEX space is
        constantly changing and/or the TimeFilter mechanism is in
        use.

        Note that this textual convention does not retain all the
        semantics of the Counter64 base type. Specifically, a
        Counter64 has an arbitrary initial value, but objects
        defined with this TC are required to start at the value

        zero.  This behavior is not likely to have any adverse
        effects on management applications which are expecting
        Counter64 semantics.

        This textual convention represents a limited and short-term
        solution, and may be deprecated as a long term solution is
        defined and deployed to replace it."
  SYNTAX Counter64

END
