-- Copyright (C) 2008-2014 Super Micro Computer Inc. All Rights Reserved

-- $Id: fselps.mib,v 1.14 2012/09/07 09:52:05 siva Exp $
--    ELPS Proprietary MIB Definition

--    This file explains the proprietary MIB implemented
--    for ELPS (Enhanced Linear Protection Switching) feature.
--    This MIB provides management support for the Linear protection switching functionality described in:
--      ITU-T specification :  G.8031 / Y.1342 (Ethernet Linear Protection Switching)
--      IETF draft          :  draft-ietf-mpls-tp-linear-protection-06 (MPLS-TP Linear protection)

SUPERMICRO-ELPS-MIB DEFINITIONS ::= BEGIN

IMPORTS

    OBJECT-TYPE, MODULE-IDENTITY, enterprises, Unsigned32, Counter32, 
    NOTIFICATION-TYPE 
        FROM SNMPv2-SMI
    RowStatus, RowPointer, TruthValue, DisplayString, TEXTUAL-CONVENTION 
        FROM SNMPv2-TC
    Dot1agCfmMepId
        FROM IEEE8021-CFM-MIB 
    InterfaceIndex, InterfaceIndexOrZero 
        FROM IF-MIB;
    
fselps MODULE-IDENTITY
    LAST-UPDATED "201209050000Z"
    ORGANIZATION "Super Micro Computer Inc."
    CONTACT-INFO "support@Supermicro.com"
         DESCRIPTION
        "This MIB is a proprietary MIB for ELPS to provide Enhanced
         linear protection switching as per ITU-T G.8031/Y.1342 for vlan
	 services and draft-ietf-mpls-tp-linear-protection-02 for
	 MPLS LSP and Pseudowires."
         REVISION "201209050000Z"
         DESCRIPTION
        "This MIB is a proprietary MIB for ELPS to provide Enhanced
         linear protection switching as per ITU-T G.8031/Y.1342 for vlan
	 services and draft-ietf-mpls-tp-linear-protection-02 for
	 MPLS LSP and Pseudowires."

::= { enterprises supermicro-computer-inc(10876) super-switch(101) basic(2) 25 }

-- *****************************************************************************
--              subtrees in the ELPS MIB
-- *****************************************************************************
    fsElpsSystem           OBJECT IDENTIFIER ::= { fselps 1 }
    fsElpsContext          OBJECT IDENTIFIER ::= { fselps 2 }
    fsElpsPg               OBJECT IDENTIFIER ::= { fselps 3 }
    fsElpsPgNotifications  OBJECT IDENTIFIER ::= { fselps 4 }
    fsElpsScalars          OBJECT IDENTIFIER ::= { fselps 5 }

-- *****************************************************************************
--              start of ELPS Scalars
-- *****************************************************************************

fsElpsStatsOneIsToOneApsPktTxCount OBJECT-TYPE
   SYNTAX      Counter32
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "This object records the total number of APS/PSC packets attempted to
       be transmitted out for 1:1 protection type architecture."
   ::= { fsElpsScalars 1 }

fsElpsStatsOneIsToOneApsPktRxCount OBJECT-TYPE
   SYNTAX      Counter32
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "This object records the total number of APS/PSC packets received for
       1:1 protection type architecture."
   ::= { fsElpsScalars 2 }

fsElpsStatsOneIsToOneApsPktDiscardCount OBJECT-TYPE
   SYNTAX      Counter32
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "This object records the total number of APS/PSC packets discarded for
       1:1 protection type architecture."
   ::= { fsElpsScalars 3 }

fsElpsStatsOnePlusOneApsPktTxCount OBJECT-TYPE
   SYNTAX      Counter32
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "This object records the total number of APS/PSC packets attempted to
       be transmitted out for 1+1 protection type architecture. "
   ::= { fsElpsScalars 4 }

fsElpsStatsOnePlusOneApsPktRxCount OBJECT-TYPE
   SYNTAX      Counter32
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "This object records the total number of APS/PSC packets received for
       1+1 protection type architecture."
   ::= { fsElpsScalars 5 }

fsElpsStatsOnePlusOneApsPktDiscardCount OBJECT-TYPE
   SYNTAX      Counter32
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "This object records the total number of APS/PSC packets discarded for
       1+1 protection type architecture."
   ::= { fsElpsScalars 6 }

-- *****************************************************************************
--              Textual conventions
-- *****************************************************************************

PgId ::= TEXTUAL-CONVENTION
    DISPLAY-HINT "d"
    STATUS      current
    DESCRIPTION
        "An integer that uniquely identifies a Protection Group.
        This is an administrator defined value. Administrator can give any
        value for a protection group within the valid range. If a protection
        group with the same id is already existing for the current 
        virtual context then it will return failure."
    SYNTAX      Unsigned32 (1..4294967295)

PgType ::= TEXTUAL-CONVENTION
    STATUS      current
    DESCRIPTION
        "A value representing the type of the protection group. The value can 
        be one of the following: 
        
         individual(1) -  If protection group is to protect a single service.
         list(2)       -  If protection group is to protect a list of 
                          services.
         all(3)        -  If protection group is to protect all the services.
	"
    SYNTAX      INTEGER { individual(1), list(2), all(3) }

PgServiceType ::= TEXTUAL-CONVENTION
    STATUS      current
    DESCRIPTION
        "A value representing the type of service to be protected by this 
        protection group. The value can be one of the following: 
        
         vlan(1)      - IEEE802.1Q VLAN  
	 mplsLSP(2)   - MPLS Label Switched Path (LSP)
	 mplsPW(3)    - MPLS Pseudowire
         reserved(x)  - Reserved for future use. [x values can be 4...7]

        The protection group service type indicates the type of the transporting
        service that needs to be protected for this protection group.

        Implementations MUST ensure that PgServiceType objects and any dependent
        objects (eg: PgServiceValue objects) are consistent. An 
        inconsistentValue error MUST be generated if an attempt to change 
        PgServiceType object would, for example, lead to an undefined 
        PgServiceValue value. 
        An inconsistentValue error MUST also be generated if the value in the
        PgServiceValue object is outside the range of what is supported for the
        PgServiceType object."
    SYNTAX      INTEGER { vlan(1), mplsLSP(2), mplsPW(3) }

PgServiceValue ::= TEXTUAL-CONVENTION
    DISPLAY-HINT "d"
    STATUS      current
    DESCRIPTION
        "An integer that uniquely identifies a service.  A PgServiceValue value 
        (service identifier) is always interpreted within the context of an 
        PgServiceType value. 
        Every usage of the PgServiceValue textual convention is required to 
        specify the PgServiceType object that provides the context. 
        It is suggested that the PgServiceType object be registered/configured 
        before the object(s) that use the PgServiceValue textual convention,
        if they appear in the same logical row.

        The value of an PgServiceValue object must be consistent with the 
        value of the associated PgServiceType object. Attempts to set the 
        PgServiceValue object to a value inconsistent with the associated 
        PgServiceType must fail with an inconsistentValue error.

	For 'vlan' service type:
           - the service value indicates the vlan identifier which ranges between (1..4094)
	For 'mplsPW' service type:
           - pgService value does not identify any applicable service value.
        For 'mplsLSP' service type:
           - pgService value does not identify any applicable service value.
           "
    SYNTAX      Unsigned32 (1..4294967295)

PgServiceValueOrNone ::= TEXTUAL-CONVENTION
    DISPLAY-HINT "d"
    STATUS      current
    DESCRIPTION
        "An integer that uniquely identifies a service.  A PgServiceValue value 
        is always interpreted within the context of an PgServiceType value. 
        Every usage of the PgServiceValue textual convention is required to 
        specify the PgServiceType object that provides the context. 
        It is suggested that the PgServiceType object be logically registered 
        before the object(s) that use the PgServiceValue textual convention,
        if they appear in the same logical row.

        The value of an PgServiceValue object must be consistent with the 
        value of the associated PgServiceType object. Attempts to set the 
        PgServiceValue object to a value inconsistent with the associated 
        PgServiceType must fail with an inconsistentValue error.

        The special value of zero indicates 'no service' for the entry.

	For 'vlan' service type:
           - the service value indicates the vlan identifier which ranges 
           between (1..4094)
	For 'mplsPW' service type:
           - pgService value does not identify any applicable service value.
        For 'mplsLSP' service type:
           - pgService value does not identify any applicable service value.
        "
    SYNTAX      Unsigned32 (0 | 1..4294967295)

PgMonitorMechanismType ::= TEXTUAL-CONVENTION
    STATUS      current
    DESCRIPTION
    "A value representing the type of monitoring mechanism used to monitor 
    the services (as defined by the PgServiceType object) of the 
    protection group. The value can be one of the following: 

    cfm(1)  Using Connectivity Fault Management via OAM functions and 
            mechanisms for Ethernet based networks (ITU-T  Y.1731) for 
            monitoring the working and protection  services.

    mplsOam(2)	Using MPLS-OAM functions for MPLS LSP's and 
                Pseudowires in MPLS TP  networks for monitoring the 
                working and protection services.

    none(3)     No monitoring mechanism is used. 
                Only the manual trigger is possible.

    reserved(x) Reserved for other monitoring mechanisms for future use."

    SYNTAX      INTEGER { cfm(1), mplsOam(2), none(3) }

