MPLS-FTN-STD-MIB DEFINITIONS ::= BEGIN

IMPORTS
   MODULE-IDENTITY, OBJECT-TYPE, Unsigned32, Counter64, Integer32
       FROM SNMPv2-SMI                                   -- [RFC2578]
   RowStatus, StorageType, RowPointer,
   TEXTUAL-CONVENTION, TimeStamp
       FROM SNMPv2-TC                                    -- [RFC2579]
   MODULE-COMPLIANCE, OBJECT-GROUP
       FROM SNMPv2-CONF                                  -- [RFC2580]
   InterfaceIndexOrZero,
   ifGeneralInformationGroup, ifCounterDiscontinuityGroup
       FROM IF-MIB                                       -- [RFC2863]
   SnmpAdminString
       FROM SNMP-FRAMEWORK-MIB                           -- [RFC3411]
   Dscp
       FROM DIFFSERV-DSCP-TC                             -- [RFC3289]
   InetAddressType, InetAddress, InetPortNumber
       FROM INET-ADDRESS-MIB                             -- [RFC3291]
   mplsStdMIB
       FROM MPLS-TC-STD-MIB                              -- [RFC3811]

   ;

mplsFTNStdMIB MODULE-IDENTITY
   LAST-UPDATED "200406030000Z"  -- June 6, 2004
   ORGANIZATION "Multiprotocol Label Switching (MPLS) Working Group"
   CONTACT-INFO
       "
                Thomas D. Nadeau
        Postal: Cisco Systems, Inc.
                250 Apollo Drive
                Chelmsford, MA 01824
        Tel:    +1-978-244-3051
        Email:  tnadeau@cisco.com

                Cheenu Srinivasan
        Postal: Bloomberg L.P.
                499 Park Avenue
                New York, NY 10022
        Tel:    +1-212-893-3682
        Email:  cheenu@bloomberg.net

                Arun Viswanathan
        Postal: Force10 Networks, Inc.
                1440 McCarthy Blvd
                Milpitas, CA 95035
        Tel:    +1-408-571-3516
        Email:  arunv@force10networks.com

        IETF MPLS Working Group email: mpls@uu.net"
   DESCRIPTION
        "Copyright (C) The Internet Society (2004). The
        initial version of this MIB module was published
        in RFC 3814. For full legal notices see the RFC
        itself or see:
        http://www.ietf.org/copyrights/ianamib.html

        This MIB module contains managed object definitions for
        specifying FEC to NHLFE (FTN) mappings and corresponding
        performance for MPLS."

   -- Revision history.

   REVISION
       "200406030000Z"  -- June 3, 2004
   DESCRIPTION
       "Initial version issued as part of RFC 3814."
    ::= { mplsStdMIB 8 }

-- TEXTUAL-CONVENTIONs used in this MIB.
MplsFTNEntryIndex ::= TEXTUAL-CONVENTION
   STATUS              current
   DESCRIPTION
       "Index for an entry in mplsFTNTable."
   SYNTAX              Unsigned32 (1..4294967295)

MplsFTNEntryIndexOrZero ::= TEXTUAL-CONVENTION
   STATUS              current
   DESCRIPTION
       "Index for an entry in mplsFTNTable or the special value
        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 when none or all
        entries in mplsFTNTable need to be referenced."
   SYNTAX              Unsigned32 (0..4294967295)

-- Top-Level Components of this MIB.

mplsFTNNotifications OBJECT IDENTIFIER ::= { mplsFTNStdMIB 0 }
mplsFTNObjects       OBJECT IDENTIFIER ::= { mplsFTNStdMIB 1 }
mplsFTNConformance   OBJECT IDENTIFIER ::= { mplsFTNStdMIB 2 }

-- Next free index in mplsFTNTable.
mplsFTNIndexNext OBJECT-TYPE
   SYNTAX              MplsFTNEntryIndexOrZero
   MAX-ACCESS          read-only
   STATUS              current
   DESCRIPTION
       "This object contains the next available valid value to
        be used for mplsFTNIndex when creating entries in the
        mplsFTNTable.

        When creating a new conceptual row (configuration
        entry) in mplsFTNTable with an SNMP SET operation the
        command generator (Network Management Application) must
        first issue a management protocol retrieval operation
        to obtain the current value of this object.

        If the command responder (agent) does not wish to allow
        creation of more entries in mplsFTNTable, possibly
        because of resource exhaustion, this object MUST return
        a value of 0.

        If a non-zero value is returned the Network Management

        Application must determine whether the value is indeed
        still unused since two Network Management Applications
        may attempt to create a row simultaneously and use the
        same value.

        If it is currently unused and the SET succeeds, the
        agent MUST change the value of this object to a
        currently unused non-zero value (according to an
        implementation specific algorithm) or zero (if no
        further row creation will be permitted).

        If the value is in use, however, the SET fails and the
        Network Management Application must then reread this
        object to obtain a new usable value."
   ::= { mplsFTNObjects 1 }

