MPLS-LPS-MIB DEFINITIONS ::= BEGIN

IMPORTS
   MODULE-IDENTITY, NOTIFICATION-TYPE, OBJECT-TYPE,
   Counter32, Unsigned32
      FROM SNMPv2-SMI             -- RFC 2578

   MODULE-COMPLIANCE, OBJECT-GROUP, NOTIFICATION-GROUP
      FROM SNMPv2-CONF            -- RFC 2580

   TEXTUAL-CONVENTION, RowStatus, TimeStamp, StorageType, TruthValue
      FROM SNMPv2-TC              -- RFC 2579

   SnmpAdminString
      FROM SNMP-FRAMEWORK-MIB     -- RFC 3411

   IndexIntegerNextFree
      FROM DIFFSERV-MIB           -- RFC 3289

   mplsStdMIB
       FROM MPLS-TC-STD-MIB       -- RFC 3811

   mplsOamIdMegIndex, mplsOamIdMeIndex, mplsOamIdMeMpIndex
       FROM MPLS-OAM-ID-STD-MIB;  -- RFC 7697

mplsLpsMIB MODULE-IDENTITY
   LAST-UPDATED  "201704040000Z"  -- April 4, 2017
   ORGANIZATION  "Multiprotocol Label Switching (MPLS) Working Group"
   CONTACT-INFO
      "
      Kingston Smiler Selvaraj
      IP Infusion
      RMZ Centennial
      Mahadevapura Post
      Bangalore  560048
      India
      Email: kingstonsmiler@gmail.com

      Venkatesan Mahalingam
      Dell Technologies
      5450 Great America Parkway
      Santa Clara, CA  95054
      United States of America
      Email: venkat.mahalingams@gmail.com

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

      Sam Aldrin
      Google, Inc.
      1600 Amphitheatre Parkway
      Mountain View, CA  94043
      United States of America
      Email: aldrin.ietf@gmail.com

      Jeong-dong Ryoo
      ETRI
      218 Gajeong-ro
      Yuseong-gu, Daejeon  34129
      South Korea
      Email: ryoo@etri.re.kr
      "