PgExtCmd ::= TEXTUAL-CONVENTION
    STATUS      current
    DESCRIPTION
        "This textual convention is used to represent the administrative 
         commands that can be issued to a protection group. The commands
         'freeze' and 'clearFreeze' are local (near-end) commands whereas all
         the other commands are signalled to the far-end through the APS
         protocol, when present.'manualSwitchToWorking' is applicable only 
         for non-revertive mode of operation" 
    SYNTAX      INTEGER {
                  lockOutProtection(1), 
                  forceSwitchToProtection(2), 
                  manualSwitchToProtection(3), 
                  exercise(4), 
                  clear(5), 
                  freeze(6), 
                  clearFreeze(7), 
                  manualSwitchToWorking(8) 
                }

PgLocalCondition ::= TEXTUAL-CONVENTION
    STATUS        current
    DESCRIPTION
        "This textual convention is used to represent the local conditions
         that occur for a protection group." 
    SYNTAX      INTEGER {
                  signalFailOnWorking(1), 
                  recoverSignalFailOnWorking(2),
                  signalFailOnProtection(3), 
                  recoverSignalFailOnProtection(4), 
                  waitToRestoreExpiry(5)
                }

PgFarEndRequest ::= TEXTUAL-CONVENTION
    STATUS      current
    DESCRIPTION
        "This textual convention is used to represent the far-end requests
         that are received from the peer node that are applicable to the state
         machine for the protection group. The 'waitToRestore' request is 
         applicable only for the revertive mode of operation whereas the 
         'exerciseOnProtection', 'reverseRequestOnProtection', 
         'manualSwitchToWorking'and the 'doNotRevert' requests are applicable 
         only for the non-revertive mode of operation." 
    SYNTAX      INTEGER {
                  lockOutProtection(1), 
                  signalFailOnProtection(2), 
                  forceSwitchToProtection(3), 
                  signalFailOnWorking(4), 
                  manualSwitchToProtection(5), 
                  waitToRestore(6), 
                  exerciseOnWorking(7), 
                  exerciseOnProtection(8), 
                  reverseRequestOnWorking(9), 
                  reverseRequestOnProtection(10), 
                  noRequestOnWorking(11), 
                  noRequestOnProtection(12), 
                  doNotRevert(13),
                  manualSwitchToWorking(14) 
    }

PgActiveRequest ::= TEXTUAL-CONVENTION
    STATUS           current
    DESCRIPTION
        "This textual convention is used to represent the currently active 
         request for a protection group. This includes local requests (commands 
         or conditions) and the far end requests that are received from the peer
         node through APS. At any moment, either a local request or a far end 
         request can be active for a protection group and cause a state 
         transition for the state event machine."
    SYNTAX           INTEGER {
                  localLockOutProtection(0),
                  localForcedSwitchToProtection(1),
                  localSignalFailOnWorking(2),
                  localRecoverSignalFailOnWorking(3),
                  localSignalFailOnProtection(4),
                  localRecoverSignalFailOnProtection(5),
                  localManualSwitchToProtection(6),
                  localManualSwitchToWorking(7),
                  localClear(8),
                  localExercise(9),
                  localWaitToRestoreExpiry(10),
                  farLockOutProtection(11),
                  farSignalFailOnProtection(12),
                  farForceSwitchToProtection(13),
                  farSignalFailOnWorking(14),
                  farManualSwitchToProtection(15),
                  farManualSwitchToWorking(16),
                  farWaitToRestore(17),
                  farExerciseOnWorking(18),
                  farExerciseOnProtection(19),
                  farReverseRequestOnWorking(20),
                  farReverseRequestOnProtection(21),
                  farNoRequestOnWorking(22),
                  farNoRequestOnProtection(23),
                  farDoNotRevert(24)
    }

PgSemState ::= TEXTUAL-CONVENTION
    STATUS      current
    DESCRIPTION
        "This textual convention is used to represent the various states that   
         are available in the ELPS State Event Machines for each protection
         group. The 'waitToRestore' state is applicable only for the state
         machine used in the revertive mode of operation whereas the 
         'doNotRevert', 'exerciseOnProtection', 'manualSwitchToWorking' and the 
         'reverseRequestOnProtection' states are applicable only for the state 
         machine used in the non-revertive mode of operation." 
    SYNTAX      INTEGER {
                  noRequestOnWorking(0), 
                  noRequestOnProtection(1), 
                  lockOutProtection(2), 
                  forceSwitchToProtection(3), 
                  signalFailOnWorking(4), 
                  signalFailOnProtection(5), 
                  manualSwitchToProtection(6), 
                  manualSwitchToWorking(7), 
                  waitToRestore(8), 
                  doNotRevert(9), 
                  exerciseOnWorking(10), 
                  exerciseOnProtection(11), 
                  reverseRequestOnWorking(12), 
                  reverseRequestOnProtection(13)
                }
   
PgStatus ::= TEXTUAL-CONVENTION
    STATUS      current
    DESCRIPTION
        "This textual convention is used to represent the current status of the 
         protection group.
         If the value is 'protectionDisabled(0)', then this means that the
         rowstatus of the protection group entry is not in active state.

         If the value is 'workingPathActive(1)', then this means that the 
         working entity has been chosen/selected to carry the normal traffic by
         the action of the protection switching operation. This indicates the 
         'normal state' of the protection group.

         If the value is 'protectionPathActive(2)', then this means that the
         protection entity has been chosen/selected to carry the 
         normal traffic by the action of the protection switching operation 
         due to signal failure on working or due to operator commands. 
         The pgSemState would indiate the specific reason for switching the normal
         traffic on the protection path.
         The pgSemState 'signalFailOnWorking' in protectionPathActive condition means
         a 'protecting failure state' (ie) protection switching operation 
         due to signal failure on working.
         The pgSemState 'forceSwitchToProtection'/'manualSwitchToProtection' in 
         protectionPathActive condition means a 'protecting administrative state' 
         (ie) protection switching operation is based on operator command.

         
         If the value is 'waitToRestoreState(3)', then this means that
         the protection group is waiting for the expiry of the WTR timer to 
         switch back to the working entity.  

         If the value is 'holdOffState(4)', then this means that the 
         protection group is waiting for the expiry of the HoldOff timer to
         initiate the switch process to the protection/working entity.

         If the value is 'switchingFailed(5), then this means that the switching
         from working entity to protection entity or vice-versa 
         has failed due to a failure in programming the hardware (i.e.) the 
         setup of the hardware for the newly chosen/selected active path as 
         determined by the protection switching operation has failed.

         If the value is 'unavailable(6)', then this means that the protection
	 path is unavailable - either as a result of an operator Lockout
	 command or a signal failure/signal degrade condition detected 
         on the protection path.

         If the value is 'doNotRevert(7), then this means that the protection
	 domain is recovering from a Protecting state, but the operator has
	 configured the protection domain to not automatically revert to the
	 Normal state upon recovery. The protection domain SHALL remain in
	 this state until the operator issues a command to revert to the Normal
	 state or there is a new trigger to switch to a different state."

    SYNTAX      INTEGER {
                  protectionDisabled(0),
                  workingPathActive(1), 
                  protectionPathActive(2),  
                  waitToRestoreState(3), 
                  holdOffState(4),
                  switchingFailed(5),
                  unavailable(6),
                  doNotRevert(7)
                }

-- *****************************************************************************
--              fsElpsSystem subtree
-- *****************************************************************************

fsElpsGlobalTraceOption OBJECT-TYPE
   SYNTAX        TruthValue
   MAX-ACCESS    read-write
   STATUS        current
   DESCRIPTION
      "This object is used to enable the global trace statements which are not 
       context specific. For example, 
              - Traces present in the Task Initialization. 
              - Traces present during context creation on ELPS
              - Any other trace statements before identifying the virtual 
                context in ELPS APIs."
   DEFVAL  { false }
   ::= { fsElpsSystem 1 }


fsElpsPSCChannelCode OBJECT-TYPE
    SYNTAX		Unsigned32 ( 9..32 )
    MAX-ACCESS	read-write
    STATUS		obsolete
    DESCRIPTION
	"*******************Objobsoleteobsolete****************
         This object indicates the G-ACh channel number to be used for
	 transmitting the Protection State Coordination (PSC) control
	 packet through the generic associated channel (G-ACh) for LSP/pseudowire.
	
         This channel code will be carried in the 'Channel Type' field
	 of the G-ACh header which carries the PSC packet.
          
         The modified value takes effect for the next 
         PSC transmission / reception flow"
   DEFVAL { 9 }
  ::=  {fsElpsSystem 2}

fsElpsRapidTxTime OBJECT-TYPE
   SYNTAX      Unsigned32( 1000..3300 )
   UNITS       "microseconds"
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      "This objects indicates the time interval for rapid transmission of 
       first three APS/PSC messages upon a protection state change in a protection
       group. Unit of this time duration is microseconds."
   DEFVAL { 3300 }
   ::= { fsElpsSystem 3 }


   
-- *****************************************************************************
--              fsElpsContext subtree
-- *****************************************************************************

fsElpsContextTable OBJECT-TYPE
   SYNTAX        SEQUENCE OF FsElpsContextEntry
   MAX-ACCESS    not-accessible
   STATUS        current
   DESCRIPTION
     "List of ELPS Module parameters per Virtual Context."
   ::= { fsElpsContext 1 }

fsElpsContextEntry OBJECT-TYPE
   SYNTAX       FsElpsContextEntry
   MAX-ACCESS   not-accessible
   STATUS       current
   DESCRIPTION
     "Per virtual context ELPS module parameters. An entry in this table gets 
      created as and when a virtual context is created."
   INDEX { fsElpsContextId }
   ::= { fsElpsContextTable 1 }