-- Last time an object in mplsFTNTable changed.
mplsFTNTableLastChanged OBJECT-TYPE
   SYNTAX              TimeStamp
   MAX-ACCESS          read-only
   STATUS              current
   DESCRIPTION
       "Indicates the last time an entry was added, deleted or
        modified in mplsFTNTable.  Management stations should
        consult this object to determine if mplsFTNTable
        requires their attention.  This object is particularly
        useful for applications performing a retrieval on
        mplsFTNTable to ensure that the table is not modified
        during the retrieval operation."
   ::=  { mplsFTNObjects 2 }

-- Table of FTN entries.
mplsFTNTable  OBJECT-TYPE
   SYNTAX          SEQUENCE OF MplsFTNEntry
   MAX-ACCESS      not-accessible
   STATUS          current
   DESCRIPTION
       "This table contains the currently defined FTN entries.
        This table allows FEC to NHLFE mappings to be
        specified.  Each entry in this table defines a rule to
        be applied to incoming packets (on interfaces that the
        FTN entry is activated on using mplsFTNMapTable) and an
        action to be taken on matching packets
        (mplsFTNActionPointer).

        This table supports 6-tuple matching rules based on one
        or more of source address range, destination address
        range, source port range, destination port range, IPv4

        Protocol field or IPv6 next-header field and the
        DiffServ Code Point (DSCP) to be specified.

        The action pointer points either to instance of
        mplsXCEntry in MPLS-LSR-STD-MIB when the NHLFE is a non-
        TE LSP, or to an instance of mplsTunnelEntry in the
        MPLS-TE-STD-MIB when the NHLFE is an originating TE
        tunnel."
   REFERENCE
       "J. Postel, Internet Protocol, RFC 791, STD 5, September
        1981

        Deering, S., and R. Hinden, Internet Protocol, Version
        6 (IPv6) Specification, RFC 2460, December 1998

        Nichols, K, Blake, S., Baker, F. and D. Black,
        Definition of the Differentiated Services Field (DS
        Field) in the IPv4 and IPv6 Headers, RFC 2474, December
        1998

        Srinivasan, C., A. Viswanathan, and T. Nadeau, MPLS
        Label Switch Router Management Information Base,
        RFC 3813

        Srinivasan, C., A. Viswanathan, and T. Nadeau, MPLS
        Traffic Engineering Management Information Base,
        RFC 3812"
   ::=  { mplsFTNObjects 3 }

mplsFTNEntry  OBJECT-TYPE
   SYNTAX          MplsFTNEntry
   MAX-ACCESS      not-accessible
   STATUS          current
   DESCRIPTION
       "Each entry represents one FTN entry which defines a
        rule to compare incoming packets with and an action to
        be taken on matching packets."
   INDEX { mplsFTNIndex }
   ::=  { mplsFTNTable 1 }

MplsFTNEntry  ::=  SEQUENCE {
      mplsFTNIndex               MplsFTNEntryIndex,
      mplsFTNRowStatus           RowStatus,
      mplsFTNDescr               SnmpAdminString,
      mplsFTNMask                BITS,
      mplsFTNAddrType            InetAddressType,
      mplsFTNSourceAddrMin       InetAddress,
      mplsFTNSourceAddrMax       InetAddress,
      mplsFTNDestAddrMin         InetAddress,
      mplsFTNDestAddrMax         InetAddress,
      mplsFTNSourcePortMin       InetPortNumber,
      mplsFTNSourcePortMax       InetPortNumber,
      mplsFTNDestPortMin         InetPortNumber,
      mplsFTNDestPortMax         InetPortNumber,
      mplsFTNProtocol            Integer32,
      mplsFTNDscp                Dscp,
      mplsFTNActionType          INTEGER,
      mplsFTNActionPointer       RowPointer,
      mplsFTNStorageType         StorageType
   }