DESCRIPTION
   "This MIB module supports the configuration and management of
    MPLS-TP linear protection domains.

    Copyright (c) 2017 IETF Trust and the persons identified as
    authors of the code.  All rights reserved.

    Redistribution and use in source and binary forms, with or
    without modification, is permitted pursuant to, and subject to
    the license terms contained in, the Simplified BSD License
    set forth in Section 4.c of the IETF Trust's Legal Provisions
    Relating to IETF Documents
    (http://trustee.ietf.org/license-info)."

REVISION
   "201704040000Z"  -- April 4, 2017
   DESCRIPTION
      "MPLS-TP protection domain objects for
       LSP MEG End Points (MEPs)."
   ::= { mplsStdMIB 22 }

   -- 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:

       noRequest
       No Request

       doNotRevert
       Do-not-Revert

       reverseRequest
       Reverse Request

       exercise
       Exercise

       waitToRestore
       Wait-to-Restore

       manualSwitch
       Manual Switch

       signalDegrade
       Signal Degrade (SD)

       signalFail
       Signal Fail (SF)

       forcedSwitch
       Forced Switch

       lockoutOfProtection
       Lockout of Protection."
   REFERENCE
      "Section 4.2.2 of RFC 6378 and Section 8 of RFC 7271"
   SYNTAX  INTEGER {
              noRequest(0),
              doNotRevert(1),
              reverseRequest(2),
              exercise(3),
              waitToRestore(4),
              manualSwitch(5),
              signalDegrade(7),
              signalFail(10),
              forcedSwitch(12),
              lockoutOfProtection(14)
              }

MplsLpsFpathPath ::= TEXTUAL-CONVENTION
   DISPLAY-HINT "1x:"
   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.

       The value and the interpretation of the FPath field are
       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 the Path field are
       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
      "Sections 4.2.5 and 4.2.6 of RFC 6378"
   SYNTAX      OCTET STRING (SIZE (2))

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

       The command values are as follows:

       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 protection
       domain.

       lockoutOfProtection
       Prevents switching traffic to the protection path.

       forcedSwitch
       Switches traffic from the working path to the protection path.

       manualSwitchToWork
       Switches traffic from the protection path to the working path.

       manualSwitchToProtect
       Switches traffic from the working path to the protection path.

       exercise
       Used to verify the correct operation of the PSC communication
       and the integrity of the protection path.  This command is not
       applicable to the PSC mode.

       freeze
       This command freezes the protection state and is a local
       command that is not signaled to the remote node.
       This command is not applicable to the PSC mode.

       clearfreeze
       Clears the local freeze.  This command is not applicable to
       the PSC mode."
   REFERENCE
      "Sections 3.1 and 3.2 of RFC 6378 and Sections 4.3 and 6 of
       RFC 7271"
   SYNTAX   INTEGER {
               noCmd(1),
               clear(2),
               lockoutOfProtection(3),
               forcedSwitch(4),
               manualSwitchToWork(5),
               manualSwitchToProtect(6),
               exercise(7),
               freeze(8),
               clearfreeze(9)
               }

MplsLpsState ::= TEXTUAL-CONVENTION
   STATUS      current
   DESCRIPTION
      "This textual convention describes an object that stores
       the current state of the PSC state machine.  The values
       are as follows:

       normal
       Normal state.

       unavLOlocal
       Unavailable state due to local LO command.

       unavSFPlocal
       Unavailable state due to local SF-P.

       unavSDPlocal
       Unavailable state due to local SD-P.

       unavLOremote
       Unavailable state due to remote LO message.

       unavSFPremote
       Unavailable state due to remote SF-P message.

       unavSDPremote
       Unavailable state due to remote SD-P message.

       protfailSFWlocal
       Protecting Failure state due to local SF-W.

       protfailSDWlocal
       Protecting Failure state due to local SD-W.

       protfailSFWremote
       Protecting Failure state due to remote SF-W message.

       protfailSDWremote
       Protecting Failure state due to remote SD-W message.

       switadmFSlocal
       Switching Administrative state due to local FS command.
       Same as Protecting Administrative state due to local FS
       command in the PSC mode.

       switadmMSWlocal
       Switching Administrative state due to local MS-W command.

       switadmMSPlocal
       Switching Administrative state due to local MS-P command.
       Same as Protecting Administrative state due to local MS
       command in the PSC mode.

       switadmFSremote
       Switching Administrative state due to remote FS message.
       Same as Protecting Administrative state due to remote FS
       message in the PSC mode.

       switadmMSWremote
       Switching Administrative state due to remote MS-W message.

       switadmMSPremote
       Switching Administrative state due to remote MS-P message.
       Same as Protecting Administrative state due to remote MS
       message in the PSC mode.

       wtr
       Wait-to-Restore state.

       dnr
       Do-not-Revert state.

       exerLocal
       Exercise state due to local EXER command.

       exerRemote
       Exercise state due to remote EXER message."
   REFERENCE
      "Sections 3 and 11 of RFC 7271"
   SYNTAX   INTEGER {
               normal(1),
               unavLOlocal(2),
               unavSFPlocal(3),
               unavSDPlocal(4),
               unavLOremote(5),
               unavSFPremote(6),
               unavSDPremote(7),
               protfailSFWlocal(8),
               protfailSDWlocal(9),
               protfailSFWremote(10),
               protfailSDWremote(11),
               switadmFSlocal(12),
               switadmMSWlocal(13),
               switadmMSPlocal(14),
               switadmFSremote(15),
               switadmMSWremote(16),
               switadmMSPremote(17),
               wtr(18),
               dnr(19),
               exerLocal(20),
               exerRemote(21)
               }

-- Start of
-- MPLS-TP Linear Protection Switching Configuration Table.
-- This table supports the addition, configuration, and deletion
-- of MPLS-TP linear protection domains.

mplsLpsConfigDomainIndexNext OBJECT-TYPE
   SYNTAX      IndexIntegerNextFree (0..4294967295)
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "This object contains an unused value for
       mplsLpsConfigDomainIndex, or a zero to indicate that
       the number of unassigned entries has been exhausted.
       Negative values are not allowed, as they do not correspond
       to valid values of mplsLpsConfigDomainIndex."
   ::= { mplsLpsObjects 1 }

mplsLpsConfigTable OBJECT-TYPE
   SYNTAX      SEQUENCE OF MplsLpsConfigEntry
   MAX-ACCESS  not-accessible
   STATUS      current
   DESCRIPTION
      "This table lists the MPLS-TP linear protection domains that
       have been configured on the system.
       An entry is created by a network operator who wants to run
       the MPLS-TP linear protection protocol for the protection
       domain."
   ::= { mplsLpsObjects 2 }

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

MplsLpsConfigEntry ::= SEQUENCE {
   mplsLpsConfigDomainIndex         Unsigned32,
   mplsLpsConfigDomainName          SnmpAdminString,
   mplsLpsConfigMode                INTEGER,
   mplsLpsConfigProtectionType      INTEGER,
   mplsLpsConfigRevertive           INTEGER,
   mplsLpsConfigSdThreshold         Unsigned32,
   mplsLpsConfigSdBadSeconds        Unsigned32,
   mplsLpsConfigSdGoodSeconds       Unsigned32,
   mplsLpsConfigWaitToRestore       Unsigned32,
   mplsLpsConfigHoldOff             Unsigned32,
   mplsLpsConfigContinualTxInterval Unsigned32,
   mplsLpsConfigRapidTxInterval     Unsigned32,
   mplsLpsConfigCommand             MplsLpsCommand,
   mplsLpsConfigCreationTime        TimeStamp,
   mplsLpsConfigRowStatus           RowStatus,
   mplsLpsConfigStorageType         StorageType
}

mplsLpsConfigDomainIndex OBJECT-TYPE
   SYNTAX      Unsigned32 (1..4294967295)
   MAX-ACCESS  not-accessible
   STATUS      current
   DESCRIPTION
      "Index for the conceptual row identifying a protection domain.
       Operators should obtain new values for row creation in this
       table by reading mplsLpsConfigDomainIndexNext.

       When the value of this object is the same as the value of
       mplsLpsMeConfigDomain, the mplsLpsMeConfigDomain is defined
       as either the working path or the protection path for this
       protection domain."
   ::= { mplsLpsConfigEntry 1 }

mplsLpsConfigDomainName OBJECT-TYPE
   SYNTAX      SnmpAdminString (SIZE (0..32))
   MAX-ACCESS  read-create
   STATUS      current
   DESCRIPTION
      "Textual name that represents the MPLS-TP linear protection
       domain.  It facilitates easy administrative identification of
       each protection domain."
   DEFVAL {""}
   ::= { mplsLpsConfigEntry 2 }

mplsLpsConfigMode OBJECT-TYPE
   SYNTAX INTEGER {
             psc(1),
             aps(2)
             }
   MAX-ACCESS  read-create
   STATUS      current
   DESCRIPTION
      "The mode of the MPLS-TP linear protection mechanism.  This can
       be either PSC or APS, as follows:

       PSC
       The Protection State Coordination mode as described in
       RFC 6378.

       APS
       The Automatic Protection Switching mode as described in
       RFC 7271.

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

       The value of this object is not supposed to be changed
       during operation.  When the value should be changed,
       the protection processes in both LERs MUST be
       restarted with the same new value.

       If this value is changed at one LER during operation,
       the LER will generate PSC packets with a new
       Capabilities TLV value.  This will result in
       mplsLpsEventCapabilitiesMismatch notifications at both LERs."
   REFERENCE
      "Sections 9.2 and 10 of RFC 7271"
   DEFVAL {psc}
   ::= { mplsLpsConfigEntry 3 }

mplsLpsConfigProtectionType OBJECT-TYPE
   SYNTAX INTEGER {
             onePlusOneUnidirectional(1),
             oneColonOneBidirectional(2),
             onePlusOneBidirectional(3)
             }
   MAX-ACCESS  read-create
   STATUS      current
   DESCRIPTION
      "The protection architecture type of the protection domain.
       This object represents both the bridge type, which can be
       either a permanent bridge (1+1) or a selector bridge (1:1);
       and the switching scheme, which can be either unidirectional
       or bidirectional.

       1+1
       In the 1+1 protection scheme, a fully dedicated protection
       path is allocated.  Data traffic is copied and fed at the
       source to both the working path and the protection path.
       The traffic on the working path and protection path is
       transmitted simultaneously to the sink of the protection
       domain, where selection between the working path and the
       protection path is performed.

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

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

       unidirectional
       In the 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)."
   REFERENCE
      "Section 4.2.3 of RFC 6378"
   DEFVAL {oneColonOneBidirectional}
   ::= { mplsLpsConfigEntry 4 }

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 domain.  The reversion mode of the protection
       mechanism may be either revertive or non-revertive.

       nonrevertive
       In the non-revertive mode, after a service has been recovered,
       traffic will be forwarded on the protection path.

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

       This object may not be modified if the associated
       mplsLpsConfigRowStatus object is equal to active(1)."
   REFERENCE
      "Section 4.2.4 of RFC 6378"
   DEFVAL { revertive }
   ::= { mplsLpsConfigEntry 5 }