FsElpsContextEntry ::=
   SEQUENCE {
          fsElpsContextId
            Unsigned32,
          fsElpsContextSystemControl
            INTEGER,
          fsElpsContextModuleStatus
            INTEGER,
          fsElpsContextTraceInputString
            DisplayString,
          fsElpsContextEnableTrap
            TruthValue,
          fsElpsContextVlanGroupManager
            INTEGER
        }

fsElpsContextId OBJECT-TYPE
   SYNTAX      Unsigned32
   MAX-ACCESS  not-accessible
   STATUS      current
   DESCRIPTION
      "The context identifier is used to distinguish between the
       multiple virtual bridge contexts within a bridge."
   ::= { fsElpsContextEntry 1 }

fsElpsContextSystemControl OBJECT-TYPE
   SYNTAX      INTEGER {
                        start(1),
                        shutdown(2)
                      }
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      "The administrative system control status requested by management 
       for ELPS. 
       The value start(1) indicates that ELPS should be active in the 
       virtual context and on all ports in that virtual context. Memory
       is reserved in the form of memory pools for the context for which
       ELPS has been started.
       The value shutdown(2) indicates that ELPS should be shutdown in 
       the virtual context and on all ports in that virtual context. 
       All used memory will be released back to the memory pools and the
       memory pools will be deleted.
       By default this object is set to shutdown(2) for all virtual contexts."
   DEFVAL { shutdown }
   ::= { fsElpsContextEntry 2 }

fsElpsContextModuleStatus OBJECT-TYPE
   SYNTAX      INTEGER {
                        enable(1),
                        disable(2)
                      }
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      "The administrative module status requested by management 
       for ELPS. 
       The value enable(1) indicates that ELPS should be enabled in the 
       virtual context and on all ports in that virtual context. 
       The value disable(2) indicates that ELPS should be disabled in 
       the virtual context and on all ports in that virtual context. 
       In the disabled state, all the protection groups will be
       operationally non-functional, though configurations can still be
       done.
       By default this object is set to disable(2) for all virtual contexts."
   DEFVAL { disable }
   ::= { fsElpsContextEntry 3 }

fsElpsContextTraceInputString OBJECT-TYPE
   SYNTAX      DisplayString (SIZE(1..255))
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      "This object stores the trace option string input given by the user.
       Based on the input to this object, trace statements corresponding
       to the given options are displayed for this virtual context.
       To enable particular trace the user has to enter the corresponding 
       string(given below) assigned for that. For enabling more than one 
       traces the user has to enter the corresponding strings with SPACE 
       (delimiter) between each string.
             For example, 
             To enable the below traces:
                 - Start and Shutdown traces
                 - Management traces
                 - Control plane traces and
                 - Packet Dump traces 

             The input should be fed as follows:
             enable init-shut mgmt ctrl pkt-dump

             To disable the below traces:
                 - Start and Shutdown traces
                 - Control plane traces

             The input should be,
             disable init-shut ctrl 

             The entered input string is parsed to get the trace options.

             enable          - Enables the corresponding option.
             disable         - Disables the corresponding option.
             init-shut       - Start and Shutdown traces
             mgmt            - Management traces
             ctrl            - Control Plane traces for protocol actions
             pkt-dump        - Packet Dump traces
             resource        - Traces related to all
                               resources except buffers
             all-fail        - All Failure traces
             buffer          - Buffer allocation/
                               release traces
             critical        - ELPS Critical traces"
             
   DEFVAL  { "critical" }
   ::= { fsElpsContextEntry 4 }

fsElpsContextEnableTrap OBJECT-TYPE
   SYNTAX      TruthValue
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      "The column is used to enable or disable the transmission of 
       TRAP notification messages."
   DEFVAL { true }
   ::= { fsElpsContextEntry 5 }

fsElpsContextVlanGroupManager OBJECT-TYPE
   SYNTAX      INTEGER { mstp(1), elps(2) }
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
          "This object identifies the module that manages the grouping of
           vlans in this virtual context.

           mstp(1) - MSTP(Multiple Spanning Tree Protocol) module manages
                     the grouping of vlans. In this case, MSTI(MSTP
                     instance Id) identifies the group (or vlan list).
                     If a MSTI is mapped to a Protection Group, then that 
                     Protection group will protect the list of vlan mapped 
                     to that MSTI.
                     Administrator should make sure that MSTP module is
                     started and enabled, if this object is set to mstp(1).

           elps(2) - ELPS module manages the grouping of vlans.
                     If this value is set, In this case ELPS instance
                     identifies the group. The group will be created for the
                     fsElpsPgConfigWorkingInstanceId and fsElpsPgConfigProtectionInstanceId and 
                     the VLAN mapping will be done for the 
                     objects fsElpsPgConfigWorkingServiceValue and 
                     fsElpsPgConfigprotectionServiceValue or fsElpsPgServiceListValue 
                     based on the fsElpsPgConfigType when the fsElpsPgConfigRowStatus is Active"
   DEFVAL { mstp }
   ::= { fsElpsContextEntry 6 }
		  
-- *****************************************************************************
--              fsElpsPg subtree
-- *****************************************************************************

-- ---------------------------------------------
-- Table : Protection Group Configuration Table
-- ---------------------------------------------
fsElpsPgConfigTable OBJECT-TYPE
   SYNTAX        SEQUENCE OF FsElpsPgConfigEntry
   MAX-ACCESS    not-accessible
   STATUS        current
   DESCRIPTION
     "The protection group configuration table for creating and configuring the
      protection groups in any virtual context. Each entry in this table 
      corresponds to a protection group on a virtual context.
      
      The protection switching for MPLS LSP/PW is supported only in the
      default context and not in any other contexts."
   ::= { fsElpsPg 1 }

fsElpsPgConfigEntry OBJECT-TYPE
   SYNTAX       FsElpsPgConfigEntry
   MAX-ACCESS   not-accessible
   STATUS       current
   DESCRIPTION
     "The protection group table entry. Each entry in this table contains the 
      required attribute values which define the protection group entry." 
   INDEX { fsElpsContextId, 
           fsElpsPgConfigPgId }
   ::= { fsElpsPgConfigTable 1 }

FsElpsPgConfigEntry ::=
   SEQUENCE {
          fsElpsPgConfigPgId
            PgId,
          fsElpsPgConfigType
            PgType,
          fsElpsPgConfigServiceType
            PgServiceType,
          fsElpsPgConfigMonitorMechanism
            PgMonitorMechanismType,
          fsElpsPgConfigIngressPort
            InterfaceIndexOrZero,
          fsElpsPgConfigWorkingPort
            InterfaceIndexOrZero,
          fsElpsPgConfigProtectionPort
            InterfaceIndexOrZero,
          fsElpsPgConfigWorkingServiceValue
            PgServiceValueOrNone,
          fsElpsPgConfigProtectionServiceValue
            PgServiceValueOrNone,
          fsElpsPgConfigOperType
            INTEGER,
          fsElpsPgConfigProtType
            INTEGER,
          fsElpsPgConfigName
            DisplayString,
          fsElpsPgConfigRowStatus
            RowStatus,
          fsElpsPgConfigWorkingServicePointer
            RowPointer,
          fsElpsPgConfigWorkingReverseServicePointer
            RowPointer,
          fsElpsPgConfigProtectionServicePointer
            RowPointer,
          fsElpsPgConfigProtectionReverseServicePointer
            RowPointer,
          fsElpsPgConfigWorkingInstanceId
            Unsigned32,
          fsElpsPgConfigProtectionInstanceId
            Unsigned32,
          fsElpsPgPscVersion
            Unsigned32
        }

fsElpsPgConfigPgId OBJECT-TYPE
   SYNTAX      PgId
   MAX-ACCESS  not-accessible
   STATUS      current
   DESCRIPTION
      "The unique identifier for the protection group."
   ::= { fsElpsPgConfigEntry 1 }

fsElpsPgConfigType OBJECT-TYPE
   SYNTAX      PgType
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      "This object indicates if the protection group needs to provide 
       protection for an individual service or a list of services. 
       
       If the value is 'individual(1)', the protection is available only for 
       the single service present in fsElpsPgConfigWorkingServiceValue which is
       protected by the service present in fsElpsPgConfigProtectionServiceValue.
       
       If the value is 'list(2)', the protection is available for a list of 
       services as indicated by the fsElpsServiceListTable table. The 
       protection group entry for which this object is configured as 'list(2)' 
       MUST have at least one active entry for this protection group in the 
       fsElpsServiceListTable before this protection group entry can be made 
       active. Additionally, the 'individual' protection group service values 
       such as the fsElpsPgConfigWorkingServiceValue object and the 
       fsElpsPgConfigProtectionServiceValue object for this row will not be 
       allowed to be configured and will always return a value of '0'.

       If the value is 'all(3)', the protection is available for all the
       services that are using the working port. This option is supported 
       for 'vlan' service type. Not supported for 'mplsLSP' and 'mplsPW' 
       service types."

   DEFVAL  { individual }
   ::= { fsElpsPgConfigEntry 2 }

fsElpsPgConfigServiceType OBJECT-TYPE
   SYNTAX      PgServiceType
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      "This object indicates the type of transport service for which this 
       protection group will provide protection. 
       The following service types are supported
	            - vlan(1)
		    - mplsLSP(2)
		    - mplsPW(3)"
   DEFVAL  { vlan }
   ::= { fsElpsPgConfigEntry 3 }

