-- *********************************************************************
-- CISCO-PORT-CHANNEL-MIB.my: Port Channel mib
--
-- September 2002, Srini Kode
-- February 2004, Vinay Gaonkar
--
-- Copyright (c) 2002,2003,2004 by cisco Systems, Inc.
-- All rights reserved.
-- 
-- *********************************************************************
CISCO-PORT-CHANNEL-MIB DEFINITIONS ::= BEGIN

IMPORTS
        MODULE-IDENTITY, OBJECT-TYPE,
        Unsigned32                             FROM SNMPv2-SMI
        MODULE-COMPLIANCE, OBJECT-GROUP        FROM SNMPv2-CONF
        TEXTUAL-CONVENTION, RowStatus,
        TimeStamp, TruthValue                  FROM SNMPv2-TC
        SnmpAdminString                        FROM SNMP-FRAMEWORK-MIB
        InterfaceIndex, ifIndex                FROM IF-MIB
        ciscoMgmt                              FROM CISCO-SMI
        PortMemberList                         FROM CISCO-ST-TC;
                
         
ciscoPortChannelMIB MODULE-IDENTITY
        LAST-UPDATED "200409130000Z"
        ORGANIZATION "Cisco Systems Inc."
        CONTACT-INFO
                "     Cisco Systems
                      Customer Service
                Postal: 170 W Tasman Drive
                      San Jose, CA  95134
                      USA
                Tel: +1 800 553 -NETS
                E-mail: cs-san@cisco.com"
        DESCRIPTION
            "The MIB module for management of Port Channel ports.
             In addition to this MIB, CISCO-FC-FE-MIB and interface
             mib (rfc2863) will also contain entries for Port Channel
             ports."
        REVISION    "200409130000Z"
        DESCRIPTION
            "Added new object portChannelExtOperChannelGrpMode to
            portChannelExtTable. Changed the SYNTAX of 
            portChannelExtPersistent to INTEGER from TruthValue."
        REVISION    "200406080000Z"
        DESCRIPTION
            "Added new tables portChannelGrpIfExtTable and 
            portChannelExtTable. Also, added new object
            portChannelProtocolEnable."
        REVISION    "200403110000Z"
        DESCRIPTION
            "Added portChannelMemberOperStatus to portChannelTable. "
        REVISION    "200305280000Z"
        DESCRIPTION
            "Superceeded portChannelMIBCompliances with 
            portChannelMIBCompliances1. Added 
            portChannelAdminChannelMode object to 
            portChannelMIBCompliances1. "
        REVISION    "200210020000Z"
        DESCRIPTION
            "Initial version of this MIB module."
        ::= { ciscoMgmt 285 }

ciscoPortChannelObjects   OBJECT IDENTIFIER 
                               ::= { ciscoPortChannelMIB 1 }
portChannelMIBConformance OBJECT IDENTIFIER 
                               ::= { ciscoPortChannelMIB 2 }
portChannelConfig         OBJECT IDENTIFIER 
                               ::= { ciscoPortChannelObjects 1 }
portChannelStatistics     OBJECT IDENTIFIER 
                               ::= { ciscoPortChannelObjects 2 }
portChannelNotification   OBJECT IDENTIFIER 
                               ::= { ciscoPortChannelObjects 3 }
portChannelNotifications   OBJECT IDENTIFIER 
                               ::= { portChannelNotification 0 }

-- Textual Conventions

PortChannelMode ::= TEXTUAL-CONVENTION
     STATUS         current
     DESCRIPTION    
           "Defines how a Port Channel does channeling.
                     auto(1)      - place the port into passive 
                                    negotiation state, in which the
                                    port waits for its peer to 
                                    initiate negotiation.
                     on(2)        - force the port to enable 
                                    channeling.
                     off(3)       - channeling is disabled.
                     desirable(4) - place the port into active
                                    negotiating state, in which the
                                    port initiates negotiations with
                                    its peer and if the peer end 
                                    agrees, channeling is enabled 
                                    between them. "
     SYNTAX         INTEGER {
                       auto(1),
                       on(2),
                       off(3),
                       desirable(4)
                    }

PortChannelGroupMode ::= TEXTUAL-CONVENTION
     STATUS         current
     DESCRIPTION    
           "Defines how a Port Channel does channeling.
                 on(1) -       the port shall operate as part of a 
                               port channel or remain inactive. The port
                               channel protocol is turned off and peer 
                               port is assumed to be configured in 'on' 
                               mode.
                 active(2)-    indicates that port shall initiate port 
                               channel negotiation with peer port 
                               according to the port channel protocol 
                               regardless of the channel mode of the 
                               peer port."
     SYNTAX         INTEGER {
                       on(1),
                       active(2)
                    }

