Internet Engineering Task Force                 Kingston Smiler Selvaraj
Internet-Draft                                                IpInfusion
Intended status: Standards Track                            M.Venkatesan
Expires: August 8, 2014 February 9, 2015                                      Dell Inc.
                                                               V. Manral
                                                    Hewlett-Packard Corp
                                                             Daniel King
                                                      Old Dog Consulting
                                                              Sam Aldrin
                                                     Huawei Technologies
                                                        February 4,
                                                          August 8, 2014

              MPLS Transport Profile Linear Protection MIB
              draft-ietf-mpls-tp-linear-protection-mib-02
              draft-ietf-mpls-tp-linear-protection-mib-03

Abstract

This memo defines a portion of the Management Information Base (MIB) for
use with network management protocols.  In particular it defines objects
for managing MPLS Transport Profile (MPLS-TP) Linear Protection.

Status of This Memo

This Internet-Draft is submitted to IETF in full conformance with the
provisions of BCP 78 and BCP 79.

Internet-Drafts are working documents of the Internet Engineering Task
Force (IETF), its areas, and its working groups.  Note that other groups
may also distribute working documents as Internet-Drafts.

Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time.  It is inappropriate to use Internet-Drafts as reference material
or to cite them other than as "work in progress."

The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt.

The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html.

This Internet-Draft will expire on August 8, 2014. February 9, 2015.

Copyright and License Notice

Copyright (c) 2014 IETF Trust and the persons identified as the document
authors. All rights reserved.