mplsLpsConfigSdThreshold OBJECT-TYPE
   SYNTAX      Unsigned32 (0..100)
   MAX-ACCESS  read-create
   STATUS      current
   DESCRIPTION
      "This object holds the threshold value of the Signal Degrade
       (SD) defect in percent.  In order to detect the SD defect,
       the MPLS-TP packet loss measurement (LM) is performed
       every second.

       If either the packet loss is negative (i.e., there are more
       packets received than transmitted) or the packet loss ratio
       (lost packets/transmitted packets) in percent is greater than
       this threshold value, a Bad Second is declared.
       Otherwise, a Good Second is declared.

       The SD defect is detected if there are
       mplsLpsConfigSdBadSeconds consecutive Bad Seconds
       and cleared if there are
       mplsLpsConfigSdGoodSeconds consecutive Good Seconds.

       This object may be modified if the associated
       mplsLpsConfigRowStatus object is equal to active(1)."
   REFERENCE
      "Clause 6.1.3.3 of ITU-T Recommendation G.8121/Y.1381 and
       Table 8-1 of ITU-T Recommendation G.8151/Y.1374"
   DEFVAL { 30 }
   ::= { mplsLpsConfigEntry 6 }

mplsLpsConfigSdBadSeconds OBJECT-TYPE
   SYNTAX      Unsigned32 (2..10)
   UNITS       "seconds"
   MAX-ACCESS  read-create
   STATUS      current
   DESCRIPTION
      "This object holds the number of Bad Seconds to detect the SD.

       If the number of consecutive Bad Seconds reaches this value,
       the SD defect is detected and used as an input to
       the protection switching process.

       This object may be modified if the associated
       mplsLpsConfigRowStatus object is equal to active(1)."
   REFERENCE
      "Clause 6.1.3.3 of ITU-T Recommendation G.8121/Y.1381 and
       Table 8-1 of ITU-T Recommendation G.8151/Y.1374"
   DEFVAL { 10 }
   ::= { mplsLpsConfigEntry 7 }