mplsFTNIndex   OBJECT-TYPE
   SYNTAX              MplsFTNEntryIndex
   MAX-ACCESS          not-accessible
   STATUS              current
   DESCRIPTION
       "This is the unique index for a conceptual row in
        mplsFTNTable.

        To create a new conceptual row in mplsFTNTable a
        Network Management Application SHOULD retrieve the
        current value of mplsFTNIndexNext to determine the next
        valid available value of mplsFTNIndex."
   ::= { mplsFTNEntry 1 }

mplsFTNRowStatus OBJECT-TYPE
   SYNTAX              RowStatus
   MAX-ACCESS          read-create
   STATUS              current
   DESCRIPTION
       "Used for controlling the creation and deletion of this
        row. All writeable objects in this row may be modified
        at any time. If a Network Management Application
        attempts to delete a conceptual row by setting this
        object to 'destroy' and there are one or more entries
        in mplsFTNMapTable pointing to the row (i.e., when
        mplsFTNIndex of the conceptual row being deleted is
        equal to mplsFTNMapCurrIndex for one or more entries in
        mplsFTNMapTable), the agent MUST also destroy the
        corresponding entries in mplsFTNMapTable."
   ::= { mplsFTNEntry 2 }

mplsFTNDescr   OBJECT-TYPE
   SYNTAX              SnmpAdminString
   MAX-ACCESS          read-create
   STATUS              current
   DESCRIPTION
       "The description of this FTN entry. Since the index for
        this table has no particular significance or meaning,
        this object should contain some meaningful text that an
        operator could use to further distinguish entries in
        this table."
   ::= { mplsFTNEntry 3 }

mplsFTNMask OBJECT-TYPE
   SYNTAX             BITS {
                       sourceAddr(0),
                       destAddr(1),
                       sourcePort(2),
                       destPort(3),
                       protocol(4),
                       dscp(5)
                      }
   MAX-ACCESS          read-create
   STATUS              current
   DESCRIPTION
       "This bit map indicates which of the fields described
        next, namely source address range, destination address
        range, source port range, destination port range, IPv4
        Protocol field or IPv6 next-header field and
        Differentiated Services Code Point (DSCP) is active for
        this FTN entry. If a particular bit is set to zero then
        the corresponding field in the packet MUST be ignored
        for comparison purposes."
   ::= { mplsFTNEntry 4 }

mplsFTNAddrType OBJECT-TYPE
   SYNTAX             InetAddressType
   MAX-ACCESS         read-create
   STATUS             current
   DESCRIPTION
       "This object determines the type of address contained in
        the source and destination address objects
        (mplsFTNSourceAddrMin, mplsFTNSourceAddrMax,
        mplsFTNDestAddrMin and mplsFTNDestAddrMax) of a
        conceptual row.

        This object MUST NOT be set to unknown(0) when
        mplsFTNMask has bit positions sourceAddr(0) or
        destAddr(1) set to one.

        When both these bit positions of mplsFTNMask are set to
        zero the value of mplsFTNAddrType SHOULD be set to
        unknown(0) and the corresponding source and destination

        address objects SHOULD be set to zero-length strings."
   ::= { mplsFTNEntry 5 }

mplsFTNSourceAddrMin OBJECT-TYPE
   SYNTAX             InetAddress
   MAX-ACCESS         read-create
   STATUS             current
   DESCRIPTION
       "The lower end of the source address range. The type of
        this object is determined by the corresponding
        mplsFTNAddrType object."
   ::= { mplsFTNEntry 6 }

mplsFTNSourceAddrMax OBJECT-TYPE
   SYNTAX             InetAddress
   MAX-ACCESS         read-create
   STATUS             current
   DESCRIPTION
       "The upper end of the source address range. The type of
        this object is determined by the corresponding
        mplsFTNAddrType object."
   ::= { mplsFTNEntry 7 }

mplsFTNDestAddrMin OBJECT-TYPE
   SYNTAX             InetAddress
   MAX-ACCESS         read-create
   STATUS             current
   DESCRIPTION
       "The lower end of the destination address range. The
        type of this object is determined by the corresponding
        mplsFTNAddrType object."
   ::= { mplsFTNEntry 8 }

