IF-MIB DEFINITIONS ::= BEGIN

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

interfaces ::= { mib-2  2 }

ifMIB MODULE-IDENTITY
    LAST-UPDATED "9311082155Z"
    ORGANIZATION "IETF Interfaces MIB Working Group"
    CONTACT-INFO
                 "Keith McCloghrie

                Postal: Hughes LAN Systems
                        1225 Charleston Road, Mountain View, CA 94043

                Tel:    +1 415 966 7934
                E-Mail: kzm@hls.com

                        Frank Kastenholz

                Postal: FTP Software
                        2 High Street, North Andover, MA 01845

                Tel:    +1 508 685 4000
                E-Mail: kasten@ftp.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."
    ::= { mib-2  31 }

ifMIBObjects ::= { ifMIB  1 }

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

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

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 }

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,

        ifInDiscards
            Counter32,

        ifInErrors
            Counter32,

        ifInUnknownProtos
            Counter32,

        ifOutOctets
            Counter32,

        ifOutUcastPkts
            Counter32,

        ifOutNUcastPkts
            Counter32,

        ifOutDiscards
            Counter32,

        ifOutErrors
            Counter32,

        ifOutQLen
            Gauge32,

        ifSpecific
            OBJECT IDENTIFIER
    }

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
    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.
         The interface's media-specific MIB must define the bit
         and byte ordering and format of the value contained by
         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),
                 down(2),
                 testing(3)
               }
    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),
                 down(2),
                 testing(3),
                 unknown(4),
                 dormant(5)
               }
    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
         incomming connection); it should remain in the down(2)
         state if and only if there is a fault that prevents if
         from going to the up(1) state."
    ::= { 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."
    ::= { 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."
    ::= { 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.
         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."
    ::= { 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."
    ::= { 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 which
         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 which does not support
         protocol multiplexing, this counter will always be 0."
    ::= { 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."
    ::= { 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."
    ::= { 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.

         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."
    ::= { 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."
    ::= { 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
         1443.  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 }

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
    }

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.  If there is no local name, or this object is
         otherwise not applicable, then this object contains a
         0-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."
    ::= { 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."
    ::= { 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."
    ::= { 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."
    ::= { ifXEntry  5 }

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."
    ::= { 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."
    ::= { 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."
    ::= { 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."
    ::= { 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."
    ::= { 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."
    ::= { 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."
    ::= { 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."
    ::= { 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 }

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.  Each
         sub-layer corresponds to a conceptual row in the
         ifTable."
    ::= { 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-write
    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 }

ifTestTable OBJECT-TYPE
    SYNTAX     SEQUENCE OF IfTestEntry
    MAX-ACCESS not-accessible
    STATUS     current
    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     current
    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     current
    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     current
    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     current
    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),
                 success(2),
                 inProgress(3),
                 notSupported(4),
                 unAbleToRun(5),
                 aborted(6),
                 failed(7)
               }
    MAX-ACCESS read-only
    STATUS     current
    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     current
    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
         1443.  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     current
    DESCRIPTION
        "The entity which currently has the 'ownership'
         required to invoke a test on this interface."
    ::= { ifTestEntry  6 }

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."
    ::= { 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 read-create
    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-write
    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 }

linkDown NOTIFICATION-TYPE
    STATUS     current
    OBJECTS      {
                 ifIndex,
                 ifAdminStatus,
                 ifOperStatus
               }
    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 transition into the down state."
    ::= { snmpTraps  3 }

linkUp NOTIFICATION-TYPE
    STATUS     current
    OBJECTS      {
                 ifIndex,
                 ifAdminStatus,
                 ifOperStatus
               }
    DESCRIPTION
        "A linkUp trap signifies that the SNMPv2 entity,
         acting in an agent role, has detected that the
         ifOperStatus object for one of its communication links
         has transitioned out of the down state."
    ::= { snmpTraps  4 }

ifConformance ::= { ifMIB  2 }

ifGroups ::= { ifConformance  1 }

ifCompliances ::= { ifConformance  2 }

ifCompliance MODULE-COMPLIANCE
    STATUS     current
    DESCRIPTION
        "The 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)
                               }
        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 }

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

ifFixedLengthGroup OBJECT-GROUP
    OBJECTS    {
                 ifInOctets,
                 ifOutOctets,
                 ifInUnknownProtos,
                 ifInErrors,
                 ifOutErrors
               }
    STATUS     current
    DESCRIPTION
        "A collection of objects providing information
         specific to non-high speed, character-oriented or
         fixed-length-transmission network interfaces.  (Non-
         high speed interfaces transmit and receive at speeds
         less than or equal to 20,000,000 bits/second.)"
    ::= { 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, packet-oriented network
         interfaces.  (Non-high speed interfaces transmit and
         receive at speeds less than or equal to 20,000,000
         bits/second.)"
    ::= { 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 }

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

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

END