--
-- Port Channel Table
--

portChannelTable  OBJECT-TYPE
        SYNTAX     SEQUENCE OF PortChannelEntry 
        MAX-ACCESS not-accessible
        STATUS     current
        DESCRIPTION
              "This table facilitates the creation and deletion of a
               Port Channel interface to achieve higher bandwidths
               than just one E_port. More than one E_port can be a 
               member of an Port Channel port.
               NOTE:Only E_ports can be members of an Port Channel
               port.
               
               A port is added to a Port Channel port by setting 
               portChannelMemberList,and the 'manner' in which the 
               agent performs the type of addition is determined 
               by the value of portChannelAddType.
               
               During the period when port(s) is being added to the
               Port Channel, the agent will not allow to change any 
               parameters of the port(s) being added. Also if the 
               operation is successful (i.e. port(s) is added to the 
               Port Channel) then also the agent will not allow to 
               change any parameters of the individual port(s) that is
               added. But any change done to the Port Channel port
               will also be applied to the port(s) which are member(s)
               of this Port channel port. Once a port(s) is removed
               from a Port Channel Port it will retain the values that
               it had when it was a member of the Port Channel port.
               It will not have the old values it had before joining
               the Port Channel port. 

               The port(s) that are added/removed to/from a 
               Port Channel port will be put into administratively
               down (ifAdminStatus='down') which results into
               operationally down(ifOperStatus='down'). To bring the 
               port up again, the user has to set the port to be
               administratively up(ifAdminStatus='up'). Then the port
               goes through its initialization cycle to become 
               active(ifOperStatus='up'). "
        ::= { portChannelConfig 1 }

portChannelEntry OBJECT-TYPE
        SYNTAX     PortChannelEntry 
        MAX-ACCESS not-accessible
        STATUS     current
        DESCRIPTION
              "There is one entry in this table for each created
               Port Channel port. "
        INDEX { portChannelIndex }
        ::= { portChannelTable 1 }

PortChannelEntry ::= SEQUENCE {
              portChannelIndex                  Unsigned32,
              portChannelIfIndex                InterfaceIndex,
              portChannelAdminChannelMode       PortChannelMode,
              portChannelOperChannelMode        PortChannelMode,
              portChannelAddType                INTEGER,
              portChannelLastActionStatus       INTEGER,
              portChannelLastActionStatusCause  SnmpAdminString,
              portChannelLastActionTime         TimeStamp,
              portChannelMemberList             PortMemberList,
              portChannelCreationTime           TimeStamp,
              portChannelRowStatus              RowStatus,
              portChannelMemberOperStatus       PortMemberList
}

portChannelIndex OBJECT-TYPE
        SYNTAX      Unsigned32 (1..2048)
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
              "An index that uniquely identifies an entry in the
               portChannelTable table. "
        ::= { portChannelEntry 1 }

portChannelIfIndex OBJECT-TYPE
        SYNTAX      InterfaceIndex
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
              "The ifIndex of this interface. "
        ::= { portChannelEntry 2 }

portChannelAdminChannelMode OBJECT-TYPE
        SYNTAX      PortChannelMode
        MAX-ACCESS  read-create
        STATUS      current
        DESCRIPTION
              "The channel mode desired by the network manager.
               If this object is configured to be auto(1), then the 
               'portChannelOperChannelMode' will show the current
                operating channel mode of port. "
        DEFVAL {on}
        ::= { portChannelEntry 3 }

portChannelOperChannelMode OBJECT-TYPE
        SYNTAX      PortChannelMode
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
              "The current operating channel mode of the port. "
        ::= { portChannelEntry 4 }

portChannelAddType OBJECT-TYPE
        SYNTAX      INTEGER {
                       normal(1),
                       force(2)
                    }
        MAX-ACCESS  read-create
        STATUS      current
        DESCRIPTION
              "The method to be adopted by the agent to add 
               port(s) to a Port Channel port.
               If normal(1), then a compatibility check is done on the
               parameters of the port(s) being added to this Port
               Channel. The port(s) being added must have the same
               physical and configured parameters as the Port
               Channel port.
               If force(2), a compatibility check is done on only
               physical parameters. The port(s) being added to this
               Port Channel port must have same physical parameters.
               The operation will fail only if the physical parameters
               are not same. The configured parameters of the 
               port(s) being added are overwritten by 
               configured parameters of this Port Channel port. "
        DEFVAL {normal}
        ::= { portChannelEntry 5 }