mplsFTNDestAddrMax OBJECT-TYPE
   SYNTAX             InetAddress
   MAX-ACCESS         read-create
   STATUS             current
   DESCRIPTION
       "The higher end of the destination address range. The
        type of this object is determined by the corresponding
        mplsFTNAddrType object."
   ::= { mplsFTNEntry 9 }

mplsFTNSourcePortMin OBJECT-TYPE
   SYNTAX             InetPortNumber
   MAX-ACCESS         read-create
   STATUS             current
   DESCRIPTION
       "The lower end of the source port range."
   DEFVAL { 0 }
   ::= { mplsFTNEntry 10 }

mplsFTNSourcePortMax OBJECT-TYPE
   SYNTAX             InetPortNumber
   MAX-ACCESS         read-create
   STATUS             current
   DESCRIPTION
       "The higher end of the source port range "
   DEFVAL { 65535 }
   ::= { mplsFTNEntry 11 }

mplsFTNDestPortMin OBJECT-TYPE
   SYNTAX             InetPortNumber
   MAX-ACCESS         read-create
   STATUS             current
   DESCRIPTION
       "The lower end of the destination port range."
   DEFVAL { 0 }
   ::= { mplsFTNEntry 12 }

mplsFTNDestPortMax OBJECT-TYPE
   SYNTAX             InetPortNumber
   MAX-ACCESS         read-create
   STATUS             current
   DESCRIPTION
       "The higher end of the destination port range."
   DEFVAL { 65535 }
   ::= { mplsFTNEntry 13 }

mplsFTNProtocol OBJECT-TYPE
   SYNTAX             Integer32 (0..255)
   MAX-ACCESS         read-create
   STATUS             current
   DESCRIPTION
       "The IP protocol to match against the IPv4 protocol
        number or IPv6 Next-Header number in the packet. A
        value of 255 means match all.  Note that the protocol
        number of 255 is reserved by IANA, and Next-Header
        number of 0 is used in IPv6."
   DEFVAL { 255 }
   ::= { mplsFTNEntry 14 }

mplsFTNDscp OBJECT-TYPE
   SYNTAX             Dscp
   MAX-ACCESS         read-create
   STATUS             current
   DESCRIPTION
       "The contents of the DSCP field."
   REFERENCE
       "Nichols, K., Blake, S., Baker, F. and D. Black,
        Definition of the Differentiated Services Field (DS
        Field) in the IPv4 and IPv6 Headers, RFC 2474, December
        1998."
   ::= { mplsFTNEntry 15 }

mplsFTNActionType OBJECT-TYPE
   SYNTAX    INTEGER {
                redirectLsp(1),   -- redirect into LSP
                redirectTunnel(2) -- redirect into tunnel
             }
   MAX-ACCESS         read-create
   STATUS             current
   DESCRIPTION
       "The type of action to be taken on packets matching this
        FTN entry."
   ::= { mplsFTNEntry 16 }

mplsFTNActionPointer OBJECT-TYPE
   SYNTAX             RowPointer
   MAX-ACCESS         read-create
   STATUS             current
   DESCRIPTION
       "If mplsFTNActionType is redirectLsp(1), then this
        object MUST contain zeroDotZero or point to a instance
        of mplsXCEntry indicating the LSP to redirect matching
        packets to.

        If mplsFTNActionType is redirectTunnel(2), then this
        object MUST contain zeroDotZero or point to a instance
        of mplsTunnelEntry indicating the MPLS TE tunnel to
        redirect matching packets to.

        If this object points to a conceptual row instance in a
        table consistent with mplsFTNActionType but this
        instance does not currently exist then no action will
        be taken on packets matching such an FTN entry till
        this instance comes into existence.

        If this object contains zeroDotZero then no action will
        be taken on packets matching such an FTN entry till it
        is populated with a valid pointer consistent with the
        value of mplsFTNActionType as explained above."
   ::= { mplsFTNEntry 17 }

mplsFTNStorageType OBJECT-TYPE
   SYNTAX             StorageType
   MAX-ACCESS         read-create
   STATUS             current
   DESCRIPTION
       "The storage type for this FTN entry. Conceptual rows
        having the value 'permanent' need not allow write-
        access to any columnar objects in the row."
   DEFVAL { nonVolatile }
   ::= { mplsFTNEntry 18 }

-- End of mplsFTNTable.

-- Last time an object in mplsFTNMapTable changed.