mplsLpsConfigSdGoodSeconds OBJECT-TYPE
   SYNTAX      Unsigned32 (2..10)
   UNITS       "seconds"
   MAX-ACCESS  read-create
   STATUS      current
   DESCRIPTION
      "This object holds the number of Good Seconds to declare
       the clearance of an SD defect.

       After an SD defect occurs on a path, if the number of
       consecutive Good Seconds reaches this value for the
       degraded path, the clearance of the SD defect is declared
       and used as an input to the protection switching process.

       This object may be modified if the associated
       mplsLpsConfigRowStatus object is equal to active(1)."
   REFERENCE
      "Clause 6.1.3.3 of ITU-T Recommendation G.8121/Y.1381 and
       Table 8-1 of ITU-T Recommendation G.8151/Y.1374"
   DEFVAL { 10 }
   ::= { mplsLpsConfigEntry 8 }

mplsLpsConfigWaitToRestore OBJECT-TYPE
   SYNTAX      Unsigned32 (5..12)
   UNITS       "minutes"
   MAX-ACCESS  read-create
   STATUS      current
   DESCRIPTION
      "This object holds the Wait-to-Restore timer value in minutes
       and can be configured in 1-minute intervals between 5 and
       12 minutes.

       The WTR timer is used to delay the reversion of the PSC state
       to the 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)."
   REFERENCE
      "Section 3.5 of RFC 6378"
   DEFVAL { 5 }
   ::= { mplsLpsConfigEntry 9 }

mplsLpsConfigHoldOff OBJECT-TYPE
   SYNTAX      Unsigned32 (0..100)
   UNITS       "deciseconds"
   MAX-ACCESS  read-create
   STATUS      current
   DESCRIPTION
      "The hold-off time in deciseconds.  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 intervals of 100 milliseconds.

       When a new defect or a more severe defect occurs on
       the active path (the path from which the selector selects
       the user data traffic) and this value is non-zero,
       the hold-off timer will be started.  A defect on the standby

       path (the path from which the selector does not select the
       user data traffic) does not trigger the start of the hold-off
       timer, as there is no need for a traffic switchover.

       This object may not be modified if the associated
       mplsLpsConfigRowStatus object is equal to active(1)."
   REFERENCE
      "Section 3.1 of RFC 6378"
   DEFVAL { 0 }
   ::= { mplsLpsConfigEntry 10 }

mplsLpsConfigContinualTxInterval OBJECT-TYPE
   SYNTAX      Unsigned32 (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 PSC packet to the other
       end, based on the current state.

       This object may not be modified if the associated
       mplsLpsConfigRowStatus object is equal to active(1)."
   REFERENCE
      "Section 4.1 of RFC 6378"
   DEFVAL { 5 }
   ::= { mplsLpsConfigEntry 11 }

mplsLpsConfigRapidTxInterval OBJECT-TYPE
   SYNTAX      Unsigned32 (1000..20000)
   UNITS       "microseconds"
   MAX-ACCESS  read-create
   STATUS      current
   DESCRIPTION
      "The Rapid Tx interval in microseconds.  Represents the time
       interval to send the PSC packet to the other end, when
       there is a change in the state of the linear protection domain
       due to local input.  The default value is 3.3 milliseconds
       (3300 microseconds).

       This object may not be modified if the associated
       mplsLpsConfigRowStatus object is equal to active(1)."
   REFERENCE
      "Section 4.1 of RFC 6378"
   DEFVAL { 3300 }
   ::= { mplsLpsConfigEntry 12 }

mplsLpsConfigCommand OBJECT-TYPE
   SYNTAX      MplsLpsCommand
   MAX-ACCESS  read-create
   STATUS      current
   DESCRIPTION
      "Allows the initiation of an operator command on
       the protection domain.

       When read, this object returns the last command written
       or noCmd if no command has been written 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.

       This object may be modified if the associated
       mplsLpsConfigRowStatus object is equal to active(1)."
   REFERENCE
      "Sections 3.1 and 3.2 of RFC 6378 and Sections 4.3 and 6 of
       RFC 7271"
   DEFVAL { noCmd }
   ::= { mplsLpsConfigEntry 13 }

mplsLpsConfigCreationTime OBJECT-TYPE
   SYNTAX      TimeStamp
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "The value of sysUpTime at the time the row was created."
   ::= { mplsLpsConfigEntry 14 }

mplsLpsConfigRowStatus OBJECT-TYPE
   SYNTAX      RowStatus
   MAX-ACCESS  read-create
   STATUS      current
   DESCRIPTION
      "This object represents the status of the MPLS-TP linear
       protection domain entry.  This variable is used to
       create, modify, and/or delete a row in this table."
   ::= { mplsLpsConfigEntry 15 }

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 16 }

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

