-- *********************************************************************
-- CISCO-ETHERNET-FABRIC-EXTENDER-MIB.my: Fabric Extender mib
--   
-- February 2009, Pauline Shuen
--   
-- Copyright (c) 2009 by Cisco Systems, Inc.
-- All rights reserved.
--   
-- *********************************************************************

CISCO-ETHERNET-FABRIC-EXTENDER-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
        FROM IF-MIB
    ciscoMgmt
        FROM CISCO-SMI;


ciscoEthernetFabricExtenderMIB MODULE-IDENTITY
    LAST-UPDATED    "200902230000Z"
    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-nexus5000@cisco.com"
    DESCRIPTION
        "The MIB module for configuring one or more fabric
        extenders to connect into a core switch.  Since fabric 
        extenders might not be manageable entities, this MIB is
        assumed to be instrumented on the core switch.  A fabric
        extender may be hardwired or preconfigured with a list of 
        uplink ports.  These uplink ports are used to connect to a 
        core switch.  A fabric extender is assumed to be directly 
        connected to its core switch. Each physical interface on 
        the core switch is assumed to be connected to one and only
        one fabric extender.  

        When an extender powers up, it runs a link local discovery 
        protocol to find core switches.  The extender puts all 
        available self identification in its discovery report.  
        The core switch, depending on configuration, uses the 
        extenders identification to accept or deny an extender 
        from connecting. A fabric extender may be connected to 
        different core switches via different uplink ports. In 
        that case, each core switch's instance of the MIB may 
        refer to the same extender.

        Ports on core switch used to connect to extenders
        are known as Fabric ports.  A fabric port may be a physical
        interface or a logical interface such as an EtherChannel.
        An extender may connect into a core switch via more than 
        one fabric port.  Non fabric ports on an extender are 
        typically used to connect hosts/servers."
    REVISION        "200902230000Z"
    DESCRIPTION
        "Initial version of this MIB module."
    ::= { ciscoMgmt 691 }


ciscoEthernetFabricExtenderMIBNotifs  OBJECT IDENTIFIER
    ::= { ciscoEthernetFabricExtenderMIB 0 }

ciscoEthernetFabricExtenderObjects  OBJECT IDENTIFIER
    ::= { ciscoEthernetFabricExtenderMIB 1 }

ciscoEthernetFabricExtenderMIBConformance  OBJECT IDENTIFIER
    ::= { ciscoEthernetFabricExtenderMIB 2 }

cefexConfig  OBJECT IDENTIFIER
    ::= { ciscoEthernetFabricExtenderObjects 1 }


-- Textual Conventions

CiscoPortPinningMode ::= TEXTUAL-CONVENTION
    STATUS          current
    DESCRIPTION
        "This denotes the mode of re-pinning. Re-pinning defines
        how traffic forwarding is altered between fabric extender
        and its core switch in case of a fabric port state change. 

        For fabric extenders that do not support local forwarding, 
        they do not perform normal address learning and forwarding
        as a traditional 802.1d compliant bridge. A method named
        'pinning' is used instead to dictate forwarding behavior.
        That means, traffic from a specific non fabric port is always 
        forwarded to its pinned fabric port (no local forwarding).

        Each non fabric port is 'pinned' to one of the fabric ports. 
        Load balancing aspects affecting pinned fabric port 
        selection is dictated by internal implementation.

        If a particular fabric port fails, all the non fabric ports 
        pinned to the failed fabric port may need to be moved to
        the remaining fabric ports, if any.

        Note that traffic distribution within a fabric EtherChannel
        does not utilize the 'pinning' method.  The traditional hash 
        of MAC address, IP address and TCP/UDP port is used to
        select fabric port within a fabric EtherChannel.

        It is planned that more enumeration will be introduced in 
        subsequent updates.

            static(1)  - If this mode is chosen, non fabric ports
                         are not re-pinned to other fabric ports in 
                         case of fabric port failure."
    SYNTAX          INTEGER  {
                        static(1)
                    }