This document is subject to BCP 78 and the IETF Trust's Legal Provisions
Relating to IETF Documents (http://trustee.ietf.org/license-info) in
effect on the date of publication of this document. Please review these
documents carefully, as they describe your rights and restrictions with
respect to this document. Code Components extracted from this document
must include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License.

Table of Contents

   1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  3
   2.  The Internet-Standard Management Framework . . . . . . . . . .  3
   3.  Conventions  . . . . . . . . . . . . . . . . . . . . . . . . .  3
   4.  Overview . . . . . . . . . . . . . . . . . . . . . . . . . . .  3
   5.  Structure of the MIB Module  . . . . . . . . . . . . . . . . .  3
     5.1.  Textual Conventions  . . . . . . . . . . . . . . . . . . .  3
     5.2. The MPLS TP Linear Protection Subtree . . . . . . . . . . .  4
     5.3. The Notifications Subtree . . . . . . . . . . . . . . . . .  4
     5.4.  The Table Structures . . . . . . . . . . . . . . . . . . .  4
   6.  Relationship to Other MIB Modules  . . . . . . . . . . . . . .  5
     6.1. Relationship to the MPLS OAM maintenance identifiers MIB
          module  . . . . . . . . . . . . . . . . . . . . . . . . . .  5
     6.2. MIB modules required for IMPORTS  . . . . . . . . . . . . .  5
   7. Example of Protection switching groups configuration for
      MPLS-TP TE tunnel . . . . . . . . . . . . . . . . . . . . . . .  5
   8.  Definitions  . . . . . . . . . . . . . . . . . . . . . . . . .  7
   9.  Security Considerations  . . . . . . . . . . . . . . . . . . . 27
   10.  IANA Considerations . . . . . . . . . . . . . . . . . . . . . 28
   11.  References  . . . . . . . . . . . . . . . . . . . . . . . . . 28
     11.1.  Normative References  . . . . . . . . . . . . . . . . . . 28
     11.2.  Informative References  . . . . . . . . . . . . . . . . . 29
   12. Acknowledgments  . . . . . . . . . . . . . . . . . . . . . . . 29
   13. Author's Address . . . . . . . . . . . . . . . . . . . . . . . 29

1.  Introduction

This memo defines a portion of the Management Information Base (MIB) for
use with network management protocols.  In particular it defines objects
for managing MPLS Transport Profile (MPLS-TP) Linear Protection.

This MIB module should be used for configuring and managing the MPLS TP
linear protection for MPLS TP LSPs.

2.  The Internet-Standard Management Framework

For a detailed overview of the documents that describe the current
Internet-Standard Management Framework, please refer to section 7 of RFC
3410 [RFC3410].

Managed objects are accessed via a virtual information store, termed the
Management Information Base or MIB.  MIB objects are generally accessed
through the Simple Network Management Protocol (SNMP). Objects in the
MIB are defined using the mechanisms defined in the Structure of
Management Information (SMI).  This memo specifies a MIB module that is
compliant to the SMIv2, which is described in STD 58, RFC 2578
[RFC2578], STD 58, RFC 2579 [RFC2579] and STD 58, RFC 2580 [RFC2580].

3.  Conventions

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in RFC 2119 [RFC2119].

4.  Overview

    [RFC6378] defines the protocol to provide a linear protection
    switching mechanism for MPLS transport profile with protection
    domain as point-to-point LSP. The detailed protocol specification of
    MPLS transport profile linear protection is described in [RFC6378].
    This document specifies a MIB module for the LER that supports MPLS
    TP Linear protection (which includes 1:n protection architecture)
    and a MIB module that defines textual conventions.

5.  Structure of the MIB Module

5.1.  Textual Conventions

    The following new textual conventions are defined in a separate MIB
    module in this document
       MplsLpsReq
       MplsLpsFpathPath
       MplsLpsCommand

5.2. The MPLS TP Linear Protection Subtree

   MPLS-LPS-MIB is the MIB module defined in this document, and it is
   put under mplsStdMIB.

5.3. The Notifications Subtree

   Notifications are defined to inform the management station about
   switchover and mode mismatch of linear protection switching group.
   Two notifications are defined for this purpose.  The notification,
   mplsLpsEventSwitchover is to inform the management station about the
   switchover of the active path and the notification
   mplsLpsEventModeMismatch is to inform the management station about
   the mismatch in the revertive mode across the end point of the
   protection domain.

5.4.  The Table Structures

   The MPLS TP Linear protection MIB module has four tables.  The tables
   are as follows

   o mplsLpsConfigTable

      This table is used to configure MPLS TP Linear protection
      switching Group. The protection switching group is identified by
      mplsLpsConfigGroupName. The other attributes in this table can be
      used to configure properties that are specific to the protection
      switching group.

   o mplsLpsStatusTable

      This table provides the current status information of mpls linear
      protection groups that have been configured on the system. When a
      protection group is configured or deleted in the
      mplsLpsConfigTable, then the corresponding row of that session in
      the mplsLpsStatusTable is, respectively, automatically created or
      deleted.

   o mplsLpsMeConfigTable

      This table is used to associate the Maintenance Entities (MEs) to
      the protection switching group. The ME is identified by
      mplsOamIdMegIndex, mplsOamIdMeIndex and mplsOamIdMeMpIndex.

   o mplsLpsMeStatusTable

      This table provides the current information about the protection
      state of MEs that have been configured on the system. When a
      ME configured or deleted in the mplsLpsMeConfigTable, then the
      corresponding row of that session in the mplsLpsMeStatusTable
      is, respectively, automatically created or deleted.

6.  Relationship to Other MIB Modules

6.1. Relationship to the MPLS OAM maintenance identifiers MIB module

   The mplsLpsMeConfigTable entry is extended by entry in the
   mplsOamIdMeTable [MPLS-OAM-ID-STD-MIB] defined in draft-ietf-mpls-tp-
   oam-id-mib. Note that the nature of the 'extends' relationship is a
   sparse augmentation so that the entry in the mplsLpsMeConfigTable has
   the same index values as the entry in the mplsOamIdMeTable. Each time
   that an entry is created in the mplsOamIdMeTable for which the LER
   supports MPLS TP Linear protection a row is created automatically in
   the mplsLpsMeConfigTable.

6.2. MIB modules required for IMPORTS

   The MPLS-LPS-MIB module requires following MIB modules for IMPORTS:

   o  SNMPv2-SMI defined in [RFC2578]

   o  SNMPv2-CONF defined in [RFC2580]

   o  SNMPv2-TC defined in [RFC2579]

   o  MPLS-OAM-ID-STD-MIB defined in [draft-ietf-mpls-tp-oam-id-mib]

7. Example of Protection switching groups configuration for MPLS-TP TE
   tunnel

      This example considers the protection group configuration on a
      head-end LSR to provide protection for a co-routed bidirectional
      MPLS tunnel.
      Only relevant objects which are applicable for protection group
      identifiers of co-routed MPLS tunnel are illustrated here.

         In mplsOamIdMegTable:
         {
          -- MEG index (Index to the table)
            mplsOamIdMegIndex                 = 1,
            mplsOamIdMegName                  = "MEG1",
            mplsOamIdMegOperatorType          = ipCompatible (1),
            mplsOamIdMegServiceType           = lsp (1),
            mplsOamIdMegMpLocation            = perNode(1),
          -- Mandatory parameters needed to activate the row go here
            mplsOamIdMegRowStatus             = createAndGo (4)
         }

      This will create an entry in the mplsOamIdMegTable to protect
      the MPLS tunnel.

      The following ME table is used to associate the path information
      to a MEG.

         In mplsOamIdMeTable:
         {
            -- ME index (Index to the table)
             mplsOamIdMeIndex                  = 1,
            -- MP index (Index to the table)
             mplsOamIdMeMpIndex                = 1,
             mplsOamIdMeName                   = "ME1",
             mplsOamIdMeMpIfIndex              = 0,
             -- Source MEP id is derived from the IP compatible MPLS
             -- tunnel
             mplsOamIdMeSourceMepIndex         = 0,
             -- Source MEP id is derived from the IP compatible MPLS
             -- tunnel
             mplsOamIdMeSinkMepIndex           = 0,
             mplsOamIdMeMpType                 = mep (1),
             mplsOamIdMeMepDirection           = down (2),
             mplsOamIdMeProactiveOamPhbTCValue = 0,
             mplsOamIdMeOnDemandOamPhbTCValue  = 0,
            --  RowPointer MUST point to the first accessible column
            -- of an MPLS tunnel
             mplsOamIdMeServicePointer         = mplsTunnelName.1.1.1.2,
            -- Mandatory parameters needed to activate the row go here
             mplsOamIdMeRowStatus              = createAndGo (4)
         }

       The below table associates the MEs with protection switching
       groups.
         In mplsLpsConfigTable:
         mplsLpsConfigEntry ::= SEQUENCE {
           -- Group index
           mplsLpsConfigGroupIndex  = 1,
           mplsLpsConfigGroupName   = "PGGroup1",
           mplsLpsConfigMode        = onePlusOne (1),
           -- Mandatory parameters needed to activate the row go here
           mplsLpsConfigRowStatus   = createAndGo (4)
           }
         In mplsLpsMeConfigTable:
         MplsLpsMeConfigEntry ::= SEQUENCE {
           -- MEG index (Index to the table)
           mplsOamIdMegIndex                 = 1,
           -- ME index
           mplsOamIdMeIndex                  = 1,
           -- MP index (Index to the table)
           mplsOamIdMeMpIndex                = 1,
           -- Group index
           mplsLpsMeConfigGroupIndex         = 1,
           -- Configuration state
           mplsLpsMeConfigState              = primary(1)
         }

8.  Definitions
   MPLS-LPS-MIB DEFINITIONS ::= BEGIN

   IMPORTS
           MODULE-IDENTITY, NOTIFICATION-TYPE, OBJECT-TYPE,
           Gauge32, Counter32, Integer32, Unsigned32
                   FROM SNMPv2-SMI
           MODULE-COMPLIANCE, OBJECT-GROUP, NOTIFICATION-GROUP
                   FROM SNMPv2-CONF          -- [RFC2580]
           TEXTUAL-CONVENTION, RowStatus,
           TimeStamp, StorageType
                   FROM SNMPv2-TC
           SnmpAdminString

                FROM SNMP-FRAMEWORK-MIB
        mplsStdMIB
            FROM MPLS-TC-STD-MIB          -- [RFC3811]
        mplsOamIdMegIndex, mplsOamIdMeIndex, mplsOamIdMeMpIndex
            FROM MPLS-OAM-ID-STD-MIB;

mplsLpsMIB MODULE-IDENTITY
    LAST-UPDATED  "201301210000Z"  -- January 21, 2013
    ORGANIZATION  "Multiprotocol Label Switching (MPLS) Working Group"
    CONTACT-INFO

        "
               Kingston Smiler Selvaraj
               Ipinfusion
               Email:kingstons@ipinfusion.com

               Venkatesan Mahalingam
               Dell Inc.
               350 Holger way, San Jose, CA, USA
               Email: venkat.mahalingams@gmail.com

               Vishwas Manral
               Hewlet-Packard, Inc.
               19111 Pruneridge Ave., Cupertino, CA, 95014
               Phone: 408-447-1497
               Email: vishwas.manral@hp.com

               Daniel King
               Old Dog Consulting
               UK
               Email:daniel@olddog.co.uk

               Sam Aldrin
               Huawei Technologies, co.
               2330 Central Express Way,
               Santa Clara, CA 95051, USA
               Email: aldrin.ietf@gmail.com"
DESCRIPTION
    "This management information module supports the
     configuration and management of MPLS TP linear
     protection groups. "
REVISION
        "201301210000Z" -- January 21, 2013
     DESCRIPTION
          "MPLS Protection Switching Group objects for LSP
           MEPs"

         ::= { mplsStdMIB xxx } -- xxx to be replaced with
                               -- correct value

      -- Top level components of this MIB module.
      -- Notifications
      mplsLpsNotifications
                   OBJECT IDENTIFIER ::= { mplsLpsMIB 0 }
      -- tables, scalars
      mplsLpsObjects
                   OBJECT IDENTIFIER ::= { mplsLpsMIB 1 }
      -- conformance

      mplsLpsConformance
                   OBJECT IDENTIFIER ::= { mplsLpsMIB 2 }

MplsLpsReq ::= TEXTUAL-CONVENTION
    STATUS current
    DESCRIPTION
        "This Textual Convention describes an object that stores
         the PSC Request field of the PSC control packet. The values
         are as follows

         1110  Lockout of Protection
         1100  Forced Switch
         1010  Signal Fail (SF)
         0111  Signal Degrade (SD)
         0101  Manual Switch
         0100  Wait-to-Restore
         0001  Do Not Revert
         0000  No Request"
    REFERENCE
        "Section 4.2.2 of RFC6378"
    SYNTAX      OCTET STRING (SIZE (2))

MplsLpsFpathPath ::= TEXTUAL-CONVENTION
    STATUS current
    DESCRIPTION
        "This Textual Convention describes an object that stores
         the Fault Path (FPath) field and Data Path (Path) field of
         the PSC control packet.

         FPath is located in the first octet and Path is
         located in the second octet. Bits are numbered from left to
         right.

         The value and the interpretation of FPath field is as follows

         2-255  for future extensions
         1      the anomaly condition is on the working path
         0      the anomaly condition is on the protection path

         The value and the interpretation of Path field is as follows

         2-255  for future extensions
         1      protection path is transporting user data traffic
         0      protection path is not transporting user data traffic
         "
    REFERENCE
        "Section 4.2.5 and 4.2.6 of RFC6378"
    SYNTAX      OCTET STRING (SIZE (2))

MplsLpsCommand ::= TEXTUAL-CONVENTION
    STATUS       current
    DESCRIPTION
        "This command allows a user to perform any action over ME.
         If the protection command cannot be executed because an
         equal or higher priority request is in effect, an
         inconsistentValue error is returned.

         The command values are:

         noCmd

         This value should be returned by a read request when no command
         has been written to the object in question since
         initialization. This value may not be used in a write
         operation.  If noCmd is used in a write operation a wrongValue
         error is returned.

         clear

         Clears all of the commands listed below for the specified ME.

         lockoutOfProtection

         Prevents any of the working ME from switching to the protection
         ME. The specified ME should be the protection ME, otherwise an
         inconsistentValue error is returned.

         forcedSwitchWorkToProtect

         Switches the specified working ME to the protection path.
         If the protection ME is specified an inconsistentValue
         error is returned.

         manualSwitchWorkToProtect

         Switches the specified working ME to the protection ME.
         If the protection ME is specified an inconsistentValue
         error is returned."

    SYNTAX       INTEGER {
                     noCmd(1),
                     clear(2),
                     lockoutOfProtection(3),
                     forcedSwitchWorkToProtect(4),
                     manualSwitchWorkToProtect(5)
                 }

-- Start of MPLS Transport Profile Protection Switching
-- Table
-- MPLS TP Protection Switching Configuration Table
-- This table supports the addition, configuration and deletion
-- of MPLS TP Protection Switching groups.

mplsLpsConfigGroups OBJECT-TYPE
    SYNTAX      Gauge32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "The object hold the count of MPLS Protection Switching
         groups. This count includes all rows in mplsLpsConfigTable,
         regardless of the value of mplsLpsConfigRowStatus."
    ::= { mplsLpsObjects 1 }

mplsLpsConfigTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF MplsLpsConfigEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "This table lists the mpls linear protection groups that
         have been configured on the system."
    ::= { mplsLpsObjects 2 }

mplsLpsConfigEntry OBJECT-TYPE
    SYNTAX      MplsLpsConfigEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "A conceptual row in the mplsLpsConfigTable."
    INDEX { mplsLpsConfigGroupIndex }
    ::= { mplsLpsConfigTable  1 }

MplsLpsConfigEntry ::= SEQUENCE {
    mplsLpsConfigGroupIndex          Unsigned32,
    mplsLpsConfigGroupName           SnmpAdminString,
    mplsLpsConfigMode                INTEGER,
    mplsLpsConfigRevertive           INTEGER,
    mplsLpsConfigProtectionScheme    INTEGER,
    mplsLpsConfigSdThreshold         Integer32,
    mplsLpsConfigWaitToRestore       Integer32,
    mplsLpsConfigContinualTxInterval Integer32,
    mplsLpsConfigRapidTxInterval     Integer32,
    mplsLpsConfigCreationTime        TimeStamp,
    mplsLpsConfigRowStatus           RowStatus,
    mplsLpsConfigStorageType         StorageType

}

mplsLpsConfigGroupIndex  OBJECT-TYPE
    SYNTAX        Unsigned32
    MAX-ACCESS    not-accessible
    STATUS        current
    DESCRIPTION
        "Index for the conceptual row identifying a protection group."
    ::= { mplsLpsConfigEntry 1 }

mplsLpsConfigGroupName OBJECT-TYPE
    SYNTAX      SnmpAdminString (SIZE (1..32))
    MAX-ACCESS  read-create
    STATUS      current
    DESCRIPTION
        "Textual name represents the mpls tp protection group.
         Each Protection Group is identified by a unique
         protection group name. "
    ::= { mplsLpsConfigEntry 2 }

mplsLpsConfigMode OBJECT-TYPE
    SYNTAX INTEGER {
                   onePlusOne(1),
                   oneColonOne(2),
                   oneColonN(3)
                   }
    MAX-ACCESS  read-create
    STATUS      current
    DESCRIPTION
       "The architectural mode of the Protection group. This can
        either be 1+1, 1:1, 1:n.

        1+1

        In the 1+1 protection scheme, a fully dedicated
        protection entity is allocated. Data traffic is copied

        and fed at the source to both the working and the
        protection entities.  The traffic on the working and the
        protection entities is transmitted simultaneously to
        the sink of the protection domain, where selection
        between the working and protection entities is performed

        1:1

        In the 1:1 scheme, a protection path is allocated to
        protect against a defect, failure, or a degradation in a
        working path. In normal conditions, data traffic is
        transmitted over the working entity, while the
        protection entity functions in the idle state. If there
        is a defect on the working entity or a specific
        administrative request, traffic is switched to the
        protection entity.

        1:n

        In case of 1:n linear protection, one protection entity
        is allocated to protect n working entities. The protection
        entity might not have sufficient resources to protect all the
        working entities that may be affected by fault conditions at a
        specific time. In this case, in order to guaranteed
        protection, the protection entity should support enough
        capacity and bandwidth to protect any of the n working
        entities."

    DEFVAL {onePlusOne}
    ::= { mplsLpsConfigEntry 3 }

mplsLpsConfigRevertive OBJECT-TYPE
    SYNTAX      INTEGER { nonrevertive(1), revertive(2) }
    MAX-ACCESS  read-create
    STATUS      current
    DESCRIPTION
       "This object represents the reversion mode of the Linear
        Protection Switching group. The reversion mode of

        protection mechanism may be either revertive or
        non-revertive.

        nonrevertive

        In non-revertive mode, after a service has been
        recovered, traffic will be forwarded on the recovery

        path

        revertive

        In revertive mode, after a service has been
        recovered, traffic will be redirected back onto the
        original working path."

    DEFVAL { nonrevertive }
    ::= { mplsLpsConfigEntry 4 }

mplsLpsConfigProtectionScheme OBJECT-TYPE
    SYNTAX      INTEGER { bidirectional(1), unidirectional(2) }
    MAX-ACCESS  read-create
    STATUS      current
    DESCRIPTION
       "The object represents the operational scheme of
        protection switching group. The protection scheme may
        either be unidirectional or bidirectional.

        bidirectional

        In bidirectional protection scheme, both the directions
        will be switched simultaneously even if the fault
        applies to only one direction of the path.

        unidirectional

        In unidirectional protection scheme protection switching
        will be performed independently for each direction of a
        bidirectional transport path

        This object may not be modified if the associated
        mplsLpsConfigRowStatus object is equal to active(1). "

    DEFVAL {bidirectional}
    ::= { mplsLpsConfigEntry 5 }

mplsLpsConfigSdThreshold OBJECT-TYPE
    SYNTAX      Integer32 (1..9)
    MAX-ACCESS  read-create
    STATUS      current
    DESCRIPTION
        "This object holds the threshold value of the Signal
         Degrade.

         When the MPLS DM OAM reaches this threshold value, the

         Signal Degrade event will be given to this
         protection domain.

         This object may be modified if the associated
         mplsLpsConfigRowStatus object is equal to active(1)."
    ::= { mplsLpsConfigEntry 6 }

mplsLpsConfigWaitToRestore OBJECT-TYPE
    SYNTAX      Integer32 (0..720)
    UNITS       "seconds"
    MAX-ACCESS  read-create
    STATUS      current
    DESCRIPTION
        "This object hold the Wait To Restore timer value in
         seconds.
         The WTR timer is used to delay reversion of PSC state
         to Normal state when recovering from a failure
         condition on the working path when the protection
         domain is configured for revertive behavior

         This object may not be modified if the associated
         mplsLpsConfigRowStatus object is equal to active(1)."
    DEFVAL { 300 }
    ::= { mplsLpsConfigEntry 7 }

    mplsLpsConfigContinualTxInterval OBJECT-TYPE
        SYNTAX      Integer32 (1..20)
        UNITS       "seconds"
        MAX-ACCESS  read-create
        STATUS      current
        DESCRIPTION
            "The Continual Tx Time in Seconds. Represents the time
             interval to send the continual LPS packet to the other
             end based on the current state."
        DEFVAL { 5 }
        ::= { mplsLpsConfigEntry 8 }

    mplsLpsConfigRapidTxInterval OBJECT-TYPE
        SYNTAX      Integer32 (1000..20000)
        UNITS       "micro-seconds"
        MAX-ACCESS  read-create
        STATUS      current
        DESCRIPTION
            "The Rapid Tx interval in micro-Seconds. Represents the time
             interval to send the LPS packet to the other end, when
             there is a change in state of Linear Protection domain due
             to local input. The default value is 3.3 milli-seconds
             which is 3300 micro-seconds"

        DEFVAL { 3300 }
        ::= { mplsLpsConfigEntry 9 }

    mplsLpsConfigCreationTime OBJECT-TYPE
        SYNTAX      TimeStamp
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The value of sysUpTime at the time the row was
             created"

        ::= { mplsLpsConfigEntry 10 }

    mplsLpsConfigRowStatus OBJECT-TYPE
        SYNTAX      RowStatus
        MAX-ACCESS  read-create
        STATUS      current
        DESCRIPTION
            "This represents the status of the MPLS TP Linear
             Protection group Entry. This variable is used to
             create, modify, and/or delete a row in this table.
             An entry may not exist in the active state unless all
             objects in the entry have an appropriate value."
        ::= { mplsLpsConfigEntry 11 }

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

--
-- MPLS TP Linear Protection Switching Status Table
--
-- This table provides Protection Switching group statistics.
--

mplsLpsStatusTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF MplsLpsStatusEntry

    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "This table provides status information about mpls
         linear protection groups that have been configured
         on the system."
    ::= { mplsLpsObjects 3 }

mplsLpsStatusEntry OBJECT-TYPE
    SYNTAX      MplsLpsStatusEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "A conceptual row in the mplsLpsStatusTable."
    AUGMENTS { mplsLpsConfigEntry }
    ::= { mplsLpsStatusTable  1 }

MplsLpsStatusEntry ::= SEQUENCE {
    mplsLpsStatusReqRcv                MplsLpsReq,
    mplsLpsStatusReqSent               MplsLpsReq,
    mplsLpsStatusFpathPathRcv          MplsLpsFpathPath,
    mplsLpsStatusFpathPathSent         MplsLpsFpathPath,
    mplsLpsStatusModeMismatches        Counter32
}

mplsLpsStatusReqRcv OBJECT-TYPE
    SYNTAX      MplsLpsReq
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "The current value of the PSC Request field received on
         more recent PSC packet"
    ::= { mplsLpsStatusEntry 1 }

mplsLpsStatusReqSent OBJECT-TYPE
    SYNTAX      MplsLpsReq
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "The current value of the PSC Request field sent on the
         more recent PSC packet"
    ::= { mplsLpsStatusEntry 2 }

mplsLpsStatusFpathPathRcv OBJECT-TYPE
    SYNTAX      MplsLpsFpathPath
    MAX-ACCESS  read-only

    STATUS      current

    DESCRIPTION
        "The current value of the FPath and Path fields received
         on more recent PSC packet"
    ::= { mplsLpsStatusEntry 3 }

mplsLpsStatusFpathPathSent OBJECT-TYPE
    SYNTAX      MplsLpsFpathPath
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "The current value of the FPath and Path fields sent
         on more recent PSC packet"

    ::= { mplsLpsStatusEntry 4 }

mplsLpsStatusModeMismatches OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
        "This object holds number of occurrences of mismatch in
         revertive mode across the protection domain end points."
    ::= { mplsLpsStatusEntry 5 }

-- MPLS Linear Protection ME Association Configuration Table
-- This table supports the addition, configuration and deletion
-- of MPLS Linear Protection Maintenance Entities in Protection
-- Switching groups.

mplsLpsMeConfigTable OBJECT-TYPE

    SYNTAX      SEQUENCE OF MplsLpsMeConfigEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "This table lists Maintenance Association that have been
         configured in Protection groups."
    ::= { mplsLpsObjects 4 }

mplsLpsMeConfigEntry OBJECT-TYPE
    SYNTAX      MplsLpsMeConfigEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION

        "A conceptual row in the mplsLpsMeConfigTable."
    INDEX {mplsOamIdMegIndex, mplsOamIdMeIndex, mplsOamIdMeMpIndex}
    ::= { mplsLpsMeConfigTable  1 }

MplsLpsMeConfigEntry ::= SEQUENCE {
    mplsLpsMeConfigGroupIndex            Unsigned32,
    mplsLpsMeConfigState                 INTEGER,
    mplsLpsMeConfigCommand               MplsLpsCommand,
    mplsLpsMeConfigHoldOff               Integer32
}

mplsLpsMeConfigGroupIndex  OBJECT-TYPE
    SYNTAX        Unsigned32
    MAX-ACCESS    not-accessible
    STATUS        current
    DESCRIPTION
        "This object holds the Protection group index wherein
         this ME included in. If this ME is not part of any protection
         group then this object contains value 0. "
    DEFVAL { 0 }
    ::= { mplsLpsMeConfigEntry 1 }

mplsLpsMeConfigState OBJECT-TYPE
    SYNTAX      INTEGER { primary(1), backup(2) }

    MAX-ACCESS  read-create
    STATUS      current
    DESCRIPTION
       "This object represents the operational state of the ME
        as either primary or backup"
    ::= { mplsLpsMeConfigEntry 2 }

mplsLpsMeConfigCommand OBJECT-TYPE
    SYNTAX      MplsLpsCommand
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION

        "Allows the initiation of an MPLS Linear protection command on
         the protection group and the ME specified by the index values.
         When read this object returns the last command written
         or noCmd if no command has been written to this ME
         since initialization. The return of the last command
         written does not imply that this command is currently in
         effect.  This request may have been preempted by a higher
         priority local or remote request.

         The value lockoutOfProtection should only be applied to the
         protection path / ME since that switch command prevents any
         of the working path / ME from switching to the protection path.
         Following the same logic, forcedSwitchWorkToProtect and
         manualSwitchWorkToProtect should only be applied to a working
         ME."
         ::= { mplsLpsMeConfigEntry 3 }

mplsLpsMeConfigHoldOff   OBJECT-TYPE
    SYNTAX     Integer32 (0..10000)
    UNITS       "milli-seconds"
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
        "The hold-off time in milliseconds. Represents the time
         between SF/SD condition detection and declaration of
         an SF/SD request to the protection switching logic.
         It is intended to avoid unnecessary switching when a lower-
         layer protection mechanism is in place.
         Can be configured in steps of 100"
    DEFVAL { 0 }
    ::= { mplsLpsMeConfigEntry 4 }

-- MPLS Linear Protection ME Status Table
-- This table provides Protection Switching ME statistics.

mplsLpsMeStatusTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF MplsLpsMeStatusEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "This table contains status information of all the ME
         that are included in MPLS Protection groups."
    ::= { mplsLpsObjects 5 }

mplsLpsMeStatusEntry OBJECT-TYPE
    SYNTAX      MplsLpsMeStatusEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "A conceptual row in the mplsLpsMeStatusTable."
    AUGMENTS { mplsLpsMeConfigEntry }
    ::= { mplsLpsMeStatusTable  1 }

MplsLpsMeStatusEntry ::= SEQUENCE {
    mplsLpsMeStatusCurrent               BITS,
    mplsLpsMeStatusSignalDegrades        Counter32,
    mplsLpsMeStatusSignalFailures        Counter32,
    mplsLpsMeStatusSwitchovers           Counter32,
    mplsLpsMeStatusLastSwitchover        TimeStamp,
    mplsLpsMeStatusSwitchoverSeconds     Counter32
}

mplsLpsMeStatusCurrent OBJECT-TYPE
    SYNTAX     BITS {
               localLockedOut(0),
               localSd(1),
               localSf(2),
               localSwitched(3),
               localWtr(4),
               remoteLockedout(5)
               remoteSd(6),
               remoteSf(7),
               remoteSwitched(8),
               remoteWtr(9)
            }
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
        "Indicates the current state of the MA.

         localLockedOut

         This bit, when it is set on a working ME or working path
         indicates that the working path is prevented from
         switching to the protection path because of local request.
         When it is set on protection / backup path, this bit
         indicates that none of the working path (in case of
         1:n) can switch to the protection path.

         localSd

         This bit implies that local signal degrade condition is
         in effect on this ME / path.

         localSf

         This bit implies that local signal failure condition is
         in effect on this ME / path.

         localSwitched

         This bit is only applicable to the working ME / path.
         It implies that the working path is currently switched
         to the protection path because of local request.

         local wtr

         This bit implies that local Wait-to-Restore state is
         in effect."

         remoteLockedOut

         This bit, when it is set on a working ME or working path
         indicates that the working path is prevented from
         switching to the protection path because of remote request.
         When it is set on protection / backup path, this bit
         indicates that none of the working path (in case of
         1:n) can switch to the protection path.

         remoteSd
         This bit implies that remote signal degrade condition is
         in effect on this ME / path.

         remoteSf

         This bit implies that remote signal failure condition is
         in effect on this ME / path.

         remoteSwitched

         This bit is only applicable to the working ME / path.
         It implies that the working path is currently switched
         to the protection path because of remote request.

         remoteWtr

         This bit implies that remote Wait-to-Restore state is
         in effect."
    ::= { mplsLpsMeStatusEntry 1 }

mplsLpsMeStatusSignalDegrades OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
        "Represents the count of Signal Degrade conditions.
         This condition occurs when the DM exceeds the
         currently configured value of the relevant instance of
         mplsLpsConfigSdThreshold."
    ::= { mplsLpsMeStatusEntry 2 }

mplsLpsMeStatusSignalFailures OBJECT-TYPE

    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
        "Represents the count of Signal failure conditions.
         This condition occurs when the OAM running on this MA
         detects the Signal Fail event."
    ::= { mplsLpsMeStatusEntry 3 }

mplsLpsMeStatusSwitchovers OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
        "Represents the count of SwitchOvers happened in this
         MA.

         When the mplsLpsMeConfigState is primary, this
         object will return the number of times this path
         has switched to the protection path.

         When the mplsLpsMeConfigState is backup, this object
         will return the number of times that any working paths
         has been switched back to the working path from this
         protection path."
    ::= { mplsLpsMeStatusEntry 4 }

mplsLpsMeStatusLastSwitchover OBJECT-TYPE
    SYNTAX     TimeStamp
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
        "This object holds the value of sysUpTime wherein the
         last switchover happened.

         When the mplsLpsMeConfigState is primary, this object
         will return the value of sysUpTime when this path last
         completed a switchover. If this path has never switched
         to the protection line, the value 0 will be returned.

         When the mplsLpsMeConfigState is backup, this object
         will return the value of sysUpTime the last time that
         a working path was switched back to the working path
         from this protection path. If no working path has ever
         switched back to the working path from this protection
         path, the value 0 will be returned."

    ::= { mplsLpsMeStatusEntry 5 }

mplsLpsMeStatusSwitchoverSeconds OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
        "The cumulative Protection Switching Duration (PSD) time
         in seconds.

         ForM a working path, this is the cumulative number of
         seconds that traffic was carried on the protection
         path.

         For the protection path, this is the cumulative number
         of seconds that the protection path has been used to
         carry any working path traffic."

    ::= { mplsLpsMeStatusEntry 6 }

mplsLpsNotificationEnable OBJECT-TYPE
    SYNTAX     BITS {
               switchover(0),
               modeMismatch(1)
            }
    MAX-ACCESS read-write
    STATUS     current

    DESCRIPTION
        "Provides the ability to enable and disable notifications
         defined in this MIB.

         switchover

         Indicates mplsLpsEventSwitchover notifications
         should be generated.

         modeMismatch

         Indicates mplsLpsEventModeMismatch notifications
         should be generated."

    DEFVAL { { } }
    ::= { mplsLpsObjects 6 }

    -- MPLS Linear Protection EVENTS

mplsLpsEventSwitchover NOTIFICATION-TYPE
    OBJECTS { mplsLpsMeStatusSwitchovers, mplsLpsMeStatusCurrent }
    STATUS  current
    DESCRIPTION
        "An mplsLpsEventSwitchover notification is sent when the
        value of an instance of mplsLpsMeStatusSwitchovers increments."
    ::= { mplsLpsNotifications 1 }

mplsLpsEventModeMismatch NOTIFICATION-TYPE
    OBJECTS { mplsLpsStatusModeMismatches }
    STATUS  current
    DESCRIPTION
        "An mplsLpsEventModeMismatch notification is sent when the
        value of an instance of mplsLpsStatusModeMismatches increments."

    ::= { mplsLpsNotifications 2 }

-- End of Notifications.

-- Module Compliance.

mplsLpsCompliances
   OBJECT IDENTIFIER ::= { mplsLpsConformance 1 }

mplsLpsGroups
   OBJECT IDENTIFIER ::= { mplsLpsConformance 2 }

-- Compliance requirement for fully compliant implementations.

mplsLpsModuleFullCompliance MODULE-COMPLIANCE

   STATUS       current
   DESCRIPTION "Compliance statement for agents that provide full
                support for MPLS-LPS-MIB. Such devices can
                provide linear protection and also be configured using
                this MIB module."

   MODULE -- This module.
   MANDATORY-GROUPS {
         mplsLpsScalarGroup,
         mplsLpsConfigTableGroup,
         mplsLpsMeTableGroup
   }

   GROUP        mplsLpsNotificationGroup
   DESCRIPTION "This group is only mandatory for those
                implementations which can efficiently implement
                the notifications contained in this group."

   ::= { mplsLpsCompliances 1 }

   -- Units of conformance.

mplsLpsScalarGroup OBJECT-GROUP
   OBJECTS {
      mplsLpsConfigGroups,
      mplsLpsNotificationEnable
   }
   STATUS  current
   DESCRIPTION
          "Collection of objects needed for MPLS Linear Protection."
   ::= { mplsLpsGroups 1 }

mplsLpsConfigTableGroup OBJECT-GROUP
   OBJECTS {
    mplsLpsConfigGroupName,
    mplsLpsConfigRowStatus,
    mplsLpsConfigMode,
    mplsLpsConfigRevertive,
    mplsLpsConfigProtectionScheme,
    mplsLpsConfigSdThreshold,
    mplsLpsConfigWaitToRestore,
    mplsLpsConfigHoldOff,
    mplsLpsConfigContinualTxInterval,
    mplsLpsConfigRapidTxInterval,
    mplsLpsConfigCreationTime,
    mplsLpsConfigStorageType,
    mplsLpsStatusReqRcv,
    mplsLpsStatusReqSent,

    mplsLpsStatusFpathPathRcv,
    mplsLpsStatusFpathPathSent,
    mplsLpsStatusModeMismatches
   }
   STATUS  current
   DESCRIPTION
          "Collection of objects needed for MPLS Linear Protection
           configuration and statistics."
   ::= { mplsLpsGroups 2 }

mplsLpsMeTableGroup OBJECT-GROUP
   OBJECTS {
    mplsLpsMeConfigState,
    mplsLpsMeConfigCommand,
    mplsLpsMeStatusCurrent,

    mplsLpsMeStatusSignalDegrades,
    mplsLpsMeStatusSignalFailures,
    mplsLpsMeStatusSwitchovers,
    mplsLpsMeStatusLastSwitchover,
    mplsLpsMeStatusSwitchoverSeconds
   }
   STATUS  current
   DESCRIPTION
          "Collection of objects needed for MPLS Linear Protection
           ME configuration and statistics."
   ::= { mplsLpsGroups 3 }

mplsLpsNotificationGroup NOTIFICATION-GROUP
   NOTIFICATIONS {
      mplsLpsEventSwitchover,
      mplsLpsEventModeMismatch
   }
   STATUS  current
   DESCRIPTION
          "Collection of objects needed to implement notifications."
   ::= { mplsLpsGroups 4 }

-- MPLS-LPS-MIB module ends
END

9.  Security Considerations

   There are a number of management objects defined in this MIB module
   with a MAX-ACCESS clause of read-write and/or read-create.  Such
   objects may be considered sensitive or vulnerable in some networks in
   a non-secure environment without proper protection can have a
   negative effect on network operations.  These are the tables and
   objects and their sensitivity/vulnerability:

   Some of the readable objects in this MIB module (i.e., objects with a
   MAX-ACCESS other than not-accessible) may be considered sensitive or
   vulnerable in some network environments.  It is thus important to
   control even GET and/or NOTIFY access to these objects and possibly
   to even encrypt the values of these objects when sending them over
   the network via SNMP.  These are the tables and objects and their
   sensitivity/vulnerability:

   SNMP versions prior to SNMPv3 did not include adequate security. Even
   if the network itself is secure (for example by using IPsec), even
   then, there is no control as to who on the secure network is allowed
   to access and GET/SET (read/change/create/delete) the objects in this
   MIB module.

   It is RECOMMENDED that implementers consider the security features as
   provided by the SNMPv3 framework (see [RFC3410], section 8),
   including full support for the SNMPv3 cryptographic mechanisms (for
   authentication and privacy).

   Further, deployment of SNMP versions prior to SNMPv3 is not
   recommended.  Instead, it is RECOMMENDED to deploy SNMPv3 and to
   enable cryptographic security.  It is then a customer/operator
   responsibility to ensure that the SNMP entity giving access to an
   instance of this MIB module is properly configured to give access to
   the objects only to those principals (users) that have legitimate
   rights to indeed GET or SET (change/create/delete) them.

10.  IANA Considerations

   IANA is requested to assign an OID for the MIB module from the "MIB
   Transmission Group - MPLS STD" sub-registry of the "Internet-standard
   MIB - Transmission Group" registry for the MPLS Linear Protection MIB
   module specified in this document.

11.  References

11.1.  Normative References

   [RFC2119]       Bradner, S., "Key words for use in RFCs to Indicate
                   Requirement Levels", BCP 14, RFC 2119, March 1997.

   [RFC2578]       McCloghrie, K., Ed., Perkins, D., Ed., and J.
                   Schoenwaelder, Ed., "Structure of Management
                   Information Version 2 (SMIv2)", STD 58, RFC 2578,
                   April 1999.

   [RFC2579]       McCloghrie, K., Ed., Perkins, D., Ed., and J.
                   Schoenwaelder, Ed., "Textual Conventions for SMIv2",
                   STD 58, RFC 2579, April 1999.

   [RFC2580]       McCloghrie, K., Perkins, D., and J. Schoenwaelder,
                   "Conformance Statements for SMIv2", STD 58, RFC 2580,
                   April 1999.

11.2.  Informative References

   [RFC3410] J. Case, R. Mundy, D. pertain, B.Stewart, "Introduction and
             Applicability Statement for Internet Standard Management
             Framework", RFC 3410, December 2002.

   [RFC3811] Nadeau, T., Ed., and J. Cucchiara, Ed., "Definitions of
             Textual Conventions (TCs) for Multiprotocol Label Switching
             (MPLS) Management", RFC 3811, June 2004.

   [RFC6378] Weingarten, Y., Osborne, E., Sprecher, N., Fulignoli,
             A., Ed., and Y. Weingarten, Ed., "MPLS-TP Linear
             Protection", October 2011.

   [MPLS-OAM-ID-STD-MIB] Sam Aldrin, M.Venkatesan, Kannan KV Sampath,
                        Thomas D. Nadeau, Sami Boutros, Ping Pan,
                        "MPLS-TP Operations, Administration, and
                        Management (OAM) Identifiers Management
                        Information Base (MIB)", ID
                        draft-ietf-mpls-tp-oam-id-mib-01, October 2012.
                        draft-ietf-mpls-tp-oam-id-mib-05, June 2014.
12. Acknowledgments

   The authors wish to thank Joan Cucchiara for her review as MIB
   Doctor, Joan's detailed comments were of great help for improving the
   quality of this document.

13. Author's Address

   Kingston Smiler Selvaraj
   IpInfusion
   India
   Email: kingstons@ipinfusion.com

   Venkatesan Mahalingam
   Dell Inc.
   350 Holger way, San Jose, CA, USA
   Email: venkat.mahalingams@gmail.com

   Vishwas Manral
   Hewlet-Packard, Inc.
   19111 Pruneridge Ave., Cupertino, CA, 95014
   Phone: 408-447-1497
   Email: vishwas.manral@hp.com

   Daniel King
   Old Dog Consulting
   UK
   Email:daniel@olddog.co.uk
   Sam Aldrin
   Huawei Technologies, co.
   2330 Central Express Way,
   Santa Clara, CA 95051, USA
   Email:  aldrin.ietf@gmail.com