RFC 4439

Fibre Channel Fabric Address Manager MIB

πŸ“… published March 2006, from ietf

πŸŽ€ RFC 4439: Fibre Channel Fabric Address Manager MIB

  • Working group: Network Working Group
  • Request for Comments: 4439
  • Category: Standards Track
  • Authors: C. DeSanti, V. Gaonkar, K. McCloghrie (Cisco Systems), S. Gai (Retired)
  • Date: March 2006
  • Obsoletes / Updates: none listed

Status of This Memo ✨

okay so this doc is an Internet standards track protocol for the Internet community, and it's basically asking everyone to talk about it and send over suggestions for making it better πŸ’¬ For the standardization state and status of this protocol, check the current edition of "Internet Official Protocol Standards" (STD 1) πŸ“š And distribution of this memo is unlimited, so share it with whoever πŸ’Œ

Copyright (C) The Internet Society (2006).

Abstract ✨

this memo defines a piece of the Management Information Base (MIB) 🧩 for use with network management protocols in the Internet community. specifically, it describes managed objects for info about a Fibre Channel network's Fabric Address Manager, so it's all about keeping the fabric's address stuff organized πŸ—‚οΈ

Table of Contents πŸ“–

   1. Introduction ....................................................3
   2. The Internet-Standard Management Framework ......................3
   3. Short Overview of Fibre Channel .................................3
   4. Relationship to Other MIBs ......................................4
   5. MIB Overview ....................................................5
      5.1. Fibre Channel Management Instance ..........................5
      5.2. Switch Index ...............................................5
      5.3. Fabric Index ...............................................5
      5.4. The t11FamGroup Group ......................................6
      5.5. The t11FamDatabaseGroup Group ..............................6
      5.6. The t11FamAreaGroup Group ..................................6
      5.7. The t11FamCacheGroup Group .................................6
      5.8. The t11FamCommandGroup Group ...............................6
      5.9. The t11FamNotificationGroup Group ..........................6
      5.10. Use of RCF and BF .........................................6
   6. Definitions .....................................................8
      6.1. The T11-TC-MIB Module ......................................8
      6.2. The T11-FC-FABRIC-ADDR-MGR-MIB Module ......................9
   7. Acknowledgements ...............................................35
   8. Normative References ...........................................36
   9. Informative References .........................................36
   10. IANA Considerations ...........................................37
   11. Security Considerations .......................................37

1. Introduction ✨

okay bestie, this memo defines a portion of the Management Information Base (MIB) 🧩 for use with network management protocols in the Internet community. the main focus is managed objects for info about a Fibre Channel network's Fabric Address Manager πŸ¦‹ The Fabric Address Manager is the functionality that acquires DomainID(s) as specified in [FC-SW-3], and manages Fibre Channel Identifiers as specified in [FC-FS]. it's giving "keeping the whole fabric addressed" energy πŸ’…

2. The Internet-Standard Management Framework 🌸

if you want the full tea on the current Internet-Standard Management Framework, go check section 7 of RFC 3410 [RFC3410] πŸ“–

managed objects are accessed through a virtual information store called the Management Information Base, or MIB πŸ—ƒοΈ MIB objects are generally accessed through the Simple Network Management Protocol (SNMP) πŸ“‘ Objects in the MIB get defined using the mechanisms in the Structure of Management Information (SMI). this memo specifies a MIB module that is compliant to the SMIv2, which is described in STD 58, RFC 2578 [RFC2578], STD 58, RFC 2579 [RFC2579] and STD 58, RFC 2580 [RFC2580] πŸŽ€

3. Short Overview of Fibre Channel 🌈

okay so the Fibre Channel (FC) is logically a bidirectional point-to-point serial data channel, and it's built for high performance πŸ”₯ It gives a general transport vehicle for higher-level protocols like Small Computer System Interface (SCSI) command sets, the High-Performance Parallel Interface (HIPPI) data framing, IP (Internet Protocol), IEEE 802.2, and others ✨

physically, Fibre Channel is an interconnection of multiple communication points called N_Ports πŸ”Œ These get interconnected either by a switching network, called a Fabric, or by a point-to-point link. a Fibre Channel "node" is one or more N_Ports. a Fabric may consist of multiple Interconnect Elements, some of which are switches πŸ”€ an N_Port connects to the Fabric via a port on a switch called an F_Port. when multiple FC nodes hook up to a single port on a switch via an "Arbitrated Loop" topology, the switch port is called an FL_Port, and the nodes' ports are called NL_Ports πŸ” the term Nx_Port refers to either an N_Port or an NL_Port, and the term Fx_Port refers to either an F_Port or an FL_Port 🧠 a switch port that's interconnected to another switch port via an Inter-Switch Link (ISL) is called an E_Port 🫢 and a B_Port connects a bridge device with an E_Port on a switch. a B_Port provides a subset of E_Port functionality 🌷

many Fibre Channel components have globally-unique names, including the Fabric, each node, and most ports 🏷️ These names are typically formatted as World Wide Names (WWNs). more WWN info lives in [FC-FS] πŸ’– WWNs are expected to be persistent across agent and unit resets πŸ”’

Fibre Channel frames contain 24-bit address identifiers, which identify the frame's source and destination ports πŸ“¬ Each FC port has both an address identifier and a WWN. when a Fabric is in use, a switch dynamically assigns the FC address identifiers 🎯 each octet of a 24-bit address represents a level in an address hierarchy, and the Domain_ID is the highest level of that hierarchy πŸ‘‘

each switch in a Fabric gets assigned one (or more) unique Domain_IDs using a two-step process πŸͺ„ First, one switch, called Principal Switch, gets selected from the switches of a Fabric. then, the Principal Switch assigns Domain_IDs to the other switches of the Fabric. address assignment within a domain is performed by the switch that was granted that Domain_ID 🧚

4. Relationship to Other MIBs πŸ¦„

the first standardized MIB for Fibre Channel [RFC2837] was focused on Fibre Channel switches πŸ”€ It's being replaced by the more generic Fibre Channel Management MIB [FC-MGMT], which defines basic info for Fibre Channel hosts and switches. it also includes extensions to the standard IF-MIB [IF-MIB] for Fibre Channel interfaces πŸ’œ [FC-MGMT] includes the spec for how the generic objects defined in [IF-MIB] apply to Fibre Channel interfaces πŸ“‹

Note that an interface's ifIndex value must be unique within an SNMP context, no matter how many Fibre Channel management instances (see below) and how many Fibre Channel switches are instrumented within that SNMP context ⚠️

this document defines the T11-FC-FABRIC-ADDR-MGR-MIB module, which goes beyond [FC-MGMT] to cover the functionality in Fibre Channel switches that's used to manage Fabric configuration, domains, and addresses within a domain 🌸 this document also contains a MIB module, T11-TC-MIB, which defines textual conventions that might also be useful in other MIBs defined by T11 πŸŽ€

5. MIB Overview πŸ’…

this section explains the use of a Fibre Channel management instance, a Switch Index, and a Fabric Index 🫧 It also describes the six MIB groups contained in the MIB πŸ‘‘

5.1. Fibre Channel Management Instance 🌷

a Fibre Channel management instance is defined in [FC-MGMT] as a separable managed instance of Fibre Channel functionality 🧩 Fibre Channel functionality may be grouped into Fibre Channel management instances in whatever way is most convenient for the implementation(s). for example, one such grouping accommodates a single SNMP agent having multiple AgentX sub-agents, with each sub-agent implementing a different Fibre Channel management instance πŸ“

the object, fcmInstanceIndex, is IMPORTed from the FC-MGMT-MIB [FC-MGMT] as the index value to uniquely identify a Fibre Channel management instance πŸ”‘

5.2. Switch Index πŸ¦‹

the FC-MGMT-MIB [FC-MGMT] defines the fcmSwitchTable as a table of information about Fibre Channel switches that are managed by Fibre Channel management instances πŸ“Š Each Fibre Channel management instance can manage one or more Fibre Channel switches. the Switch Index, fcmSwitchIndex, is IMPORTed from the FC-MGMT-MIB as the index value to uniquely identify a Fibre Channel switch among those (one or more) managed by the same Fibre Channel management instance 🫢

5.3. Fabric Index 🧚