fsElpsPgConfigMonitorMechanism OBJECT-TYPE
   SYNTAX      PgMonitorMechanismType
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      "This object indicates the type of monitoring mechanism used for 
       detecting faults for this protection group entry. 
       If the value of this object is not 'none' for any fsElpsPgConfigEntry, then 
       the fsElpsPgCfmTable table MUST have an active entry for this 
       fsElpsPgConfigPgId, else the fsElpsPgConfigRowStatus for this entry 
       cannot be made active."
   DEFVAL  { cfm }
   ::= { fsElpsPgConfigEntry 4 }

fsElpsPgConfigIngressPort OBJECT-TYPE
   SYNTAX      InterfaceIndexOrZero
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      "This object indicates the port through which the traffic ingresses for  
       the working and protection transport services into the protection 
       domain. This port defines the boundary of the protection domain on both 
       the end bridges. This object is optional and can be configured to a 
       value of '0' if the service protection is to be provided when the 
       traffic egresses out of this bridge from either the working or 
       protection ports instead of while ingressing into this bridge." 
   ::= { fsElpsPgConfigEntry 5 }

fsElpsPgConfigWorkingPort OBJECT-TYPE
   SYNTAX      InterfaceIndexOrZero
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      "This object indicates the working port which carries the normal traffic 
       in the absence of any failure.
       For 'vlan' service type, this object is mandatory and should be configured with a 
       non-zero value.
       For other service types, this object is optional and can be configured as 0. "
   ::= { fsElpsPgConfigEntry 6 }

fsElpsPgConfigProtectionPort OBJECT-TYPE
   SYNTAX      InterfaceIndexOrZero
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      "This object indicates the protection port which carries the normal 
       traffic upon failure of the working transport entity.
       For 'vlan' service type, this object is mandatory and should be configured with a 
       non-zero value.
       For other service types, this object is optional and can be configured as 0." 
   ::= { fsElpsPgConfigEntry 7 }

fsElpsPgConfigWorkingServiceValue OBJECT-TYPE
   SYNTAX      PgServiceValueOrNone
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      "This object indicates the service identifier of the working service 
       which carries the normal traffic in the absence of any failure. 
      
       This object is applicable only for 'vlan' type of services.

       This object is applicable only when the fsElpsPgConfigType object is 
       configured as 'individual' type. When the fsElpsPgConfigType object is 
       configured as 'list', this object will return a value of '0' and any 
       attempt to configure this object to any value will throw an error."
   ::= { fsElpsPgConfigEntry 8 }


fsElpsPgConfigProtectionServiceValue OBJECT-TYPE
   SYNTAX      PgServiceValueOrNone
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      
      "This object indicates the service identifier of the protection service  
       which carries the normal traffic upon failure of the working entity. 
      
       This object is applicable only for 'vlan' type of services.

       This object is applicable only when the fsElpsPgConfigType object is 
       configured as 'individual' type. When the fsElpsPgConfigType object is 
       configured as 'list', this object will return a value of '0' and any 
       attempt to configure this object to any value will throw an error."
   ::= { fsElpsPgConfigEntry 9 }


fsElpsPgConfigOperType OBJECT-TYPE
   SYNTAX      INTEGER {
                 revertive(1), 
                 nonRevertive(2)
               }
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      "This object is used to indicate the operation type/mode of the 
       protection group entry. If the value is set to 'revertive(1)', then 
       normal traffic will be shifted from the protection entity back to the 
       working entity upon recovery of the working entity from the fault. If 
       the value is set to 'nonRevertive(2)', then the normal traffic will not 
       be shifted from the protection entity back to the working entity even 
       after the recovery of the working entity from the fault."
   DEFVAL  { revertive }
   ::= { fsElpsPgConfigEntry 10 }

fsElpsPgConfigProtType OBJECT-TYPE
   SYNTAX      INTEGER {
                 oneIsToOneBidirectionalWithAps(1),
                 onePlusOneBidirectionalWithAps(2),
                 onePlusOneUnidirectionalWithAps(3),
                 onePlusOneUnidirectionalWithOutAps(4)
               }
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      "This object is used to indicate the protection architecture type of the
       protection group entry. Protection architecture types supported are 
       given below: 
       - 'oneIsToOneBidirectionalWithAps(1)', then the selector bridge will be
         established at the time of protection switching and its based 
         on global priority logic. APS communication channel is required.
       - 'onePlusOneBidirectionalWithAps(2)', then the permanent bridge will be
         established at the source and selector bridge at the sink. Protection 
         switching is based on global priority logic. APS communication channel
         is required.
       - 'onePlusOneUnidirectionalWithAps(3)', then the permanent bridge will
         be established at the source and selector bridge at the sink. 
         Protection switching is based on local priority logic and Far-end
         requests will not be considered for switching the traffic. APS 
         communication channel is present.
       - 'onePlusOneUnidirectionalWithoutAps(4)', then protection switching 
         is based on local priority logic only. APS communication channel 
         is not present."
   DEFVAL  { oneIsToOneBidirectionalWithAps }
   ::= { fsElpsPgConfigEntry 11 }

fsElpsPgConfigName OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (0..32))
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
       "The name given to the protection group entry. This object is used to 
        refer the protection group in addition to the protection group Id. The 
        default value for this object will be the null string. This object can 
        be configured even when the row status of this table entry is active."
    ::= {fsElpsPgConfigEntry 12 }

fsElpsPgConfigRowStatus OBJECT-TYPE
   SYNTAX      RowStatus
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      "This object indicates the status of this row/entry.
       Setting this object to Active is not allowed in the following 
       scenarios: 
         - If the value of the column fsElpsPgConfigMonitorMechanism is set 
           to 'cfm/mplsOam' and there is no active entry corresponding to this 
           protection group present in the fsElpsPgCfmTable table. 
         - If the value of the column fsElpsPgConfigType is set to 'list' and 
           there is no active entry corresponding to this protection group in 
           the fsElpsPgServiceListTable table or fsElpsPgServiceListPointerTable.
         - If the value of the column fsElpsPgConfigType is set to 'list' and 
           a valid non-zero value is set in the 
           fsElpsPgConfigWorkingServiceValue and 
           fsElpsPgConfigProtectionServiceValue columns of this table. 
       Setting the rowstatus value 'destroy' to this object will delete the 
       related entries present in fsElpsPgCfmTable, 
       fsElpsPgServiceListTable / fsElpsPgServiceListPointerTable.
       The writable columns in any row of this table cannot be changed while 
       the row is active."
   ::= { fsElpsPgConfigEntry 13 }

fsElpsPgConfigWorkingServicePointer OBJECT-TYPE
   SYNTAX      RowPointer
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      "This object is applicable for 'mplsLSP' and 'mplsPw' service types.
       
       When fsElpsPgConfigServiceType is 'mplsLSP' :
        - This object should be configured with the object identifier 
          of the row in the MPLS tunnel table corresponding to 
          the LSP being protected (working LSP).
          
        - In case of co-routed MPLS LSP, this object indicates the co-routed 
          (forward and reverse) path of the LSP.
          In case of associated MPLS LSP, this object indicates the forward path of
          the LSP being protected.

       When fsElpsPgConfigServiceType is 'mplsPw' :
        - This object should be configured with the object identifier 
          of the row in the MPLS Pseudo wire table corresponding to 
          the PW being protected (working PW).
          

       This object is applicable only when the fsElpsPgConfigType object is 
       configured as 'individual' type. When the fsElpsPgConfigType object is 
       configured as 'list', this object will return a value of '0' and any 
       attempt to configure this object to any value will throw an error."
   ::= { fsElpsPgConfigEntry 14 }

fsElpsPgConfigWorkingReverseServicePointer OBJECT-TYPE
   SYNTAX      RowPointer
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
     "This object is applicable for 'mplsLSP' service type only.
       
       When fsElpsPgConfigServiceType is 'mplsLSP' :
        - Configuring this object is optional.
        - This object should be configured with the object identifier 
          of the row in the MPLS tunnel table corresponding to the reverse path of
          the LSP being protected (reverse path of working LSP).
        - This configuration is required only in case of associated MPLS LSP.
        - In case of co-routed mplsLSP, this object is not applicable.
 
       This object is applicable only when the fsElpsPgConfigType object is 
       configured as 'individual' type. When the fsElpsPgConfigType object is 
       configured as 'list', this object will return a value of '0' and any 
       attempt to configure this object to any value will throw an error."
   ::= { fsElpsPgConfigEntry 15 }

fsElpsPgConfigProtectionServicePointer OBJECT-TYPE
   SYNTAX      RowPointer
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
       
      "This object is applicable for 'mplsLSP' and 'mplsPw' service types.
       
       When fsElpsPgConfigServiceType is 'mplsLSP' :
        - This object should be configured with the object identifier 
          of the row in the MPLS tunnel table corresponding to 
          the protection instance of the working LSP (ie. protection LSP).
          
        - In case of co-routed MPLS LSP, this object indicates the co-routed 
          (forward and reverse) path of the protection LSP.
          In case of associated MPLS LSP, this object indicates the forward path of
          the protection LSP.

       When fsElpsPgConfigServiceType is 'mplsPw' :
        - This object should be configured with the object identifier 
          of the row in the MPLS Pseudo wire table corresponding to 
          the protection instance of the working PW (ie. protection PW).

       This object is applicable only when the fsElpsPgConfigType object is 
       configured as 'individual' type. When the fsElpsPgConfigType object is 
       configured as 'list', this object will return a value of '0' and any 
       attempt to configure this object to any value will throw an error."
   ::= { fsElpsPgConfigEntry 16 }

