IF-CAP-STACK-MIB DEFINITIONS ::= BEGIN

  IMPORTS
    MODULE-IDENTITY, OBJECT-TYPE, mib-2
      FROM SNMPv2-SMI         -- [RFC2578]
    TruthValue
      FROM SNMPv2-TC          -- [RFC2579]
    MODULE-COMPLIANCE, OBJECT-GROUP
      FROM SNMPv2-CONF        -- [RFC2580]
    ifStackGroup2, ifStackHigherLayer, ifStackLowerLayer
      FROM IF-MIB             -- [RFC2863]
    ifInvStackGroup
      FROM IF-INVERTED-STACK-MIB -- [RFC2864]
    ;

  ifCapStackMIB MODULE-IDENTITY
    LAST-UPDATED "200711070000Z"  -- November 07, 2007
    ORGANIZATION "IETF Ethernet Interfaces and Hub MIB Working Group"
    CONTACT-INFO
      "WG charter:
        http://www.ietf.org/html.charters/OLD/hubmib-charter.html

      Mailing Lists:
        General Discussion: hubmib@ietf.org

        To Subscribe: hubmib-request@ietf.org
        In Body: subscribe your_email_address

      Chair:  Bert Wijnen
      Postal: Alcatel-Lucent
              Schagen 33
              3461 GL Linschoten
              Netherlands
       Phone: +31-348-407-775
       EMail: bwijnen@alcatel-lucent.com

      Editor: Edward Beili
      Postal: Actelis Networks Inc.
              25 Bazel St., P.O.B. 10173
              Petach-Tikva 10173
              Israel
       Phone: +972-3-924-3491
       EMail: edward.beili@actelis.com"
    DESCRIPTION
      "The objects in this MIB module are used to describe
      cross-connect capabilities of stacked (layered) interfaces,
      complementing ifStackTable and ifInvStackTable defined in
      IF-MIB and IF-INVERTED-STACK-MIB, respectively.

      Copyright (C) The IETF Trust (2007).  This version
      of this MIB module is part of RFC 5066;  see the RFC
      itself for full legal notices."

    REVISION    "200711070000Z"  -- November 07, 2007
    DESCRIPTION "Initial version, published as RFC 5066."
    ::= { mib-2 166 }

   -- Sections of the module
   -- Structured as recommended by [RFC4181], see
   -- Appendix D: Suggested OID Layout

   ifCapStackObjects     OBJECT IDENTIFIER ::= { ifCapStackMIB 1 }

   ifCapStackConformance OBJECT IDENTIFIER ::= { ifCapStackMIB 2 }

   -- Groups in the module

   --
   -- ifCapStackTable group
   --

   ifCapStackTable  OBJECT-TYPE
     SYNTAX      SEQUENCE OF IfCapStackEntry
     MAX-ACCESS  not-accessible
     STATUS      current
     DESCRIPTION
       "This table, modeled after ifStackTable from IF-MIB,
       contains information on the possible 'on-top-of'
       relationships between the multiple sub-layers of network
       interfaces (as opposed to actual relationships described in
       ifStackTable).  In particular, it contains information on
       which sub-layers MAY possibly run 'on top of' which other
       sub-layers, as determined by cross-connect capability of the
       device, where each sub-layer corresponds to a conceptual row
       in the ifTable.  For example, when the sub-layer with ifIndex
       value x can be connected to run on top of the sub-layer with
       ifIndex value y, then this table contains:

         ifCapStackStatus.x.y=true

       The ifCapStackStatus.x.y row does not exist if it is
       impossible to connect between the sub-layers x and y.

       Note that for most stacked interfaces (e.g., 2BASE-TL)
       there's always at least one higher-level interface (e.g., PCS
       port) for each lower-level interface (e.g., PME) and at
       least one lower-level interface for each higher-level
       interface, that is, there is at least a single row with a
       'true' status for any such existing value of x or y.

       This table is read-only as it describes device capabilities."
     REFERENCE
       "IF-MIB, ifStackTable"
     ::= { ifCapStackObjects 1 }

   ifCapStackEntry  OBJECT-TYPE
     SYNTAX      IfCapStackEntry
     MAX-ACCESS  not-accessible
     STATUS      current
     DESCRIPTION
       "Information on a particular relationship between two
       sub-layers, specifying that one sub-layer MAY possibly run
       on 'top' of the other sub-layer.  Each sub-layer corresponds
       to a conceptual row in the ifTable (interface index for
       lower and higher layer, respectively)."
     INDEX {
       ifStackHigherLayer,
       ifStackLowerLayer
     }
     ::= { ifCapStackTable 1 }

   IfCapStackEntry ::= SEQUENCE {
        ifCapStackStatus       TruthValue
      }

   ifCapStackStatus  OBJECT-TYPE
     SYNTAX      TruthValue
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
       "The status of the 'cross-connect capability' relationship
       between two sub-layers.  The following values can be returned:
         true(1)         - indicates that the sub-layer interface,
                           identified by the ifStackLowerLayer MAY
                           be connected to run 'below' the sub-layer
                           interface, identified by the
                           ifStackHigherLayer index.
         false(2)        - the sub-layer interfaces cannot be
                           connected temporarily due to
                           unavailability of the interface(s), e.g.,
                           one of the interfaces is located on an
                           absent pluggable module.

       Note that lower-layer interface availability per higher-layer,
       indicated by the value of 'true', can be constrained by
       other parameters, for example, by the aggregation capacity of
       a higher-layer interface or by the lower-layer interface in
       question being already connected to another higher-layer
       interface.  In order to ensure that a particular sub-layer can
       be connected to another sub-layer, all respective objects
       (e.g., ifCapStackTable, ifStackTable, and efmCuPAFCapacity for
       EFMCu interfaces) SHALL be inspected.

       This object is read-only, unlike ifStackStatus, as it
       describes a cross-connect capability."
     ::= { ifCapStackEntry 1 }

   ifInvCapStackTable  OBJECT-TYPE
     SYNTAX        SEQUENCE OF IfInvCapStackEntry
     MAX-ACCESS    not-accessible
     STATUS        current
     DESCRIPTION
       "A table containing information on the possible relationships
       between the multiple sub-layers of network interfaces.  This
       table, modeled after ifInvStackTable from
       IF-INVERTED-STACK-MIB, is an inverse of the ifCapStackTable
       defined in this MIB module.

       In particular, this table contains information on which
       sub-layers MAY run 'underneath' 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 MAY be
       connected to run underneath the sub-layer with ifIndex value
       y, then this table contains:

          ifInvCapStackStatus.x.y=true

       This table contains exactly the same number of rows as the
       ifCapStackTable, but the rows appear in a different order.

       This table is read-only as it describes a cross-connect
       capability."
     REFERENCE
        "IF-INVERTED-STACK-MIB, ifInvStackTable"
     ::= { ifCapStackObjects 2 }

   ifInvCapStackEntry  OBJECT-TYPE
     SYNTAX        IfInvCapStackEntry
     MAX-ACCESS    not-accessible
     STATUS        current
     DESCRIPTION
        "Information on a particular relationship between two sub-
        layers, specifying that one sub-layer MAY run underneath the
        other sub-layer.  Each sub-layer corresponds to a conceptual
        row in the ifTable."
     INDEX { ifStackLowerLayer, ifStackHigherLayer }
     ::= { ifInvCapStackTable 1 }

    IfInvCapStackEntry ::= SEQUENCE {
      ifInvCapStackStatus       TruthValue
    }

   ifInvCapStackStatus  OBJECT-TYPE
     SYNTAX         TruthValue
     MAX-ACCESS     read-only
     STATUS         current
     DESCRIPTION
        "The status of the possible 'cross-connect capability'
        relationship between two sub-layers.

        An instance of this object exists for each instance of the
        ifCapStackStatus object, and vice versa.  For example, if the
        variable ifCapStackStatus.H.L exists, then the variable
        ifInvCapStackStatus.L.H must also exist, and vice versa.  In
        addition, the two variables always have the same value.

        The ifInvCapStackStatus object is read-only, as it describes
        a cross-connect capability."
     REFERENCE
        "ifCapStackStatus"
     ::= { ifInvCapStackEntry 1 }

  --
  -- Conformance Statements
  --

   ifCapStackGroups      OBJECT IDENTIFIER ::=
        { ifCapStackConformance 1 }

   ifCapStackCompliances OBJECT IDENTIFIER ::=
        { ifCapStackConformance 2 }

   -- Units of Conformance

   ifCapStackGroup OBJECT-GROUP
     OBJECTS {
       ifCapStackStatus,
       ifInvCapStackStatus
     }
     STATUS  current
     DESCRIPTION
       "A collection of objects providing information on the
       cross-connect capability of multi-layer (stacked) network
       interfaces."
     ::= { ifCapStackGroups 1 }

  -- Compliance Statements

   ifCapStackCompliance MODULE-COMPLIANCE
     STATUS      current
     DESCRIPTION
       "The compliance statement for SNMP entities, which provide
       information on the cross-connect capability of multi-layer
       (stacked) network interfaces, with flexible cross-connect
       between the sub-layers."

     MODULE  -- this module
       MANDATORY-GROUPS {
         ifCapStackGroup
       }

       OBJECT       ifCapStackStatus
       SYNTAX       TruthValue { true(1) }
       DESCRIPTION
         "Support for the false(2) value is OPTIONAL for
         implementations supporting pluggable interfaces."

       OBJECT       ifInvCapStackStatus
       SYNTAX       TruthValue { true(1) }
       DESCRIPTION
         "Support for the false(2) value is OPTIONAL for
         implementations supporting pluggable interfaces."

     MODULE  IF-MIB
       MANDATORY-GROUPS {
         ifStackGroup2
       }

     MODULE  IF-INVERTED-STACK-MIB
       MANDATORY-GROUPS {
         ifInvStackGroup
       }
     ::= { ifCapStackCompliances 1 }
END