the [FC-SW-3] standard for an interconnecting Fabric made of multiple Fabric Switch elements describes how a single Fabric works in a physical infrastructure πŸ—οΈ The current [FC-SW-4] standard also supports multiple Virtual Fabrics operating within one (or more) physical infrastructures ✨ In that scenario, each Fabric has, of course, its own management instrumentation πŸ’– So this MIB module defines all Fabric-related information in tables that are INDEXed by an arbitrary integer, called a "Fabric Index". In a Fabric that is conformant to [FC-SW-3], the value of this Fabric Index will always be 1 🌈

it's quite possible, and may even become likely, that (a port of) a Fibre Channel switch will be connected to multiple such Fabrics πŸ•ΈοΈ So, to make a query about all the Fabrics a single switch is connected to easier, fcmSwitchIndex will be listed before t11FamFabricIndex when they both appear in the same INDEX clause πŸ™ˆ

5.4. The t11FamGroup Group πŸŽ€

this group has basic info about the Fabric Address Manager functionality within a switch πŸ“‡ That includes its configuration parameters that are per-interface (i.e., specified for a particular Fibre Channel interface identified by an ifIndex value) πŸ”§

5.5. The t11FamDatabaseGroup Group πŸ“

this group has info about which switches are assigned to which domains πŸ—ΊοΈ

5.6. The t11FamAreaGroup Group 🌸

this group has info about which Port-IDs have been assigned within the areas of the local domain πŸ“

5.7. The t11FamCacheGroup Group πŸ’œ

this conditional mandatory group has info about all the FC address identifier assignments that have been recently released 🧠 This cache is kept to support the concept of Preferred Domain_ID, via a best-effort attempt at (short-term) re-assignment of the same FC address identifiers πŸ”

5.8. The t11FamCommandGroup Group 🧁

this optional group has objects used for kicking off an operation on a Fabric πŸš€

5.9. The t11FamNotificationGroup Group πŸ””

this group has notifications about significant events concerning the Fabric Address management functionality within a switch πŸ’Œ

5.10. Use of RCF and BF ✨

okay bestie, this section is about two fabric-reset commands, Reconfigure Fabric (RCF) and Build Fabric (BF). Both are command codes of the Switch Fabric Internal Link Service (SW_ILS) 🧚 [FC-SW-3] has a warning about them that is literally iconic:

NOTE 13 - Since the RCF causes a complete reconfiguration of the Fabric, and may cause addresses allocated to a Switch to change, this SW_ILS should be used with caution. The BF SW_ILS allows the Fabric to attempt reconfiguration without loss of or change of address and therefore should be attempted before an RCF. Examples of situations in which RCF may be appropriate include resolution of overlapped Domains, or the failure of a Fabric Reconfiguration initiated by a BF.

Ngl the vibe is "be careful, RCF is a big deal" πŸ’€ BF is the gentler option, so try it first.

[FC-MI] also says this:

A Fabric is prohibited from autonomously generating an RCF, but an outside administrative function may request a switch to generate an RCF. Such an administrative function is outside the scope of this technical report.

So the fabric can't just decide to RCF on its own. An outside admin function has to ask 🫢

Here's the good part: the T11-FC-FABRIC-ADDR-MGR-MIB in this document matches both quotes perfectly πŸŽ€ It has two objects, t11FamAutoReconfigure and t11FamRestart, which are both MAX-ACCESS read-write. Setting them is exactly how "an outside administrative function may request a switch to generate an RCF" [FC-MI] happens. Main character energy for the MIB ✨

BUT (and this is a big but) the compliance section says the minimum level of support for those two objects is read-only πŸ™ˆ So an agent is allowed to only read them, not write them.

Also, for both t11FamAutoReconfigure and t11FamRestart, the MIB is only a request to generate. It doesn't actually do the RCF or BF 😭 A successful SNMP SetRequest on these objects will cause an RCF (or BF) to be sent, but SNMP does not/cannot ensure that the SW_ILS operation succeeds. Not its job, periodt πŸ’…


6. Definitions 🌸

6.1. The T11-TC-MIB Module πŸ’œ

T11-TC-MIB DEFINITIONS ::= BEGIN

IMPORTS
    MODULE-IDENTITY, Unsigned32, mib-2
                                     FROM SNMPv2-SMI  -- [RFC2578]
    TEXTUAL-CONVENTION               FROM SNMPv2-TC;  -- [RFC2579]

t11TcMIB MODULE-IDENTITY
    LAST-UPDATED "200603020000Z"
    ORGANIZATION "T11"
    CONTACT-INFO
            "     Claudio DeSanti
                  Cisco Systems, Inc.
                  170 West Tasman Drive
                  San Jose, CA 95134 USA
                  Phone: +1 408 853-9172
                  EMail: cds@cisco.com

                  Keith McCloghrie
                  Cisco Systems, Inc.
                  170 West Tasman Drive
                  San Jose, CA USA 95134
                  Phone: +1 408-526-5260
                  EMail: kzm@cisco.com"
    DESCRIPTION
           "This module defines textual conventions used in T11 MIBs.

           Copyright (C) The Internet Society (2006).  This version
           of this MIB module is part of RFC 4439;  see the RFC
           itself for full legal notices."
    REVISION    "200603020000Z"
    DESCRIPTION
           "Initial version of this MIB module, published as RFC 4439."
    ::= { mib-2 136 }

T11FabricIndex ::= TEXTUAL-CONVENTION
    DISPLAY-HINT  "d"
    STATUS    current
    DESCRIPTION
           "A Fabric Index that is used as a unique
           index value to identify a particular Fabric within
           one (or more) physical infrastructures.

           In an environment that is conformant to FC-SW-3, where
           there is always exactly one Fabric in a single physical
           infrastructure, the value of this Fabric Index will
           always be 1.

           However, the current standard, FC-SW-4, defines
           how multiple Fabrics, each with its own management
           instrumentation, could operate within one (or more)
           physical infrastructures.  When such multiple Fabrics
           are in use, this index value is used to uniquely
           identify a particular Fabric within a physical
           infrastructure.

           Note that the value of this textual convention has a
           range of (0..4095) so as to be consistent with FC-SW-4,
           which says that a 'VF_ID Bitmap' is 512 bytes long, with
           the high-order bit representing VF_ID zero, and the
           low-order bit representing 4095."
    REFERENCE   "Fibre Channel - Switch Fabric - 4 (FC-SW-4),
                 ANSI INCITS 418-2006, section 6.1.27.2.4."
    SYNTAX      Unsigned32 (0..4095)

END

6.2. The T11-FC-FABRIC-ADDR-MGR-MIB Module πŸ¦‹

Here comes the big one. The MIB module starts like this:

T11-FC-FABRIC-ADDR-MGR-MIB  DEFINITIONS ::= BEGIN

-- the Fibre Channel Fabric Address Manager MIB
--
-- for management of the functionality, in Fibre Channel switches,
-- which is used to manage fabric configuration, domains, and
-- addresses within a domain.
--

IMPORTS
    MODULE-IDENTITY, OBJECT-TYPE,
    NOTIFICATION-TYPE, Unsigned32,
    Counter32, Gauge32, mib-2          FROM SNMPv2-SMI   -- [RFC2578]
    MODULE-COMPLIANCE, OBJECT-GROUP,
    NOTIFICATION-GROUP                 FROM SNMPv2-CONF  -- [RFC2580]
    TEXTUAL-CONVENTION, TruthValue,
    RowStatus                          FROM SNMPv2-TC    -- [RFC2579]
    ifIndex                            FROM IF-MIB       -- [IF-MIB]
    fcmInstanceIndex, fcmSwitchIndex,
    FcDomainIdOrZero, FcNameIdOrZero   FROM FC-MGMT-MIB  -- [FC-MGMT]
    T11FabricIndex                     FROM T11-TC-MIB;