mplsLpsStatusTable OBJECT-TYPE
   SYNTAX      SEQUENCE OF MplsLpsStatusEntry
   MAX-ACCESS  not-accessible
   STATUS      current
   DESCRIPTION
      "This table provides status information about MPLS-TP
       linear protection domains 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 {
   mplsLpsStatusState                 MplsLpsState,
   mplsLpsStatusReqRcv                MplsLpsReq,
   mplsLpsStatusReqSent               MplsLpsReq,
   mplsLpsStatusFpathPathRcv          MplsLpsFpathPath,
   mplsLpsStatusFpathPathSent         MplsLpsFpathPath,
   mplsLpsStatusRevertiveMismatch     TruthValue,
   mplsLpsStatusProtecTypeMismatch    TruthValue,
   mplsLpsStatusCapabilitiesMismatch  TruthValue,
   mplsLpsStatusPathConfigMismatch    TruthValue,
   mplsLpsStatusFopNoResponses        Counter32,
   mplsLpsStatusFopTimeouts           Counter32
}

mplsLpsStatusState OBJECT-TYPE
   SYNTAX      MplsLpsState
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "The current state of the PSC state machine."
   REFERENCE
      "Section 11 of RFC 7271"
   ::= { mplsLpsStatusEntry 1 }

mplsLpsStatusReqRcv OBJECT-TYPE
   SYNTAX      MplsLpsReq
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "The current value of the PSC Request field received on
       the most recent PSC packet."
   REFERENCE
      "Section 4.2 of RFC 6378"
   ::= { mplsLpsStatusEntry 2 }

mplsLpsStatusReqSent OBJECT-TYPE
   SYNTAX      MplsLpsReq
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "The current value of the PSC Request field sent on the
       most recent PSC packet."
   REFERENCE
      "Section 4.2 of RFC 6378"
   ::= { mplsLpsStatusEntry 3 }

mplsLpsStatusFpathPathRcv OBJECT-TYPE
   SYNTAX      MplsLpsFpathPath
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "The current value of the FPath and Path fields received
       on the most recent PSC packet."
   REFERENCE
      "Section 4.2 of RFC 6378"
   ::= { mplsLpsStatusEntry 4 }

mplsLpsStatusFpathPathSent OBJECT-TYPE
   SYNTAX      MplsLpsFpathPath
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "The current value of the FPath and Path fields sent
       on the most recent PSC packet."
   REFERENCE
      "Section 4.2 of RFC 6378"
   ::= { mplsLpsStatusEntry 5 }

mplsLpsStatusRevertiveMismatch OBJECT-TYPE
   SYNTAX      TruthValue
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "This object indicates a provisioning mismatch in the
       revertive mode across the protection domain endpoints.
       The value of this object becomes true when a PSC message with
       an incompatible Revertive field is received or false when a
       PSC message with a compatible Revertive field is received."
   REFERENCE
      "Section 12 of RFC 7271"
   ::= { mplsLpsStatusEntry 6 }

mplsLpsStatusProtecTypeMismatch OBJECT-TYPE
   SYNTAX      TruthValue
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "This object indicates a provisioning mismatch in the
       protection type, representing both the bridge type and the
       switching type, across the protection domain endpoints.
       The value of this object becomes true when a PSC message with
       an incompatible Protection Type (PT) field is received or
       false when a PSC message with a compatible PT field is
       received."
   REFERENCE
      "Section 12 of RFC 7271"
   ::= { mplsLpsStatusEntry 7 }

mplsLpsStatusCapabilitiesMismatch OBJECT-TYPE
   SYNTAX      TruthValue
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "This object indicates a provisioning mismatch in
       Capabilities TLVs across the protection domain endpoints.
       The value of this object becomes true when a PSC message with
       an incompatible Capabilities TLV field is received or false
       when a PSC message with a compatible Capabilities TLV field is
       received.

       The Capabilities TLV with 0xF8000000 indicates that the APS
       mode is used for the MPLS-TP linear protection mechanism,
       whereas the PSC mode either (1) uses the Capabilities TLV
       with a value of 0x0 or (2) does not use the Capabilities TLV
       because the TLV does not exist."
   REFERENCE
      "Section 12 of RFC 7271"
   ::= { mplsLpsStatusEntry 8 }