fsElpsPgConfigProtectionReverseServicePointer OBJECT-TYPE
   SYNTAX      RowPointer
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
     "This object is applicable for 'mplsLSP' service type only.
       
       When fsElpsPgConfigServiceType is 'mplsLSP' :
        - Configuring this object is optional.
        - This object should be configured with the object identifier 
          of the row in the MPLS tunnel table, for the reverse path of
          the protecting LSP, corresponding to the working LSP.
        - This configuration is required only in case of associated MPLS LSP configured
          to protect the working LSP.
        - In case of co-routed mpls LSP, this object is not applicable.

       This object is applicable only when the fsElpsPgConfigType object is 
       configured as 'individual' type. When the fsElpsPgConfigType object is 
       configured as 'list', this object will return a value of '0' and any 
       attempt to configure this object to any value will throw an error."
   ::= { fsElpsPgConfigEntry 17 }

fsElpsPgConfigWorkingInstanceId OBJECT-TYPE
    SYNTAX      Unsigned32 (0..64)
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
      "This is the working instance which contains the VLAN to be protected 
       in this protection group.  

       If fsElpsContextVlanGroupManager is 'mstp' then vlan group Id should be 
       from one of the MSTIs created in MSTP.

       If fsElpsContextVlanGroupManager is 'elps' then group Id will be created 
       by ELPS when fsElpsPgConfigRowStatus is active"

   DEFVAL { 0 }
   ::= { fsElpsPgConfigEntry 18 }

fsElpsPgConfigProtectionInstanceId OBJECT-TYPE
    SYNTAX      Unsigned32 (0..64)
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
      "This is the protection instance which contains the protection VLANs 
       in this protection group.  

       If fsElpsContextVlanGroupManager is 'mstp' then vlan group Id should be 
       from one of the MSTIs created in MSTP.

       If fsElpsContextVlanGroupManager is 'elps' then group Id will be created 
       by ELPS when fsElpsPgConfigRowStatus is active"

   DEFVAL { 0 }
   ::= { fsElpsPgConfigEntry 19 }

fsElpsPgPscVersion OBJECT-TYPE
    SYNTAX      Unsigned32 ( 0..1 )
    MAX-ACCESS  read-write
    STATUS              current
    DESCRIPTION
        "This object indicates the PSC header version number to be used for
         transmitting the Protection State Coordination (PSC) control
         packet through the generic associated channel (G-ACh) for LSP/pseudowire.

         Also determines the PSC state machine behavior, If the value is set to 0,
         PSC protocol behavior will be according to draft-ietf-mpls-tp-linear-protection-06.
         If the value is set to 1 the PSC protocol behaviour will be according to RFC-6378."
   DEFVAL { 0 }
   ::=  { fsElpsPgConfigEntry 20 }

-- --------------------------------------------
-- Table : Protection Group Command Table
-- --------------------------------------------
fsElpsPgCmdTable OBJECT-TYPE
   SYNTAX        SEQUENCE OF FsElpsPgCmdEntry
   MAX-ACCESS    not-accessible
   STATUS        current
   DESCRIPTION
     "The protection group command table. Each entry in this table 
      corresponds to a configured protection group on a virtual context in this
      bridge. Entry in this table is implicitly created when an entry for 
      protection group is created in the fsElpsPgConfigTable table. 
      This table contains commands and parameters that are configured for a 
      protection group entry which is active and status objects providing the
      local and far end requests and states."
   ::= { fsElpsPg 2 }

fsElpsPgCmdEntry OBJECT-TYPE
   SYNTAX       FsElpsPgCmdEntry
   MAX-ACCESS   not-accessible
   STATUS       current
   DESCRIPTION
     "The protection group command table entry. Each entry in this table 
      contains objects that operate on the state event machine for the 
      protection group and can be configured when the protection group entry 
      is active. 
      
      There are 3 types of triggers that influence the operation, and
      therefore, the currently operational state for each protection group -:
      (a) External commands that can be issued by administrator on the local 
          (self/near-end) bridge
      (b) Signalling conditions that occur on the local bridge
      (c) Requests from the far-end bridge carried received through the APS 
          PDUs
      The result of whether any of the above triggers are accepted and applied 
      to the state machine for the protection group or not, is indicated by
      the corresponding 'status' objects in each entry in this table. 
      The last applicable and currently operational trigger (whether local or 
      far end) that was accepted by the state machine is indicated by the 
      'ActiveRequest' object for this entry and the current state is indicated
      by the 'SemState' object." 
   INDEX { fsElpsContextId, 
           fsElpsPgConfigPgId }
   ::= { fsElpsPgCmdTable 1 }

FsElpsPgCmdEntry ::=
   SEQUENCE {
          fsElpsPgCmdHoTime
            Unsigned32,
          fsElpsPgCmdWTR
            Unsigned32,
          fsElpsPgCmdExtCmd
            PgExtCmd,
          fsElpsPgCmdExtCmdStatus
            INTEGER,
          fsElpsPgCmdLocalCondition
            PgLocalCondition,
          fsElpsPgCmdLocalConditionStatus
            INTEGER,
          fsElpsPgCmdFarEndRequest
            PgFarEndRequest, 
          fsElpsPgCmdFarEndRequestStatus
            INTEGER, 
          fsElpsPgCmdActiveRequest
            PgActiveRequest, 
          fsElpsPgCmdSemState
            PgSemState,
          fsElpsPgCmdPgStatus
            PgStatus,
          fsElpsPgCmdApsPeriodicTime
            Unsigned32
   }

fsElpsPgCmdHoTime OBJECT-TYPE
   SYNTAX      Unsigned32( 0..1000 )
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      "This column is used to configure the hold-off timer.  The purpose is 
       to allow a server layer protection mechanism to have a chance to fix  
       the problem before switching at the client layer, or to allow an 
       upstream protected domain to switch before a downstream domain. 
       The hold-off timer has a period from 0 to 100 seconds, configurable in  
       steps (units) of 100ms.  Each configured value in this object represents
       a multiple of 100ms. Eg: 1 = 100ms, 2 = 200ms and so on." 
   DEFVAL  { 0 }
   ::= { fsElpsPgCmdEntry 1 }

fsElpsPgCmdWTR OBJECT-TYPE
   SYNTAX      Unsigned32 ( 1..1000 )
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      "This column is used to configure the wait-to-restore timer for the  
       protection group. The timer has a period from 1 to 1000 minutes, 
       configurable in steps of 1 minute.  

       This object is applicable only if this protection group is operating in 
       the revertive mode of operation. In the non-revertive mode of operation, 
       any value configured for this object will not be used."
   DEFVAL  { 5 }
   ::= { fsElpsPgCmdEntry 2 }

fsElpsPgCmdExtCmd OBJECT-TYPE
   SYNTAX      PgExtCmd
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      "This column is used by the operator to request that the protection group
       state machine perform some administrative operation.  The operator 
       requests a command by writing the command value to this column.  The 
       command may or may not affect the operation of the state machine based 
       on the current state and the ELPS protocol indicates the result of this 
       command on the state machine by setting the value of the 
       fsElpsPgCmdExtCmdStatus column of this table. If the command is not 
       accepted, then the fsElpsPgCmdActiveRequest indicates the last accepted 
       and currently operating request for this protection group. The 
       configuration of this object is allowed and meaningful only when the 
       the protection group entry for this fsElpsPgConfigPgId is active. 
       
       The default value for this object will be 'clear' command indicating 
       that no command has been issued.
       
       The 'freeze' command is volatile and will not be restored after a 
       configuration save-and-restore operation."
   DEFVAL { clear }
   ::= { fsElpsPgCmdEntry 3 }

fsElpsPgCmdExtCmdStatus OBJECT-TYPE
   SYNTAX      INTEGER {
                 accepted(1), 
                 overruled(2), 
                 notApplicable(3),
                 rejected(4) 
               }
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "This column indicates the status of the most recent administrative 
       command issued to this protection group through the fsElpsPgCmdExtCmd 
       object."
   ::= { fsElpsPgCmdEntry 4 }

fsElpsPgCmdLocalCondition OBJECT-TYPE
   SYNTAX      PgLocalCondition
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "This column indicates the most recent local condition that had occurred  
       for this protection group."   
   ::= { fsElpsPgCmdEntry 5 }

fsElpsPgCmdLocalConditionStatus OBJECT-TYPE
   SYNTAX      INTEGER {
                 accepted(1), 
                 overruled(2), 
                 notApplicable(3),
                 rejected(4) 
               }
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "This column indicates the status of the most recent local condition 
       as indicated by the fsElpsPgCmdLocalCondition that occured for this 
       protection group."
   ::= { fsElpsPgCmdEntry 6 }

fsElpsPgCmdFarEndRequest OBJECT-TYPE
   SYNTAX      PgFarEndRequest
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "This column indicates the most recent far-end request received for this 
       protection group through the reception of APS PDU."
   ::= { fsElpsPgCmdEntry 7 }

fsElpsPgCmdFarEndRequestStatus OBJECT-TYPE
   SYNTAX      INTEGER {
                 accepted(1), 
                 overruled(2), 
                 notApplicable(3), 
                 rejected(4) 
               }
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "This column indicates the status of the most recent far-end request
       as indicated by the fsElpsPgCmdFarEndRequest object received for this 
       protection group."
   ::= { fsElpsPgCmdEntry 8 }

fsElpsPgCmdActiveRequest OBJECT-TYPE
   SYNTAX      PgActiveRequest
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "This column indicates the last local request (command or condition) or 
       far end request (received for this protection group through the 
       reception of APS PDU) that was accepted and applied to this 
       protection group. The value indicated by this object is influenced by
       either one of the fsElpsPgCmdExtCmd, fsElpsPgCmdLocalCondition or 
       fsElpsPgCmdFarEndRequest objects when these are accepted by the 
       operation of the state machine for this protection group."
   ::= { fsElpsPgCmdEntry 9 }