-- Per Interface Core Switch Table

cefexBindingTable OBJECT-TYPE
    SYNTAX          SEQUENCE OF CefexBindingEntry 
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This table has the binding information of a
        'Fabric Port' to 'Fabric Extender' on a 
        'Extender Core Switch'.  Each entry in this table 
        configures one fabric port.  

        A core switch does not accept fabric extender 
        connections into its fabric ports unless the
        extender matches an entry in this table.  Once matched,
        the extender is identified by the instances of the
        cefexBindingExtenderIndex in the matching row.

        The matching criteria and values to match for 
        each fabric extender are specified in a row in the
        cefexConfigTable.  Each row in the cefexConfigTable 
        is indexed by cefexBindingExtenderIndex.  Each row
        in this table has an unique cefexBindingExtenderIndex
        value, therefore, providing the linkage between
        the two tables. 

        It is expected that user first creates a row in
        the cefexConfigTable for a specific cefexBindingExtenderIndex,
        followed by creation of the corresponding row in
        this table for the same cefexBindingExtenderIndex..
        If a row in this table is created and if there is
        no corresponding row created in the cefexConfigTable, 
        then the agent will automatically create a row in the 
        cefexConfigTable with instance of every object in this
        row initialized to the DEFVAL."
    ::= { cefexConfig 1 }

cefexBindingEntry OBJECT-TYPE
    SYNTAX          CefexBindingEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "There is one entry in this table for each core switch
        Interface that can be connected to an uplink interface 
        of a fabric extender."
    INDEX           { cefexBindingInterfaceOnCoreSwitch } 
    ::= { cefexBindingTable 1 }

CefexBindingEntry ::= SEQUENCE {
        cefexBindingInterfaceOnCoreSwitch InterfaceIndex,
        cefexBindingExtenderIndex         Unsigned32,
        cefexBindingCreationTime          TimeStamp,
        cefexBindingRowStatus             RowStatus
}

cefexBindingInterfaceOnCoreSwitch OBJECT-TYPE
    SYNTAX          InterfaceIndex
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This object is the index that uniquely identifies an entry in
        the cefexBindingTable.  The value of this object is an IfIndex
        to a fabric port.  By creating a row in this table for 
        a particular core switch interface, the user enables that 
        core switch interface to accept a fabric extender. By default, 
        a core switch interface does not have an entry in this table 
        and consequently does not accept/respond to discovery 
        requests from fabric extenders." 
    ::= { cefexBindingEntry 1 }

cefexBindingExtenderIndex OBJECT-TYPE
    SYNTAX          Unsigned32 (100..999)
    MAX-ACCESS      read-create
    STATUS          current
    DESCRIPTION
        "The value of cefexBindingExtenderIndex used as an
        Index into the cefexConfigTable to select the Fabric
        Extender configuration for this binding entry.  However,
        a value in this table does not imply that an instance with
        this value exists in the cefexConfigTable.

        If an entry corresponding to the value of this object does
        not exist in cefexConfigTable, the system default behavior
        (using DEFVAL values for all the configuration objects as
        defined in cefexConfigTable) of the Fabric Extender is 
        used for this binding entry.

        Since an extender may connect to a core switch via
        multiple interfaces or fabric ports, it is important all 
        the binding entries configuring the same fabric extender 
        are configured with the same extender Index.  Every 
        interface on different fabric extender connecting into
        the same core switch is differentiated by its extender id. 
        To refer to a port on the extender, an example 
        representation may be extender/slot/port.  Extender id 
        values 1-99 are reserved. For example, reserved values can
        be used to identify the core switch and its line cards in 
        the extender/slot/port naming scheme.

        cefexBindingExtenderIndex identifies further attributes
        of a fabric extender via the cefexConfigTable.  A user
        may choose to identify a fabric extender by
        specifying its value of cefexConfigExtendername and/or
        other attributes." 
    ::= { cefexBindingEntry 2 }