mplsLpsStatusPathConfigMismatch OBJECT-TYPE
   SYNTAX      TruthValue
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "This object indicates a provisioning mismatch in the
       protection path configuration for PSC communication across
       the protection domain endpoints.

       The value of this object becomes true when a PSC message is
       received from the working path or false when a PSC message
       is received from the protection path."
   REFERENCE
      "Section 12 of RFC 7271"
   ::= { mplsLpsStatusEntry 9 }

mplsLpsStatusFopNoResponses OBJECT-TYPE
   SYNTAX      Counter32
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "This object holds the number of occurrences of protocol
       failure due to a lack of response to a traffic
       switchover request within 50 ms.

       When there is a traffic switchover due to a local request,
       a 50 ms timer is started to detect protocol failure due to
       no response.  If there is no PSC message received with the
       same Path value as the Path value in the transmitted
       PSC message until the 50 ms timer expires, protocol failure
       due to no response occurs."
   REFERENCE
      "Section 12 of RFC 7271"
   ::= { mplsLpsStatusEntry 10 }

mplsLpsStatusFopTimeouts OBJECT-TYPE
   SYNTAX      Counter32
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "This object holds the number of occurrences of protocol
       failure due to no PSC message being received during
       at least 3.5 times the long PSC message interval.

       When no PSC message is received on the protection path during
       at least 3.5 times the long PSC message interval and there
       is no defect on the protection path, protocol failure due to
       no PSC message occurs."
   REFERENCE
      "Section 12 of RFC 7271"
   ::= { mplsLpsStatusEntry 11 }

-- MPLS-TP Linear Protection ME Association Configuration Table.
-- This table supports the addition, configuration, and deletion
-- of MPLS-TP linear protection MEs in protection domains.

mplsLpsMeConfigTable OBJECT-TYPE
   SYNTAX      SEQUENCE OF MplsLpsMeConfigEntry
   MAX-ACCESS  not-accessible
   STATUS      current
   DESCRIPTION
      "This table lists ME associations that have been configured
       in protection domains."
   ::= { mplsLpsObjects 4 }

mplsLpsMeConfigEntry OBJECT-TYPE
   SYNTAX      MplsLpsMeConfigEntry
   MAX-ACCESS  not-accessible
   STATUS      current
   DESCRIPTION
      "A conceptual row in the mplsLpsMeConfigTable.  There is
       a sparse relationship between the conceptual rows of
       this table and 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.

       An entry in this table is related to a single entry in
       the mplsOamIdMeTable.  When a point-to-point transport path
       needs to be monitored, one ME is needed for the path,
       and one entry in the mplsOamIdMeTable will be created.
       But the ME entry in the mplsOamIdMeTable may or may not
       participate in protection switching.

       If an ME participates in protection switching, an entry in
       the mplsLpsMeConfigTable MUST be created, and the objects
       in the entry indicate which protection domain this ME
       belongs to and whether this ME is for the working path or
       the protection path.

       If the ME does not participate in protection switching,
       an entry in the mplsLpsMeConfigTable does not need
       to be created."
   INDEX {mplsOamIdMegIndex, mplsOamIdMeIndex, mplsOamIdMeMpIndex}
   ::= { mplsLpsMeConfigTable 1 }

MplsLpsMeConfigEntry ::= SEQUENCE {
   mplsLpsMeConfigDomain                Unsigned32,
   mplsLpsMeConfigPath                  INTEGER
}

mplsLpsMeConfigDomain OBJECT-TYPE
   SYNTAX      Unsigned32 (0..4294967295)
   MAX-ACCESS  read-create
   STATUS      current
   DESCRIPTION
      "This object holds the mplsLpsConfigDomainIndex value for
       the protection domain in which this ME is included.
       If this ME is not part of any protection domain, then
       this object contains the value 0.

       When the value of this object is the same as the value of
       mplsLpsConfigDomainIndex, the object is defined as either
       the working path or the protection path of the
       protection domain corresponding to mplsLpsConfigDomainIndex."
   DEFVAL { 0 }
   ::= { mplsLpsMeConfigEntry 1 }

mplsLpsMeConfigPath OBJECT-TYPE
   SYNTAX      INTEGER { working(1), protection(2) }
   MAX-ACCESS  read-create
   STATUS      current
   DESCRIPTION
      "This object represents whether the ME is configured
       as the working path or the protection path."
   REFERENCE
      "Section 4.3 of RFC 6378"
   ::= { mplsLpsMeConfigEntry 2 }