t11FcFabricAddrMgrMIB MODULE-IDENTITY

    LAST-UPDATED "200603020000Z"
    ORGANIZATION "T11"
    CONTACT-INFO
            "     Claudio DeSanti
                  Cisco Systems, Inc.
                  170 West Tasman Drive
                  San Jose, CA 95134 USA
                  Phone: +1 408 853-9172
                  EMail: cds@cisco.com

                  Keith McCloghrie
                  Cisco Systems, Inc.
                  170 West Tasman Drive
                  San Jose, CA USA 95134
                  Phone: +1 408-526-5260
                  EMail: kzm@cisco.com"
    DESCRIPTION
           "The MIB module for the Fabric Address management
           functionality defined by the Fibre Channel standards.  For
           the purposes of this MIB, Fabric Address Manager refers to
           the functionality of acquiring DomainID(s) as specified in
           FC-SW-3, and managing Fibre Channel Identifiers as specified
           in FC-FS.  An instance of 'Fabric Address Manager' software
           functionality executes in the Principal Switch, and in each
           other switch.

           After an agent reboot, the values of read-write objects
           defined in this MIB module are implementation-dependent.

           Copyright (C) The Internet Society (2006).  This version of
           this MIB module is part of RFC 4439;  see the RFC itself for
           full legal notices."
    REVISION    "200603020000Z"
    DESCRIPTION
           "Initial version of this MIB module, published as RFC 4439."
    ::= { mib-2 137 }

t11FamNotifications   OBJECT IDENTIFIER ::= { t11FcFabricAddrMgrMIB 0 }
t11FamMIBObjects      OBJECT IDENTIFIER ::= { t11FcFabricAddrMgrMIB 1 }
t11FamMIBConformance  OBJECT IDENTIFIER ::= { t11FcFabricAddrMgrMIB 2 }
t11FamConfiguration   OBJECT IDENTIFIER ::= { t11FamMIBObjects 1 }
t11FamInfo            OBJECT IDENTIFIER ::= { t11FamMIBObjects 2 }
t11FamNotifyControl   OBJECT IDENTIFIER ::= { t11FamMIBObjects 3 }


-- Textual Conventions

T11FamDomainPriority ::= TEXTUAL-CONVENTION

    DISPLAY-HINT  "d"
    STATUS    current
    DESCRIPTION
           "Priority of a switch.

           The Principal Switch selection is influenced by the
           priority of the switches.

           Some values of importance are:

           1   : The highest priority in Principal Switch
                 selection, which is used by the administrator
                 to establish which switch becomes the Principal
                 Switch.
           255 : Indicates that the switch is not capable of
                 acting as a Principal Switch."
    REFERENCE   "Fibre Channel - Switch Fabric - 3 (FC-SW-3),
                 ANSI INCITS 384-2004, section 6.1.5."
    SYNTAX    Unsigned32 (1..255)

T11FamDomainInterfaceRole ::= TEXTUAL-CONVENTION
    STATUS    current
    DESCRIPTION
           "The 'designated' state/role of the Inter-Switch Link (ISL)
           to which an interface connects, or (if not connected)
           the state of the interface:

           nonPrincipal (1)       - non-Principal ISL
           principalUpstream (2)  - Upstream Principal ISL
           principalDownsteam (3) - Downstream Principal ISL
           isolated (4)           - interface is isolated
           down (5)               - interface is down
           unknown (6)            - state/role is unknown
           "
    REFERENCE   "Fibre Channel - Switch Fabric - 3 (FC-SW-3),
                 ANSI INCITS 384-2004, Sections 3.1, 5.7,
                 and Figure 9."
    SYNTAX    INTEGER {
                       nonPrincipal (1),
                       principalUpstream (2),
                       principalDownsteam (3),
                       isolated (4),
                       down (5),
                       unknown (6)
              }

T11FamState ::= TEXTUAL-CONVENTION
    STATUS    current
    DESCRIPTION
           "The state of the Fabric Address Manager, as described in
           Table 86 and Figure 15 of FC-SW-3.

           - 'other' represents a switch that is in a state not
             represented by any of the below enumerations.

           - 'starting' represents a switch engaged in the process
             represented by the first row in Table 86.

           - 'unconfigured' represents a switch that requires
             operator input before it can begin the process
             represented by the first row in Table 86.

           - 'principalSwitchSelection' represents a switch engaged
             in the process represented by the second row in
             Table 86, but not in states F0 or F1 of Figure 15.

           - 'domainIdDistribution' represents a switch engaged in
             the process represented by the third row in Table 86.

           - 'buildFabricPhase' represents a switch that is in
             state F0 of Figure 15.

           - 'reconfigureFabricPhase' represents a switch that is
             in state F1 of Figure 15.

           - 'stable' represents a switch that has successfully
             completed the process represented by the third row in
             Table 86 and has at least one E_Port.

           - 'stableWithNoEports' represents a switch that has
             successfully completed the process represented by the
             third row in Table 86 but has no E_Ports.

           - 'noDomains' represents a switch that has completed
             the process represented by the third row in Table 86
             but failed to obtain a Domain_ID.

           - 'disabled' represents any situation in which the
             corresponding instance of t11FamEnable has the value
             'false'.

           - 'unknown' represents a switch that is confused about
             what state it is in."
    REFERENCE   "Fibre Channel - Switch Fabric - 3 (FC-SW-3),
                 ANSI INCITS 384-2004, Table 86 and Figure 15."
    SYNTAX    INTEGER {

                       other(1),
                       starting(2),
                       unconfigured(3),
                       principalSwitchSelection(4),
                       domainIdDistribution(5),
                       buildFabricPhase(6),
                       reconfigureFabricPhase(7),
                       stable(8),
                       stableWithNoEports(9),
                       noDomains(10),
                       disabled(11),
                       unknown(12)
              }


--
-- t11FamTable
--

Okay bestie, we're picking up right where the table lives πŸ¦‹ t11FamTable is the big ol' home for all the Fabric Address Manager settings you can tweak and check on a Fibre Channel switch πŸ’… Each row is one Fabric that a switch knows about, and the rows show up and vanish on their own as Fabrics get made and deleted ✨

t11FamTable  OBJECT-TYPE
    SYNTAX     SEQUENCE OF T11FamEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "This table contains Fabric Address Manager related
           parameters that are able to be configured and monitored
           in a Fibre Channel switch.  For each of the switches
           (identified by fcmSwitchIndex) managed by a Fibre Channel
           management instance (identified by fcmInstanceIndex),
           there is any entry for each Fabric known to that switch.
           Entries are implicitly created/removed if and when
           additional Fabrics are created/deleted."
    ::= { t11FamConfiguration 1 }

t11FamEntry OBJECT-TYPE
    SYNTAX     T11FamEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "An entry provides information on the local Fabric Address
           Manager functionality for a Fabric known to a
           particular switch."
    INDEX { fcmInstanceIndex, fcmSwitchIndex, t11FamFabricIndex }
    ::= { t11FamTable 1 }

T11FamEntry ::= SEQUENCE {
    t11FamFabricIndex                       T11FabricIndex,
    t11FamConfigDomainId                    FcDomainIdOrZero,
    t11FamConfigDomainIdType                INTEGER,
    t11FamAutoReconfigure                   TruthValue,
    t11FamContiguousAllocation              TruthValue,
    t11FamPriority                          T11FamDomainPriority,
    t11FamPrincipalSwitchWwn                FcNameIdOrZero,
    t11FamLocalSwitchWwn                    FcNameIdOrZero,
    t11FamAssignedAreaIdList                OCTET STRING,
    t11FamGrantedFcIds                      Counter32,
    t11FamRecoveredFcIds                    Counter32,
    t11FamFreeFcIds                         Gauge32,
    t11FamAssignedFcIds                     Gauge32,
    t11FamAvailableFcIds                    Gauge32,
    t11FamRunningPriority                   T11FamDomainPriority,
    t11FamPrincSwRunningPriority            T11FamDomainPriority,
    t11FamState                             T11FamState,
    t11FamLocalPrincipalSwitchSlctns        Counter32,
    t11FamPrincipalSwitchSelections         Counter32,
    t11FamBuildFabrics                      Counter32,
    t11FamFabricReconfigures                Counter32,
    t11FamDomainId                          FcDomainIdOrZero,
    t11FamSticky                            TruthValue,
    t11FamRestart                           INTEGER,
    t11FamRcFabricNotifyEnable              TruthValue,
    t11FamEnable                            TruthValue,
    t11FamFabricName                        FcNameIdOrZero
}

Each row is indexed by three things: the management instance, the switch, and the Fabric 🧚 The row's columns are listed in that T11FamEntry sequence, and the object definitions for each one come next ✨