cefexBindingCreationTime OBJECT-TYPE
    SYNTAX          TimeStamp
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "The timestamp of this entry's creation time." 
    ::= { cefexBindingEntry 3 }

cefexBindingRowStatus OBJECT-TYPE
    SYNTAX          RowStatus
    MAX-ACCESS      read-create
    STATUS          current
    DESCRIPTION
        "The status of this conceptual row." 
    ::= { cefexBindingEntry 4 }
 

-- Per Fabric Extender Configuration Table

cefexConfigTable OBJECT-TYPE
    SYNTAX          SEQUENCE OF CefexConfigEntry 
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "This table facilitates configuration applicable
        to an entire fabric extender."
    ::= { cefexConfig 2 }

cefexConfigEntry OBJECT-TYPE
    SYNTAX          CefexConfigEntry
    MAX-ACCESS      not-accessible
    STATUS          current
    DESCRIPTION
        "There is one entry in this table for each fabric
        extender configured on the core switch."
    INDEX           { cefexBindingExtenderIndex } 
    ::= { cefexConfigTable 1 }

CefexConfigEntry ::= SEQUENCE {
        cefexConfigExtenderName        SnmpAdminString,
        cefexConfigSerialNumCheck      TruthValue,
        cefexConfigSerialNum           SnmpAdminString,
        cefexConfigPinningFailOverMode CiscoPortPinningMode,
        cefexConfigPinningMaxLinks     Unsigned32,
        cefexConfigCreationTime        TimeStamp,
        cefexConfigRowStatus           RowStatus
}

cefexConfigExtenderName OBJECT-TYPE
    SYNTAX          SnmpAdminString (SIZE  (0..32))
    MAX-ACCESS      read-create
    STATUS          current
    DESCRIPTION
        "This object specifies a human readable string representing
        the name of the 'Extender'. Note that default value of
        this object will be the string 'FEXxxxx' where xxxx is 
        value of cefexBindingExtenderIndex expressed as 4 digits. 
        For example, if cefexBindingExtenderIndex is 123, the 
        default value of this object is 'FEX0123'. This object 
        allows the user to identify the extender with an 
        appropriate name." 
    ::= { cefexConfigEntry 1 }

cefexConfigSerialNumCheck OBJECT-TYPE
    SYNTAX          TruthValue
    MAX-ACCESS      read-create
    STATUS          current
    DESCRIPTION
        "This object specifies if the serial number check is
        enabled for this extender or not.  If the value of this
        object is 'true', then the core switch rejects any 
        extender except for the one with serial
        number string specified by cefexConfigSerialNum.  
        If the value of this object is 'false', then the core 
        switch accept any extender."
    DEFVAL          { false } 
    ::= { cefexConfigEntry 2 }

cefexConfigSerialNum OBJECT-TYPE
    SYNTAX          SnmpAdminString (SIZE  (0..32))
    MAX-ACCESS      read-create
    STATUS          current
    DESCRIPTION
        "This object allows the user to identify a fabric
        extender's Serial Number String.  This object is
        relevant if cefexBindingSerialNumCheck is true.
        Zero is not a valid length for this object
        if cefexBindingSerialNumCheck is true."
    DEFVAL          { "" } 
    ::= { cefexConfigEntry 3 }

cefexConfigPinningFailOverMode OBJECT-TYPE
    SYNTAX          CiscoPortPinningMode
    MAX-ACCESS      read-create
    STATUS          current
    DESCRIPTION
        "This object allows the user to identify the
        fabric port failure handling method when pinning 
        is used."
    DEFVAL          { static } 
    ::= { cefexConfigEntry 4 }