fsElpsPgCmdSemState OBJECT-TYPE
   SYNTAX      PgSemState
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "This column shows the current state of the State Event Machine    
       for this protection group."
   ::= { fsElpsPgCmdEntry 10 }

fsElpsPgCmdPgStatus OBJECT-TYPE
   SYNTAX      PgStatus
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "The object is to indicate the status of the protection group."
   ::= { fsElpsPgCmdEntry 11 }

fsElpsPgCmdApsPeriodicTime OBJECT-TYPE
   SYNTAX      Unsigned32 ( 1..1000 )
   UNITS       "seconds"
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      "This column is used to configure the time interval for the periodic  
       transmission of 
       - Protection Switching PDUs, namely, APS PDU for 'vlan' service 
       - Protection State Coordination Protocol messages, namely, PSC packet 
       for 'mplsLSP' and 'mplsPW' services. 
       
       Periodic time interval is not valid for the PDU transmission happened due to
       SEM state change.
       The time interval has to be configured in seconds."
   DEFVAL  { 5 }
   ::= { fsElpsPgCmdEntry 12 }

-- --------------------------------------------
-- Table : Protection Group CFM Table
-- --------------------------------------------
fsElpsPgCfmTable OBJECT-TYPE
   SYNTAX        SEQUENCE OF FsElpsPgCfmEntry
   MAX-ACCESS    not-accessible
   STATUS        current
   DESCRIPTION
     "This table contains the configurations related to the monitoring entities
      for each protection group as denoted by the fsElpsPgConfigPgId object. 
      Currently, fault monitoring using the Y.1731 mechanism and BFD are supported. 
      The creation of an entry in this table does not create the 
      Y.1731 / MPLS-OAM Monitoring entities. These Monitoring entities have to be created 
      explicitly in ECFM or in MPLS-OAM accordingly." 
   ::= { fsElpsPg 3 }

fsElpsPgCfmEntry OBJECT-TYPE
   SYNTAX       FsElpsPgCfmEntry
   MAX-ACCESS   not-accessible
   STATUS       current
   DESCRIPTION
     "The entry indicating the monitoring entities for each protection group." 
   INDEX { fsElpsContextId, 
           fsElpsPgConfigPgId }
   ::= { fsElpsPgCfmTable 1 }

FsElpsPgCfmEntry ::=
   SEQUENCE {
          fsElpsPgCfmWorkingMEG
            Unsigned32,
          fsElpsPgCfmWorkingME
            Unsigned32,
          fsElpsPgCfmWorkingMEP
            Dot1agCfmMepId,
          fsElpsPgCfmProtectionMEG
            Unsigned32,
          fsElpsPgCfmProtectionME
            Unsigned32,
          fsElpsPgCfmProtectionMEP
            Dot1agCfmMepId,
          fsElpsPgCfmRowStatus
            RowStatus,
          fsElpsPgCfmWorkingReverseMEG
            Unsigned32,
          fsElpsPgCfmWorkingReverseME
            Unsigned32,
          fsElpsPgCfmWorkingReverseMEP
            Dot1agCfmMepId,
          fsElpsPgCfmProtectionReverseMEG
            Unsigned32,
          fsElpsPgCfmProtectionReverseME
            Unsigned32,
          fsElpsPgCfmProtectionReverseMEP
            Dot1agCfmMepId
        }

fsElpsPgCfmWorkingMEG OBJECT-TYPE
   SYNTAX      Unsigned32
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      "This refers to the Maintenance Entity Group (MEG) that the working 
       entity of the protection group denoted by fsElpsPgConfigPgId 
       corresponds to.
       "
   ::= { fsElpsPgCfmEntry 1 }

fsElpsPgCfmWorkingME OBJECT-TYPE
   SYNTAX      Unsigned32
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      "This refers to the Maintenance Entity (ME) that the working entity of 
       the protection group denoted by fsElpsPgConfigPgId corresponds to.
       "
   ::= { fsElpsPgCfmEntry 2 }

fsElpsPgCfmWorkingMEP OBJECT-TYPE
   SYNTAX      Dot1agCfmMepId
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      "This refers to the Maintenance Entity Group (MEG) End Point (MEP) 
       that monitors the working entity of the protection group denoted by the 
       fsElpsPgConfigPgId value.
       "
   ::= { fsElpsPgCfmEntry 3 }

fsElpsPgCfmProtectionMEG OBJECT-TYPE
   SYNTAX      Unsigned32
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      "This refers to the Maintenance Entity Group (MEG) that the protection 
       entity of the protection group denoted by fsElpsPgConfigPgId 
       corresponds to.
       "
   ::= { fsElpsPgCfmEntry 4 }

fsElpsPgCfmProtectionME OBJECT-TYPE
   SYNTAX      Unsigned32
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      "This refers to the Maintenance Entity (ME) that the protection entity of
       the protection group denoted by fsElpsPgConfigPgId corresponds to.
       "
   ::= { fsElpsPgCfmEntry 5 }

fsElpsPgCfmProtectionMEP OBJECT-TYPE
   SYNTAX      Dot1agCfmMepId
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      "This refers to the Maintenance Entity Group (MEG) End Point (MEP) that 
       monitors the protection entity of the protection group denoted by the 
       fsElpsPgConfigPgId value.
       "
   ::= { fsElpsPgCfmEntry 6 }

fsElpsPgCfmRowStatus OBJECT-TYPE
   SYNTAX      RowStatus
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      "The status of this row.
       The writable columns in any row of this table cannot be changed while 
       the row is active. Furthermore, creation of any entry or modification to
       any entry in this table is allowed only when the corresponding entry 
       present in the fsElpsPgConfigTable is not active."
   ::= { fsElpsPgCfmEntry 7 }

fsElpsPgCfmWorkingReverseMEG OBJECT-TYPE
   SYNTAX      Unsigned32
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      "This object is applicable only when the fsElpsPgConfigServiceType is
      'mplsLSP'. 
      In case of associated mplsLSP, this object refers to 
      the Maintenance Entity Group (MEG) for the reverse working entity.
      In case of co-routed mplsLSP, this object is not valid"
   ::= { fsElpsPgCfmEntry 8 }

fsElpsPgCfmWorkingReverseME OBJECT-TYPE
   SYNTAX      Unsigned32
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      "This object is applicable only when the fsElpsPgConfigServiceType is
       'mplsLSP'.
       In case of associated mplsLSP, this object refers to 
       the Maintenance Entity (ME) for the reverse working entity. 
       In case of co-routed mplsLSP, this object is not valid."
   ::= { fsElpsPgCfmEntry 9 }

fsElpsPgCfmWorkingReverseMEP OBJECT-TYPE
   SYNTAX      Dot1agCfmMepId
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      "This object is applicable only when the fsElpsPgConfigServiceType is
       'mplsLSP'. 
       In case of associated mplsLSP, this object refers to 
       the Maintenance Entity Group(MEG) End Point (MEP) that monitors the 
       reverse working entity of the protection group.
       In case of co-routed mplsLSP, this object is not valid." 
   ::= { fsElpsPgCfmEntry 10 }

fsElpsPgCfmProtectionReverseMEG OBJECT-TYPE
   SYNTAX      Unsigned32
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      "This object is applicable only when the fsElpsPgConfigServiceType is
       'mplsLSP'. In case of associated mplsLSP, this object refers to 
       the Maintenance Entity Group (MEG) for the reverse protection entity 
       of the protection group.
       In case of co-routed mplsLSP, this object is not valid."
   ::= { fsElpsPgCfmEntry 11 }

fsElpsPgCfmProtectionReverseME OBJECT-TYPE
   SYNTAX      Unsigned32
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      "This object is applicable only when the fsElpsPgConfigServiceType is
       'mplsLSP'. In case of associated mplsLSP, this object refers to
       the Maintenance Entity (ME) for the reverse protection entity of the 
       protection group.
       In case of co-routed mplsLSP, this object is not valid." 
   ::= { fsElpsPgCfmEntry 12 }

fsElpsPgCfmProtectionReverseMEP OBJECT-TYPE
   SYNTAX      Dot1agCfmMepId
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      "This object is applicable only when the fsElpsPgConfigServiceType is
       'mplsLSP'. In case of associated mplsLSP, this object refers to the 
       Maintenance Entity Group (MEG) End Point (MEP) that monitors the reverse 
       protection entity of the protection group.
       In case of co-routed mplsLSP, this object is not valid."
   ::= { fsElpsPgCfmEntry 13 }

-- --------------------------------------------
-- Table : Protection Group Service List Table
-- --------------------------------------------
fsElpsPgServiceListTable OBJECT-TYPE
   SYNTAX        SEQUENCE OF FsElpsPgServiceListEntry
   MAX-ACCESS    not-accessible
   STATUS        current
   DESCRIPTION
     "The protection group service list table contains the list of services   
      that needs to be protected for the corresponding protection group entry. 
      This table needs to be populated only for those protection groups which 
      have the value of the object fsElpsPgConfigType as 'list'. Protecting 
      a list of services is only possible when the same set of services (and
      therefore service identifiers) are used for both the working and 
      protection entities.
 
      This table is applicable for service type 'vlan' only.
     "
   ::= { fsElpsPg 4 }