mplsFTNMapTableLastChanged OBJECT-TYPE
   SYNTAX              TimeStamp
   MAX-ACCESS          read-only
   STATUS              current
   DESCRIPTION
       "Indicates the last time an entry was added, deleted or
        modified in mplsFTNMapTable. Management stations should
        consult this object to determine if the table requires
        their attention.  This object is particularly useful
        for applications performing a retrieval on
        mplsFTNMapTable to ensure that the table is not
        modified during the retrieval operation."
   ::=  { mplsFTNObjects 4 }

-- FTN to interface mapping table.

mplsFTNMapTable OBJECT-TYPE
   SYNTAX              SEQUENCE OF MplsFTNMapEntry
   MAX-ACCESS          not-accessible
   STATUS              current
   DESCRIPTION
       "This table contains objects which provide the
        capability to apply or map FTN rules as defined by
        entries in mplsFTNTable to specific interfaces in the
        system.  FTN rules are compared with incoming packets
        in the order in which they are applied on an interface.

        The indexing structure of mplsFTNMapTable is as
        follows.

        - mplsFTNMapIndex indicates the interface to which the
          rule is being applied.  A value of 0 represents the
          application of the rule to all interfaces.

        - mplsFTNMapPrevIndex specifies the rule on the
          interface prior to the one being applied.  A value of
          0 specifies that the rule is being inserted at the
          head of the list of rules currently applied to the
          interface.

        - mplsFTNMapCurrIndex is the index in mplsFTNTable
          corresponding to the rule being applied.

        This indexing structure makes the entries in the table
        behave like items in a linked-list.  The object
        mplsFTNMapPrevIndex in each conceptual row is a pointer
        to the previous entry that is applied to a particular
        interface.  This allows a new entry to be 'inserted' at
        an arbitrary position in a list of entries currently
        applied to an interface.  This object is self-
        adjusting, i.e., its value is automatically adjusted by
        the agent, if necessary, after an insertion or deletion
        operation.

        Using this linked-list structure, one can retrieve FTN
        entries in the order of application on a per-interface
        basis as follows:

        - To determine the first FTN entry on an interface
          with index ifIndex perform a GETNEXT retrieval
          operation on mplsFTNMapRowStatus.ifIndex.0.0; the
          returned object, if one exists, is (say)
          mplsFTNMapRowStatus.ifIndex.0.n (mplsFTNMapRowStatus
          is the first accessible columnar object in the
          conceptual row). Then the index of the first FTN
          entry applied on this interface is n.

        - To determine the FTN entry applied to an interface
          after the one indexed by n perform a GETNEXT
          retrieval operation on
          mplsFTNMapRowStatus.ifIndex.n.0.  If such an entry
          exists the returned object would be of the form
          mplsFTNMapRowStatus.ifIndex.n.m.  Then the index of
          the next FTN entry applied on this interface is m.

        - If the FTN entry indexed by n is the last entry
          applied to the interface with index ifIndex then the
          object returned would either be:

          1.mplsFTNMapRowStatus.ifIndexNext.0.k, where
            ifIndexNext is the index of the next interface in

            ifTable to which an FTN entry has been applied, in
            which case k is the index of the first FTN entry
            applied to the interface with index ifIndexNext;

          or:

          2.mplsFTNMapStorageType.firstIfIndex.0.p, if there
            are no more entries in mplsFTNMapTable, where
            firstIfIndex is the first entry in ifTable to
            which an FTN entry has been mapped.

        Use the above steps to retrieve all the applied FTN
        entries on a per-interface basis in application order.
        Note that the number of retrieval operations is the
        same as the number of applied FTN entries (i.e., the
        minimum number of GETNEXT operations needed using any
        indexing scheme).

        Agents MUST NOT allow the same FTN entry as specified
        by mplsFTNMapCurrIndex to be applied multiple times to
        the same interface.

        Agents MUST NOT allow the creation of rows in this
        table until the corresponding rows are created in the
        mplsFTNTable.

        If a row in mplsFTNTable is destroyed, the agent MUST
        destroy the corresponding entries (i.e., ones with a
        matching value of mplsFTNCurrIndex) in this table as
        well."
   ::=  { mplsFTNObjects 5 }

mplsFTNMapEntry OBJECT-TYPE
   SYNTAX              MplsFTNMapEntry
   MAX-ACCESS          not-accessible
   STATUS              current
   DESCRIPTION
       "Each conceptual row represents the application of an
        FTN rule at a specific position in the list of FTN
        rules applied on an interface. "
   INDEX {
         mplsFTNMapIndex,
         mplsFTNMapPrevIndex,
         mplsFTNMapCurrIndex
   }
   ::=  { mplsFTNMapTable 1 }

