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