--
-- 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 MEs
       that are included in MPLS-TP linear protection domains."
   ::= { 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 {
               localSelectTraffic(0),
               localSD(1),
               localSF(2)
               }
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "Indicates the current state of the ME.

       localSelectTraffic
       This bit indicates that traffic is being selected from
       this ME.

       localSD
       This bit implies that a local Signal Degrade condition is
       in effect on this ME/path.

       localSF
       This bit implies that a local Signal Fail condition is
       in effect on this ME/path."
   REFERENCE
      "Section 4.3 of RFC 6378 and Section 7 of RFC 7271"
   ::= { mplsLpsMeStatusEntry 1 }

mplsLpsMeStatusSignalDegrades OBJECT-TYPE
   SYNTAX      Counter32
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "Represents the count of Signal Degrade conditions.
       For the detection and clearance of Signal Degrade,
       see the description of mplsLpsConfigSdThreshold."
   REFERENCE
      "Section 7 of RFC 7271"
   ::= { mplsLpsMeStatusEntry 2 }

mplsLpsMeStatusSignalFailures OBJECT-TYPE
   SYNTAX      Counter32
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "Represents the count of Signal Fail conditions.
       This condition occurs when the OAM running on this ME
       detects the Signal Fail event."
   REFERENCE
      "Section 4.3 of RFC 6378"
   ::= { mplsLpsMeStatusEntry 3 }

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

       When the mplsLpsMeConfigPath value is 'working', this object
       will return the number of times that traffic has been
       switched from this working path to the protection path.

       When the mplsLpsMeConfigPath value is 'protection', this
       object will return the number of times that traffic has been
       switched back to the working path from this protection path."
   REFERENCE
      "Section 4.3 of RFC 6378"
   ::= { mplsLpsMeStatusEntry 4 }

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

       When the mplsLpsMeConfigPath value is 'working', this object
       will return the value of sysUpTime when traffic was switched
       from this path to the protection path.

       If traffic has never switched to the protection path, the
       value 0 will be returned.

       When the mplsLpsMeConfigPath value is 'protection', this
       object will return the value of sysUpTime the last time that
       traffic was switched back to the working path from this path.
       If no traffic has ever switched back to the working path from
       this protection path, the value 0 will be returned."
   REFERENCE
      "Section 4.3 of RFC 6378"
   ::= { mplsLpsMeStatusEntry 5 }

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

       For the working path, this is the cumulative number of
       seconds that traffic was selected from the protection path.

       For the protection path, this is the cumulative number
       of seconds that the working path has been used to
       select traffic."
   REFERENCE
      "Section 4.3 of RFC 6378"
   ::= { mplsLpsMeStatusEntry 6 }

mplsLpsNotificationEnable OBJECT-TYPE
   SYNTAX      BITS {
               switchover(0),
               revertiveMismatch(1),
               protecTypeMismatch(2),
               capabilitiesMismatch(3),
               pathConfigMismatch(4),
               fopNoResponse(5),
               fopTimeout(6)
               }
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      "Provides the ability to enable and disable notifications
       defined in this MIB module.

       switchover
       Indicates that mplsLpsEventSwitchover notifications should be
       generated.

       revertiveMismatch
       Indicates that mplsLpsEventRevertiveMismatch notifications
       should be generated.

       protecTypeMismatch
       Indicates that mplsLpsEventProtecTypeMismatch notifications
       should be generated.

       capabilitiesMismatch
       Indicates that mplsLpsEventCapabilitiesMismatch notifications
       should be generated.

       pathConfigMismatch
       Indicates that mplsLpsEventPathConfigMismatch notifications
       should be generated.

       fopNoResponse
       Indicates that mplsLpsEventFopNoResponse notifications should
       be generated.

       fopTimeout
       Indicates that mplsLpsEventFopTimeout notifications should be
       generated."
   REFERENCE
      "Section 12 of RFC 7271"
   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 }

mplsLpsEventRevertiveMismatch NOTIFICATION-TYPE
   OBJECTS { mplsLpsStatusRevertiveMismatch }
   STATUS  current
   DESCRIPTION
      "An mplsLpsEventRevertiveMismatch notification is sent when
       the value of mplsLpsStatusRevertiveMismatch changes."
   ::= { mplsLpsNotifications 2 }

mplsLpsEventProtecTypeMismatch NOTIFICATION-TYPE
   OBJECTS { mplsLpsStatusProtecTypeMismatch }
   STATUS  current
   DESCRIPTION
      "An mplsLpsEventProtecTypeMismatch notification is sent
       when the value of mplsLpsStatusProtecTypeMismatch changes."
   ::= { mplsLpsNotifications 3 }

mplsLpsEventCapabilitiesMismatch NOTIFICATION-TYPE
   OBJECTS { mplsLpsStatusCapabilitiesMismatch }
   STATUS  current
   DESCRIPTION
      "An mplsLpsEventCapabilitiesMismatch notification is sent
       when the value of mplsLpsStatusCapabilitiesMismatch changes."
   ::= { mplsLpsNotifications 4 }