portChannelLastActionStatus OBJECT-TYPE
        SYNTAX      INTEGER {
                       successful(1),
                       failed(2)
                    }
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
              "The status of the last operation (add or remove a 
               member) done to change the member list of a Port 
               Channel Port.
               When no ports are added or the last operation is
               successful then this object will be successful(1).
               If this value is failed(2) then the user can look
               at portChannelLastAddStatusCause to find the reason
               of failure. "
        ::= { portChannelEntry 6 }

portChannelLastActionStatusCause OBJECT-TYPE
        SYNTAX      SnmpAdminString
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
              "The cause of failure to last operation (add or remove
               a member) done to change the member list of a Port
               Channel port. This object will be zero length string
               if 'portChannelLastActionStatus' is successful(1). "
        ::= { portChannelEntry 7 }

portChannelLastActionTime OBJECT-TYPE
        SYNTAX      TimeStamp
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
              "The timestamp indicating the time of last action
               performed on this entry. "
        ::= { portChannelEntry 8 }

portChannelMemberList OBJECT-TYPE
        SYNTAX      PortMemberList
        MAX-ACCESS  read-create
        STATUS      current
        DESCRIPTION
              "The list of ifIndex's of the E_ports that are members
               of this Port Channel port. "
        DEFVAL {''H}
        ::= { portChannelEntry 9 }

portChannelCreationTime OBJECT-TYPE
        SYNTAX      TimeStamp
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
              "The timestamp of this entry's creation time.
               Note that at this creation time, a discontinuity occurs
               in the statistic/error counters which are defined in
               CISCO-FC-FE-MIB, and which are associated with this
               Port Channel. "
        ::= { portChannelEntry 10 }

portChannelRowStatus OBJECT-TYPE
        SYNTAX      RowStatus
        MAX-ACCESS  read-create
        STATUS      current
        DESCRIPTION
              "The status of this conceptual row. "   
        ::= { portChannelEntry 11 }
        
portChannelMemberOperStatus OBJECT-TYPE
        SYNTAX      PortMemberList
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
              "The list of port channel forwarding status of the
               E_ports that are members of this Port Channel port.
               Every four-byte is a status of the corresponding 
               member port represented by ifIndex in 
               portChannelMemberList.
               The portChannelMemberOperStatus may not be the same as 
               ifOperStatus.
               A value of '00 00 00 01' means the corresponding member
               port is participating in the load balancing of the 
               port channel.
               A value of '00 00 00 02' means the corresponding member
               port is not participating in the load balancing of the 
               port channel. "
        DEFVAL {''H}
        ::= { portChannelEntry 12 }        


--
-- Port Channel Protocol related objects
--

portChannelProtocolEnable OBJECT-TYPE
        SYNTAX      TruthValue
        MAX-ACCESS  read-write
        STATUS      current
        DESCRIPTION
              "Enables/disables Port Channel Protocol. If enabled, Port
              Channel Protocol provides following features:
               - detection and correction of mis-configurations of 
                 interfaces involved with a Port Channel.
               - automatic creation of Channel Groups (and therefore
                 Port Channels) if both ends of the links are compatible
                 with each other."
        ::= { portChannelConfig    2 }

portChannelGrpIfExtTable  OBJECT-TYPE
        SYNTAX     SEQUENCE OF PortChannelGrpIfExtEntry
        MAX-ACCESS not-accessible
        STATUS     current
        DESCRIPTION
              "This table facilitates Channel Group specific 
              interface configurations."
        ::= {portChannelConfig  3 }

portChannelGrpIfExtEntry OBJECT-TYPE
        SYNTAX     PortChannelGrpIfExtEntry
        MAX-ACCESS not-accessible
        STATUS     current
        DESCRIPTION
              "There is one entry in this table for each created
               Port Channel port."
        INDEX { ifIndex }
        ::= { portChannelGrpIfExtTable 1 }

PortChannelGrpIfExtEntry ::= SEQUENCE {
        portChannelGrpIfAutoCreation  TruthValue
}