MplsFTNMapEntry  ::=  SEQUENCE {

      mplsFTNMapIndex       InterfaceIndexOrZero,
      mplsFTNMapPrevIndex    MplsFTNEntryIndexOrZero,
      mplsFTNMapCurrIndex    MplsFTNEntryIndex,
      mplsFTNMapRowStatus    RowStatus,
      mplsFTNMapStorageType  StorageType
   }

mplsFTNMapIndex OBJECT-TYPE
   SYNTAX              InterfaceIndexOrZero
   MAX-ACCESS          not-accessible
   STATUS              current
   DESCRIPTION
       "The interface index that this FTN entry is being
        applied to. A value of zero indicates an entry that is
        applied all interfaces.

        Entries mapped to an interface by specifying its (non-
        zero) interface index in mplsFTNMapIndex are applied
        ahead of entries with mplsFTNMapIndex equal to zero."
   ::= { mplsFTNMapEntry 1 }

mplsFTNMapPrevIndex OBJECT-TYPE
   SYNTAX              MplsFTNEntryIndexOrZero
   MAX-ACCESS          not-accessible
   STATUS              current
   DESCRIPTION
       "The index of the previous FTN entry that was applied to
        this interface. The special value zero indicates that
        this should be the first FTN entry in the list."
   ::=  { mplsFTNMapEntry 2 }

mplsFTNMapCurrIndex OBJECT-TYPE
   SYNTAX              MplsFTNEntryIndex
   MAX-ACCESS          not-accessible
   STATUS              current
   DESCRIPTION
       "Index of the current FTN entry that is being applied to
        this interface."
   ::=  { mplsFTNMapEntry 3 }

mplsFTNMapRowStatus OBJECT-TYPE
   SYNTAX              RowStatus {
                             active(1),
                             createAndGo(4),
                             destroy(6)
                          }
   MAX-ACCESS          read-create
   STATUS              current
   DESCRIPTION
       "Used for controlling the creation and deletion of this
        row.

        All writable objects in this row may be modified at any
        time.

        If a conceptual row in mplsFTNMapTable points to a
        conceptual row in mplsFTNTable which is subsequently
        deleted, the corresponding conceptual row in
        mplsFTNMapTable MUST also be deleted by the agent."
   ::=  { mplsFTNMapEntry 4 }

mplsFTNMapStorageType OBJECT-TYPE
   SYNTAX              StorageType
   MAX-ACCESS          read-create
   STATUS              current
   DESCRIPTION
       "The storage type for this entry.  Conceptual rows
        having the value 'permanent' need not allow write-
        access to any columnar objects in this row."
   DEFVAL { nonVolatile }
   ::= { mplsFTNMapEntry 5 }

-- End of mplsFTNMapTable

-- FTN entry performance table

mplsFTNPerfTable OBJECT-TYPE
   SYNTAX              SEQUENCE OF MplsFTNPerfEntry
   MAX-ACCESS          not-accessible
   STATUS              current
   DESCRIPTION
       "This table contains performance statistics on FTN
        entries on a per-interface basis."
   ::= { mplsFTNObjects 6 }

mplsFTNPerfEntry OBJECT-TYPE
   SYNTAX              MplsFTNPerfEntry
   MAX-ACCESS          not-accessible
   STATUS              current
   DESCRIPTION
       "Each entry contains performance information for the
        specified interface and an FTN entry mapped to this
        interface."
   INDEX  { mplsFTNPerfIndex, mplsFTNPerfCurrIndex }
   ::=  { mplsFTNPerfTable 1 }

MplsFTNPerfEntry  ::=  SEQUENCE {
      mplsFTNPerfIndex                     InterfaceIndexOrZero,
      mplsFTNPerfCurrIndex                 MplsFTNEntryIndex,
      mplsFTNPerfMatchedPackets            Counter64,
      mplsFTNPerfMatchedOctets             Counter64,
      mplsFTNPerfDiscontinuityTime         TimeStamp
   }