mplsLpsEventPathConfigMismatch NOTIFICATION-TYPE
   OBJECTS { mplsLpsStatusPathConfigMismatch }
   STATUS  current
   DESCRIPTION
      "An mplsLpsEventPathConfigMismatch notification is sent
       when the value of mplsLpsStatusPathConfigMismatch changes."
   ::= { mplsLpsNotifications 5 }

mplsLpsEventFopNoResponse NOTIFICATION-TYPE
   OBJECTS { mplsLpsStatusFopNoResponses }
   STATUS  current
   DESCRIPTION
      "An mplsLpsEventFopNoResponse notification is sent when the
       value of mplsLpsStatusFopNoResponses increments."
   ::= { mplsLpsNotifications 6 }

mplsLpsEventFopTimeout NOTIFICATION-TYPE
   OBJECTS { mplsLpsStatusFopTimeouts }
   STATUS  current
   DESCRIPTION
      "An mplsLpsEventFopTimeout notification is sent when the
       value of mplsLpsStatusFopTimeouts increments."
   ::= { mplsLpsNotifications 7 }

-- 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
       the MPLS-LPS-MIB module.  Such devices can provide linear
       protection and also be configured using this MIB module."
   MODULE -- this module
   MANDATORY-GROUPS {
      mplsLpsScalarGroup,
      mplsLpsTableGroup,
      mplsLpsMeTableGroup
   }
   GROUP        mplsLpsNotificationGroup
   DESCRIPTION
      "This group is only mandatory for those
       implementations that can efficiently implement
       the notifications contained in this group."
   ::= { mplsLpsCompliances 1 }

-- Compliance requirement for read-only implementations.

mplsLpsModuleReadOnlyCompliance MODULE-COMPLIANCE
   STATUS      current
   DESCRIPTION
      "Compliance statement for agents that only provide
       read-only support for the MPLS-LPS-MIB module."
   MODULE -- this module
   MANDATORY-GROUPS {
      mplsLpsScalarGroup,
      mplsLpsTableGroup,
      mplsLpsMeTableGroup
   }
   GROUP        mplsLpsNotificationGroup
   DESCRIPTION
      "This group is only mandatory for those
       implementations that can efficiently implement
       the notifications contained in this group."

   -- mplsLpsConfigTable

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

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

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

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

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

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

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

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

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

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

   OBJECT      mplsLpsConfigRowStatus
   SYNTAX      RowStatus { active(1) }
   MIN-ACCESS  read-only
   DESCRIPTION
      "Write access is not required."

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

   -- mplsLpsMeConfigTable

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

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

-- Units of conformance.

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

mplsLpsTableGroup OBJECT-GROUP
   OBJECTS {
      mplsLpsConfigDomainName,
      mplsLpsConfigRowStatus,
      mplsLpsConfigMode,
      mplsLpsConfigProtectionType,
      mplsLpsConfigRevertive,
      mplsLpsConfigSdThreshold,
      mplsLpsConfigSdBadSeconds,
      mplsLpsConfigSdGoodSeconds,
      mplsLpsConfigWaitToRestore,
      mplsLpsConfigHoldOff,
      mplsLpsConfigContinualTxInterval,
      mplsLpsConfigRapidTxInterval,
      mplsLpsConfigCommand,
      mplsLpsConfigCreationTime,
      mplsLpsConfigStorageType,
      mplsLpsStatusState,
      mplsLpsStatusReqRcv,
      mplsLpsStatusReqSent,
      mplsLpsStatusFpathPathRcv,
      mplsLpsStatusFpathPathSent,
      mplsLpsStatusRevertiveMismatch,
      mplsLpsStatusProtecTypeMismatch,
      mplsLpsStatusCapabilitiesMismatch,
      mplsLpsStatusPathConfigMismatch,
      mplsLpsStatusFopNoResponses,
      mplsLpsStatusFopTimeouts
      }
   STATUS  current
   DESCRIPTION
      "Collection of objects needed for MPLS linear protection
       configuration and statistics."
   ::= { mplsLpsGroups 2 }

mplsLpsMeTableGroup OBJECT-GROUP
   OBJECTS {
      mplsLpsMeConfigDomain,
      mplsLpsMeConfigPath,
      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,
      mplsLpsEventRevertiveMismatch,
      mplsLpsEventProtecTypeMismatch,
      mplsLpsEventCapabilitiesMismatch,
      mplsLpsEventPathConfigMismatch,
      mplsLpsEventFopNoResponse,
      mplsLpsEventFopTimeout
      }
   STATUS  current
   DESCRIPTION
      "Collection of objects needed to implement notifications."
   ::= { mplsLpsGroups 4 }

-- MPLS-LPS-MIB module ends
END
