-- Changes to RFC1229 (Interface Extensions MIB):
--      Changes from RFC-1239 applied which include:
--              removing import of experimental,
--              adding import of mib-2, changing
--              ifExtensions to be { mib-2 12 }
--              instead of { experimental 6 }


          RFC1229-MIB DEFINITIONS ::= BEGIN

          -- RFC1229
          -- May 91

          --     Extensions to MIB-II's Generic Interface Table

          IMPORTS
                  Counter                       FROM RFC1155-SMI
                  mib-2, DisplayString, PhysAddress    
                                                FROM RFC1213-MIB
                  OBJECT-TYPE                   FROM RFC-1212;


          ifExtensions  OBJECT IDENTIFIER ::= { mib-2 12 }


          --   Generic Interface Extension Table
          --
          --  This group of objects is mandatory for all types of
          --  subnetwork interface.

          ifExtnsTable  OBJECT-TYPE
                  SYNTAX SEQUENCE OF IfExtnsEntry
                  ACCESS not-accessible
                  STATUS mandatory
                  DESCRIPTION
                         "A list of interfaces extension entries.
                          The number of entries is given by the value
                          of ifNumber, defined in [4,6]."
                  ::= { ifExtensions 1 }

          ifExtnsEntry  OBJECT-TYPE
                  SYNTAX IfExtnsEntry
                  ACCESS not-accessible
                  STATUS mandatory
                  DESCRIPTION
                         "An extension to the interfaces entry,
                          defined in [4,6], containing additional
                          objects at the subnetwork layer and below
                          for a particular interface."
                  INDEX  { ifExtnsIfIndex }
                  ::= { ifExtnsTable 1 }

          IfExtnsEntry ::=
                  SEQUENCE {
                      ifExtnsIfIndex
                          INTEGER,
                      ifExtnsChipSet
                          OBJECT IDENTIFIER,
                      ifExtnsRevWare
                          DisplayString,
                      ifExtnsMulticastsTransmittedOks
                          Counter,
                      ifExtnsBroadcastsTransmittedOks
                          Counter,
                      ifExtnsMulticastsReceivedOks
                          Counter,
                      ifExtnsBroadcastsReceivedOks
                          Counter,
                      ifExtnsPromiscuous
                          INTEGER
                  }

          ifExtnsIfIndex  OBJECT-TYPE
                  SYNTAX INTEGER
                  ACCESS read-only
                  STATUS mandatory
                  DESCRIPTION
                         "The value of this object identifies the
                          interface for which this entry contains
                          extended management information.  The value
                          of this object for a particular interface
                          has the same value as the ifIndex object,
                          defined in [4,6], for the same interface."
                  ::= { ifExtnsEntry 1 }

          ifExtnsChipSet  OBJECT-TYPE
                  SYNTAX OBJECT IDENTIFIER
                  ACCESS read-only
                  STATUS mandatory
                  DESCRIPTION
                         "This object identifies the hardware chip
                          set being used in the interface.  The
                          assignment of OBJECT IDENTIFIERs to various
                          types of hardware chip sets is managed
                          by the IANA.  If the hardware chip set is
                          unknown, the object identifier

                          unknownChipSet OBJECT IDENTIFIER ::= { 0 0 }

                          is returned.  Note that unknownChipSet is a
                          syntactically valid object identifier, and
                          any conformant implementation of ASN.1 and
                          the BER must be able to generate and
                          recognize this value."
                  ::= { ifExtnsEntry 2 }

          ifExtnsRevWare  OBJECT-TYPE
                  SYNTAX DisplayString (SIZE (0..255))
                  ACCESS read-only
                  STATUS mandatory
                  DESCRIPTION
                         "An arbitrary octet string that describes
                          the firmware version of this interface.
                          It is intended that this should be human
                          readable.  It must only contain ASCII
                          printable characters.  Typically this
                          will be the firmware version of the main
                          interface software."
                  ::= { ifExtnsEntry 3 }

          ifExtnsMulticastsTransmittedOks OBJECT-TYPE
                  SYNTAX Counter
                  ACCESS read-only
                  STATUS mandatory
                  DESCRIPTION
                         "The count of frames successfully
                          transmitted to a subnetwork or link-layer
                          multicast destination address other than a
                          broadcast address.  For a MAC layer protocol,
                          this includes both Group and Functional
                          addresses."
                  ::= { ifExtnsEntry 4 }

          ifExtnsBroadcastsTransmittedOks OBJECT-TYPE
                  SYNTAX Counter
                  ACCESS read-only
                  STATUS mandatory
                  DESCRIPTION
                         "The count of frames successfully
                          transmitted to a subnetwork or link-layer
                          broadcast addresses.  It does not include
                          frames sent to a multicast address."
                  ::= { ifExtnsEntry 5 }

          ifExtnsMulticastsReceivedOks OBJECT-TYPE
                  SYNTAX Counter
                  ACCESS read-only
                  STATUS mandatory
                  DESCRIPTION
                         "The count of frames successfully received
                          that are directed to an active subnetwork
                          or link-layer multicast address (for a MAC
                          layer protocol, this includes both Group and
                          Functional addresses). This does not include
                          frames directed to a broadcast address, nor
                          frames received with errors."
                  ::= { ifExtnsEntry 6 }

          ifExtnsBroadcastsReceivedOks OBJECT-TYPE
                  SYNTAX Counter
                  ACCESS read-only
                  STATUS mandatory
                  DESCRIPTION
                         "The count of frames successfully received
                          that are directed to a subnetwork or
                          link-layer broadcast address.  This does not
                          include frames received with errors."
                  ::= { ifExtnsEntry 7 }

          ifExtnsPromiscuous  OBJECT-TYPE
                  SYNTAX INTEGER {
                              true(1),
                              false(2)
                         }
                  ACCESS read-only  -- Note: agent implementors are
                                    -- encouraged to extend this
                                    -- access to read-write if that
                                    -- makes sense in their agent.
                  STATUS mandatory
                  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."
                  ::= { ifExtnsEntry 8 }

          --
          --    Generic Interface Test Table
          --
          -- This group of objects is optional, but if the table is
          -- implemented, all objects in the table must be implemented.

          ifExtnsTestTable   OBJECT-TYPE

                  SYNTAX  SEQUENCE OF IfExtnsTestEntry
                  ACCESS  not-accessible
                  STATUS  mandatory
                  DESCRIPTION
                          "This table contains one entry per interface."
                  ::= { ifExtensions 2 }

          ifExtnsTestEntry OBJECT-TYPE
                  SYNTAX  IfExtnsTestEntry
                  ACCESS  not-accessible
                  STATUS  mandatory
                  DESCRIPTION
                          "An entry containing objects for invoking
                           tests on an interface."
                  INDEX   { ifExtnsTestIfIndex }
                  ::= { ifExtnsTestTable 1 }

          IfExtnsTestEntry ::=
                  SEQUENCE {
                      ifExtnsTestIfIndex
                          INTEGER,
                      ifExtnsTestCommunity
                          OCTET STRING,
                      ifExtnsTestRequestId
                          INTEGER,
                      ifExtnsTestType
                          OBJECT IDENTIFIER,
                      ifExtnsTestResult
                          INTEGER,
                      ifExtnsTestCode
                          OBJECT IDENTIFIER
                  }

          ifExtnsTestIfIndex  OBJECT-TYPE
                  SYNTAX  INTEGER
                  ACCESS  read-only
                  STATUS  mandatory
                  DESCRIPTION
                         "The value of this object identifies the
                          interface for which this entry contains
                          information on interface tests.  The value
                          of this object for a particular interface
                          has the same value as the ifIndex object,
                          defined in [4,6], for the same interface."
                  ::= { ifExtnsTestEntry 1 }

          ifExtnsTestCommunity  OBJECT-TYPE
                  SYNTAX  OCTET STRING
                  ACCESS  read-only
                  STATUS  mandatory
                  DESCRIPTION
                         "This object contains the name of the SNMP
                          authentication community [5] which was used
                          to authenticate the SNMP Message which invoked
                          the current or most recent test on this
                          interface.  If the authentication community
                          is unknown or undefined, this value contains
                          the zero-length string."
                  ::= { ifExtnsTestEntry 2 }

          ifExtnsTestRequestId  OBJECT-TYPE
                  SYNTAX  INTEGER
                  ACCESS  read-only
                  STATUS  mandatory
                  DESCRIPTION
                         "This object contains the value of the
                          request-id field in the SNMP PDU [5] which
                          invoked the current or most recent test on
                          this interface.  If the request-id is
                          unknown or undefined, this value contains
                          the value zero."
                  ::= { ifExtnsTestEntry 3 }

          ifExtnsTestType  OBJECT-TYPE
                  SYNTAX  OBJECT IDENTIFIER
                  ACCESS  read-write
                  STATUS  mandatory
                  DESCRIPTION
                         "A control variable used to start and stop
                          operator-initiated interface tests.
                              Most OBJECT IDENTIFIER values assigned
                          to tests are defined elsewhere, in associ-
                          ation 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.
                              Note that noTest is a syntactically valid
                          object identifier, and any conformant
                          implementation of ASN.1 and BER must be able
                          to generate and recognize this value.
                              When read, this object always returns
                          the most recent value that ifExtnsTestType
                          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."
                  ::= { ifExtnsTestEntry 4 }

          wellKnownTests OBJECT IDENTIFIER ::= { ifExtensions 4 }

          --  full-duplex loopback test
          testFullDuplexLoopBack OBJECT IDENTIFIER ::=
                                                  { wellKnownTests 1 }

          ifExtnsTestResult  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)
                          }
                  ACCESS  read-only
                  STATUS  mandatory
                  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."
                  ::= { ifExtnsTestEntry 5 }

          ifExtnsTestCode  OBJECT-TYPE
                  SYNTAX  OBJECT IDENTIFIER
                  ACCESS  read-only
                  STATUS  mandatory
                  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.  However, one subject
                          identifier:

                          testCodeUnknown  OBJECT IDENTIFIER ::= { 0 0 }

                          for use if no additional result code is
                          available.
                              Note that testCodeUnknown is a
                          syntactically valid object identifier, and
                          any conformant implementation of ASN.1 and
                          the BER must be able to generate and
                          recognize this value."
                  ::= { ifExtnsTestEntry 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.

          ifExtnsRcvAddrTable  OBJECT-TYPE
                  SYNTAX SEQUENCE OF IfExtnsRcvAddrEntry
                  ACCESS not-accessible
                  STATUS mandatory
                  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.  When an
                          interface is 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."
                  ::= { ifExtensions 3 }

          ifExtnsRcvAddrEntry  OBJECT-TYPE
                  SYNTAX IfExtnsRcvAddrEntry
                  ACCESS not-accessible
                  STATUS mandatory
                  DESCRIPTION
                         "A list of objects identifying an address
                          for which the system will accept packets/
                          frames on a particular interface."
                  INDEX  { ifExtnsRcvAddrIfIndex, ifExtnsRcvAddress }
                  ::= { ifExtnsRcvAddrTable 1 }

          IfExtnsRcvAddrEntry ::=
                  SEQUENCE {
                      ifExtnsRcvAddrIfIndex
                          INTEGER,
                      ifExtnsRcvAddress
                          PhysAddress,
                      ifExtnsRcvAddrStatus
                          INTEGER
                  }

          ifExtnsRcvAddrIfIndex  OBJECT-TYPE
                  SYNTAX INTEGER
                  ACCESS read-only
                  STATUS mandatory
                  DESCRIPTION
                         "The value of ifIndex, defined in [4,6], of an
                          interface which recognizes this entry's
                          address."
                  ::= { ifExtnsRcvAddrEntry 1 }

          ifExtnsRcvAddress OBJECT-TYPE
                  SYNTAX PhysAddress
                  ACCESS read-only
                  STATUS mandatory
                  DESCRIPTION
                         "An address for which the system will accept
                          packets/frames on this entry's interface."
                  ::= { ifExtnsRcvAddrEntry 2 }

          ifExtnsRcvAddrStatus OBJECT-TYPE
                  SYNTAX INTEGER {
                             other(1),
                             invalid(2),
                             volatile(3),
                             nonVolatile(4)
                         }
                  ACCESS read-write
                  STATUS mandatory
                  DESCRIPTION
                         "This object has the value nonVolatile(4)
                          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(3) 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.  Entries having the value invalid(2)
                          are invalid and do not represent an address
                          for which an interface accepts frames.
                              Setting an object instance to one of
                          the values other(1), volatile(3), or
                          nonVolatile(4) causes the corresponding
                          entry to exist or continue to exist, and
                          to take on the respective status as regards
                          the next restart of the managed system.
                              Setting an object instance to the value
                          invalid(2) causes the corresponding entry
                          to become invalid or cease to exist.
                              It is an implementation-specific matter
                          as to whether the agent removes an
                          invalidated entry from the table.
                          Accordingly, management stations must be
                          prepared to receive tabular information
                          from agents that corresponds to entries not
                          currently in use.  Proper interpretation of
                          such entries requires examination of the
                          relevant ifExtnsRcvAddrStatus object
                          instance."
                  DEFVAL  { volatile }
                  ::= { ifExtnsRcvAddrEntry 3 }

          END