portChannelGrpIfAutoCreation OBJECT-TYPE
        SYNTAX      TruthValue
        MAX-ACCESS  read-write
        STATUS      current
        DESCRIPTION
              "This object indicates if this interface may be part of 
              automatically created Channel Groups (and therefore 
              Port Channels)."
        ::= { portChannelGrpIfExtEntry 1 }

--
-- Port Channel extension Table
--

portChannelExtTable  OBJECT-TYPE
        SYNTAX     SEQUENCE OF PortChannelExtEntry 
        MAX-ACCESS not-accessible
        STATUS     current
        DESCRIPTION
              "This table extends the portChannelTable to support Port
              Channel Protocol."
        ::= { portChannelConfig 4 }

portChannelExtEntry OBJECT-TYPE
        SYNTAX     PortChannelExtEntry 
        MAX-ACCESS not-accessible
        STATUS     current
        DESCRIPTION
              "There is one entry in this table for each created
               Port Channel port. It contains an entry for every
               Port Channel that is either automatically created or
               manually configured."
        AUGMENTS { portChannelEntry }
        ::= { portChannelExtTable 1 }

PortChannelExtEntry ::= SEQUENCE {
              portChannelExtChannelGrpMode     PortChannelGroupMode,
              portChannelExtAutoCreated        TruthValue,
              portChannelExtPersistent         INTEGER,
              portChannelExtOperChannelGrpMode PortChannelGroupMode
}

portChannelExtChannelGrpMode OBJECT-TYPE
        SYNTAX      PortChannelGroupMode
        MAX-ACCESS  read-write
        STATUS      current
        DESCRIPTION
              "The admin channel group mode of this port channel."
        ::= { portChannelExtEntry 1 }

portChannelExtAutoCreated OBJECT-TYPE
        SYNTAX      TruthValue
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
              "Indicates of this port channel was automatically 
              created.
              Note that this object is valid only for Fibre Channel
              port channels."
        ::= { portChannelExtEntry 2 }

portChannelExtPersistent OBJECT-TYPE
        SYNTAX      INTEGER {
                       noOp (1),
                       enable (2)
                    }
        MAX-ACCESS  read-write
        STATUS      current
        DESCRIPTION 
              "This object converts an auto-created port channel 
              to a persistent port channel when it is set to 'enable'.

              No action is taken if this object is set to 'noOp'.
              The value of the object when read is always 'noOp'."  
        ::= { portChannelExtEntry 3 }

portChannelExtOperChannelGrpMode OBJECT-TYPE
        SYNTAX      PortChannelGroupMode
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
              "The operational channel group mode of this port channel."
        ::= { portChannelExtEntry 4 }


-- Conformance


portChannelMIBCompliances OBJECT IDENTIFIER 
                             ::= { portChannelMIBConformance 1 }
portChannelMIBGroups OBJECT IDENTIFIER 
                             ::= { portChannelMIBConformance 2 }
portChannelMIBCompliance MODULE-COMPLIANCE
        STATUS   deprecated  -- superceeded by 
                             -- portChannelMIBCompliance1
        DESCRIPTION
                "The compliance statement for entities which 
                implement the CISCO-PORT-CHANNEL-MIB mib."
        MODULE MANDATORY-GROUPS { portChannelGroup } 
 
--      OBJECT  portChannelIndex
--          SYNTAX     Unsigned32 (1..128)
--          DESCRIPTION 
--                 "It is compliant to support a maximum value for 
--                  this object which is smaller than the defined 
--                  maximum value."
                                            
        OBJECT  portChannelRowStatus
            SYNTAX     INTEGER {             
                     active(1),
                     createAndGo(4),
                     destroy(6)}
            DESCRIPTION 
                   "Only three values 'createAndGo', 'destroy' and 
                   'active' out of the six enumerated values need to
                    be supported."
                   
        ::= { portChannelMIBCompliances 1 } 
        
portChannelMIBCompliance1 MODULE-COMPLIANCE
        STATUS   deprecated  -- superceeded by 
                             -- portChannelMIBCompliance2
        DESCRIPTION
                "The compliance statement for entities which 
                implement the CISCO-PORT-CHANNEL-MIB mib."
        MODULE MANDATORY-GROUPS { portChannelGroup } 
 