cefexConfigPinningMaxLinks OBJECT-TYPE
    SYNTAX          Unsigned32 (1..100)
    MAX-ACCESS      read-create
    STATUS          current
    DESCRIPTION
        "This object allows the user to identify number of
        fabric ports to be used in distribution of pinned
        non fabric ports.  As described above, pinning is the
        forwarding model used for fabric extenders
        that do not support local forwarding.  Traffic
        from a non fabric port is forwarded to one
        fabric port.  Selection of non fabric port pinning
        to fabric ports is distributed as evenly as 
        possible across fabric ports.  This object 
        allows administrator to configure number
        of fabric ports that should be used 
        for pinning non fabric ports."
    DEFVAL          { 1 } 
    ::= { cefexConfigEntry 5 }

cefexConfigCreationTime OBJECT-TYPE
    SYNTAX          TimeStamp
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "The timestamp when the value of the corresponding
        instance of 'cefexConfigRowStatus' is made active.
        If an user modifies objects in this table,
        the new values are immediately activated. 
        Depending on the object changed, an accepted 
        fabric extender may become not acceptable.
        As a result, the fabric extender may be 
        disconnected from the core switch." 
    ::= { cefexConfigEntry 6 }

cefexConfigRowStatus OBJECT-TYPE
    SYNTAX          RowStatus
    MAX-ACCESS      read-create
    STATUS          current
    DESCRIPTION
        "The status of this conceptual row. A row in this
        table becomes active immediately upon creation." 
    ::= { cefexConfigEntry 7 }
 

-- Conformance

cEthernetFabricExtenderMIBCompliances  OBJECT IDENTIFIER
    ::= { ciscoEthernetFabricExtenderMIBConformance 1 }

cEthernetFabricExtenderMIBGroups  OBJECT IDENTIFIER
    ::= { ciscoEthernetFabricExtenderMIBConformance 2 }


cEthernetFabricExtenderMIBCompliance MODULE-COMPLIANCE
    STATUS          current
    DESCRIPTION
        "The compliance statement for entities which
        implement the CISCO-ETHERNET-FABRIC-EXTENDER-MIB mib."
    MODULE          -- this module
    MANDATORY-GROUPS { cefexBindingConformanceObjects }

    OBJECT          cefexBindingExtenderIndex
    MIN-ACCESS      read-only
    DESCRIPTION
        "Support for write access is not required."

    OBJECT          cefexBindingRowStatus
    MIN-ACCESS      read-only
    DESCRIPTION
        "Support for write access is not required."

    OBJECT          cefexConfigExtenderName
    MIN-ACCESS      read-only
    DESCRIPTION
        "Support for write access is not required."

    OBJECT          cefexConfigSerialNum
    MIN-ACCESS      read-only
    DESCRIPTION
        "Support for write access is not required."

    OBJECT          cefexConfigPinningFailOverMode
    MIN-ACCESS      read-only
    DESCRIPTION
        "Support for write access is not required."

    OBJECT          cefexConfigPinningMaxLinks
    MIN-ACCESS      read-only
    DESCRIPTION
        "Support for write access is not required."

    OBJECT          cefexConfigRowStatus
    MIN-ACCESS      read-only
    DESCRIPTION
        "Support for write access is not required."

    OBJECT          cefexConfigSerialNumCheck
    MIN-ACCESS      read-only
    DESCRIPTION
        "Support for write access is not required."
    ::= { cEthernetFabricExtenderMIBCompliances 1 }

-- Units of Conformance

cefexBindingConformanceObjects OBJECT-GROUP
    OBJECTS         {
                        cefexBindingExtenderIndex,
                        cefexBindingCreationTime,
                        cefexBindingRowStatus,
                        cefexConfigExtenderName,
                        cefexConfigSerialNumCheck,
                        cefexConfigSerialNum,
                        cefexConfigPinningFailOverMode,
                        cefexConfigPinningMaxLinks,
                        cefexConfigCreationTime,
                        cefexConfigRowStatus
                    }
    STATUS          current
    DESCRIPTION
        "A collection of objects related to Fabric Extender binding
        to core switch."
    ::= { cEthernetFabricExtenderMIBGroups 1 }

END