t11FamFabricIndex OBJECT-TYPE
    SYNTAX      T11FabricIndex
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
           "A unique index value that uniquely identifies a
           particular Fabric known to a particular switch.

           In a Fabric conformant to FC-SW-3, only a single Fabric
           can operate within a physical infrastructure, and thus,
           the value of this Fabric Index will always be 1.

           However, the current standard, FC-SW-4, defines
           how multiple Fabrics, each with its own management
           instrumentation, could operate within one (or more)
           physical infrastructures.  When such multiple Fabrics
           are in use, this index value is used to uniquely
           identify a particular Fabric within a physical
           infrastructure."
    ::= { t11FamEntry 1 }

t11FamConfigDomainId OBJECT-TYPE
    SYNTAX      FcDomainIdOrZero
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
           "The configured Domain_ID of the particular switch on this
           Fabric, or zero if no Domain_ID has been configured.
           The meaning of this object depends on
           t11FamConfigDomainIdType object.

           If t11FamConfigDomainIdType is 'preferred', then the
           configured Domain_ID is called the 'preferred Domain_ID'.
           Valid values are between 0 and 239.  In a situation where
           this Domain_ID cannot be assigned, any other Domain_ID
           will be acceptable.  A value of zero means any Domain_ID.

           If t11FamConfigDomainIdType is 'insistent', then the
           configured Domain_ID is called the 'insistent Domain_ID' and
           valid values are between 1 and 239.  In a situation where
           this Domain_ID cannot be assigned, no other Domain_ID is
           acceptable.

           In both of the above cases, the switch sends an RDI (Request
           Domain_ID) to request this Domain_ID to the Principal
           Switch.  If no Domain_ID is able to be granted in the case
           of 'preferred', or if an 'insistent' Domain_ID is configured
           but not able to be granted, then it is an error condition.
           When this error occurs, the switch will continue as if it
           receives a SW_RJT with a reason/explanation of 'Unable to
           perform command request'/'Domain_ID not available'.  That
           is, its E_Ports on that Fabric will be isolated and the
           administrator informed via a 't11FamDomainIdNotAssigned'
           notification.

           If t11FamConfigDomainIdType is 'static', then the configured
           Domain_ID is called the 'static Domain_ID' and valid values
           are between 1 and 239.  In this situation, there is no
           Principal Switch in the Fabric and the Domain_ID is simply
           assigned by configuration, together with the Fabric_Name.
           A switch configured with a static Domain_ID, on receiving
           an EFP, BF, RCF, DIA, or RDI SW_ILS, shall reply with an
           SW_RJT having Reason Code Explanation 'E_Port is Isolated'
           and shall isolate the receiving E_Port.

           For the persistence of values across reboots, see the
           MODULE-IDENTITY's DESCRIPTION clause."
    REFERENCE   "Fibre Channel - Switch Fabric - 4 (FC-SW-4),
                 ANSI INCITS 418-2006, section 7."

    DEFVAL      { 0 }
    ::= { t11FamEntry 2 }

t11FamConfigDomainIdType OBJECT-TYPE
    SYNTAX      INTEGER {
                       preferred(1),
                       insistent(2),
                       static(3)
                }
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
           "Type of configured Domain_ID contained in
           t11FamConfigDomainId.

           For the persistence of values across reboots, see the
           MODULE-IDENTITY's DESCRIPTION clause."
    DEFVAL  { preferred }
    ::= { t11FamEntry 3 }

t11FamAutoReconfigure OBJECT-TYPE
    SYNTAX      TruthValue
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
           "This object determines how a particular switch
           responds to certain error conditions.

           The condition that might cause these errors is
           the merging of two disjoint Fabrics that have
           overlapping Domain_ID lists.

           If value of this object is 'true', the switch will
           send an RCF (ReConfigureFabric) to rebuild the
           Fabric.

           If 'false', the switch will isolate the E_Ports on
           which the errors happened.

           For the persistence of values across reboots, see the
           MODULE-IDENTITY's DESCRIPTION clause."
    REFERENCE   "Fibre Channel - Switch Fabric - 3 (FC-SW-3),
                   December 2003, sections 6.1.12 & 7.3.
                Fibre Channel - Methodologies for Interconnects
                   (FC-MI), INCITS TR-30-2002, table 14, note g."
    DEFVAL  { false }
    ::= { t11FamEntry 4 }

t11FamContiguousAllocation OBJECT-TYPE
    SYNTAX      TruthValue
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
           "Determines how a particular switch behaves when elected as
           the Principal Switch.

           If true, the switch will only accept RDIs with a contiguous
           allocation; specifically, it will reject RDIs with
           non-contiguous Domain_IDs, and if an RDI for a contiguous
           Domain_ID is not able to be fulfilled, it will try to
           replace all the Domain_IDs in the list with contiguous
           Domain_IDs, and if that fails, the RDI will be rejected.

           If false, then the switch acts normally in granting
           the Domain_IDs even if they are not contiguous.

           For the persistence of values across reboots, see the
           MODULE-IDENTITY's DESCRIPTION clause."
    ::= { t11FamEntry 5 }

t11FamPriority  OBJECT-TYPE
    SYNTAX     T11FamDomainPriority
    MAX-ACCESS read-write
    STATUS     current
    DESCRIPTION
           "The initial or configured priority of a particular switch
           to be used in Principal Switch selection process.

           For the persistence of values across reboots, see the
           MODULE-IDENTITY's DESCRIPTION clause."
    ::= { t11FamEntry 6 }

t11FamPrincipalSwitchWwn OBJECT-TYPE
    SYNTAX      FcNameIdOrZero
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
           "The WWN of the Principal Switch on this Fabric,
           or zero-length string if the identity of the principal
           switch is unknown."
    DEFVAL  { ''H }
    ::= { t11FamEntry 7 }

t11FamLocalSwitchWwn OBJECT-TYPE
    SYNTAX      FcNameIdOrZero
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
           "The WWN of the particular switch on this Fabric."
    ::= { t11FamEntry 8 }

t11FamAssignedAreaIdList    OBJECT-TYPE
    SYNTAX     OCTET STRING (SIZE(0..256))
    MAX-ACCESS read-only
    STATUS      current
    DESCRIPTION
           "The list of (zero or more) Area_IDs that have been
           assigned by a particular switch in this Fabric, formatted
           as an array of octets in ascending order.

           Each octet represents one Area_ID.  So, the list containing
           Area_IDs 23, 45, 235, and 56 would be formatted as the
           4-octet string x'172d38eb'.

           A particular area's Area_ID is used as the index into the
           t11FamAreaTable to get the statistics on that area."
    ::= { t11FamEntry 9 }

t11FamGrantedFcIds OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS      current
    DESCRIPTION
           "The total number of Fibre Channel Address Identifiers
           granted (for local use, i.e., with a particular switch's
           Domain_ID) by the Fabric Address Manager on that switch.

           This counter has no discontinuities other than those
           that all Counter32s have when sysUpTime=0."
    ::= { t11FamEntry 10 }

t11FamRecoveredFcIds OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS      current
    DESCRIPTION
           "The total number of Fibre Channel Address Identifiers that
           have been recovered by the Fabric Address Manager on a
           particular switch since the switch has been initialized.
           A recovered Fibre Channel Address Identifier is one that is
           explicitly returned after previously being used.

           This counter has no discontinuities other than those
           that all Counter32s have when sysUpTime=0."

    ::= { t11FamEntry 11 }

t11FamFreeFcIds OBJECT-TYPE
    SYNTAX     Gauge32
    MAX-ACCESS read-only
    STATUS      current
    DESCRIPTION
           "The number of Fibre Channel Address Identifiers that are
           currently unassigned on this Fabric and could be available
           for assignment either immediately or at some later time.

           The sum of the instances of FreeFcIds and AssignedFcIds
           corresponding to a particular Fabric is the total number of
           Fibre Channel Address Identifiers that the local Fabric
           Address Management is capable of assigning on that Fabric."
    ::= { t11FamEntry 12 }
The Domain_ID objects are the spicy part, so read the t11FamConfigDomainId block carefully πŸ‘€ It changes behaviour depending on which of the three types is picked, and the error path is a whole plot twist πŸ™ˆ

Okay so the next batch is all about the assigned, available, and running priority counters πŸ’–

t11FamAssignedFcIds OBJECT-TYPE
    SYNTAX     Gauge32
    MAX-ACCESS read-only
    STATUS      current
    DESCRIPTION
           "The number of Fibre Channel Address Identifiers that are
           currently assigned on this Fabric.

           The sum of the instances of FreeFcIds and AssignedFcIds
           corresponding to a particular Fabric is the total number of
           Fibre Channel Address Identifiers that the local Fabric
           Address Management is capable of assigning on that Fabric."
    ::= { t11FamEntry 13 }