--      OBJECT  portChannelIndex
--          SYNTAX     Unsigned32 (1..128)
--          DESCRIPTION 
--                 "It is compliant to support a maximum value for 
--                  this object which is smaller than the defined 
--                  maximum value."
                                            
        OBJECT  portChannelRowStatus
            SYNTAX     INTEGER {             
                     active(1),
                     createAndGo(4),
                     destroy(6)}
            DESCRIPTION 
                   "Only three values 'createAndGo', 'destroy' and 
                   'active' out of the six enumerated values need to
                    be supported." 
                    
        OBJECT  portChannelAdminChannelMode
            DESCRIPTION 
                   "It is compliant to support only a subset of 
                   all the values defined. "
                                     
        ::= { portChannelMIBCompliances 2 }
        
portChannelMIBCompliance2 MODULE-COMPLIANCE
        STATUS   deprecated -- superceded by portChannelMIBCompliance3
        DESCRIPTION
                "The compliance statement for entities which 
                implement the CISCO-PORT-CHANNEL-MIB mib."
        MODULE MANDATORY-GROUPS { portChannelGroup,
                                  portChannelGroupRev1 } 
 
--      OBJECT  portChannelIndex
--          SYNTAX     Unsigned32 (1..128)
--          DESCRIPTION 
--                 "It is compliant to support a maximum value for 
--                  this object which is smaller than the defined 
--                  maximum value."
                                            
        OBJECT  portChannelRowStatus
            SYNTAX     INTEGER {             
                     active(1),
                     createAndGo(4),
                     destroy(6)}
            DESCRIPTION 
                   "Only three values 'createAndGo', 'destroy' and 
                   'active' out of the six enumerated values need to
                    be supported." 
                    
        OBJECT  portChannelAdminChannelMode
            DESCRIPTION 
                   "It is compliant to support only a subset of 
                   all the values defined. "
                                     
        ::= { portChannelMIBCompliances 3 }               

portChannelMIBCompliance3 MODULE-COMPLIANCE
        STATUS   current
        DESCRIPTION
                "The compliance statement for entities which 
                implement the CISCO-PORT-CHANNEL-MIB mib."
        MODULE MANDATORY-GROUPS { portChannelGroup,
                                  portChannelGroupRev1 } 
 
        GROUP   portChannelProtocolGroup
        DESCRIPTION
                "Implementation of this group is mandatory for all
                systems that support Port Channel Protocol."

--      OBJECT  portChannelIndex
--          SYNTAX     Unsigned32 (1..128)
--          DESCRIPTION 
--                 "It is compliant to support a maximum value for 
--                  this object which is smaller than the defined 
--                  maximum value."
                                            
        OBJECT  portChannelRowStatus
            SYNTAX     INTEGER {             
                     active(1),
                     createAndGo(4),
                     destroy(6)}
            DESCRIPTION 
                   "Only three values 'createAndGo', 'destroy' and 
                   'active' out of the six enumerated values need to
                    be supported." 
                    
        OBJECT  portChannelAdminChannelMode
            DESCRIPTION 
                   "It is compliant to support only a subset of 
                   all the values defined. "
                                     
        OBJECT  portChannelProtocolEnable
            MIN-ACCESS  read-only
            DESCRIPTION 
                   "Only read-only need to supported."

        ::= { portChannelMIBCompliances 4 }               

-- Units of Conformance

portChannelGroup  OBJECT-GROUP
     OBJECTS  { portChannelIfIndex, portChannelAdminChannelMode, 
                portChannelOperChannelMode, portChannelAddType,
                portChannelLastActionStatus,
                portChannelLastActionStatusCause,
                portChannelLastActionTime,
                portChannelMemberList,portChannelCreationTime,
                portChannelRowStatus }
     STATUS  current
     DESCRIPTION
            "A collection of objects related to Port Channel Interface
             parameters."
        ::= { portChannelMIBGroups 1 }
        
portChannelGroupRev1  OBJECT-GROUP
     OBJECTS  { portChannelMemberOperStatus }
     STATUS  current
     DESCRIPTION
            "A collection of objects related to Port Channel Interface
             parameters."
        ::= { portChannelMIBGroups 2 }            

portChannelProtocolGroup  OBJECT-GROUP
     OBJECTS  { portChannelProtocolEnable, 
                portChannelGrpIfAutoCreation,
                portChannelExtChannelGrpMode,
                portChannelExtAutoCreated,
                portChannelExtPersistent,
                portChannelExtOperChannelGrpMode
              }
     STATUS  current
     DESCRIPTION
            "A collection of objects related to Port Channel Protocol
             mamagement."
        ::= { portChannelMIBGroups 3 }    

END