mplsFTNPerfIndex OBJECT-TYPE
   SYNTAX              InterfaceIndexOrZero
   MAX-ACCESS          not-accessible
   STATUS              current
   DESCRIPTION
       "The interface index of an interface that an FTN entry
        has been applied/mapped to.  Each instance of this
        object corresponds to an instance of mplsFTNMapIndex."
   ::= { mplsFTNPerfEntry 1 }

mplsFTNPerfCurrIndex OBJECT-TYPE
   SYNTAX              MplsFTNEntryIndex
   MAX-ACCESS          not-accessible
   STATUS              current
   DESCRIPTION
       "Index of an FTN entry that has been applied/mapped to
        the specified interface.  Each instance of this object
        corresponds to an instance of mplsFTNMapCurrIndex."
   ::=  { mplsFTNPerfEntry 2 }

mplsFTNPerfMatchedPackets OBJECT-TYPE
   SYNTAX              Counter64
   MAX-ACCESS          read-only
   STATUS              current
   DESCRIPTION
       "Number of packets that matched the specified FTN entry
        if it is applied/mapped to the specified interface.
        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
        mplsFTNDiscontinuityTime."
   ::= { mplsFTNPerfEntry 3 }

mplsFTNPerfMatchedOctets OBJECT-TYPE
   SYNTAX              Counter64
   MAX-ACCESS          read-only
   STATUS              current
   DESCRIPTION
       "Number of octets that matched the specified FTN entry
        if it is applied/mapped to the specified interface.

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

mplsFTNPerfDiscontinuityTime 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 entry's counters suffered
        a discontinuity.  If no such discontinuities have
        occurred since the last re-initialization of the local
        management subsystem, then this object contains a zero
        value."
   ::= { mplsFTNPerfEntry 5 }

-- End of mplsFTNPerfTable

-- Module compliance.

-- Top level object IDs.

mplsFTNGroups
   OBJECT IDENTIFIER ::= { mplsFTNConformance 1 }
mplsFTNCompliances
   OBJECT IDENTIFIER ::= { mplsFTNConformance 2 }

-- Compliance requirement for fully compliant implementations.
mplsFTNModuleFullCompliance MODULE-COMPLIANCE
   STATUS current
   DESCRIPTION
       "Compliance statement for agents that provide full
        support for MPLS-FTN-STD-MIB."

   MODULE IF-MIB -- The Interfaces Group MIB, RFC 2863.
   MANDATORY-GROUPS {
      ifGeneralInformationGroup,
      ifCounterDiscontinuityGroup
   }

   MODULE -- This module.
   MANDATORY-GROUPS {
      mplsFTNRuleGroup,
      mplsFTNMapGroup,
      mplsFTNPerfGroup

   }

   OBJECT mplsFTNAddrType
   SYNTAX InetAddressType { ipv4(1), ipv6(2) }
   DESCRIPTION
       "An implementation is only required to support IPv4
        and/or IPv6 addresses.  An implementation is only
        required to support the address types that are actually
        supported on the LSR."

   OBJECT mplsFTNSourceAddrMin
   SYNTAX       InetAddress (SIZE (4 | 20))
   DESCRIPTION
       "An implementation is only required to support IPv4
        and/or IPv6 addresses.  An implementation is only
        required to support the address types that are actually
        supported on the LSR."

   OBJECT mplsFTNSourceAddrMax
   SYNTAX       InetAddress (SIZE (4 | 20))
   DESCRIPTION
       "An implementation is only required to support IPv4
        and/or IPv6 addresses.  An implementation is only
        required to support the address types that are actually
        supported on the LSR."

   OBJECT mplsFTNDestAddrMin
   SYNTAX       InetAddress (SIZE (4 | 20))
   DESCRIPTION
       "An implementation is only required to support IPv4
        and/or IPv6 addresses.  An implementation is only
        required to support the address types that are actually
        supported on the LSR."

   OBJECT mplsFTNDestAddrMax
   SYNTAX       InetAddress (SIZE (4 | 20))
   DESCRIPTION
       "An implementation is only required to support IPv4
        and/or IPv6 addresses.  An implementation is only
        required to support the address types that are actually
        supported on the LSR."
   ::= { mplsFTNCompliances 1 }

