           IF-MIB DEFINITIONS ::= BEGIN

           IMPORTS
               MODULE-IDENTITY, OBJECT-TYPE, Counter32, Gauge32, Counter64,
               Integer32, TimeTicks, mib-2,
               NOTIFICATION-TYPE                        FROM SNMPv2-SMI
               TEXTUAL-CONVENTION, DisplayString,
               PhysAddress, TruthValue, RowStatus,
               TimeStamp, AutonomousType, TestAndIncr   FROM SNMPv2-TC
               MODULE-COMPLIANCE, OBJECT-GROUP          FROM SNMPv2-CONF
               snmpTraps                                FROM SNMPv2-MIB
               IANAifType                               FROM IANAifType-MIB;

           ifMIB MODULE-IDENTITY
               LAST-UPDATED "9611031355Z"
               ORGANIZATION "IETF Interfaces MIB Working Group"
               CONTACT-INFO
                       "   Keith McCloghrie
                           Cisco Systems, Inc.
                           170 West Tasman Drive
                           San Jose, CA  95134-1706
                           US

                           408-526-5260
                           kzm@cisco.com"
               DESCRIPTION
                       "The MIB module to describe generic objects for
                       network interface sub-layers.  This MIB is an updated
                       version of MIB-II's ifTable, and incorporates the
                       extensions defined in RFC 1229."
               REVISION      "9602282155Z"
               DESCRIPTION
                       "Revisions made by the Interfaces MIB WG."
               REVISION      "9311082155Z"
               DESCRIPTION
                       "Initial revision, published as part of RFC 1573."
               ::= { mib-2 31 }


           ifMIBObjects OBJECT IDENTIFIER ::= { ifMIB 1 }

           interfaces   OBJECT IDENTIFIER ::= { mib-2 2 }


           OwnerString ::= TEXTUAL-CONVENTION
               DISPLAY-HINT "255a"
               STATUS       current
               DESCRIPTION
                       "This data type is used to model an administratively
                       assigned name of the owner of a resource.  This
                       information is taken from the NVT ASCII character set.
                       It is suggested that this name contain one or more of
                       the following: ASCII form of the manager station's
                       transport address, management station name (e.g.,
                       domain name), network management personnel's name,
                       location, or phone number.  In some cases the agent
                       itself will be the owner of an entry.  In these cases,
                       this string shall be set to a string starting with
                       'agent'."
               SYNTAX       OCTET STRING (SIZE(0..255))

           -- InterfaceIndex contains the semantics of ifIndex and
           -- should be used for any objects defined on other mib
           -- modules that need these semantics.

           InterfaceIndex ::= TEXTUAL-CONVENTION
               DISPLAY-HINT "d"
               STATUS       current
               DESCRIPTION
                       "A unique value, greater than zero, for each interface
                       or interface sub-layer in the managed system.  It is
                       recommended that values are assigned contiguously
                       starting from 1.  The value for each interface sub-
                       layer must remain constant at least from one re-
                       initialization of the entity's network management
                       system to the next re-initialization."
               SYNTAX       Integer32 (1..2147483647)


           InterfaceIndexOrZero ::= TEXTUAL-CONVENTION
               DISPLAY-HINT "d"
               STATUS       current
               DESCRIPTION
                       "This textual convention is an extension of the
                       InterfaceIndex convention.  The latter defines a
                       greater than zero value used to identify an interface
                       or interface sub-layer in the managed system.  This
                       extension permits the additional value of zero.  the
                       value zero is object-specific and must therefore be
                       defined as part of the description of any object which
                       uses this syntax.  Examples of the usage of zero might
                       include situations where interface was unknown, or
                       when none or all interfaces need to be referenced."
               SYNTAX       Integer32 (0..2147483647)


           ifNumber  OBJECT-TYPE
               SYNTAX      Integer32
               MAX-ACCESS  read-only
               STATUS      current
               DESCRIPTION
                       "The number of network interfaces (regardless of their
                       current state) present on this system."
               ::= { interfaces 1 }

           ifTableLastChange  OBJECT-TYPE
               SYNTAX      TimeTicks
               MAX-ACCESS  read-only
               STATUS      current
               DESCRIPTION
                       "The value of sysUpTime at the time of the last
                       creation or deletion of an entry in the ifTable.  If
                       the number of entries has been unchanged since the
                       last re-initialization of the local network management
                       subsystem, then this object contains a zero value."
               ::= { ifMIBObjects 5 }


           -- the Interfaces table

           -- The Interfaces table contains information on the entity's
           -- interfaces.  Each sub-layer below the internetwork-layer
           -- of a network interface is considered to be an interface.

           ifTable OBJECT-TYPE
               SYNTAX      SEQUENCE OF IfEntry
               MAX-ACCESS  not-accessible
               STATUS      current
               DESCRIPTION
                       "A list of interface entries.  The number of entries
                       is given by the value of ifNumber."
               ::= { interfaces 2 }

           ifEntry OBJECT-TYPE
               SYNTAX      IfEntry
               MAX-ACCESS  not-accessible
               STATUS      current
               DESCRIPTION
                       "An entry containing management information applicable
                       to a particular interface."
               INDEX   { ifIndex }



               ::= { ifTable 1 }

           IfEntry ::=
               SEQUENCE {
                   ifIndex                 InterfaceIndex,
                   ifDescr                 DisplayString,
                   ifType                  IANAifType,
                   ifMtu                   Integer32,
                   ifSpeed                 Gauge32,
                   ifPhysAddress           PhysAddress,
                   ifAdminStatus           INTEGER,
                   ifOperStatus            INTEGER,
                   ifLastChange            TimeTicks,
                   ifInOctets              Counter32,
                   ifInUcastPkts           Counter32,
                   ifInNUcastPkts          Counter32,  -- deprecated
                   ifInDiscards            Counter32,
                   ifInErrors              Counter32,
                   ifInUnknownProtos       Counter32,
                   ifOutOctets             Counter32,
                   ifOutUcastPkts          Counter32,
                   ifOutNUcastPkts         Counter32,  -- deprecated
                   ifOutDiscards           Counter32,
                   ifOutErrors             Counter32,
                   ifOutQLen               Gauge32,    -- deprecated
                   ifSpecific              OBJECT IDENTIFIER -- deprecated
               }


           ifIndex OBJECT-TYPE
               SYNTAX      InterfaceIndex
               MAX-ACCESS  read-only
               STATUS      current
               DESCRIPTION
                       "A unique value, greater than zero, for each
                       interface.  It is recommended that values are assigned
                       contiguously starting from 1.  The value for each
                       interface sub-layer must remain constant at least from
                       one re-initialization of the entity's network
                       management system to the next re-initialization."
               ::= { ifEntry 1 }

           ifDescr OBJECT-TYPE
               SYNTAX      DisplayString (SIZE (0..255))
               MAX-ACCESS  read-only


               STATUS      current
               DESCRIPTION
                       "A textual string containing information about the
                       interface.  This string should include the name of the
                       manufacturer, the product name and the version of the
                       interface hardware/software."
               ::= { ifEntry 2 }

           ifType OBJECT-TYPE
               SYNTAX      IANAifType
               MAX-ACCESS  read-only
               STATUS      current
               DESCRIPTION
                       "The type of interface.  Additional values for ifType
                       are assigned by the Internet Assigned Numbers
                       Authority (IANA), through updating the syntax of the
                       IANAifType textual convention."
               ::= { ifEntry 3 }

           ifMtu OBJECT-TYPE
               SYNTAX      Integer32
               MAX-ACCESS  read-only
               STATUS      current
               DESCRIPTION
                       "The size of the largest packet which can be
                       sent/received on the interface, specified in octets.
                       For interfaces that are used for transmitting network
                       datagrams, this is the size of the largest network
                       datagram that can be sent on the interface."
               ::= { ifEntry 4 }

           ifSpeed OBJECT-TYPE
               SYNTAX      Gauge32
               MAX-ACCESS  read-only
               STATUS      current
               DESCRIPTION
                       "An estimate of the interface's current bandwidth in
                       bits per second.  For interfaces which do not vary in
                       bandwidth or for those where no accurate estimation
                       can be made, this object should contain the nominal
                       bandwidth.  If the bandwidth of the interface is
                       greater than the maximum value reportable by this
                       object then this object should report its maximum
                       value (4,294,967,295) and ifHighSpeed must be used to
                       report the interace's speed.  For a sub-layer which
                       has no concept of bandwidth, this object should be
                       zero."
               ::= { ifEntry 5 }

           ifPhysAddress OBJECT-TYPE
               SYNTAX      PhysAddress
               MAX-ACCESS  read-only
               STATUS      current
               DESCRIPTION
                       "The interface's address at its protocol sub-layer.
                       For example, for an 802.x interface, this object
                       normally contains a MAC address.  The interface's
                       media-specific MIB must define the bit and byte
                       ordering and the format of the value of this object.
                       For interfaces which do not have such an address
                       (e.g., a serial line), this object should contain an
                       octet string of zero length."
               ::= { ifEntry 6 }

           ifAdminStatus OBJECT-TYPE
               SYNTAX  INTEGER {
                           up(1),       -- ready to pass packets
                           down(2),
                           testing(3)   -- in some test mode
                       }
               MAX-ACCESS  read-write
               STATUS      current
               DESCRIPTION
                       "The desired state of the interface.  The testing(3)
                       state indicates that no operational packets can be
                       passed.  When a managed system initializes, all
                       interfaces start with ifAdminStatus in the down(2)
                       state.  As a result of either explicit management
                       action or per configuration information retained by
                       the managed system, ifAdminStatus is then changed to
                       either the up(1) or testing(3) states (or remains in
                       the down(2) state)."
               ::= { ifEntry 7 }

           ifOperStatus OBJECT-TYPE
               SYNTAX  INTEGER {
                           up(1),        -- ready to pass packets
                           down(2),
                           testing(3),   -- in some test mode
                           unknown(4),   -- status can not be determined
                                         -- for some reason.
                           dormant(5),
                           notPresent(6),    -- some component is missing
                           lowerLayerDown(7) -- down due to state of
                                             -- lower-layer interface(s)
                       }
               MAX-ACCESS  read-only
               STATUS      current
               DESCRIPTION
                       "The current operational state of the interface.  The
                       testing(3) state indicates that no operational packets
                       can be passed.  If ifAdminStatus is down(2) then
                       ifOperStatus should be down(2).  If ifAdminStatus is
                       changed to up(1) then ifOperStatus should change to
                       up(1) if the interface is ready to transmit and
                       receive network traffic; it should change to
                       dormant(5) if the interface is waiting for external
                       actions (such as a serial line waiting for an incoming
                       connection); it should remain in the down(2) state if
                       and only if there is a fault that prevents it from
                       going to the up(1) state; it should remain in the
                       notPresent(6) state if the interface has missing
                       (typically, hardware) components."
               ::= { ifEntry 8 }

           ifLastChange OBJECT-TYPE
               SYNTAX      TimeTicks
               MAX-ACCESS  read-only
               STATUS      current
               DESCRIPTION
                       "The value of sysUpTime at the time the interface
                       entered its current operational state.  If the current
                       state was entered prior to the last re-initialization
                       of the local network management subsystem, then this
                       object contains a zero value."
               ::= { ifEntry 9 }

           ifInOctets OBJECT-TYPE
               SYNTAX      Counter32
               MAX-ACCESS  read-only
               STATUS      current
               DESCRIPTION
                       "The total number of octets received on the interface,
                       including framing characters.

                       Discontinuities in the value of this counter can occur
                       at re-initialization of the management system, and at
                       other times as indicated by the value of
                       ifCounterDiscontinuityTime."
               ::= { ifEntry 10 }

           ifInUcastPkts OBJECT-TYPE
               SYNTAX      Counter32
               MAX-ACCESS  read-only
               STATUS      current
               DESCRIPTION
                       "The number of packets, delivered by this sub-layer to
                       a higher (sub-)layer, which were not addressed to a
                       multicast or broadcast address at this sub-layer.

                       Discontinuities in the value of this counter can occur
                       at re-initialization of the management system, and at
                       other times as indicated by the value of
                       ifCounterDiscontinuityTime."
               ::= { ifEntry 11 }

           ifInNUcastPkts OBJECT-TYPE
               SYNTAX  Counter32
               MAX-ACCESS  read-only
               STATUS      deprecated
               DESCRIPTION
                       "The number of packets, delivered by this sub-layer to
                       a higher (sub-)layer, which were addressed to a
                       multicast or broadcast address at this sub-layer.

                       Discontinuities in the value of this counter can occur
                       at re-initialization of the management system, and at
                       other times as indicated by the value of
                       ifCounterDiscontinuityTime.

                       This object is deprecated in favour of
                       ifInMulticastPkts and ifInBroadcastPkts."
               ::= { ifEntry 12 }

           ifInDiscards OBJECT-TYPE
               SYNTAX      Counter32
               MAX-ACCESS  read-only
               STATUS      current
               DESCRIPTION
                       "The number of inbound packets which were chosen to be
                       discarded even though no errors had been detected to
                       prevent their being deliverable to a higher-layer
                       protocol.  One possible reason for discarding such a
                       packet could be to free up buffer space.

                       Discontinuities in the value of this counter can occur
                       at re-initialization of the management system, and at
                       other times as indicated by the value of
                       ifCounterDiscontinuityTime."
               ::= { ifEntry 13 }

           ifInErrors OBJECT-TYPE
               SYNTAX      Counter32
               MAX-ACCESS  read-only
               STATUS      current
               DESCRIPTION
                       "For packet-oriented interfaces, the number of inbound
                       packets that contained errors preventing them from
                       being deliverable to a higher-layer protocol.  For
                       character-oriented or fixed-length interfaces, the
                       number of inbound transmission units that contained
                       errors preventing them from being deliverable to a
                       higher-layer protocol.

                       Discontinuities in the value of this counter can occur
                       at re-initialization of the management system, and at
                       other times as indicated by the value of
                       ifCounterDiscontinuityTime."
               ::= { ifEntry 14 }

           ifInUnknownProtos OBJECT-TYPE
               SYNTAX      Counter32
               MAX-ACCESS  read-only
               STATUS      current
               DESCRIPTION
                       "For packet-oriented interfaces, the number of packets
                       received via the interface which were discarded
                       because of an unknown or unsupported protocol.  For
                       character-oriented or fixed-length interfaces that
                       support protocol multiplexing the number of
                       transmission units received via the interface which
                       were discarded because of an unknown or unsupported
                       protocol.  For any interface that does not support
                       protocol multiplexing, this counter will always be 0.

                       Discontinuities in the value of this counter can occur
                       at re-initialization of the management system, and at
                       other times as indicated by the value of
                       ifCounterDiscontinuityTime."
               ::= { ifEntry 15 }

           ifOutOctets OBJECT-TYPE
               SYNTAX      Counter32
               MAX-ACCESS  read-only
               STATUS      current
               DESCRIPTION
                       "The total number of octets transmitted out of the
                       interface, including framing characters.

                       Discontinuities in the value of this counter can occur
                       at re-initialization of the management system, and at
                       other times as indicated by the value of
                       ifCounterDiscontinuityTime."
               ::= { ifEntry 16 }

           ifOutUcastPkts OBJECT-TYPE
               SYNTAX      Counter32
               MAX-ACCESS  read-only
               STATUS      current
               DESCRIPTION
                       "The total number of packets that higher-level
                       protocols requested be transmitted, and which were not
                       addressed to a multicast or broadcast address at this
                       sub-layer, including those that were discarded or not
                       sent.

                       Discontinuities in the value of this counter can occur
                       at re-initialization of the management system, and at
                       other times as indicated by the value of
                       ifCounterDiscontinuityTime."
               ::= { ifEntry 17 }

           ifOutNUcastPkts OBJECT-TYPE
               SYNTAX      Counter32
               MAX-ACCESS  read-only
               STATUS      deprecated
               DESCRIPTION
                       "The total number of packets that higher-level
                       protocols requested be transmitted, and which were
                       addressed to a multicast or broadcast address at this
                       sub-layer, including those that were discarded or not
                       sent.

                       Discontinuities in the value of this counter can occur
                       at re-initialization of the management system, and at
                       other times as indicated by the value of
                       ifCounterDiscontinuityTime.
                       This object is deprecated in favour of
                       ifOutMulticastPkts and ifOutBroadcastPkts."
               ::= { ifEntry 18 }

           ifOutDiscards OBJECT-TYPE
               SYNTAX      Counter32
               MAX-ACCESS  read-only
               STATUS      current
               DESCRIPTION
                       "The number of outbound packets which were chosen to
                       be discarded even though no errors had been detected
                       to prevent their being transmitted.  One possible
                       reason for discarding such a packet could be to free
                       up buffer space.

                       Discontinuities in the value of this counter can occur
                       at re-initialization of the management system, and at
                       other times as indicated by the value of
                       ifCounterDiscontinuityTime."
               ::= { ifEntry 19 }

           ifOutErrors OBJECT-TYPE
               SYNTAX      Counter32
               MAX-ACCESS  read-only
               STATUS      current
               DESCRIPTION
                       "For packet-oriented interfaces, the number of
                       outbound packets that could not be transmitted because
                       of errors.  For character-oriented or fixed-length
                       interfaces, the number of outbound transmission units
                       that could not be transmitted because of errors.

                       Discontinuities in the value of this counter can occur
                       at re-initialization of the management system, and at
                       other times as indicated by the value of
                       ifCounterDiscontinuityTime."
               ::= { ifEntry 20 }


           ifOutQLen OBJECT-TYPE
               SYNTAX      Gauge32
               MAX-ACCESS  read-only
               STATUS      deprecated
               DESCRIPTION
                       "The length of the output packet queue (in packets)."
               ::= { ifEntry 21 }

           ifSpecific OBJECT-TYPE
               SYNTAX      OBJECT IDENTIFIER
               MAX-ACCESS  read-only
               STATUS      deprecated
               DESCRIPTION
                       "A reference to MIB definitions specific to the
                       particular media being used to realize the interface.
                       It is recommended that this value point to an instance
                       of a MIB object in the media-specific MIB, i.e., that
                       this object have the semantics associated with the
                       InstancePointer textual convention defined in RFC
                       1903.  In fact, it is recommended that the media-
                       specific MIB specify what value ifSpecific should/can
                       take for values of ifType.  If no MIB definitions
                       specific to the particular media are available, the
                       value should be set to the OBJECT IDENTIFIER { 0 0 }."
               ::= { ifEntry 22 }



           --
           --   Extension to the interface table
           --
           -- This table replaces the ifExtnsTable table.
           --

           ifXTable        OBJECT-TYPE
               SYNTAX      SEQUENCE OF IfXEntry
               MAX-ACCESS  not-accessible
               STATUS      current
               DESCRIPTION
                       "A list of interface entries.  The number of entries
                       is given by the value of ifNumber.  This table
                       contains additional objects for the interface table."
               ::= { ifMIBObjects 1 }

           ifXEntry        OBJECT-TYPE
               SYNTAX      IfXEntry
               MAX-ACCESS  not-accessible
               STATUS      current
               DESCRIPTION
                       "An entry containing additional management information
                       applicable to a particular interface."
               AUGMENTS    { ifEntry }
               ::= { ifXTable 1 }

           IfXEntry ::=
               SEQUENCE {
                   ifName                  DisplayString,
                   ifInMulticastPkts       Counter32,
                   ifInBroadcastPkts       Counter32,
                   ifOutMulticastPkts      Counter32,
                   ifOutBroadcastPkts      Counter32,
                   ifHCInOctets            Counter64,
                   ifHCInUcastPkts         Counter64,
                   ifHCInMulticastPkts     Counter64,
                   ifHCInBroadcastPkts     Counter64,
                   ifHCOutOctets           Counter64,
                   ifHCOutUcastPkts        Counter64,
                   ifHCOutMulticastPkts    Counter64,
                   ifHCOutBroadcastPkts    Counter64,
                   ifLinkUpDownTrapEnable  INTEGER,
                   ifHighSpeed             Gauge32,
                   ifPromiscuousMode       TruthValue,
                   ifConnectorPresent      TruthValue,
                   ifAlias                 DisplayString,
                   ifCounterDiscontinuityTime TimeStamp
               }


           ifName OBJECT-TYPE
               SYNTAX      DisplayString
               MAX-ACCESS  read-only
               STATUS      current
               DESCRIPTION
                       "The textual name of the interface.  The value of this
                       object should be the name of the interface as assigned
                       by the local device and should be suitable for use in
                       commands entered at the device's `console'.  This
                       might be a text name, such as `le0' or a simple port
                       number, such as `1', depending on the interface naming
                       syntax of the device.  If several entries in the
                       ifTable together represent a single interface as named
                       by the device, then each will have the same value of
                       ifName.  Note that for an agent which responds to SNMP
                       queries concerning an interface on some other
                       (proxied) device, then the value of ifName for such an
                       interface is the proxied device's local name for it.

                       If there is no local name, or this object is otherwise
                       not applicable, then this object contains a zero-
                       length string."
               ::= { ifXEntry 1 }

           ifInMulticastPkts OBJECT-TYPE
               SYNTAX      Counter32
               MAX-ACCESS  read-only
               STATUS      current
               DESCRIPTION
                       "The number of packets, delivered by this sub-layer to
                       a higher (sub-)layer, which were addressed to a
                       multicast address at this sub-layer.  For a MAC layer
                       protocol, this includes both Group and Functional
                       addresses.

                       Discontinuities in the value of this counter can occur
                       at re-initialization of the management system, and at
                       other times as indicated by the value of
                       ifCounterDiscontinuityTime."
               ::= { ifXEntry 2 }

           ifInBroadcastPkts OBJECT-TYPE
               SYNTAX      Counter32
               MAX-ACCESS  read-only
               STATUS      current
               DESCRIPTION
                       "The number of packets, delivered by this sub-layer to
                       a higher (sub-)layer, which were addressed to a
                       broadcast address at this sub-layer.

                       Discontinuities in the value of this counter can occur
                       at re-initialization of the management system, and at
                       other times as indicated by the value of
                       ifCounterDiscontinuityTime."
               ::= { ifXEntry 3 }

           ifOutMulticastPkts OBJECT-TYPE
               SYNTAX      Counter32
               MAX-ACCESS  read-only
               STATUS      current
               DESCRIPTION
                       "The total number of packets that higher-level
                       protocols requested be transmitted, and which were
                       addressed to a multicast address at this sub-layer,
                       including those that were discarded or not sent.  For
                       a MAC layer protocol, this includes both Group and
                       Functional addresses.

                       Discontinuities in the value of this counter can occur
                       at re-initialization of the management system, and at
                       other times as indicated by the value of
                       ifCounterDiscontinuityTime."
               ::= { ifXEntry 4 }

           ifOutBroadcastPkts OBJECT-TYPE
               SYNTAX      Counter32
               MAX-ACCESS  read-only
               STATUS      current
               DESCRIPTION
                       "The total number of packets that higher-level
                       protocols requested be transmitted, and which were
                       addressed to a broadcast address at this sub-layer,
                       including those that were discarded or not sent.

                       Discontinuities in the value of this counter can occur
                       at re-initialization of the management system, and at
                       other times as indicated by the value of
                       ifCounterDiscontinuityTime."
               ::= { ifXEntry 5 }

           --
           -- High Capacity Counter objects.  These objects are all
           -- 64 bit versions of the "basic" ifTable counters.  These
           -- objects all have the same basic semantics as their 32-bit
           -- counterparts, however, their syntax has been extended
           -- to 64 bits.
           --

           ifHCInOctets OBJECT-TYPE
               SYNTAX      Counter64
               MAX-ACCESS  read-only
               STATUS      current

               DESCRIPTION
                       "The total number of octets received on the interface,
                       including framing characters.  This object is a 64-bit
                       version of ifInOctets.

                       Discontinuities in the value of this counter can occur
                       at re-initialization of the management system, and at
                       other times as indicated by the value of
                       ifCounterDiscontinuityTime."
               ::= { ifXEntry 6 }

           ifHCInUcastPkts OBJECT-TYPE
               SYNTAX      Counter64
               MAX-ACCESS  read-only
               STATUS      current
               DESCRIPTION
                       "The number of packets, delivered by this sub-layer to
                       a higher (sub-)layer, which were not addressed to a
                       multicast or broadcast address at this sub-layer.
                       This object is a 64-bit version of ifInUcastPkts.

                       Discontinuities in the value of this counter can occur
                       at re-initialization of the management system, and at
                       other times as indicated by the value of
                       ifCounterDiscontinuityTime."
               ::= { ifXEntry 7 }

           ifHCInMulticastPkts OBJECT-TYPE
               SYNTAX      Counter64
               MAX-ACCESS  read-only
               STATUS      current
               DESCRIPTION
                       "The number of packets, delivered by this sub-layer to
                       a higher (sub-)layer, which were addressed to a
                       multicast address at this sub-layer.  For a MAC layer
                       protocol, this includes both Group and Functional
                       addresses.  This object is a 64-bit version of
                       ifInMulticastPkts.

                       Discontinuities in the value of this counter can occur
                       at re-initialization of the management system, and at
                       other times as indicated by the value of
                       ifCounterDiscontinuityTime."
               ::= { ifXEntry 8 }


           ifHCInBroadcastPkts OBJECT-TYPE
               SYNTAX      Counter64
               MAX-ACCESS  read-only
               STATUS      current
               DESCRIPTION
                       "The number of packets, delivered by this sub-layer to
                       a higher (sub-)layer, which were addressed to a
                       broadcast address at this sub-layer.  This object is a
                       64-bit version of ifInBroadcastPkts.

                       Discontinuities in the value of this counter can occur
                       at re-initialization of the management system, and at
                       other times as indicated by the value of
                       ifCounterDiscontinuityTime."
               ::= { ifXEntry 9 }

           ifHCOutOctets OBJECT-TYPE
               SYNTAX      Counter64
               MAX-ACCESS  read-only
               STATUS      current
               DESCRIPTION
                       "The total number of octets transmitted out of the
                       interface, including framing characters.  This object
                       is a 64-bit version of ifOutOctets.

                       Discontinuities in the value of this counter can occur
                       at re-initialization of the management system, and at
                       other times as indicated by the value of
                       ifCounterDiscontinuityTime."
               ::= { ifXEntry 10 }

           ifHCOutUcastPkts OBJECT-TYPE
               SYNTAX      Counter64
               MAX-ACCESS  read-only
               STATUS      current
               DESCRIPTION
                       "The total number of packets that higher-level
                       protocols requested be transmitted, and which were not
                       addressed to a multicast or broadcast address at this
                       sub-layer, including those that were discarded or not
                       sent.  This object is a 64-bit version of
                       ifOutUcastPkts.

                       Discontinuities in the value of this counter can occur
                       at re-initialization of the management system, and at
                       other times as indicated by the value of
                       ifCounterDiscontinuityTime."
               ::= { ifXEntry 11 }

           ifHCOutMulticastPkts OBJECT-TYPE
               SYNTAX      Counter64
               MAX-ACCESS  read-only
               STATUS      current
               DESCRIPTION
                       "The total number of packets that higher-level
                       protocols requested be transmitted, and which were
                       addressed to a multicast address at this sub-layer,
                       including those that were discarded or not sent.  For
                       a MAC layer protocol, this includes both Group and
                       Functional addresses.  This object is a 64-bit version
                       of ifOutMulticastPkts.
                       Discontinuities in the value of this counter can occur
                       at re-initialization of the management system, and at
                       other times as indicated by the value of
                       ifCounterDiscontinuityTime."
               ::= { ifXEntry 12 }

           ifHCOutBroadcastPkts OBJECT-TYPE
               SYNTAX      Counter64
               MAX-ACCESS  read-only
               STATUS      current
               DESCRIPTION
                       "The total number of packets that higher-level
                       protocols requested be transmitted, and which were
                       addressed to a broadcast address at this sub-layer,
                       including those that were discarded or not sent.  This
                       object is a 64-bit version of ifOutBroadcastPkts.

                       Discontinuities in the value of this counter can occur
                       at re-initialization of the management system, and at
                       other times as indicated by the value of
                       ifCounterDiscontinuityTime."
               ::= { ifXEntry 13 }

           ifLinkUpDownTrapEnable  OBJECT-TYPE
               SYNTAX      INTEGER { enabled(1), disabled(2) }
               MAX-ACCESS  read-write
               STATUS      current
               DESCRIPTION

                       "Indicates whether linkUp/linkDown traps should be
                       generated for this interface.

                       By default, this object should have the value
                       enabled(1) for interfaces which do not operate on
                       'top' of any other interface (as defined in the
                       ifStackTable), and disabled(2) otherwise."
               ::= { ifXEntry 14 }

           ifHighSpeed OBJECT-TYPE
               SYNTAX      Gauge32
               MAX-ACCESS  read-only
               STATUS      current
               DESCRIPTION
                       "An estimate of the interface's current bandwidth in
                       units of 1,000,000 bits per second.  If this object
                       reports a value of `n' then the speed of the interface
                       is somewhere in the range of `n-500,000' to
                       `n+499,999'.  For interfaces which do not vary in
                       bandwidth or for those where no accurate estimation
                       can be made, this object should contain the nominal
                       bandwidth.  For a sub-layer which has no concept of
                       bandwidth, this object should be zero."
               ::= { ifXEntry 15 }

           ifPromiscuousMode  OBJECT-TYPE
               SYNTAX      TruthValue
               MAX-ACCESS  read-write
               STATUS      current
               DESCRIPTION
                       "This object has a value of false(2) if this interface
                       only accepts packets/frames that are addressed to this
                       station.  This object has a value of true(1) when the
                       station accepts all packets/frames transmitted on the
                       media.  The value true(1) is only legal on certain
                       types of media.  If legal, setting this object to a
                       value of true(1) may require the interface to be reset
                       before becoming effective.

                       The value of ifPromiscuousMode does not affect the
                       reception of broadcast and multicast packets/frames by
                       the interface."
               ::= { ifXEntry 16 }

           ifConnectorPresent   OBJECT-TYPE
               SYNTAX      TruthValue
               MAX-ACCESS  read-only
               STATUS      current
               DESCRIPTION
                       "This object has the value 'true(1)' if the interface
                       sublayer has a physical connector and the value
                       'false(2)' otherwise."
               ::= { ifXEntry 17 }

           ifAlias   OBJECT-TYPE
               SYNTAX      DisplayString (SIZE(0..64))
               MAX-ACCESS  read-write
               STATUS      current
               DESCRIPTION
                       "This object is an 'alias' name for the interface as
                       specified by a network manager, and provides a non-
                       volatile 'handle' for the interface.

                       On the first instantiation of an interface, the value
                       of ifAlias associated with that interface is the
                       zero-length string.  As and when a value is written
                       into an instance of ifAlias through a network
                       management set operation, then the agent must retain
                       the supplied value in the ifAlias instance associated
                       with the same interface for as long as that interface
                       remains instantiated, including across all re-
                       initializations/reboots of the network management
                       system, including those which result in a change of
                       the interface's ifIndex value.

                       An example of the value which a network manager might
                       store in this object for a WAN interface is the
                       (Telco's) circuit number/identifier of the interface.

                       Some agents may support write-access only for
                       interfaces having particular values of ifType.  An
                       agent which supports write access to this object is
                       required to keep the value in non-volatile storage,
                       but it may limit the length of new values depending on
                       how much storage is already occupied by the current
                       values for other interfaces."
               ::= { ifXEntry 18 }

           ifCounterDiscontinuityTime OBJECT-TYPE
               SYNTAX      TimeStamp
               MAX-ACCESS  read-only
               STATUS      current
               DESCRIPTION
                       "The value of sysUpTime on the most recent occasion at
                       which any one or more of this interface's counters
                       suffered a discontinuity.  The relevant counters are
                       the specific instances associated with this interface
                       of any Counter32 or Counter64 object contained in the
                       ifTable or ifXTable.  If no such discontinuities have
                       occurred since the last re-initialization of the local
                       management subsystem, then this object contains a zero
                       value."
               ::= { ifXEntry 19 }


           --           The Interface Stack Group
           --
           -- Implementation of this group is mandatory for all systems
           --

           ifStackTable  OBJECT-TYPE
                SYNTAX        SEQUENCE OF IfStackEntry
                MAX-ACCESS    not-accessible
                STATUS        current
                DESCRIPTION
                       "The table containing information on the relationships
                       between the multiple sub-layers of network interfaces.
                       In particular, it contains information on which sub-
                       layers run 'on top of' which other sub-layers, where
                       each sub-layer corresponds to a conceptual row in the
                       ifTable.  For example, when the sub-layer with ifIndex
                       value x runs over the sub-layer with ifIndex value y,
                       then this table contains:

                         ifStackStatus.x.y=active

                       For each ifIndex value, I, which identifies an active
                       interface, there are always at least two instantiated
                       rows in this table associated with I.  For one of
                       these rows, I is the value of ifStackHigherLayer; for
                       the other, I is the value of ifStackLowerLayer.  (If I
                       is not involved in multiplexing, then these are the
                       only two rows associated with I.)

                       For example, two rows exist even for an interface
                       which has no others stacked on top or below it:

                         ifStackStatus.0.x=active
                         ifStackStatus.x.0=active "
                ::= { ifMIBObjects 2 }


           ifStackEntry  OBJECT-TYPE
                SYNTAX        IfStackEntry
                MAX-ACCESS    not-accessible
                STATUS        current
                DESCRIPTION
                       "Information on a particular relationship between two
                       sub-layers, specifying that one sub-layer runs on
                       'top' of the other sub-layer.  Each sub-layer
                       corresponds to a conceptual row in the ifTable."
                INDEX { ifStackHigherLayer, ifStackLowerLayer }
                ::= { ifStackTable 1 }


           IfStackEntry ::=
               SEQUENCE {
                   ifStackHigherLayer  Integer32,
                   ifStackLowerLayer   Integer32,
                   ifStackStatus       RowStatus
                }

           ifStackHigherLayer  OBJECT-TYPE
                SYNTAX        Integer32
                MAX-ACCESS    not-accessible
                STATUS        current
                DESCRIPTION
                       "The value of ifIndex corresponding to the higher
                       sub-layer of the relationship, i.e., the sub-layer
                       which runs on 'top' of the sub-layer identified by the
                       corresponding instance of ifStackLowerLayer.  If there
                       is no higher sub-layer (below the internetwork layer),
                       then this object has the value 0."
                ::= { ifStackEntry 1 }


           ifStackLowerLayer  OBJECT-TYPE
                SYNTAX        Integer32
                MAX-ACCESS    not-accessible
                STATUS        current
                DESCRIPTION
                       "The value of ifIndex corresponding to the lower sub-
                       layer of the relationship, i.e., the sub-layer which
                       runs 'below' the sub-layer identified by the
                       corresponding instance of ifStackHigherLayer.  If
                       there is no lower sub-layer, then this object has the
                       value 0."
                ::= { ifStackEntry 2 }


           ifStackStatus  OBJECT-TYPE
               SYNTAX         RowStatus
               MAX-ACCESS     read-create
               STATUS         current
               DESCRIPTION
                       "The status of the relationship between two sub-
                       layers.

                       Changing the value of this object from 'active' to
                       'notInService' or 'destroy' will likely have
                       consequences up and down the interface stack.  Thus,
                       write access to this object is likely to be
                       inappropriate for some types of interfaces, and many
                       implementations will choose not to support write-
                       access for any type of interface."
               ::= { ifStackEntry 3 }

           ifStackLastChange OBJECT-TYPE
               SYNTAX         TimeTicks
               MAX-ACCESS     read-only
               STATUS         current
               DESCRIPTION
                       "The value of sysUpTime at the time of the last change
                       of the (whole) interface stack.  A change of the
                       interface stack is defined to be any creation,
                       deletion, or change in value of any instance of
                       ifStackStatus.  If the interface stack has been
                       unchanged since the last re-initialization of the
                       local network management subsystem, then this object
                       contains a zero value."
               ::= { ifMIBObjects 6 }


           --   Generic Receive Address Table
           --
           -- This group of objects is mandatory for all types of
           -- interfaces which can receive packets/frames addressed to
           -- more than one address.
           --
           -- This table replaces the ifExtnsRcvAddr table.  The main
           -- difference is that this table makes use of the RowStatus
           -- textual convention, while ifExtnsRcvAddr did not.

           ifRcvAddressTable  OBJECT-TYPE
               SYNTAX      SEQUENCE OF IfRcvAddressEntry
               MAX-ACCESS  not-accessible
               STATUS      current
               DESCRIPTION
                       "This table contains an entry for each address
                       (broadcast, multicast, or uni-cast) for which the
                       system will receive packets/frames on a particular
                       interface, except as follows:

                       - for an interface operating in promiscuous mode,
                       entries are only required for those addresses for
                       which the system would receive frames were it not
                       operating in promiscuous mode.

                       - for 802.5 functional addresses, only one entry is
                       required, for the address which has the functional
                       address bit ANDed with the bit mask of all functional
                       addresses for which the interface will accept frames.

                       A system is normally able to use any unicast address
                       which corresponds to an entry in this table as a
                       source address."
               ::= { ifMIBObjects 4 }

           ifRcvAddressEntry  OBJECT-TYPE
               SYNTAX      IfRcvAddressEntry
               MAX-ACCESS  not-accessible
               STATUS      current
               DESCRIPTION
                       "A list of objects identifying an address for which
                       the system will accept packets/frames on the
                       particular interface identified by the index value
                       ifIndex."
               INDEX  { ifIndex, ifRcvAddressAddress }
               ::= { ifRcvAddressTable 1 }

           IfRcvAddressEntry ::=
               SEQUENCE {
                   ifRcvAddressAddress   PhysAddress,
                   ifRcvAddressStatus    RowStatus,
                   ifRcvAddressType      INTEGER
               }

           ifRcvAddressAddress OBJECT-TYPE
               SYNTAX      PhysAddress
               MAX-ACCESS  not-accessible
               STATUS      current
               DESCRIPTION
                       "An address for which the system will accept
                       packets/frames on this entry's interface."

               ::= { ifRcvAddressEntry 1 }

           ifRcvAddressStatus OBJECT-TYPE
               SYNTAX      RowStatus
               MAX-ACCESS  read-create
               STATUS      current
               DESCRIPTION
                       "This object is used to create and delete rows in the
                       ifRcvAddressTable."

               ::= { ifRcvAddressEntry 2 }

           ifRcvAddressType OBJECT-TYPE
               SYNTAX      INTEGER {
                               other(1),
                               volatile(2),
                               nonVolatile(3)
                           }

               MAX-ACCESS  read-create
               STATUS      current
               DESCRIPTION
                       "This object has the value nonVolatile(3) for those
                       entries in the table which are valid and will not be
                       deleted by the next restart of the managed system.
                       Entries having the value volatile(2) are valid and
                       exist, but have not been saved, so that will not exist
                       after the next restart of the managed system.  Entries
                       having the value other(1) are valid and exist but are
                       not classified as to whether they will continue to
                       exist after the next restart."

               DEFVAL  { volatile }
               ::= { ifRcvAddressEntry 3 }

           -- definition of interface-related traps.

           linkDown NOTIFICATION-TYPE
                   OBJECTS { ifIndex, ifAdminStatus, ifOperStatus }
                   STATUS  current
                   DESCRIPTION
                       "A linkDown trap signifies that the SNMPv2 entity,
                       acting in an agent role, has detected that the
                       ifOperStatus object for one of its communication links
                       is about to enter the down state from some other state
                       (but not from the notPresent state).  This other state
                       is indicated by the included value of ifOperStatus."
               ::= { snmpTraps 3 }

           linkUp NOTIFICATION-TYPE
                   OBJECTS { ifIndex, ifAdminStatus, ifOperStatus }
                   STATUS  current
                   DESCRIPTION
                       "A linkDown trap signifies that the SNMPv2 entity,
                       acting in an agent role, has detected that the
                       ifOperStatus object for one of its communication links
                       left the down state and transitioned into some other
                       state (but not into the notPresent state).  This other
                       state is indicated by the included value of
                       ifOperStatus."
               ::= { snmpTraps 4 }

           -- conformance information

           ifConformance OBJECT IDENTIFIER ::= { ifMIB 2 }

           ifGroups      OBJECT IDENTIFIER ::= { ifConformance 1 }
           ifCompliances OBJECT IDENTIFIER ::= { ifConformance 2 }

           -- compliance statements

           ifCompliance2 MODULE-COMPLIANCE
               STATUS  current
               DESCRIPTION
                       "The compliance statement for SNMPv2 entities which
                       have network interfaces."

               MODULE  -- this module
                   MANDATORY-GROUPS { ifGeneralInformationGroup, ifStackGroup2,
                                      ifCounterDiscontinuityGroup }

                   GROUP       ifFixedLengthGroup
                   DESCRIPTION
                       "This group is mandatory for all network interfaces
                       which are character-oriented or transmit data in
                       fixed-length transmission units."

                   GROUP       ifHCFixedLengthGroup
                   DESCRIPTION
                       "This group is mandatory only for those network
                       interfaces which are character-oriented or transmit
                       data in fixed-length transmission units, and for which
                       the value of the corresponding instance of ifSpeed is
                       greater than 20,000,000 bits/second."

                   GROUP       ifPacketGroup
                   DESCRIPTION
                       "This group is mandatory for all network interfaces
                       which are packet-oriented."

                   GROUP       ifHCPacketGroup
                   DESCRIPTION
                       "This group is mandatory only for those network
                       interfaces which are packet-oriented and for which the
                       value of the corresponding instance of ifSpeed is
                       greater than 650,000,000 bits/second."

                   GROUP       ifRcvAddressGroup
                   DESCRIPTION
                       "The applicability of this group MUST be defined by
                       the media-specific MIBs.  Media-specific MIBs must
                       define the exact meaning, use, and semantics of the
                       addresses in this group."
                   OBJECT      ifLinkUpDownTrapEnable
                   MIN-ACCESS  read-only
                   DESCRIPTION
                       "Write access is not required."

                   OBJECT      ifPromiscuousMode
                   MIN-ACCESS  read-only
                   DESCRIPTION
                       "Write access is not required."

                   OBJECT      ifStackStatus
                   SYNTAX      INTEGER { active(1) } -- subset of RowStatus
                   MIN-ACCESS  read-only
                   DESCRIPTION
                       "Write access is not required, and only one of the six
                       enumerated values for the RowStatus textual convention
                       need be supported, specifically: active(1)."

                   OBJECT       ifAdminStatus
                   SYNTAX       INTEGER { up(1), down(2) }
                   MIN-ACCESS   read-only
                   DESCRIPTION
                       "Write access is not required, nor is support for the
                       value testing(3)."

                   OBJECT       ifAlias
                   MIN-ACCESS   read-only
                   DESCRIPTION
                       "Write access is not required."

               ::= { ifCompliances 2 }

           -- units of conformance

           ifGeneralInformationGroup    OBJECT-GROUP
               OBJECTS { ifIndex, ifDescr, ifType, ifSpeed, ifPhysAddress,
                         ifAdminStatus, ifOperStatus, ifLastChange,
                         ifLinkUpDownTrapEnable, ifConnectorPresent,
                         ifHighSpeed, ifName, ifNumber, ifAlias,
                         ifTableLastChange }
               STATUS  current
               DESCRIPTION
                       "A collection of objects providing information
                       applicable to all network interfaces."
               ::= { ifGroups 10 }

           -- the following five groups are mutually exclusive; at most
           -- one of these groups is implemented for any interface
           ifFixedLengthGroup    OBJECT-GROUP
               OBJECTS { ifInOctets, ifOutOctets, ifInUnknownProtos,
                         ifInErrors, ifOutErrors }
               STATUS  current
               DESCRIPTION
                       "A collection of objects providing information
                       specific to non-high speed (non-high speed interfaces
                       transmit and receive at speeds less than or equal to
                       20,000,000 bits/second) character-oriented or fixed-
                       length-transmission network interfaces."
               ::= { ifGroups 2 }

           ifHCFixedLengthGroup    OBJECT-GROUP
               OBJECTS { ifHCInOctets, ifHCOutOctets,
                         ifInOctets, ifOutOctets, ifInUnknownProtos,
                         ifInErrors, ifOutErrors }
               STATUS  current
               DESCRIPTION
                       "A collection of objects providing information
                       specific to high speed (greater than 20,000,000
                       bits/second) character-oriented or fixed-length-
                       transmission network interfaces."
               ::= { ifGroups 3 }

           ifPacketGroup    OBJECT-GROUP
               OBJECTS { ifInOctets, ifOutOctets, ifInUnknownProtos,
                         ifInErrors, ifOutErrors,
                         ifMtu, ifInUcastPkts, ifInMulticastPkts,
                         ifInBroadcastPkts, ifInDiscards,
                         ifOutUcastPkts, ifOutMulticastPkts,
                         ifOutBroadcastPkts, ifOutDiscards,
                         ifPromiscuousMode }
               STATUS  current
               DESCRIPTION
                       "A collection of objects providing information
                       specific to non-high speed (non-high speed interfaces
                       transmit and receive at speeds less than or equal to
                       20,000,000 bits/second) packet-oriented network
                       interfaces."
               ::= { ifGroups 4 }

           ifHCPacketGroup    OBJECT-GROUP
               OBJECTS { ifHCInOctets, ifHCOutOctets,
                         ifInOctets, ifOutOctets, ifInUnknownProtos,
                         ifInErrors, ifOutErrors,
                         ifMtu, ifInUcastPkts, ifInMulticastPkts,
                         ifInBroadcastPkts, ifInDiscards,
                         ifOutUcastPkts, ifOutMulticastPkts,
                         ifOutBroadcastPkts, ifOutDiscards,
                         ifPromiscuousMode }
               STATUS  current
               DESCRIPTION
                       "A collection of objects providing information
                       specific to high speed (greater than 20,000,000
                       bits/second but less than or equal to 650,000,000
                       bits/second) packet-oriented network interfaces."
               ::= { ifGroups 5 }

           ifVHCPacketGroup    OBJECT-GROUP
               OBJECTS { ifHCInUcastPkts, ifHCInMulticastPkts,
                         ifHCInBroadcastPkts, ifHCOutUcastPkts,
                         ifHCOutMulticastPkts, ifHCOutBroadcastPkts,
                         ifHCInOctets, ifHCOutOctets,
                         ifInOctets, ifOutOctets, ifInUnknownProtos,
                         ifInErrors, ifOutErrors,
                         ifMtu, ifInUcastPkts, ifInMulticastPkts,
                         ifInBroadcastPkts, ifInDiscards,
                         ifOutUcastPkts, ifOutMulticastPkts,
                         ifOutBroadcastPkts, ifOutDiscards,
                         ifPromiscuousMode }
               STATUS  current
               DESCRIPTION
                       "A collection of objects providing information
                       specific to higher speed (greater than 650,000,000
                       bits/second) packet-oriented network interfaces."
               ::= { ifGroups 6 }

           ifRcvAddressGroup    OBJECT-GROUP
               OBJECTS { ifRcvAddressStatus, ifRcvAddressType }
               STATUS  current
               DESCRIPTION
                       "A collection of objects providing information on the
                       multiple addresses which an interface receives."
               ::= { ifGroups 7 }

           ifStackGroup2    OBJECT-GROUP
               OBJECTS { ifStackStatus, ifStackLastChange }
               STATUS  current
               DESCRIPTION
                       "A collection of objects providing information on the
                       layering of MIB-II interfaces."
               ::= { ifGroups 11 }

           ifCounterDiscontinuityGroup  OBJECT-GROUP
               OBJECTS { ifCounterDiscontinuityTime }
               STATUS  current
               DESCRIPTION
                       "A collection of objects providing information
                       specific to interface counter discontinuities."
               ::= { ifGroups 13 }

           -- Deprecated Definitions - Objects


           --
           --    The Interface Test Table
           --
           -- This group of objects is optional.  However, a media-specific
           -- MIB may make implementation of this group mandatory.
           --
           -- This table replaces the ifExtnsTestTable
           --

           ifTestTable   OBJECT-TYPE
               SYNTAX      SEQUENCE OF IfTestEntry
               MAX-ACCESS  not-accessible
               STATUS      deprecated
               DESCRIPTION
                       "This table contains one entry per interface.  It
                       defines objects which allow a network manager to
                       instruct an agent to test an interface for various
                       faults.  Tests for an interface are defined in the
                       media-specific MIB for that interface.  After invoking
                       a test, the object ifTestResult can be read to
                       determine the outcome.  If an agent can not perform
                       the test, ifTestResult is set to so indicate.  The
                       object ifTestCode can be used to provide further
                       test-specific or interface-specific (or even
                       enterprise-specific) information concerning the
                       outcome of the test.  Only one test can be in progress
                       on each interface at any one time.  If one test is in
                       progress when another test is invoked, the second test
                       is rejected.  Some agents may reject a test when a
                       prior test is active on another interface.

                       Before starting a test, a manager-station must first
                       obtain 'ownership' of the entry in the ifTestTable for
                       the interface to be tested.  This is accomplished with
                       the ifTestId and ifTestStatus objects as follows:

                    try_again:
                        get (ifTestId, ifTestStatus)
                        while (ifTestStatus != notInUse)
                            /*
                             * Loop while a test is running or some other
                             * manager is configuring a test.
                             */
                            short delay
                            get (ifTestId, ifTestStatus)
                        }

                        /*
                         * Is not being used right now -- let's compete
                         * to see who gets it.
                         */
                        lock_value = ifTestId

                        if ( set(ifTestId = lock_value, ifTestStatus = inUse,
                                 ifTestOwner = 'my-IP-address') == FAILURE)
                            /*
                             * Another manager got the ifTestEntry -- go
                             * try again
                             */
                            goto try_again;

                        /*
                         * I have the lock
                         */
                        set up any test parameters.

                        /*
                         * This starts the test
                         */
                        set(ifTestType = test_to_run);

                        wait for test completion by polling ifTestResult

                        when test completes, agent sets ifTestResult
                             agent also sets ifTestStatus = 'notInUse'

                        retrieve any additional test results, and ifTestId

                        if (ifTestId == lock_value+1) results are valid

                      A manager station first retrieves the value of the
                      appropriate ifTestId and ifTestStatus objects,
                      periodically repeating the retrieval if necessary,
                      until the value of ifTestStatus is 'notInUse'.  The
                      manager station then tries to set the same ifTestId
                      object to the value it just retrieved, the same
                      ifTestStatus object to 'inUse', and the corresponding
                      ifTestOwner object to a value indicating itself.  If
                      the set operation succeeds then the manager has
                      obtained ownership of the ifTestEntry, and the value of
                      the ifTestId object is incremented by the agent (per
                      the semantics of TestAndIncr).  Failure of the set
                      operation indicates that some other manager has
                      obtained ownership of the ifTestEntry.

                      Once ownership is obtained, any test parameters can be
                      setup, and then the test is initiated by setting
                      ifTestType.  On completion of the test, the agent sets
                      ifTestStatus to 'notInUse'.  Once this occurs, the
                      manager can retrieve the results.  In the (rare) event
                      that the invocation of tests by two network managers
                      were to overlap, then there would be a possibility that
                      the first test's results might be overwritten by the
                      second test's results prior to the first results being
                      read.  This unlikely circumstance can be detected by a
                      network manager retrieving ifTestId at the same time as
                      retrieving the test results, and ensuring that the
                      results are for the desired request.

                      If ifTestType is not set within an abnormally long
                      period of time after ownership is obtained, the agent
                      should time-out the manager, and reset the value of the
                      ifTestStatus object back to 'notInUse'.  It is
                      suggested that this time-out period be 5 minutes.

                      In general, a management station must not retransmit a
                      request to invoke a test for which it does not receive
                      a response; instead, it properly inspects an agent's
                      MIB to determine if the invocation was successful.
                      Only if the invocation was unsuccessful, is the
                      invocation request retransmitted.

                      Some tests may require the interface to be taken off-
                      line in order to execute them, or may even require the
                      agent to reboot after completion of the test.  In these
                      circumstances, communication with the management
                      station invoking the test may be lost until after
                      completion of the test.  An agent is not required to
                      support such tests.  However, if such tests are
                      supported, then the agent should make every effort to
                      transmit a response to the request which invoked the
                      test prior to losing communication.  When the agent is
                      restored to normal service, the results of the test are
                      properly made available in the appropriate objects.
                      Note that this requires that the ifIndex value assigned
                      to an interface must be unchanged even if the test
                      causes a reboot.  An agent must reject any test for
                      which it cannot, perhaps due to resource constraints,
                      make available at least the minimum amount of
                      information after that test completes."
               ::= { ifMIBObjects 3 }

           ifTestEntry OBJECT-TYPE
               SYNTAX       IfTestEntry
               MAX-ACCESS   not-accessible
               STATUS       deprecated
               DESCRIPTION
                       "An entry containing objects for invoking tests on an
                       interface."
               AUGMENTS  { ifEntry }
               ::= { ifTestTable 1 }

           IfTestEntry ::=
               SEQUENCE {
                   ifTestId           TestAndIncr,
                   ifTestStatus       INTEGER,
                   ifTestType         AutonomousType,
                   ifTestResult       INTEGER,
                   ifTestCode         OBJECT IDENTIFIER,
                   ifTestOwner        OwnerString
               }

           ifTestId         OBJECT-TYPE
               SYNTAX       TestAndIncr
               MAX-ACCESS   read-write
               STATUS       deprecated
               DESCRIPTION
                       "This object identifies the current invocation of the
                       interface's test."
               ::= { ifTestEntry 1 }

           ifTestStatus     OBJECT-TYPE
               SYNTAX       INTEGER { notInUse(1), inUse(2) }
               MAX-ACCESS   read-write
               STATUS       deprecated
               DESCRIPTION
                       "This object indicates whether or not some manager
                       currently has the necessary 'ownership' required to
                       invoke a test on this interface.  A write to this
                       object is only successful when it changes its value
                       from 'notInUse(1)' to 'inUse(2)'.  After completion of
                       a test, the agent resets the value back to
                       'notInUse(1)'."
               ::= { ifTestEntry 2 }

           ifTestType       OBJECT-TYPE
               SYNTAX       AutonomousType
               MAX-ACCESS   read-write
               STATUS       deprecated
               DESCRIPTION
                       "A control variable used to start and stop operator-
                       initiated interface tests.  Most OBJECT IDENTIFIER
                       values assigned to tests are defined elsewhere, in
                       association with specific types of interface.
                       However, this document assigns a value for a full-
                       duplex loopback test, and defines the special meanings
                       of the subject identifier:

                           noTest  OBJECT IDENTIFIER ::= { 0 0 }

                       When the value noTest is written to this object, no
                       action is taken unless a test is in progress, in which
                       case the test is aborted.  Writing any other value to
                       this object is only valid when no test is currently in
                       progress, in which case the indicated test is
                       initiated.

                       When read, this object always returns the most recent
                       value that ifTestType was set to.  If it has not been
                       set since the last initialization of the network
                       management subsystem on the agent, a value of noTest
                       is returned."
               ::= { ifTestEntry 3 }

           ifTestResult  OBJECT-TYPE
               SYNTAX       INTEGER {
                                none(1),          -- no test yet requested
                                success(2),
                                inProgress(3),
                                notSupported(4),
                                unAbleToRun(5),   -- due to state of system
                                aborted(6),
                                failed(7)
                            }
               MAX-ACCESS   read-only
               STATUS       deprecated
               DESCRIPTION
                       "This object contains the result of the most recently
                       requested test, or the value none(1) if no tests have
                       been requested since the last reset.  Note that this
                       facility provides no provision for saving the results
                       of one test when starting another, as could be
                       required if used by multiple managers concurrently."
               ::= { ifTestEntry 4 }

           ifTestCode  OBJECT-TYPE
               SYNTAX       OBJECT IDENTIFIER
               MAX-ACCESS   read-only
               STATUS       deprecated
               DESCRIPTION
                       "This object contains a code which contains more
                       specific information on the test result, for example
                       an error-code after a failed test.  Error codes and
                       other values this object may take are specific to the
                       type of interface and/or test.  The value may have the
                       semantics of either the AutonomousType or
                       InstancePointer textual conventions as defined in RFC
                       1903.  The identifier:

                           testCodeUnknown  OBJECT IDENTIFIER ::= { 0 0 }

                       is defined for use if no additional result code is
                       available."
               ::= { ifTestEntry 5 }

           ifTestOwner      OBJECT-TYPE
               SYNTAX       OwnerString
               MAX-ACCESS   read-write
               STATUS       deprecated
               DESCRIPTION
                       "The entity which currently has the 'ownership'
                       required to invoke a test on this interface."
               ::= { ifTestEntry 6 }

           -- Deprecated Definitions - Groups


           ifGeneralGroup    OBJECT-GROUP
               OBJECTS { ifDescr, ifType, ifSpeed, ifPhysAddress,
                         ifAdminStatus, ifOperStatus, ifLastChange,
                         ifLinkUpDownTrapEnable, ifConnectorPresent,
                         ifHighSpeed, ifName }
               STATUS  deprecated
               DESCRIPTION
                       "A collection of objects deprecated in favour of
                       ifGeneralInformationGroup."
               ::= { ifGroups 1 }


           ifTestGroup    OBJECT-GROUP
               OBJECTS { ifTestId, ifTestStatus, ifTestType,
                         ifTestResult, ifTestCode, ifTestOwner }
               STATUS  deprecated
               DESCRIPTION
                       "A collection of objects providing the ability to
                       invoke tests on an interface."
               ::= { ifGroups 8 }


           ifStackGroup    OBJECT-GROUP
               OBJECTS { ifStackStatus }
               STATUS  deprecated
               DESCRIPTION
                       "The previous collection of objects providing
                       information on the layering of MIB-II interfaces."
               ::= { ifGroups 9 }


           ifOldObjectsGroup    OBJECT-GROUP
               OBJECTS { ifInNUcastPkts, ifOutNUcastPkts,
                         ifOutQLen, ifSpecific }
               STATUS  deprecated
               DESCRIPTION
                       "The collection of objects deprecated from the
                       original MIB-II interfaces group."
               ::= { ifGroups 12 }


           -- Deprecated Definitions - Compliance

           ifCompliance MODULE-COMPLIANCE
               STATUS  deprecated
               DESCRIPTION
                       "The previous compliance statement for SNMPv2 entities
                       which have network interfaces."

               MODULE  -- this module
                   MANDATORY-GROUPS { ifGeneralGroup, ifStackGroup }

                   GROUP       ifFixedLengthGroup
                   DESCRIPTION
                       "This group is mandatory for all network interfaces
                       which are character-oriented or transmit data in
                       fixed-length transmission units."

                   GROUP       ifHCFixedLengthGroup
                   DESCRIPTION
                       "This group is mandatory only for those network
                       interfaces which are character-oriented or transmit
                       data in fixed-length transmission units, and for which
                       the value of the corresponding instance of ifSpeed is
                       greater than 20,000,000 bits/second."

                   GROUP       ifPacketGroup
                   DESCRIPTION
                       "This group is mandatory for all network interfaces
                       which are packet-oriented."

                   GROUP       ifHCPacketGroup
                   DESCRIPTION
                       "This group is mandatory only for those network
                       interfaces which are packet-oriented and for which the
                       value of the corresponding instance of ifSpeed is
                       greater than 650,000,000 bits/second."

                   GROUP       ifTestGroup
                   DESCRIPTION
                       "This group is optional.  Media-specific MIBs which
                       require interface tests are strongly encouraged to use
                       this group for invoking tests and reporting results.
                       A medium specific MIB which has mandatory tests may
                       make implementation of this group mandatory."

                   GROUP       ifRcvAddressGroup
                   DESCRIPTION
                       "The applicability of this group MUST be defined by
                       the media-specific MIBs.  Media-specific MIBs must
                       define the exact meaning, use, and semantics of the
                       addresses in this group."

                   OBJECT      ifLinkUpDownTrapEnable
                   MIN-ACCESS  read-only
                   DESCRIPTION
                       "Write access is not required."

                   OBJECT      ifPromiscuousMode
                   MIN-ACCESS  read-only
                   DESCRIPTION
                       "Write access is not required."

                   OBJECT      ifStackStatus
                   SYNTAX      INTEGER { active(1) } -- subset of RowStatus
                   MIN-ACCESS  read-only
                   DESCRIPTION
                       "Write access is not required, and only one of the six
                       enumerated values for the RowStatus textual convention
                       need be supported, specifically: active(1)."
                   OBJECT       ifAdminStatus
                   SYNTAX       INTEGER { up(1), down(2) }
                   MIN-ACCESS   read-only
                   DESCRIPTION
                       "Write access is not required, nor is support for the
                       value testing(3)."
               ::= { ifCompliances 1 }

           END