t11FamAvailableFcIds OBJECT-TYPE
    SYNTAX     Gauge32
    MAX-ACCESS read-only
    STATUS      current
    DESCRIPTION
           "The number of Fibre Channel Address Identifiers that are
           unassigned and currently available for immediate assignment
           on the Fabric, e.g., with the 'Clean Address' bit set to 1."
    REFERENCE
        "Fibre Channel - Framing and Signaling (FC-FS),
         ANSI INCITS 373-2003, section 15.6.2.4.2."
    ::= { t11FamEntry 14 }

t11FamRunningPriority OBJECT-TYPE
    SYNTAX     T11FamDomainPriority
    MAX-ACCESS read-only
    STATUS      current
    DESCRIPTION
           "The running priority of a particular switch on this Fabric.
           This value is initialized to the value of t11FamPriority,
           and subsequently altered as specified by the procedures
           defined in FC-SW-3."
    ::= { t11FamEntry 15 }

t11FamPrincSwRunningPriority OBJECT-TYPE
    SYNTAX     T11FamDomainPriority
    MAX-ACCESS read-only
    STATUS      current
    DESCRIPTION
           "The running priority of the Principal Switch on this
           Fabric."
    ::= { t11FamEntry 16 }

t11FamState OBJECT-TYPE
    SYNTAX     T11FamState
    MAX-ACCESS read-only
    STATUS      current
    DESCRIPTION
           "The state of the Fabric Address Manager on a particular
           switch on this Fabric."
    ::= { t11FamEntry 17 }

t11FamLocalPrincipalSwitchSlctns OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS      current
    DESCRIPTION
           "The number of times a particular switch became the
           Principal Switch on this Fabric.

           This counter has no discontinuities other than those
           that all Counter32s have when sysUpTime=0."
    ::= { t11FamEntry 18 }

t11FamPrincipalSwitchSelections OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS      current
    DESCRIPTION
           "The number of Principal Switch selections on this Fabric.

           This counter has no discontinuities other than those
           that all Counter32s have when sysUpTime=0."
    ::= { t11FamEntry 19 }

t11FamBuildFabrics OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS      current
    DESCRIPTION
           "The number of non-disruptive fabric reconfigurations (BFs)
           that have occurred on this Fabric.

           This counter has no discontinuities other than those
           that all Counter32s have when sysUpTime=0."
    ::= { t11FamEntry 20 }

t11FamFabricReconfigures OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS      current
    DESCRIPTION
           "The number of disruptive fabric reconfigurations (RCFs)
           that have occurred on this Fabric.

           This counter has no discontinuities other than those
           that all Counter32s have when sysUpTime=0."
    ::= { t11FamEntry 21 }

t11FamDomainId OBJECT-TYPE
    SYNTAX      FcDomainIdOrZero
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
           "The Domain_ID of a particular switch on this Fabric or
           zero if no Domain_ID has been assigned."
    ::= { t11FamEntry 22 }

t11FamSticky   OBJECT-TYPE
    SYNTAX      TruthValue
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
           "An indication of whether a particular switch is supporting
           the concept of Preferred Domain_IDs via a best-effort
           attempt to re-assign the same Fibre Channel Address
           Identifier value to a port on the next occasion when a port
           requests an assignment on this Fabric.

           If the value of this object is 'true', then the switch is
           maintaining rows in the t11FamFcIdCacheTable for this
           Fabric."
    ::= { t11FamEntry 23 }

t11FamRestart  OBJECT-TYPE
    SYNTAX     INTEGER {
                       nonDisruptive(1),
                       disruptive(2),
                       noOp(3)
               }
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
           "This object tells the Fabric Address Manager to
           request a Fabric reconfiguration.

           If this object is set to 'disruptive', then an RCF
           (ReConfigure Fabric) is generated in the Fabric
           in order for the Fabric to recover from the errors.

           If this object is set to 'nonDisruptive', then a
           BF (Build Fabric) is generated in the Fabric.

           No action is taken if this object is set to 'noOp'.
           The value of the object when read is always 'noOp'.

           For the persistence of values across reboots, see the
           MODULE-IDENTITY's DESCRIPTION clause."
    REFERENCE   "Fibre Channel - Switch Fabric - 3 (FC-SW-3),
                 ANSI INCITS 384-2004, section 7.3."
    ::= { t11FamEntry 24 }

t11FamRcFabricNotifyEnable OBJECT-TYPE
    SYNTAX     TruthValue
    MAX-ACCESS read-write
    STATUS     current
    DESCRIPTION
           "An indication of whether or not a particular switch
           should issue a t11FamFabricChangeNotify notification on
           sending or receiving ReConfigureFabric (RCF) on a Fabric.

           If the value of the object is 'true', then the
           notification is generated.  If the value is 'false',
           notification is not generated.

           If an implementation requires all Fabrics to have the
           same value, then setting one instance of this object
           to a new object will result in all corresponding
           instances being set to that same new value.

           For the persistence of values across reboots, see the
           MODULE-IDENTITY's DESCRIPTION clause."

    DEFVAL { false }
    ::= { t11FamEntry 25 }

t11FamEnable OBJECT-TYPE
    SYNTAX      TruthValue
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
           "Enables the Fabric Address Manager on this switch
           on this Fabric.

           If enabled on a Fabric, the switch will participate in
           Principal Switch selection, and Domain_IDs are assigned
           dynamically.  If disabled, the switch will not participate
           in Principal Switch selection, and Domain_IDs are
           assigned statically.  Thus, the corresponding value of
           t11FamConfigDomainIdType needs to be 'static'.

           For the persistence of values across reboots, see the
           MODULE-IDENTITY's DESCRIPTION clause."
  REFERENCE   "Fibre Channel - Switch Fabric - 4 (FC-SW-4),
               ANSI INCITS 418-2006, sections 7.1 and 7.3."
  DEFVAL  { true }
  ::= { t11FamEntry 26 }

t11FamFabricName  OBJECT-TYPE
    SYNTAX      FcNameIdOrZero
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
           "The WWN that is configured on this switch to be used as
           the name of this Fabric when the value of t11FamEnable is
           'false'.

           If the value of t11FamEnable is 'true', this value is not
           used.

           Fibre Channel requires that:
               a) all switches in an operational Fabric be
                  configured with the same Fabric name; and
               b) each Fabric have a unique Fabric name.
           If either of these is violated, either by switches within a
           single Fabric being configured with different Fabric names,
           or by multiple Fabrics that share management applications
           or interact in other ways having the same Fabric name,
           then the behavior of the switches and associated management
           functions is not specified by Fibre Channel or Internet
           standards.

           For the persistence of values across reboots, see the
           MODULE-IDENTITY's DESCRIPTION clause."
    REFERENCE   "Fibre Channel - Switch Fabric - 4 (FC-SW-4),
                 ANSI INCITS 418-2006, section 7.1."
    ::= { t11FamEntry 27 }


--
-- t11FamIfTable - Interface configuration
--

t11FamIfTable  OBJECT-TYPE
    SYNTAX     SEQUENCE OF T11FamIfEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "This table contains those Fabric Address Manager parameters
           and status values that are per-interface (identified
           by an ifIndex value), per-Fabric (identified by a
           t11FamFabricIndex value), and per-switch (identified by
           values of fcmInstanceIndex and fcmSwitchIndex).

           An entry in this table is automatically created when
           an E_Port becomes non-isolated on a particular Fabric.

           An entry is deleted automatically from this table if:
           a) the corresponding interface is no longer an E_Port (e.g.,
              a G_Port that is dynamically determined to be an F_Port),
              and all configuration parameter(s) have default values; or
           b) the interface identified by ifIndex no longer exists
              (e.g., because a line-card is physically removed); or
           c) the row in the t11FamTable corresponding the fabric
              identified by t11FamFabricID no longer exists.

           Creating an entry in this table via t11FamIfRowStatus
           provides the means to specify non-default parameter value(s)
           for an interface at a time when the relevant row in this
           table does not exist, i.e., because the interface is either
           down or it is not an E_Port."
    ::= { t11FamConfiguration 2 }