-- Compliance requirement for read-only implementations.
mplsFTNModuleReadOnlyCompliance MODULE-COMPLIANCE
   STATUS current
   DESCRIPTION
       "Compliance requirement for implementations that only

        provide read-only support for MPLS-FTN-STD-MIB. Such
        devices can then be monitored but cannot be configured
        using this MIB module."

   MODULE IF-MIB -- The interfaces Group MIB, RFC 2863
   MANDATORY-GROUPS {
      ifGeneralInformationGroup,
      ifCounterDiscontinuityGroup
   }

   MODULE -- This module
   MANDATORY-GROUPS {
      mplsFTNRuleGroup,
      mplsFTNMapGroup,
      mplsFTNPerfGroup
   }

   OBJECT mplsFTNIndexNext
   MIN-ACCESS   not-accessible
   DESCRIPTION
       "This object is not needed when mplsFTNTable is
        implemented as read-only."

   OBJECT mplsFTNRowStatus
   SYNTAX       RowStatus { active(1) }
   MIN-ACCESS   read-only
   DESCRIPTION
       "Write access is not required, and active is the only
        status that needs to be supported."

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

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

   OBJECT mplsFTNAddrType
   SYNTAX       InetAddressType { ipv4(1), ipv6(2) }
   MIN-ACCESS   read-only
   DESCRIPTION
       "Write access is not required. An implementation is only
        required to support IPv4 and IPv6 addresses."

   OBJECT mplsFTNSourceAddrMin
   SYNTAX       InetAddress (SIZE (4 | 20))
   MIN-ACCESS   read-only
   DESCRIPTION
       "Write access is not required. An implementation is only
        required to support IPv4 and IPv6 addresses."

   OBJECT mplsFTNSourceAddrMax
   SYNTAX       InetAddress (SIZE (4 | 20))
   MIN-ACCESS   read-only
   DESCRIPTION
       "Write access is not required. An implementation is only
        required to support IPv4 and IPv6 addresses."

   OBJECT mplsFTNDestAddrMin
   SYNTAX       InetAddress (SIZE (4 | 20))
   MIN-ACCESS   read-only
   DESCRIPTION
       "Write access is not required. An implementation is only
        required to support IPv4 and IPv6 addresses."

   OBJECT mplsFTNDestAddrMax
   SYNTAX       InetAddress (SIZE (4 | 20))
   MIN-ACCESS   read-only
   DESCRIPTION
       "Write access is not required. An implementation is only
        required to support IPv4 and IPv6 addresses."

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

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

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

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

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

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

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

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

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

   OBJECT mplsFTNMapRowStatus
   SYNTAX       RowStatus { active(1) }
   MIN-ACCESS   read-only
   DESCRIPTION
       "Write access is not required, and active(1) is the only
        status that needs to be supported."

   OBJECT mplsFTNMapStorageType
   MIN-ACCESS   read-only
   DESCRIPTION
       "Write access is not required."
   ::= { mplsFTNCompliances 2 }

-- Units of conformance.
mplsFTNRuleGroup OBJECT-GROUP
   OBJECTS {
         mplsFTNIndexNext,
         mplsFTNTableLastChanged,
         mplsFTNRowStatus,
         mplsFTNDescr,
         mplsFTNMask,
         mplsFTNAddrType,
         mplsFTNSourceAddrMin,
         mplsFTNSourceAddrMax,
         mplsFTNDestAddrMin,
         mplsFTNDestAddrMax,
         mplsFTNSourcePortMin,
         mplsFTNSourcePortMax,
         mplsFTNDestPortMin,
         mplsFTNDestPortMax,
         mplsFTNProtocol,
         mplsFTNActionType,
         mplsFTNActionPointer,
         mplsFTNDscp,
         mplsFTNStorageType
   }
   STATUS current
   DESCRIPTION
       "Collection of objects that implement MPLS FTN rules."
   ::= { mplsFTNGroups 1 }

mplsFTNMapGroup OBJECT-GROUP
   OBJECTS {
         mplsFTNMapTableLastChanged,
         mplsFTNMapRowStatus,
         mplsFTNMapStorageType
   }
   STATUS current
   DESCRIPTION
       "Collection of objects that implement activation of MPLS
        FTN entries on interfaces."
   ::= { mplsFTNGroups 2 }

mplsFTNPerfGroup OBJECT-GROUP
   OBJECTS {
         mplsFTNPerfMatchedPackets,
         mplsFTNPerfMatchedOctets,
         mplsFTNPerfDiscontinuityTime
   }
   STATUS current
   DESCRIPTION
       "Collection of objects providing MPLS FTN performance
        information."
   ::= { mplsFTNGroups 3 }

END