fsElpsPgServiceListEntry OBJECT-TYPE
   SYNTAX       FsElpsPgServiceListEntry
   MAX-ACCESS   not-accessible
   STATUS       current
   DESCRIPTION
     "The protection group service list table entry. Creation of this entry is
      allowed only if the value of the object fsElpsPgConfigType is configured 
      as 'list'."
   INDEX { fsElpsContextId, 
           fsElpsPgConfigPgId, 
           fsElpsPgServiceListValue }
   ::= { fsElpsPgServiceListTable 1 }

FsElpsPgServiceListEntry ::=
   SEQUENCE {
          fsElpsPgServiceListValue
            PgServiceValue,
          fsElpsPgServiceListRowStatus
            RowStatus
        }

fsElpsPgServiceListValue OBJECT-TYPE
   SYNTAX      PgServiceValue
   MAX-ACCESS  not-accessible
   STATUS      current
   DESCRIPTION
      "This object indicates the services which needs to be protected
       for this protection group and which will have its traffic shifted from
       the port indicated by fsElpsPgConfigWorkingPort object to the port 
       indicated by the fsElpsPgConfigProtectionPort object upon failure of the
       working entity.
       
       Currently only vlan service type is supported for this table. Hence this 
       object can hold any value between the range 1 to 4094."

   ::= { fsElpsPgServiceListEntry 1 }


fsElpsPgServiceListRowStatus OBJECT-TYPE
   SYNTAX      RowStatus
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      "The status of this row. The valid options supported for this table are
       'createAndGo' and 'destroy'. Entries in this table cannot be created or
        modified when the corresponding entry in the protection group config
        table for this fsElpsPgConfigPgId is active."
   
  ::= { fsElpsPgServiceListEntry 2 }


-- ----------------------------------------------------
-- Table : Protection Group Service List Pointer Table 
-- ----------------------------------------------------
fsElpsPgServiceListPointerTable OBJECT-TYPE
   SYNTAX        SEQUENCE OF FsElpsPgServiceListPointerEntry
   MAX-ACCESS    not-accessible
   STATUS        current
   DESCRIPTION
     "The protection group service list pointer table contains the 
      object identifiers for the list of services that needs to be protected 
      and the corresponding the protection services.
      
      This table is applicable only when the protection group type is 'list'.

      This table is useful when each of the working service has a specific protection 
      service who's service value is different from the working service value. 

      This table also helps to generically configure the working and protection services
      in terms of specifying their 'object identifiers', instead of directly configuring 
      the value of the services.
     "
   ::= { fsElpsPg 7 }

fsElpsPgServiceListPointerEntry OBJECT-TYPE
   SYNTAX       FsElpsPgServiceListPointerEntry
   MAX-ACCESS   not-accessible
   STATUS       current
   DESCRIPTION
     "The protection group service list pointer table entry. 
      Creation of this entry is allowed only if the value of the object fsElpsPgConfigType 
      is configured  as 'list'."
   INDEX { fsElpsContextId, 
           fsElpsPgConfigPgId, 
           fsElpsPgServiceListId }
   ::= { fsElpsPgServiceListPointerTable 1 }

FsElpsPgServiceListPointerEntry ::=
   SEQUENCE {
          fsElpsPgServiceListId
            Unsigned32,      
          fsElpsPgWorkingServiceListPointer
            RowPointer,
          fsElpsPgWorkingReverseServiceListPointer
            RowPointer,
          fsElpsPgProtectionServiceListPointer
            RowPointer,
          fsElpsPgProtectionReverseServiceListPointer
            RowPointer,
          fsElpsPgServiceListPointerRowStatus
            RowStatus
        }

fsElpsPgServiceListId OBJECT-TYPE
   SYNTAX      Unsigned32
   MAX-ACCESS  not-accessible
   STATUS      current
   DESCRIPTION
      "Unique numeric identifier for a working and protection service set in a protection list 
       within the protection group."
   ::= { fsElpsPgServiceListPointerEntry 1 }

fsElpsPgWorkingServiceListPointer OBJECT-TYPE
   SYNTAX      RowPointer
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      "This object points to a working service which needs to be protected. 
 
      This object is applicable for 'mplsLSP' and 'mplsPw' service type.
       
       When fsElpsPgConfigServiceType is 'mplsLSP' :
        - This object should be configured with the object identifier 
          of the row in the MPLS tunnel table corresponding to 
          the LSP being protected (working LSP).
          
        - In case of co-routed MPLS LSP, this object indicates the co-routed 
          (forward and reverse) path of the LSP.
          In case of associated MPLS LSP, this object indicates the forward path of
          the LSP being protected.

       When fsElpsPgConfigServiceType is 'mplsPw' :
        - This object should be configured with the object identifier 
          of the row in the MPLS Pseudo wire table corresponding to 
          the PW being protected (working PW)." 

   ::= { fsElpsPgServiceListPointerEntry 2 }

fsElpsPgWorkingReverseServiceListPointer OBJECT-TYPE
   SYNTAX      RowPointer
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
   "This object points to the reverse path of the working service that is protected.
    This object is optional and is applicable only when the forward and resverse paths 
    are different for certain type of services.
 
    This object is applicable for 'mplsLSP' service type only.
       
       When fsElpsPgConfigServiceType is 'mplsLSP' :
        - Configuring this object is optional.
        - This object should be configured with the object identifier 
          of the row in the MPLS tunnel table corresponding to the reverse path of
          the LSP being protected (reverse path of working LSP).
        - This configuration is required only in case of associated MPLS LSP.
        - In case of co-routed mplsLSP, this object is not applicable.
   "
   ::= { fsElpsPgServiceListPointerEntry 3 }

fsElpsPgProtectionServiceListPointer OBJECT-TYPE
   SYNTAX      RowPointer
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      "This object points to the protection service corresponding to the working service.
 
      This object is applicable for 'mplsLSP' and 'mplsPw' service types.
       
       When fsElpsPgConfigServiceType is 'mplsLSP' :
        - This object should be configured with the object identifier 
          of the row in the MPLS tunnel table corresponding to 
          the protection instance of the working LSP (ie. protection LSP).
          
        - In case of co-routed MPLS LSP, this object indicates the co-routed 
          (forward and reverse) path of the protection LSP.
          In case of associated MPLS LSP, this object indicates the forward path of
          the protection LSP.

       When fsElpsPgConfigServiceType is 'mplsPw' :
        - This object should be configured with the object identifier 
          of the row in the MPLS Pseudo wire table corresponding to 
          the protection instance of the working PW (ie. protection PW)."

   ::= { fsElpsPgServiceListPointerEntry 4 }

fsElpsPgProtectionReverseServiceListPointer OBJECT-TYPE
   SYNTAX      RowPointer
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      "This object points to the reverse path of the protection service.
       Configuring this object is optional and is applicable only when the 
       forward and resverse paths are different for certain type of services.

     This object is applicable for 'mplsLSP' service type only.
       
       When fsElpsPgConfigServiceType is 'mplsLSP' :
        - Configuring this object is optional.
        - This object should be configured with the object identifier 
          of the row in the MPLS tunnel table, for the reverse path of
          the protecting LSP, corresponding to the working LSP.
        - This configuration is required only in case of associated MPLS LSP configured
          to protect the working LSP.
        - In case of co-routed mpls LSP, this object is not applicable.
      "
   ::= { fsElpsPgServiceListPointerEntry 5 }

fsElpsPgServiceListPointerRowStatus OBJECT-TYPE
   SYNTAX      RowStatus
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
   "The status of this row. Entries in this table cannot be created or modified 
    when the corresponding entry in the protection group config table for this 
    fsElpsPgConfigPgId is active.
    
    RowStatus can be made active only when a valid working and protection services
    are configured for this entry."

   ::= { fsElpsPgServiceListPointerEntry 6 }

-- -------------------------------------
-- Table : Protection Group Share Table
-- -------------------------------------
fsElpsPgShareTable OBJECT-TYPE
   SYNTAX        SEQUENCE OF FsElpsPgShareEntry
   MAX-ACCESS    not-accessible
   STATUS        current
   DESCRIPTION
     "The protection group share table contains the set of protection groups
      that share the same protection entity (i.e. protection port)."
   ::= { fsElpsPg 5 }

fsElpsPgShareEntry OBJECT-TYPE
   SYNTAX       FsElpsPgShareEntry
   MAX-ACCESS   not-accessible
   STATUS       current
   DESCRIPTION
     "The protection group share table entry. Each entry indicates a protection
      group that shares the protection port."
   INDEX { fsElpsContextId, 
           fsElpsPgShareProtectionPort, 
           fsElpsPgConfigPgId }
   ::= { fsElpsPgShareTable 1 }

FsElpsPgShareEntry ::=
   SEQUENCE {
          fsElpsPgShareProtectionPort
            InterfaceIndex,
          fsElpsPgSharePgStatus
            PgStatus
        }

fsElpsPgShareProtectionPort OBJECT-TYPE
   SYNTAX      InterfaceIndex
   MAX-ACCESS  not-accessible
   STATUS      current
   DESCRIPTION
      "This object indicates the protection entity (port) which 
       carries the normal traffic upon failure of the working transport 
       entity." 
   ::= { fsElpsPgShareEntry 1 }

fsElpsPgSharePgStatus OBJECT-TYPE
   SYNTAX      PgStatus
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "The object is to indicate the status of the protection group that shares
       the protection port as indicated by the fsElpsPgConfigProtectionPort 
       object."
   ::= { fsElpsPgShareEntry 2 }