t11FamIfEntry OBJECT-TYPE
    SYNTAX     T11FamIfEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "An entry containing information on the interface
           configuration on the Fabric identified by
           t11FamFabricIndex."
    INDEX { fcmInstanceIndex, fcmSwitchIndex,
            t11FamFabricIndex, ifIndex}
    ::= { t11FamIfTable 1 }

T11FamIfEntry ::= SEQUENCE {
    t11FamIfRcfReject    TruthValue,
    t11FamIfRole         T11FamDomainInterfaceRole,
    t11FamIfRowStatus    RowStatus
}

t11FamIfRcfReject    OBJECT-TYPE
    SYNTAX     TruthValue
    MAX-ACCESS read-create
    STATUS      current
    DESCRIPTION
           "This object determines if the incoming ReConfigure
           Fabric (RCF) messages on this interface on this
           Fabric is accepted or not.  If this object is 'true', then
           the incoming RCF is rejected.  If 'false', incoming RCF is
           accepted.

           Note that this object does not apply to the outgoing
           RCFs generated by this interface.

           Implementations that support write-access to this object
           can do so under whatever conditions they choose."
    DEFVAL {false}
    ::= { t11FamIfEntry 1 }

t11FamIfRole    OBJECT-TYPE
    SYNTAX     T11FamDomainInterfaceRole
    MAX-ACCESS read-only
    STATUS      current
    DESCRIPTION
           "The role of this interface."
    ::= { t11FamIfEntry 2 }

t11FamIfRowStatus    OBJECT-TYPE
    SYNTAX     RowStatus
    MAX-ACCESS read-create
    STATUS      current
    DESCRIPTION
           "The status of this row."
    ::= { t11FamIfEntry 3 }


--
-- t11FamAreaTable
--

okay so the area table is basically the Fabric Address Manager's little notebook of which Port_IDs got handed out in each area πŸ““βœ¨ it's giving organized, bestie πŸ’…

t11FamAreaTable  OBJECT-TYPE
    SYNTAX     SEQUENCE OF T11FamAreaEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "This table contains area assignments per-Fabric by a
           switch's Fabric Address Manager.  Each octet in
           t11FamAssignedAreaList is able to be used to index into
           this table to find information on each area."
    REFERENCE   "Fibre Channel - Switch Fabric - 3 (FC-SW-3),
                 ANSI INCITS 384-2004, section 4.8."
    ::= { t11FamInfo 1 }

t11FamAreaEntry OBJECT-TYPE
    SYNTAX     T11FamAreaEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "An entry gives information on the Area_ID and all
           Port_IDs that have been assigned within an area for
           the Fabric identified by t11FamFabricIndex, by the
           Fabric Address Manager in the switch identified by
           fcmInstanceIndex and fcmSwitchIndex."
    INDEX { fcmInstanceIndex, fcmSwitchIndex,
            t11FamFabricIndex, t11FamAreaAreaId}
    ::= { t11FamAreaTable 1 }

T11FamAreaEntry ::= SEQUENCE {
    t11FamAreaAreaId                Unsigned32,
    t11FamAreaAssignedPortIdList    OCTET STRING
}

t11FamAreaAreaId    OBJECT-TYPE
    SYNTAX     Unsigned32 (0..255)
    MAX-ACCESS not-accessible
    STATUS      current
    DESCRIPTION
           "The Area_ID of this area."
    ::= { t11FamAreaEntry 1 }

t11FamAreaAssignedPortIdList    OBJECT-TYPE
    SYNTAX     OCTET STRING (SIZE(0..256))
    MAX-ACCESS read-only
    STATUS      current
    DESCRIPTION

           "The list of Port_IDs which have been assigned in
           this area and Fabric, formatted as an array of
           octets in ascending order.  There could be zero or more
           Port_IDs assigned on this area and Fabric.

           Each octet represents one Port_ID.  So, the list containing
           the Port_IDs 23, 45, 235, and 56 would be formatted as the
           4-octet string x'172d38eb'."
    ::= { t11FamAreaEntry 2 }

The area stuff is done, so next up is the database table πŸ—‚οΈπŸŒˆ it's basically a record of every Domain_ID that's been handed out in each fabric, and which switch currently holds it πŸ‘‘

t11FamDatabaseTable πŸ—‚οΈ

--
-- t11FamDatabaseTable
--

t11FamDatabaseTable  OBJECT-TYPE
    SYNTAX     SEQUENCE OF T11FamDatabaseEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "This table contains all information known by
           a switch about all the domains that have been
           assigned in each Fabric."
    REFERENCE   "Fibre Channel - Switch Fabric - 3 (FC-SW-3),
                 ANSI INCITS 384-2004, section 4.8."
    ::= { t11FamInfo 2 }

t11FamDatabaseEntry OBJECT-TYPE
    SYNTAX     T11FamDatabaseEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "An entry (conceptual row) in the t11FamDatabaseTable
           containing information about one Domain_ID in the
           Fabric identified by t11FamFabricIndex, and known by
           the switch identified by t11FamFabricIndex and
           t11FamDatabaseDomainId."
    INDEX { fcmInstanceIndex, fcmSwitchIndex,
            t11FamFabricIndex , t11FamDatabaseDomainId}
    ::= { t11FamDatabaseTable 1 }

T11FamDatabaseEntry ::= SEQUENCE {
    t11FamDatabaseDomainId              FcDomainIdOrZero,
    t11FamDatabaseSwitchWwn             FcNameIdOrZero
}

t11FamDatabaseDomainId  OBJECT-TYPE
    SYNTAX     FcDomainIdOrZero (1..239)
    MAX-ACCESS not-accessible
    STATUS      current
    DESCRIPTION
           "The Domain_ID for which this row contains information.
           The value must be non-zero."
    ::= { t11FamDatabaseEntry 1 }

t11FamDatabaseSwitchWwn  OBJECT-TYPE
    SYNTAX      FcNameIdOrZero
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
            "The node name (WWN) of the switch to which the
            corresponding value of t11FamDatabaseDomainId is currently
            assigned for the particular Fabric."
    ::= { t11FamDatabaseEntry 2 }

Next is the FC_ID cache, and this one is honestly iconic πŸ¦‹ the whole point is the Preferred Domain_ID trick: when a port lets go of its address, the switch tries to give it the same one back next time πŸ₯ΉπŸ’–

Fibre Channel Address Identifier cache information 🌸

--
-- Fibre Channel Address Identifier cache information
--
-- The cached information allows the Fabric Address Manager to
-- implement the concept of a Preferred Domain_ID, whereby after a port
-- releases a Fibre Channel Address Identifier value, a switch makes an
-- attempt to re-assign the same Fibre Channel Address Identifier value
-- on the next occasion when that port requests an assignment.
--

t11FamMaxFcIdCacheSize  OBJECT-TYPE
    SYNTAX      Unsigned32 (0..4294967295)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
           "The maximum number of Fibre Channel Address Identifiers
           that are able to be cached in the t11FamFcIdCacheTable.
           If the number is unknown, the value of this object is
           zero."
    ::= { t11FamInfo 3 }

t11FamFcIdCacheTable 🧚

--
-- t11FamFcIdCacheTable
--

t11FamFcIdCacheTable  OBJECT-TYPE
    SYNTAX     SEQUENCE OF T11FamFcIdCacheEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "This table contains all the Fibre Channel Address
           Identifiers that have recently been released by the
           Fabric Address Manager in a switch.  So, it lists
           all the Fibre Channel Address Identifiers that have valid
           WWN-to-Fibre Channel Address Identifier mappings and are
           currently not assigned to any ports.  These Fibre Channel
           Address Identifiers were assigned to ports but have since
           been released.  These cached Fibre Channel Address
           Identifiers contain only Area_ID and Port_ID information.
           This cache is kept to provide best-effort re-assignment of
           same Fibre Channel Address Identifiers; i.e., when an
           Nx_Port asks for a Fibre Channel Address Identifier, soon
           after releasing one, the same value is re-assigned, if
           possible."
    ::= { t11FamInfo 4 }

t11FamFcIdCacheEntry OBJECT-TYPE
    SYNTAX     T11FamFcIdCacheEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "An entry (conceptual row) in the t11FamFcIdCacheTable
           containing information about one Fibre Channel Address
           Identifier that was released from a WWN, corresponding to a
           range of one or more ports connected to the switch
           (identified by t11FamFabricIndex and t11FamFcIdCacheWwn) in
           the Fabric (identified by t11FamFabricIndex).  An entry is
           created when a Fibre Channel Address Identifier is released
           by the last port in the range.  The oldest entry is deleted
           if the number of rows in this table reaches
           t11FamMaxFcIdCacheSize, and its space is required for a new
           entry.  An entry is also deleted when its Fibre Channel
           Address Identifier is assigned to a port."
    INDEX { fcmInstanceIndex, fcmSwitchIndex,
            t11FamFabricIndex, t11FamFcIdCacheWwn}
    ::= { t11FamFcIdCacheTable 1 }

T11FamFcIdCacheEntry ::= SEQUENCE {
    t11FamFcIdCacheWwn                  FcNameIdOrZero,
    t11FamFcIdCacheAreaIdPortId         OCTET STRING,
    t11FamFcIdCachePortIds              Unsigned32
}

t11FamFcIdCacheWwn  OBJECT-TYPE
    SYNTAX     FcNameIdOrZero
    MAX-ACCESS not-accessible
    STATUS      current
    DESCRIPTION
           "The N_Port_Name (WWN) of the port associated with this
           entry."
    ::= { t11FamFcIdCacheEntry 1 }

t11FamFcIdCacheAreaIdPortId  OBJECT-TYPE
    SYNTAX     OCTET STRING (SIZE (2))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
           "The combination of this object and t11FamFcIdCachePortIds
           represent one range of Fibre Channel Address Identifiers,
           which were assigned and later released.  This object
           contains the Area_ID and Port_ID of the first Fibre
           Channel Address Identifier in the range.

           Note that this object is only 2 bytes."
    ::= { t11FamFcIdCacheEntry 2 }

t11FamFcIdCachePortIds  OBJECT-TYPE
    SYNTAX     Unsigned32 (0..65535)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
           "The combination of t11FamFcIdCacheAreaIdPortId and this
           object represent one range of Fibre Channel Address
           Identifiers, which were assigned and later released.  This
           object contains the number of (consecutive) Fibre Channel
           Address Identifiers in the range."
    ::= { t11FamFcIdCacheEntry 3 }

Last stop before the notifications: the notify-only fabric index πŸ”” this one has a little plot twist about FC-SW-4 that you do not want to miss πŸ‘€

Objects for use in notifications πŸ“£

-- Objects for use in notifications

t11FamNotifyFabricIndex OBJECT-TYPE
    SYNTAX      T11FabricIndex
    MAX-ACCESS  accessible-for-notify
    STATUS      current
    DESCRIPTION
           "A unique index value that identifies a particular
           Fabric for which a particular notification is generated.

           In a Fabric conformant to SW-3, only a single Fabric
           can operate within a physical infrastructure, and thus,
           the value of this Fabric Index will always be 1.

           However, the current standard, FC-SW-4, defines
           how multiple Fabrics, each with its own management
           instrumentation, could operate within one (or more)
           physical infrastructures.  In order to accommodate this
           scenario, this index value is used to uniquely identify a
           particular Fabric within a physical infrastructure."
    ::= { t11FamNotifyControl 1 }

Notifications 🚨

-- Notifications

t11FamDomainIdNotAssignedNotify NOTIFICATION-TYPE
    OBJECTS     { t11FamLocalSwitchWwn, t11FamNotifyFabricIndex }
    STATUS      current
    DESCRIPTION
           "This notification indicates that a Domain_ID has not
           been configured or assigned for a particular Fabric,
           identified by t11FamNotifyFabricIndex, on a particular
           switch identified by t11FamLocalSwitchWwn.  This could
           happen under the following conditions, and results in the
           switch isolating E_Ports on the Fabric:

            - if the switch's request for a configured static
              Domain_ID is rejected or no other Domain_ID is
              assigned, then the E_Ports are isolated."
    ::= { t11FamNotifications 1 }

t11FamNewPrincipalSwitchNotify NOTIFICATION-TYPE
    OBJECTS     { t11FamLocalSwitchWwn, t11FamNotifyFabricIndex }
    STATUS      current
    DESCRIPTION
           "This notification indicates that a particular switch,
           identified by t11FamLocalSwitchWwn, has become the new
           Principal Switch on the Fabric identified by
           t11FamNotifyFabricIndex.

           This notification is sent soon after its election as
           the new Principal Switch, i.e., upon expiration of a
           Principal Switch selection timer that is equal to
           twice the Fabric Stability Timeout value (F_S_TOV)."
    ::= { t11FamNotifications 2 }

t11FamFabricChangeNotify NOTIFICATION-TYPE
    OBJECTS     { t11FamLocalSwitchWwn, t11FamNotifyFabricIndex }
    STATUS      current
    DESCRIPTION
           "This notification is sent whenever a particular switch,
           identified by t11FamLocalSwitchWwn, sends or
           receives a Build Fabric (BF) or a ReConfigure Fabric
           (RCF) message on the Fabric identified by
           t11FamNotifyFabricIndex.

           This notification is not sent if a
           't11FamNewPrincipalSwitchNotify' notification is sent
           for the same event."
    ::= { t11FamNotifications 3 }

Almost there, and the conformance section is where the MIB's groups and compliances get their homes 🏑

Conformance πŸŽ€

--
-- Conformance
--

t11FamMIBCompliances OBJECT IDENTIFIER ::= { t11FamMIBConformance 1 }
t11FamMIBGroups OBJECT IDENTIFIER ::= { t11FamMIBConformance 2 }
t11FamMIBCompliance MODULE-COMPLIANCE
    STATUS   current
    DESCRIPTION
           "The compliance statement for Fibre Channel switches
           that implement Fabric Address Manager functionality."
    MODULE
    MANDATORY-GROUPS { t11FamGroup,
                       t11FamDatabaseGroup,
                       t11FamAreaGroup,
                       t11FamNotificationGroup
                     }

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

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

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

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

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

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

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

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

      GROUP  t11FamCacheGroup
      DESCRIPTION
             "This group is mandatory only for switches that
             support the concept of Preferred Domain_ID via a best-
             effort attempt for (short-term) re-assignment of the
             same FC address identifiers."

      GROUP  t11FamCommandGroup
      DESCRIPTION
             "This group is optional."

    ::= { t11FamMIBCompliances 1 }


-- Units of Conformance

t11FamGroup OBJECT-GROUP
    OBJECTS  { t11FamConfigDomainId,
               t11FamConfigDomainIdType,
               t11FamAutoReconfigure,
               t11FamContiguousAllocation,
               t11FamPriority,
               t11FamPrincipalSwitchWwn,
               t11FamLocalSwitchWwn,
               t11FamAssignedAreaIdList,
               t11FamGrantedFcIds,
               t11FamRecoveredFcIds,
               t11FamFreeFcIds,
               t11FamAssignedFcIds,
               t11FamAvailableFcIds,
               t11FamRunningPriority,
               t11FamPrincSwRunningPriority,
               t11FamState,
               t11FamLocalPrincipalSwitchSlctns,
               t11FamPrincipalSwitchSelections,
               t11FamBuildFabrics,
               t11FamFabricReconfigures,
               t11FamDomainId,
               t11FamSticky,
               t11FamRestart,
               t11FamRcFabricNotifyEnable,
               t11FamEnable,
               t11FamFabricName,
               t11FamIfRcfReject,
               t11FamIfRole,
               t11FamIfRowStatus,
               t11FamNotifyFabricIndex
            }
    STATUS   current
    DESCRIPTION
           "A collection of general objects for displaying and
           configuring Fabric Address management."
    ::= { t11FamMIBGroups 1 }

t11FamCommandGroup OBJECT-GROUP
    OBJECTS  { t11FamRestart }
    STATUS   current
    DESCRIPTION
           "A collection of objects used for initiating an
           operation on the Fabric."
    ::= { t11FamMIBGroups 2 }

t11FamDatabaseGroup OBJECT-GROUP
    OBJECTS  { t11FamDatabaseSwitchWwn }
    STATUS   current
    DESCRIPTION
           "A collection of objects containing information about
           Domain-IDs assignments."
    ::= { t11FamMIBGroups 3 }

t11FamAreaGroup OBJECT-GROUP
    OBJECTS  { t11FamAreaAssignedPortIdList }
    STATUS   current
    DESCRIPTION
           "A collection of objects containing information about
           currently assigned addresses within a domain."
    ::= { t11FamMIBGroups 4 }