-- ------------------------------------------
-- Table : Protection Group Statistics Table
-- ------------------------------------------
fsElpsPgStatsTable OBJECT-TYPE
   SYNTAX        SEQUENCE OF FsElpsPgStatsEntry
   MAX-ACCESS    not-accessible
   STATUS        current
   DESCRIPTION
     "This table contains statistics information for each of the protection
      groups present in the system. Entries in this table are created 
      implicitly by the creation of entries in the fsElpsPgConfigTable."
   ::= { fsElpsPg 6 }

fsElpsPgStatsEntry OBJECT-TYPE
   SYNTAX       FsElpsPgStatsEntry
   MAX-ACCESS   not-accessible
   STATUS       current
   DESCRIPTION
     "The protection group statistics table entry. There is one entry in this  
      table for each entry in the fsElpsPgConfigTable table."
   INDEX { fsElpsContextId, 
           fsElpsPgConfigPgId }
   ::= { fsElpsPgStatsTable 1 }

FsElpsPgStatsEntry ::=
   SEQUENCE {
          fsElpsPgStatsAutoProtectionSwitchCount
            Counter32,
          fsElpsPgStatsForcedSwitchCount
            Counter32,
          fsElpsPgStatsManualSwitchCount
            Counter32,
          fsElpsPgStatsClearStatistics
            TruthValue,
          fsElpsPgStatsApsPktTxCount
            Counter32,
          fsElpsPgStatsApsPktRxCount
            Counter32,
	  fsElpsPgStatsApsPktDiscardCount
	    	Counter32,
          fsElpsPgLRSFRxTime
            Unsigned32,
          fsElpsPgLRSFTxTime
            Unsigned32,
          fsElpsPgFRSFRxTime
            Unsigned32,
          fsElpsPgStateChgTime
            Unsigned32
        }

fsElpsPgStatsAutoProtectionSwitchCount OBJECT-TYPE
   SYNTAX      Counter32
   MAX-ACCESS  read-only 
   STATUS      current
   DESCRIPTION
      "This object records the number of times automatic protection switching 
       has happened for this protection group entry."
   ::= { fsElpsPgStatsEntry 1 }

fsElpsPgStatsForcedSwitchCount OBJECT-TYPE
   SYNTAX      Counter32
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "This object records the number of times a forced protection switch has 
       happened for this protection group entry."
   ::= { fsElpsPgStatsEntry 2 }

fsElpsPgStatsManualSwitchCount OBJECT-TYPE
   SYNTAX      Counter32
   MAX-ACCESS  read-only 
   STATUS      current
   DESCRIPTION
      "This object records the number of times a manual protection switch has
       happened for this protection group entry."
   ::= { fsElpsPgStatsEntry 3 }

fsElpsPgStatsClearStatistics OBJECT-TYPE
   SYNTAX      TruthValue
   MAX-ACCESS  read-write
   STATUS      current
   DESCRIPTION
      "This object is used to reset all the statistics counter objects present 
       in this table. 
       This will be done by setting the value of this column to 'true(1)'. 
       This column will always return 'false(2)' when read."
   ::= { fsElpsPgStatsEntry 4 }

fsElpsPgStatsApsPktTxCount OBJECT-TYPE
   SYNTAX      Counter32
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "This object records the total number of APS/PSC packets attempted to 
       be transmitted out of this protection group entry. "
   ::= { fsElpsPgStatsEntry 5 }

fsElpsPgStatsApsPktRxCount OBJECT-TYPE
   SYNTAX      Counter32
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "This object records the total number of APS/PSC packets received by
	   this protection group entry." 
   ::= { fsElpsPgStatsEntry 6 }

fsElpsPgStatsApsPktDiscardCount OBJECT-TYPE
   SYNTAX      Counter32
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "This object records the total number of APS/PSC packets discarded in
       this protection group entry." 
   ::= { fsElpsPgStatsEntry 7 }

fsElpsPgLRSFRxTime OBJECT-TYPE
   SYNTAX      Unsigned32
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "This object indicates the timestamp when receiving Local Request -
       signal fail message. This is detected in local node and it is not got
       from the packet. The time is in milliseconds."
   ::= { fsElpsPgStatsEntry 8 }

fsElpsPgLRSFTxTime OBJECT-TYPE
   SYNTAX      Unsigned32
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "This object indicates the timestamp when sending Local Request - signal
       fail packet to the peer node. The time is in milliseconds."
   ::= { fsElpsPgStatsEntry 9 }

fsElpsPgFRSFRxTime OBJECT-TYPE
   SYNTAX      Unsigned32
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "This object indicates the timestamp when receiving Far end Request - 
       signal fail packet from the peer node. The time is in milliseconds."
   ::= { fsElpsPgStatsEntry 10 }

fsElpsPgStateChgTime OBJECT-TYPE
   SYNTAX      Unsigned32
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "This object indicates the timestamp when the protection path becomes
       active after processing the signal fail packet that is received from
       the peer. The time is in milliseconds."
   ::= { fsElpsPgStatsEntry 11 }

-- *****************************************************************************
--              fsElpsPgNotifications subtree
-- *****************************************************************************

fsElpsTraps OBJECT IDENTIFIER ::= { fsElpsPgNotifications 0 }

fsElpsTrapContextName OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (1..32))
    MAX-ACCESS  accessible-for-notify
    STATUS      current
    DESCRIPTION
        "The name given to the virtual context."
    ::= { fsElpsPgNotifications 1 }

fsElpsTrapSwitchingMechanism OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (1..32))
    MAX-ACCESS  accessible-for-notify
    STATUS      current
    DESCRIPTION
        "This object provides the text indicating the mechanism by which the 
         switching of traffic occured from the working to the protection 
         transport entity.

         'AutoProtectionSwitch' will be set when the switching happens  
         automatically through the operation of the APS protocol.

         'ForcedSwitch' will be set when the switching happens by means of 
         an administrator-issued Force Switch command.

         'ManualSwitch' will be set when the switching happens by means of 
         an administrator-issued Manual Switch command."
    ::= { fsElpsPgNotifications 2 }

fsElpsTrapMismatchType OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (1..32))
    MAX-ACCESS  accessible-for-notify
    STATUS      current
    DESCRIPTION
        "This object provides the text indicating the mismatches found 
         in the APS PDUs exchanged between the near-end and the far-end 
         switches.

         'BbitMismatch' will be set when there is a mismatch found in the 
         B bit of the received APS PDU. 

         'ConfigurationMismatch' will be set when an APS PDU is received 
         through the working transport entity instead of the protection 
         transport entity.

         'LackOfResponse' will be set when there is a lack of response to a 
         bridge request for a period greater than 50 ms (i.e., no match in sent
         'Requested Signal' and received 'Requested Signal' for > 50ms).

         'AbitMismatch' will be set when there is a mismatch found in the A bit
         of the received APS PDU.

         'DbitMismatch' will be set when there is a mismatch found in the D bit
         of the received APS PDU.

         'RbitMismatch' will be set when there is a mismatch found in the R bit
		  of the received APS/PSC PDU."
		  

    ::= { fsElpsPgNotifications 3 }

fsElpsTypeOfFailure OBJECT-TYPE
    SYNTAX      DisplayString (SIZE (1..32))
    MAX-ACCESS  accessible-for-notify
    STATUS      current
    DESCRIPTION
        "This object provides the text indicating a particular failure 
         condition. 

         'HwProtectionGroupCreationFailed' will be indicated when the setting  
         up of the protection group in the hardware has failed.

         'HwProtectionGroupDeletionFailed' will be indicated when the deletion 
         of the protection group from the hardware has failed.

         'HwSwitchToWorkingPathFailed' will be indicated when the setting up of 
         the working path as the active path for a protection group in the 
         hardware has failed.

         'HwSwitchToProtectionPathFailed' will be indicated when the setting up 
         of the protection path as the active path for a protection group in 
         the hardware has failed.

         'ApsPduTxFailed' will be set when the state machine is unable to 
          transmit an APS PDU upon a protection group state change." 
    ::= { fsElpsPgNotifications 4 }

fsElpsProtectionSwitchTrap NOTIFICATION-TYPE
    OBJECTS  {
        fsElpsTrapContextName, 
        fsElpsPgCmdPgStatus, 
        fsElpsTrapSwitchingMechanism
    }
    STATUS   current
    DESCRIPTION
        "This trap is generated when the switching happens from working 
         transport entity to protection transport entity (and vice-versa). 
         The generated trap will carry the information about the context-name, 
         the protection group status indicating whether the service is carried 
         over the working path or the protection path currently and the 
         mechanism (Auto Protection Switch, Forced Switch, Manual Switch) 
         by which the switching happened."
    ::= { fsElpsTraps 1 }

fsElpsProtectionSwitchFailureTrap NOTIFICATION-TYPE
    OBJECTS  {
        fsElpsTrapContextName, 
        fsElpsPgCmdPgStatus, 
        fsElpsTypeOfFailure
    }
    STATUS   current
    DESCRIPTION
        "This trap is generated when there is a hardware failure 
        for a protection group or the state machine is unable to transmit APS  
        PDUs upon a protection group state change."
    ::= { fsElpsTraps 2 }

fsElpsProtectionTypeMismatchTrap NOTIFICATION-TYPE
    OBJECTS  {
        fsElpsTrapContextName, 
        fsElpsPgCmdPgStatus, 
        fsElpsTrapMismatchType
    }
    STATUS   current
    DESCRIPTION
        "This trap is generated whenever a mismatch is found through the APS    
         protocol operation. The mismatches can be a B-bit mismatch, 
         a Configuration mismatch, a Lack Of Response, an A-bit mismatch or
         a D-bit mismatch."
    ::= { fsElpsTraps 3 }

END 