t11FamCacheGroup OBJECT-GROUP
    OBJECTS  { t11FamMaxFcIdCacheSize,
               t11FamFcIdCacheAreaIdPortId,
               t11FamFcIdCachePortIds
             }
    STATUS   current
    DESCRIPTION
           "A collection of objects containing information about
           recently-released Fibre Channel Address Identifiers."
    ::= { t11FamMIBGroups 5 }

t11FamNotificationGroup NOTIFICATION-GROUP
    NOTIFICATIONS  { t11FamDomainIdNotAssignedNotify,
                     t11FamNewPrincipalSwitchNotify,
                     t11FamFabricChangeNotify }
    STATUS   current
    DESCRIPTION
           "A collection of notifications for status monitoring
           and notification."
    ::= { t11FamMIBGroups 6 }
END

7. Acknowledgements ✨

okay bestie, this doc started life as a work item of the INCITS Task Group T11.5 πŸ’– and the crew wanted to shout out everyone who helped out, from the T11 folks to the IMSS WG reviewers 🫢

  • T11 Chair: Robert Snively, Brocade
  • T11 Vice Chair: Claudio DeSanti, Cisco Systems
  • T11.5 Chair: Roger Cummings, Symantec
  • T11.5 members, especially:
    • Ken Hirata, Emulex
    • Scott Kipp, McData
    • Michael O'Donnell, McData
    • Elizabeth G. Rodriguez, Dot Hill
    • Steven L. Wilson, Brocade

also huge thanks to Orly Nicklass of RAD Data Communications, Bert Wijnen of Lucent, and everyone from the IMSS WG who left review comments 🌸

8. Normative References πŸ“š

these are the docs you NEED to have read first, no skipping πŸ’…

  • [RFC2578] McCloghrie, K., Perkins, D., and J. Schoenwaelder, "Structure of Management Information Version 2 (SMIv2)", STD 58, RFC 2578, April 1999.
  • [RFC2579] McCloghrie, K., Perkins, D., and J. Schoenwaelder, "Textual Conventions for SMIv2", STD 58, RFC 2579, April 1999.
  • [RFC2580] McCloghrie, K., Perkins, D., and J. Schoenwaelder, "Conformance Statements for SMIv2", STD 58, RFC 2580, April 1999.
  • [IF-MIB] McCloghrie, K. and F. Kastenholz, "The Interfaces Group MIB", RFC 2863, June 2000.
  • [FC-MGMT] McCloghrie, K., "Fibre Channel Management MIB", RFC 4044, May 2005.
  • [FC-SW-3] "Fibre Channel - Switch Fabric - 3 (FC-SW-3)", ANSI INCITS 384-2004, June 2004.
  • [FC-SW-4] "Fibre Channel - Switch Fabric - 4 (FC-SW-4)", ANSI INCITS 418-2006, 2006.
  • [FC-FS] "Fibre Channel - Framing and Signaling (FC-FS)" ANSI INCITS 373-2003, April 2003.

9. Informative References 🧚

extra credit reading, lowkey still worth it πŸ¦‹

  • [RFC2837] Teow, K., "Definitions of Managed Objects for the Fabric Element in Fibre Channel Standard", RFC 2837, May 2000.
  • [RFC3410] Case, J., Mundy, R., Partain, D., and B. Stewart, "Introduction and Applicability Statements for Internet-Standard Management Framework", RFC 3410, December 2002.
  • [FC-MI] "Fibre Channel - Methodologies for Interconnects (FC-MI)", INCITS TR-30-2002, November 2002.

10. IANA Considerations πŸŽ€

so IANA handled the paperwork πŸ“ they made two MIB OID assignments, one for the T11-TC-MIB module and one for the T11-FC-FABRIC-ADDR-MGR-MIB module, both under the appropriate subtree(s) ✨

11. Security Considerations πŸ”₯

okay this section is the serious one bestie 😭 SNMP SETs on a network without proper protection can seriously mess with network operations, so read this carefully πŸ’€

these objects have a MAX-ACCESS of read-write and/or read-create, which makes them sensitive or vulnerable in some environments:

         t11FamConfigDomainId, t11FamConfigDomainIdType and
         t11FamContiguousAllocation -- ability to change the address
         allocation policy.

         t11FamRestart and t11FamAutoReconfigure -- ability to cause a
         fabric reconfiguration, e.g., on certain error conditions.

         t11FamPriority -- ability to affect which switch becomes the
         Principal Switch.

         t11FamRcFabricNotifyEnable -- ability to enable/disable a
         notification.

         t11FamIfRcfReject -- ability to change the switch's behavior on
         receipt of an RCF.

         t11FamIfRowStatus -- ability to change an interface
         configuration parameter.

some of the readable objects (anything with a MAX-ACCESS other than not-accessible) can be sensitive too πŸ‘€ so it's important to lock down even GET and/or NOTIFY access, and maybe even encrypt the values when they travel over the network via SNMP πŸ” these are the ones to watch:

         t11FamTable and t11FamIfTable -- contain the configuration,
         status, and statistics of the Fabric Address Manager.

         t11FamAreaTable, t11FamDatabaseTable and t11FamFcIdCacheTable
         -- contain information on currently assigned or recently-
         released addresses.

pre-SNMPv3 versions just didn't have adequate security πŸ’œ even if your network is locked down (say, with IPsec), there's still no control over who on that secure network can GET or SET (read/change/create/delete) the objects in this MIB module πŸ™ˆ

It is RECOMMENDED that implementors consider the security features as provided by the SNMPv3 framework (see [RFC3410], section 8), including full support for the SNMPv3 cryptographic mechanisms (for authentication and privacy) πŸ›‘οΈβœ¨

Further, deployment of SNMP versions prior to SNMPv3 is NOT RECOMMENDED. Instead, it is RECOMMENDED to deploy SNMPv3 and to enable cryptographic security πŸ”‘ it's then on the customer or operator to make sure the SNMP entity giving access to an instance of this MIB module is configured so the objects are only available to the principals (users) who have legitimate rights to GET or SET (change/create/delete) them πŸ‘‘

Authors' Addresses 🌈

   Claudio DeSanti
   Cisco Systems, Inc.
   170 West Tasman Drive
   San Jose, CA 95134 USA

   Phone: +1 408 853-9172
   EMail: cds@cisco.com


   Vinay Gaonkar
   Cisco Systems, Inc.
   170 West Tasman Drive
   San Jose, CA 95134 USA

   Phone: +1 408 527-8576
   EMail: vgaonkar@cisco.com


   Keith McCloghrie
   Cisco Systems, Inc.
   170 West Tasman Drive
   San Jose, CA USA 95134

   Phone: +1 408-526-5260
   EMail: kzm@cisco.com


   Silvano Gai
   Retired

Copyright (C) The Internet Society (2006).

this doc is subject to the rights, licenses and restrictions in BCP 78, and except as set out there, the authors keep all their rights πŸ’…

This document and the information contained herein are provided on an "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

Intellectual Property ✨

okay bestie, let's talk about the legal stuff, because it matters πŸ’… The IETF takes no position on whether any Intellectual Property Rights or other rights that someone might claim over the technology in this document are valid, or how far they reach. It also can't say whether any license under those rights is available or not πŸ€·β€β™€οΈ And it doesn't claim it has done any independent digging to find such rights, so don't assume it did πŸ™ˆ If you want the rules for rights in RFC documents, check out BCP 78 and BCP 79. Those are the official places to look πŸ“š

Want to see what's been disclosed? Copies of IPR disclosures sent to the IETF Secretariat are available, along with any assurances of licenses that people have promised to offer. You can also find the results of anyone trying to get a general license or permission to use those proprietary rights, which is super handy if you're an implementer or user 🌸 All of that lives in the IETF online IPR repository at http://www.ietf.org/ipr πŸ¦‹

The IETF also really wants to hear from you 🫢 If you know about any copyrights, patents, patent applications, or other proprietary rights that might cover technology needed to implement this standard, please tell them! Send it to ietf-ipr@ietf.org and they'll take it from there πŸ’œ


Acknowledgement ✨

Last but not least, the money side πŸ’– The RFC Editor function is funded by the IETF Administrative Support Activity (IASA) πŸŽ€ So the people keeping these documents in order are supported by IASA, and that's a big ✨thank you✨ from all of us 🧚

πŸ“¦ where this page comes from