RFC 4626

MIB for Fibre Channel's Fabric Shortest Path First (FSPF) Protocol

๐Ÿ“… published September 2006, from ietf

RFC 4626: MIB for Fibre Channel's Fabric Shortest Path First (FSPF) Protocol ๐Ÿฆ‹

Okay bestie, let's get into it! ๐Ÿ’– This is RFC 4626, a Standards Track doc from September 2006, under the Network Working Group. Its authors are C. DeSanti, V. Gaonkar, and K. McCloghrie (all from Cisco Systems), plus S. Gai, whose affiliation is listed as "Retired" ๐Ÿซถ. The header doesn't have any Obsoletes or Updates lines, so it's not replacing or changing any other RFC. ๐Ÿ’…

The whole point is a MIB (Management Information Base), which is a set of managed objects you can monitor and configure over network management protocols. This one is for the FSPF routing protocol that runs in Fibre Channel fabrics. โœจ


Status of This Memo

This doc is an Internet standards track protocol spec for the Internet community, and it's asking for discussion and suggestions for improvements ๐ŸŒธ. If you want the current standardization state, check the "Internet Official Protocol Standards" (STD 1). Distribution of this memo is unlimited.

Copyright (C) The Internet Society (2006).

Abstract

So this memo defines a piece of the MIB for network management protocols in the Internet community ๐ŸŽ€. Specifically, it describes managed objects for info about the Fibre Channel network's Fabric Shortest Path First (FSPF) routing protocol. Main character energy!! ๐Ÿ‘‘

Table of Contents

   1. Introduction ....................................................2
   2. The Internet-Standard Management Framework ......................2
   3. Short Overview of Fibre Channel .................................3
      3.1. Introduction ...............................................3
      3.2. FSPF Protocol ..............................................4
      3.3. Virtual Fabrics ............................................4
   4. Relationship to Other MIBs ......................................5
   5. MIB Overview ....................................................5
      5.1. Fibre Channel Management Instance ..........................5
      5.2. Switch Index ...............................................6
      5.3. Fabric Index ...............................................6
      5.4. The MIB Groups .............................................6
           5.4.1. The t11FspfGeneralGroup Group .......................6
           5.4.2. The t11FspfIfGroup Group ............................7
           5.4.3. The t11FspfDatabaseGroup Group ......................7
           5.4.4. The t11FspfNotificationGroup Group ..................7
   6. The T11-FC-FSPF-MIB Module ......................................7
   7. Acknowledgements ...............................................31
   8. IANA Considerations ............................................32
   9. Security Considerations ........................................32
   10. Normative References ..........................................33
   11. Informative References ........................................34

1. Introduction โœจ

Okay so this section is basically the Abstract again, just more detailed ๐Ÿ™ˆ. It defines a piece of the MIB for network management protocols in the Internet community. The bit it really cares about is the managed objects for the Fibre Channel network's FSPF routing protocol, which is specified in [FC-SW-4].

Here's the key words bit, and it's important ๐Ÿ’€. The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 [RFC2119]. So when you see those in capitals, they carry real weight. ๐Ÿ”ฅ

2. The Internet-Standard Management Framework ๐Ÿงš

If you want the full tea on the current Internet-Standard Management Framework docs, check out section 7 of RFC 3410 [RFC3410] ๐Ÿ“.

So managed objects get accessed through a virtual info store called the Management Information Base, or MIB. Usually you reach them through the Simple Network Management Protocol (SNMP) ๐Ÿ’œ. The objects in the MIB are 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]. The SMI stuff is a whole thing but it's giving organized โœจ.

3. Short Overview of Fibre Channel ๐ŸŒˆ

3.1. Introduction

Okay, 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, High-Performance Parallel Interface (HIPPI) data framing, IP (Internet Protocol), IEEE 802.2, and more.

Physically, Fibre Channel is a bunch of communication points called N_Ports, which connect either through a switching network (called a Fabric) or by a point-to-point link ๐Ÿฆ‹. A Fibre Channel "node" is made of one or more N_Ports. A Fabric can have multiple Interconnect Elements, and some of them are switches. An N_Port hooks into the Fabric through a switch port called an F_Port. When multiple FC nodes plug into a single switch port through an "Arbitrated Loop" topology, that switch port is called an FL_Port, and the nodes' ports are NL_Ports. The term Nx_Port means either an N_Port or an NL_Port, and the term Fx_Port means either an F_Port or an FL_Port. A switch port that connects to another switch port through an Inter-Switch Link (ISL) is an E_Port. A B_Port connects a bridge device with an E_Port on a switch, and it provides a subset of E_Port functionality. It's a whole family tree ๐ŸŒณ.

Lots of Fibre Channel components have globally-unique names, including the fabric, each node, and most ports ๐Ÿ’–. These names are usually formatted as World Wide Names (WWNs). You can find more about WWNs in [FC-FS]. WWNs are expected to stay persistent across agent and unit resets.

Fibre Channel frames carry 24-bit address identifiers that show the frame's source and destination ports. Every FC port has both an address identifier and a WWN. When a fabric is in use, the FC address identifiers are dynamic and get assigned by a switch ๐Ÿงš. Each octet of a 24-bit address is a level in an address hierarchy, and the Domain_ID is the highest level.

Routing frames inside the Fabric is normally based on a routing protocol called Fabric Shortest Path First (FSPF). FSPF is a link state path selection protocol, which is defined in Section 8 of [FC-SW-4] ๐Ÿ’…. It keeps track of the state of the links on all switches in the Fabric and gives each link a cost. The protocol works out paths from a switch to every other switch by adding up the cost of all the links on the path, then picks the path with the lowest total cost. The collection of link states (including cost) for all the switches in a Fabric is the topology database, which is also called the link-state database ๐Ÿ”ฅ.

3.2. FSPF Protocol

FSPF has four major components:

  • a) A Hello protocol, used to establish connectivity with a neighbor switch, to establish the identity of the neighbor switch, and to exchange FSPF parameters and capabilities;
  • b) A replicated topology database, with protocols and mechanisms to keep the databases synchronized across the Fabric;
  • c) A path computation algorithm (e.g., Dijkstra's algorithm);
  • d) A routing table update.

The topology database synchronization has two major components: an initial database synchronization and an update mechanism ๐ŸŒธ. The initial synchronization happens when a switch is initialized, or when an Inter-Switch Link (ISL) comes up. The update mechanism runs in two situations:

  • a) When there is a link state change; for example, an ISL going down or coming up;
  • b) On a periodic basis, to prevent switches from deleting topology information from the database.

Also, all connections between Fibre Channel switches are point-to-point. Just so we're clear ๐Ÿซถ.

3.3. Virtual Fabrics

The latest standard for an interconnecting Fabric with multiple Fabric Switch elements is [FC-SW-4]. [FC-SW-4] carries forward the previous version's spec for running a single Fabric in a physical infrastructure, and it adds the definition of Virtual Fabrics plus how multiple Virtual Fabrics can run within one (or more) physical infrastructures ๐Ÿฆ‹. Virtual Fabrics let each frame get tagged in its header to show which of several Virtual Fabrics that frame is being sent on. All frames entering a particular "Core Switch" [FC-SW-4] (aka a physical switch) on the same Virtual Fabric get processed by the same "Virtual Switch" inside that Core switch. Iykyk ๐Ÿ‘‘.

4. Relationship to Other MIBs ๐Ÿ’œ

The first standardized MIB module for Fibre Channel [RFC4044] was focussed 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 [RFC2863] for Fibre Channel interfaces ๐Ÿ“.

This MIB module goes beyond [FC-MGMT] to cover how the FSPF routing protocol works in Fibre Channel switches โœจ.

This MIB module only has info specific to FSPF. Info that would still apply if some other routing protocol were used is specified in a separate MIB module ๐ŸŒˆ.

This MIB module imports some common Textual Conventions from T11-TC-MIB, which is defined in [RFC4439] ๐ŸŽ€.

5. MIB Overview ๐Ÿงš

This MIB module gives you the means to monitor how one or more instances of the FSPF protocol are running, and to configure some of their parameters ๐Ÿ’….

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 can get grouped into management instances however is most convenient for the implementation(s) ๐ŸŒธ. For example, one grouping is a single SNMP agent with multiple AgentX [RFC2741] sub-agents, where each sub-agent implements a different Fibre Channel management instance.

The object, fcmInstanceIndex, is IMPORTed from the FC-MGMT-MIB [FC-MGMT] as the index value that uniquely identifies each Fibre Channel management instance within the same SNMP context ([RFC3411], Section 3.3.1) ๐Ÿ’–.

5.2. Switch Index

The FC-MGMT-MIB [FC-MGMT] defines the fcmSwitchTable as a table of info 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 that uniquely identifies a Fibre Channel switch among those (one or more) managed by the same Fibre Channel management instance ๐Ÿซถ.


Okay, that's the setup done ๐ŸŽ€. Next up is section 6, where we get into the actual T11-FC-FSPF-MIB module, so stay tuned, bestie! ๐Ÿงš๐Ÿ’œ

5.3. Fabric Index โœจ

okay so whether a switch is talking to one physical Fabric (no Virtual Fabrics involved) or living its best life inside a Virtual Fabric, FSPF works exactly the same way ๐Ÿ’…. so this MIB module puts all the Fabric stuff into tables that are INDEX-ed by an arbitrary integer called a "Fabric Index" ๐ŸŽ€. its syntax gets IMPORTed from the T11-TC-MIB. if a device is hooked up to one single physical Fabric with no virtual ones, the Fabric Index is always going to be 1 ๐ŸŒธ. but once you've got multiple virtual and/or physical Fabrics going on, this index is how you tell them apart ๐Ÿ”ฅ.

it's quite possible, and may even be likely, that a Fibre Channel switch has ports connected to multiple virtual and/or physical Fabrics ๐Ÿ‘€. so to make life easier for a management protocol query asking about every Fabric one switch is connected to, fcmSwitchIndex gets listed before t11FspfFabricIndex whenever they both show up in the same INDEX clause ๐Ÿงš.

5.4. The MIB Groups ๐Ÿ’œ

this section covers the four MIB groups in the MIB module ๐Ÿฆ‹.

5.4.1. The t11FspfGeneralGroup Group ๐ŸŒˆ

this group is all about per-Fabric monitoring of the FSPF state, plus per-Fabric monitoring and configuration of FSPF parameters ๐Ÿ“.

5.4.2. The t11FspfIfGroup Group ๐Ÿซถ

this group handles per-interface monitoring of FSPF state and statistics, plus per-interface monitoring and configuration of FSPF parameters โœจ.

5.4.3. The t11FspfDatabaseGroup Group ๐ŸŽ€

this one lets you monitor the info sitting in the FSPF topology database ๐Ÿ‘‘.

5.4.4. The t11FspfNotificationGroup Group โญ

this group holds the notifications that get generated when asynchronous events happen during FSPF operation ๐Ÿ””.


6. The T11-FC-FSPF-MIB Module ๐Ÿฆ‹

T11-FC-FSPF-MIB DEFINITIONS ::= BEGIN
--
-- For management of FSPF, the Fibre Channel routing protocol.
--

IMPORTS
    MODULE-IDENTITY, OBJECT-TYPE, NOTIFICATION-TYPE,
    Counter32, Integer32, Unsigned32, TimeTicks,
    Gauge32, mib-2                     FROM SNMPv2-SMI   -- [RFC2578]
    MODULE-COMPLIANCE, OBJECT-GROUP,
    NOTIFICATION-GROUP                 FROM SNMPv2-CONF  -- [RFC2580]
    TEXTUAL-CONVENTION, RowStatus, StorageType,
    TruthValue                         FROM SNMPv2-TC    -- [RFC2579]
    ifIndex, InterfaceIndex            FROM IF-MIB       -- [RFC2863]
    fcmInstanceIndex, fcmSwitchIndex,
    FcDomainIdOrZero                   FROM FC-MGMT-MIB  -- [FC-MGMT]
    T11FabricIndex                     FROM T11-TC-MIB   -- [RFC4439]
    t11FamConfigDomainId
                       FROM T11-FC-FABRIC-ADDR-MGR-MIB;  -- [RFC4439]

t11FcFspfMIB MODULE-IDENTITY
    LAST-UPDATED "200608140000Z"
    ORGANIZATION "T11"
    CONTACT-INFO
                   "Claudio DeSanti
                    Cisco Systems, Inc.
                    170 West Tasman Drive
                    San Jose, CA 95134 USA
                    EMail: cds@cisco.com
                    Keith McCloghrie
                    Cisco Systems, Inc.
                    170 West Tasman Drive
                    San Jose, CA USA 95134
                    Email: kzm@cisco.com"
    DESCRIPTION
           "The MIB module for managing the Fabric Shortest Path
           First (FSPF) protocol.  FSPF is specified in FC-SW-4.

           Copyright (C) The Internet Society (2006).  This version of
           this MIB module is part of RFC 4626;  see the RFC itself for
           full legal notices."
    REVISION   "200608140000Z"
    DESCRIPTION
           "Initial version of this MIB module published as RFC4626."

    ::= { mib-2 143 }

t11FspfNotifications      OBJECT IDENTIFIER ::= { t11FcFspfMIB 0 }
t11FspfObjects            OBJECT IDENTIFIER ::= { t11FcFspfMIB 1 }
t11FspfConformance        OBJECT IDENTIFIER ::= { t11FcFspfMIB 2 }
t11FspfConfiguration      OBJECT IDENTIFIER ::= { t11FspfObjects 1 }
t11FspfDatabase           OBJECT IDENTIFIER ::= { t11FspfObjects 2 }

--
-- TEXTUAL CONVENTIONS

T11FspfLsrType ::= TEXTUAL-CONVENTION
    STATUS    current
    DESCRIPTION
           "Type of the Link State Record.

           FC-SW-4 defines two types of LSRs and allows for the
           possibility for more will be defined in the future:

               01      - Switch Link Record
               02      - Obsolete
               240 - 255 - Vendor Specific
               others  - Reserved.
           "
    REFERENCE
           "Fibre Channel - Switch Fabric - 4 (FC-SW-4),
            ANSI INCITS 418-2006, section 6.1.9.3."
    SYNTAX    Integer32 (0..255)

T11FspfLinkType ::= TEXTUAL-CONVENTION
    STATUS    current
    DESCRIPTION

           "Type of an the FSPF Link.  Presently defined values:

               1           - Point-to-Point
               240-255     - Vendor Specific
               all others  - Reserved.
           "
    REFERENCE
           "Fibre Channel - Switch Fabric - 4 (FC-SW-4),
           ANSI INCITS 418-2006, section 6.1.9.4."
    SYNTAX    Integer32 (0..255)

T11FspfInterfaceState ::= TEXTUAL-CONVENTION
    STATUS    current
    DESCRIPTION
           "The state of the FSPF Neighbor Finite State Machine
           for the neighbor (switch) on a particular interface.
           Possible values are :

                down(1)         - Down
                init(2)         - Init
                dbExchange(3)   - Database Exchange
                dbAckwait(4)    - Database AckWait
                dbWait(5)       - Database Wait
                full(6)         - Full (Connected)
           "
    REFERENCE
           "Fibre Channel - Switch Fabric - 4 (FC-SW-4),
           ANSI INCITS 418-2006, section 8.7."
    SYNTAX  INTEGER {
                   down(1),
                   init(2),
                   dbExchange(3),
                   dbAckwait(4),
                   dbWait(5),
                   full(6)
            }

T11FspfLastCreationTime ::= TEXTUAL-CONVENTION
    STATUS current
    DESCRIPTION
           "This TC describes an object that stores the last time
           it, and the row containing it, was created.

           This can be used by management applications to determine
           that a row has been deleted and re-created between reads,
           causing an otherwise undetectable discontinuity in the
           data."
    SYNTAX  TimeTicks

--
-- t11FspfTable

t11FspfTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF T11FspfEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
           "This table allows the users to configure and monitor FSPF's
           per-Fabric parameters and statistics on all Fabrics known to
           locally managed switches.

           Entries are created/removed by the agent if and when
           (Virtual) Fabrics are created/deleted."
    ::= { t11FspfConfiguration 1 }

t11FspfEntry OBJECT-TYPE
    SYNTAX      T11FspfEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
           "An entry containing FSPF variables, parameters, and
           statistics on a particular switch (identified by values
           of fcmInstanceIndex and fcmSwitchIndex) for a particular
           Fabric (identified by a t11FspfFabricIndex value).

           (Note that the local switch's per-fabric Domain-ID is
           available in t11FamConfigDomainId, which is defined in
           T11-FC-FABRIC-ADDR-MGR-MIB.)"
    INDEX      { fcmInstanceIndex, fcmSwitchIndex, t11FspfFabricIndex }
    ::= { t11FspfTable 1 }

T11FspfEntry ::= SEQUENCE  {
    t11FspfFabricIndex                 T11FabricIndex,
    t11FspfMinLsArrival                Unsigned32,
    t11FspfMinLsInterval               Unsigned32,
    t11FspfLsRefreshTime               Unsigned32,
    t11FspfMaxAge                      Unsigned32,
    t11FspfMaxAgeDiscards              Counter32,
    t11FspfPathComputations            Counter32,
    t11FspfChecksumErrors              Counter32,
    t11FspfLsrs                        Gauge32,
    t11FspfCreateTime                  T11FspfLastCreationTime,
    t11FspfAdminStatus                 INTEGER,
    t11FspfOperStatus                  INTEGER,
    t11FspfNbrStateChangNotifyEnable   TruthValue,
    t11FspfSetToDefault                INTEGER,
    t11FspfStorageType                 StorageType

}

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

           In a Fabric conformant to FC-SW-4, multiple Virtual Fabrics
           can operate within one (or more) physical infrastructures.
           In such a case, index value is used to uniquely identify a
           particular Fabric within a physical infrastructure.

           In a Fabric that has (can have) only a single Fabric
           operating within the physical infrastructure, the
           value of this Fabric Index will always be 1."
    ::= { t11FspfEntry 1 }

t11FspfMinLsArrival OBJECT-TYPE
    SYNTAX      Unsigned32 (0..65535)
    UNITS       "milliSeconds"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
           "The minimum time after accepting a Link State Record
           (LSR) on this Fabric before accepting another update of
           the same LSR on the same Fabric.

           An LSR update that is not accepted because of this time
           interval is discarded."
    REFERENCE  "Fibre Channel - Switch Fabric - 4 (FC-SW-4),
               ANSI INCITS 418-2006, sections 8.6.4.5 & 15.1."
    DEFVAL     {1000}
    ::= { t11FspfEntry 2 }

t11FspfMinLsInterval OBJECT-TYPE
    SYNTAX      Unsigned32 (0..65535)
    UNITS       "milliSeconds"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
           "The minimum time after this switch sends an LSR on this
           Fabric before it will send another update of the same LSR
           on the same Fabric."
    REFERENCE  "Fibre Channel - Switch Fabric - 4 (FC-SW-4),
               ANSI INCITS 418-2006, section 15.1."

    DEFVAL     {5000}
    ::= { t11FspfEntry 3 }

t11FspfLsRefreshTime OBJECT-TYPE
    SYNTAX      Unsigned32
    UNITS       "Minutes"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
           "The interval between transmission of refresh LSRs on this
           Fabric."
    REFERENCE  "Fibre Channel - Switch Fabric - 4 (FC-SW-4),
               ANSI INCITS 418-2006, sections 8.5.1 & 15.1."
    DEFVAL     {30}
    ::= { t11FspfEntry 4 }

t11FspfMaxAge OBJECT-TYPE
    SYNTAX      Unsigned32
    UNITS       "Minutes"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
           "The maximum age an LSR will be retained in the FSPF
           database on this Fabric.  An LSR is removed from the
           database after MaxAge is reached."
    REFERENCE  "Fibre Channel - Switch Fabric - 4 (FC-SW-4),
               ANSI INCITS 418-2006, section 15.1."
    DEFVAL     {60}
    ::= { t11FspfEntry 5 }

t11FspfMaxAgeDiscards OBJECT-TYPE
    SYNTAX      Counter32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
           "The number of LSRs discarded due to their age reaching
           t11FspfMaxAge in this Fabric.  The last discontinuity of
           this counter is indicated by t11FspfCreateTime."
    ::= { t11FspfEntry 6 }

t11FspfPathComputations OBJECT-TYPE
    SYNTAX      Counter32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
           "The number of times that the path computation algorithm
           has been invoked by this Switch on this Fabric to compute
           a set of minimum cost paths for this Fabric.  The last
           discontinuity of this counter is indicated by
           t11FspfCreateTime."
    REFERENCE  "Fibre Channel - Switch Fabric - 4 (FC-SW-4),
               ANSI INCITS 418-2006, section 8.1.1."
    ::= { t11FspfEntry 7 }

okay bestie, this is where the counters and the per-interface table show up ๐Ÿ“Šโœจ the counters keep track of what the switch has seen, and the interface table gets its own very specific rules ๐ŸŽ€

Here's the first chunk, with the checksum counter, the link state counters, the Fabric status objects, and the set-to-default and storage stuff ๐Ÿ’…

t11FspfChecksumErrors OBJECT-TYPE
    SYNTAX      Counter32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
           "The number of FSPF checksum errors that were detected
           locally (and therefore discarded) on this Fabric.
           The last discontinuity of this counter is indicated by
           t11FspfCreateTime."
    REFERENCE  "Fibre Channel - Switch Fabric - 4 (FC-SW-4),
               ANSI INCITS 418-2006, section 8.5.4."
    ::= { t11FspfEntry 8 }

t11FspfLsrs OBJECT-TYPE
    SYNTAX      Gauge32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
           "The current number of entries for this Fabric in the
           t11FspfLsrTable."
    ::= { t11FspfEntry 9 }

t11FspfCreateTime OBJECT-TYPE
    SYNTAX      T11FspfLastCreationTime
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
           "The value of sysUpTime when this entry was last created."
    ::= { t11FspfEntry 10 }

t11FspfAdminStatus OBJECT-TYPE
    SYNTAX      INTEGER {
                    up(1),
                    down(2)
                    }
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
           "The desired state of FSPF in this Fabric.  If value of
           this object is set to 'up', then FSPF is enabled in
           this Fabric.  If set to 'down', then FSPF is disabled
           in this Fabric -- when FSPF is disabled, FSPF provides
           no routes to be included in the T11-FC-ROUTE-MIB module.
           (see the T11-FC-ROUTE-MIB)."
    REFERENCE  "T11-FC-ROUTE-MIB, The Fibre Channel Routing
                Information MIB, RFC4625."
    DEFVAL {up}
    ::= { t11FspfEntry 11 }

t11FspfOperStatus OBJECT-TYPE
    SYNTAX      INTEGER {
                      up(1),
                      down(2)
                     }
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
           "State of FSPF in this Fabric.  If 't11FspfAdminStatus' is
           'down', then the 't11FspfOperStatus' should be 'down'.
           If 't11FspfAdminStatus' is changed to 'up', then
           't11FspfOperStatus' should change to 'up' as and when
           FSPF is active in this Fabric."
    ::= { t11FspfEntry 12 }

t11FspfNbrStateChangNotifyEnable OBJECT-TYPE
    SYNTAX     TruthValue
    MAX-ACCESS read-write
    STATUS     current
    DESCRIPTION
           "Specifies whether or not the local agent should
           issue the notification 't11FspfNbrStateChangNotify'
           when the local switch learns of a change of state
           in the FSPF Neighbor Finite State Machine on an
           interface in this Fabric.
           If the value of the object is 'true, then the
           notification is generated.  If the value is 'false',
           notification is not generated."
    DEFVAL { false }
    ::= { t11FspfEntry 13 }

t11FspfSetToDefault OBJECT-TYPE
    SYNTAX      INTEGER {
                     default(1),
                     noOp(2)
                }
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
           "Setting this value to 'default' changes the value of each
           and every writable object in this row to its default
           value.

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

t11FspfStorageType OBJECT-TYPE
    SYNTAX      StorageType
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION
           "The storage type for read-write objects in this
           conceptual row.

           Conceptual rows having the value 'permanent' need not
           allow write-access to any columnar objects in the row."
    DEFVAL { nonVolatile }
    ::= { t11FspfEntry 15 }

Now we're entering the per-interface table, and this part is lowkey the most rule-heavy bit of the whole MIB ๐Ÿงš it covers when rows get created and when they get auto-deleted, so pay attention โœจ

--
-- t11FspfIfTable

t11FspfIfTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FspfIfEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "This table allows the users to configure and monitor
           the FSPF parameters that are per-interface (identified
           by a t11FspfIfIndex value), per-Fabric (identified by a
           t11FspfFabricIndex value), and per-switch (identified by
           values of fcmInstanceIndex and fcmSwitchIndex).

           Creating a row in this table via t11FspfIfRowStatus
           provides the means to specify non-default parameter value(s)
           for an interface at a time when the relevant row in this
           table would not otherwise exist because the interface is
           either down or it is not an E_Port, but the corresponding
           row in the t11FspfTable must already exist.

           After the non-default values have been specified for a
           port's parameters, they need to be retained in this table,
           even when the port becomes 'isolated'.  However, having
           unnecessary rows in this table clutters it up and makes
           those rows that are useful harder for an NMS to find.
           Therefore, when an E_Port becomes isolated, its row gets
           deleted if and only if all of its parameter values are the
           default values; also, when an E_Port becomes non-isolated
           in a particular Fabric, a row in this table needs to exist
           and is automatically created, if necessary.

           The specific conditions for an automated/implicit deletion
           of a row are:
           a) if the corresponding interface is no longer an E_Port
              (e.g., a G_Port which is dynamically determined to be an
              F_Port), and all configurable parameters have default
              values; or
           b) if the interface identified by t11FspfIfIndex no longer
              exists (e.g., because a line-card is physically removed);
              or
           c) if the corresponding row in the t11FspfTable is deleted.
           "
    ::= { t11FspfConfiguration 2 }

And here's the rest of the interface entry: the index, the timers, and the packet counters ๐Ÿฆ‹

t11FspfIfEntry OBJECT-TYPE
    SYNTAX      T11FspfIfEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
           "An entry containing FSPF information for the interface
           identified by t11FspfIfIndex, on the fabric identified
           by t11FspfFabricIndex, on the switch identified by
           fcmSwitchIndex."
    INDEX       { fcmInstanceIndex, fcmSwitchIndex,
                  t11FspfFabricIndex, t11FspfIfIndex }
    ::= { t11FspfIfTable 1 }

T11FspfIfEntry ::= SEQUENCE {
    t11FspfIfIndex                     InterfaceIndex,
    t11FspfIfHelloInterval             Unsigned32,
    t11FspfIfDeadInterval              Unsigned32,
    t11FspfIfRetransmitInterval        Unsigned32,
    t11FspfIfInLsuPkts                 Counter32,
    t11FspfIfInLsaPkts                 Counter32,
    t11FspfIfOutLsuPkts                Counter32,
    t11FspfIfOutLsaPkts                Counter32,
    t11FspfIfOutHelloPkts              Counter32,
    t11FspfIfInHelloPkts               Counter32,
    t11FspfIfRetransmittedLsuPkts      Counter32,
    t11FspfIfInErrorPkts               Counter32,
    t11FspfIfNbrState                  T11FspfInterfaceState,
    t11FspfIfNbrDomainId               FcDomainIdOrZero,
    t11FspfIfNbrPortIndex              Unsigned32,
    t11FspfIfAdminStatus               INTEGER,
    t11FspfIfCreateTime                T11FspfLastCreationTime,
    t11FspfIfSetToDefault              INTEGER,
    t11FspfIfLinkCostFactor            Unsigned32,
    t11FspfIfStorageType               StorageType,
    t11FspfIfRowStatus                 RowStatus
}

t11FspfIfIndex OBJECT-TYPE
    SYNTAX      InterfaceIndex
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
           "The value of ifIndex that identifies the local
           Fibre Channel interface for which this entry
           contains FSPF information."
    ::= { t11FspfIfEntry 1 }

t11FspfIfHelloInterval OBJECT-TYPE
    SYNTAX      Unsigned32 (1..65535)
    UNITS       "Seconds"
    MAX-ACCESS  read-create
    STATUS      current
    DESCRIPTION
           "Interval between the periodic HELLO messages sent on this
           interface in this Fabric to verify the link health.  Note
           that this value must be same at both ends of a link in
           this Fabric."
    DEFVAL {20}
    ::= { t11FspfIfEntry 2 }

t11FspfIfDeadInterval OBJECT-TYPE
    SYNTAX      Unsigned32 (2..65535)
    UNITS       "Seconds"
    MAX-ACCESS  read-create
    STATUS      current
    DESCRIPTION
           "Maximum time for which no HELLO messages can be received
           on this interface in this Fabric.  After this time, the
           interface is assumed to be broken and removed from the
           database.  Note that this value must be greater than the
           HELLO interval specified on this interface in this Fabric."
    DEFVAL {80}
    ::= { t11FspfIfEntry 3 }

t11FspfIfRetransmitInterval OBJECT-TYPE
    SYNTAX      Unsigned32 (1..65535)
    UNITS       "Seconds"
    MAX-ACCESS  read-create
    STATUS      current
    DESCRIPTION

           "The time after which an unacknowledged LSR is
           retransmitted on this interface in this Fabric."
    DEFVAL {5}
    ::= { t11FspfIfEntry 4 }

t11FspfIfInLsuPkts OBJECT-TYPE
    SYNTAX      Counter32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
           "Number of Link State Update (LSU) packets received on
           this interface in this Fabric.  The last discontinuity
           of this counter is indicated by t11FspfIfCreateTime."
    ::= { t11FspfIfEntry 5 }

t11FspfIfInLsaPkts OBJECT-TYPE
    SYNTAX      Counter32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
           "Number of Link State Acknowledgement (LSA) packets
           received on this interface in this Fabric.  The last
           discontinuity of this counter is indicated by
           t11FspfIfCreateTime."
    ::= { t11FspfIfEntry 6 }

t11FspfIfOutLsuPkts OBJECT-TYPE
    SYNTAX      Counter32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
           "Number of Link State Update (LSU) packets transmitted
           on this interface in this Fabric.  The last
           discontinuity of this counter is indicated by
           t11FspfIfCreateTime."
    ::= { t11FspfIfEntry 7 }

t11FspfIfOutLsaPkts OBJECT-TYPE
    SYNTAX      Counter32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
           "Number of Link State Acknowledgement (LSA) packets
           transmitted on this interface in this Fabric.  The
           last discontinuity of this counter is indicated by
           t11FspfIfCreateTime."
    ::= { t11FspfIfEntry 8 }

t11FspfIfOutHelloPkts OBJECT-TYPE
    SYNTAX      Counter32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
           "Number of HELLO packets transmitted on this interface in
           this Fabric.  The last discontinuity of this counter is
           indicated by t11FspfIfCreateTime."
    ::= { t11FspfIfEntry 9 }

t11FspfIfInHelloPkts OBJECT-TYPE
    SYNTAX      Counter32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
           "Number of HELLO packets received on this interface in
           this Fabric.  The last discontinuity of this counter is
           indicated by t11FspfIfCreateTime."
    ::= { t11FspfIfEntry 10 }

t11FspfIfRetransmittedLsuPkts OBJECT-TYPE
    SYNTAX      Counter32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
           "The number of LSU packets that contained one or more
           retransmitted LSRs, and that were transmitted on this
           interface in this Fabric.  The last discontinuity of
           this counter is indicated by t11FspfIfCreateTime."
    ::= { t11FspfIfEntry 11 }
t11FspfIfInErrorPkts OBJECT-TYPE
    SYNTAX      Counter32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
           "Number of invalid FSPF control packets received on this
           interface in this Fabric.  The last discontinuity of
           this counter is indicated by t11FspfIfCreateTime."
    ::= { t11FspfIfEntry 12 }

t11FspfIfNbrState OBJECT-TYPE
    SYNTAX      T11FspfInterfaceState
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
           "The state of FSPF's 'neighbor state machine', which is
           the operational state of the interaction with the
           neighbor's interface that is connected to this interface.

           If the 't11FspfIfAdminStatus' is 'down', then this object
           should be 'down'.  If the 't11FspfIfAdminStatus' is 'up',
           then this object's value depends on the state of FSPF's
           'neighbor state machine' on this interface in this
           Fabric."
    REFERENCE  "Fibre Channel - Switch Fabric - 4 (FC-SW-4),
               ANSI INCITS 418-2006, section 8.7"
    ::= { t11FspfIfEntry 13 }

t11FspfIfNbrDomainId OBJECT-TYPE
    SYNTAX      FcDomainIdOrZero
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
           "The Domain Id of the neighbor in this Fabric."
    ::= { t11FspfIfEntry 14 }

t11FspfIfNbrPortIndex OBJECT-TYPE
    SYNTAX      Unsigned32 (0..16777215)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
           "The index, as known by the neighbor, of the neighbor's
           interface that is connected to this interface in this
           Fabric."
    REFERENCE  "Fibre Channel - Switch Fabric - 4 (FC-SW-4),
               ANSI INCITS 418-2006, section 6.1.9.4."
    ::= { t11FspfIfEntry 15 }

t11FspfIfAdminStatus OBJECT-TYPE
    SYNTAX      INTEGER {
                up(1),
                down(2)
                }
    MAX-ACCESS  read-create
    STATUS      current
    DESCRIPTION
           "The desired state of FSPF on this interface in this
           Fabric, whenever 't11FspfAdminStatus' is 'up'.
           If the value of this object is set to 'up', then FSPF is
           enabled on this interface in this Fabric.  If set to
           'down', then FSPF is disabled on this interface in this
           Fabric.  Note that the operational state of FSPF on an
           interface is given by t11FspfIfNbrState."
    DEFVAL  {up}
    ::= { t11FspfIfEntry 16 }

t11FspfIfCreateTime OBJECT-TYPE
    SYNTAX      T11FspfLastCreationTime
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
           "The value of sysUpTime when this entry was last
           created."
    ::= { t11FspfIfEntry 17 }

t11FspfIfSetToDefault OBJECT-TYPE
    SYNTAX      INTEGER {
                     default(1),
                     noOp(2)
                }
    MAX-ACCESS  read-create
    STATUS      current
    DESCRIPTION
           "Setting this value to 'default' changes the value of each
           and every writable object in this row to its default
           value.

           If all the configuration parameters have their default
           values, and if the interface is down, then the row is
           deleted automatically.

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

t11FspfIfLinkCostFactor OBJECT-TYPE
    SYNTAX      Unsigned32 (1..65535)
    MAX-ACCESS  read-create
    STATUS      current
    DESCRIPTION
           "The administrative factor used in calculating the cost
           of sending a frame on this interface in this Fabric.

           The formula used to calculate the link cost is:

                    Link Cost = S * (1.0625e12 / ifSpeed)
           where:
             S = (the value of this object / 100)
             ifSpeed = interface speed (as defined in the IF-MIB).
           "
    REFERENCE
           "Fibre Channel - Switch Fabric - 4 (FC-SW-4),
            ANSI INCITS 418-2006, section 8.5.5; and
            IF-MIB, RFC 2863."

    DEFVAL { 100 }
    ::= { t11FspfIfEntry 19 }

t11FspfIfStorageType OBJECT-TYPE
    SYNTAX      StorageType
    MAX-ACCESS  read-create
    STATUS      current
    DESCRIPTION
           "The storage type for this conceptual row.
            Conceptual rows having the value 'permanent' need not
            allow write-access to any columnar objects in the row."
       DEFVAL { nonVolatile }
    ::= { t11FspfIfEntry 20 }

t11FspfIfRowStatus OBJECT-TYPE
    SYNTAX      RowStatus
    MAX-ACCESS  read-create
    STATUS      current
    DESCRIPTION
           "The status of the conceptual row.

           This object can be used to create an entry only if there
           is an entry in the t11FspfTable for the corresponding
           Fabric, and if the interface is either isolated or is a
           non-E_port.

           Setting this object to 'destroy' will typically fail;
           to reverse the creation process, set the corresponding
           instance of t11FspfIfSetToDefault to 'default'."
    ::= { t11FspfIfEntry 21 }

okay so the interface counters and config knobs are done, and now we're entering the LSR table, which is basically the topology database's little diary of every link state record going around the fabric ๐Ÿ“–๐Ÿ’…

--
-- t11FspfLsrTable

t11FspfLsrTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FspfLsrEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "This table is the database of all the latest
           incarnations of the Link State Records (LSRs) that
           are currently contained in the topology database,
           for all interfaces on all Fabrics known to
           locally managed switches.

           A Fabric's topology database contains the LSRs that
           have been either issued or received by a local switch on
           that Fabric, and that have not reached t11FspfMaxAge."

    ::= { t11FspfDatabase 1 }

t11FspfLsrEntry OBJECT-TYPE
    SYNTAX      T11FspfLsrEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
           "This gives information for the most recent update of an
           LSR.  There is one entry for every LSR issued or received
           by a locally managed switch (identified by
           fcmInstanceIndex and fcmSwitchIndex) in a Fabric
           (identified by t11FspfFabricIndex)."
    INDEX      { fcmInstanceIndex, fcmSwitchIndex, t11FspfFabricIndex,
                 t11FspfLsrDomainId, t11FspfLsrType }
    ::= { t11FspfLsrTable 1 }

T11FspfLsrEntry ::= SEQUENCE {
    t11FspfLsrDomainId           FcDomainIdOrZero,
    t11FspfLsrType               T11FspfLsrType,
    t11FspfLsrAdvDomainId        FcDomainIdOrZero,
    t11FspfLsrAge                Unsigned32,
    t11FspfLsrIncarnationNumber  Unsigned32,
    t11FspfLsrCheckSum           Unsigned32,
    t11FspfLsrLinks              Unsigned32
}

t11FspfLsrDomainId OBJECT-TYPE
    SYNTAX      FcDomainIdOrZero
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
           "Domain Id of the LSR owner in this Fabric.  It is the
           Link State Id of this LSR."
    ::= { t11FspfLsrEntry 1 }

t11FspfLsrType OBJECT-TYPE
    SYNTAX      T11FspfLsrType
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
           "Type of this LSR."
    ::= { t11FspfLsrEntry 2 }

t11FspfLsrAdvDomainId OBJECT-TYPE
    SYNTAX      FcDomainIdOrZero
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION

           "Domain Id of the switch that is advertising the LSR on
           the behalf of the switch owning it."
    ::= { t11FspfLsrEntry 3 }

t11FspfLsrAge OBJECT-TYPE
    SYNTAX      Unsigned32 (0..65535)
    UNITS       "Seconds"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
           "The time since this LSR was inserted into the database."
    ::= { t11FspfLsrEntry 4 }

t11FspfLsrIncarnationNumber OBJECT-TYPE
    SYNTAX      Unsigned32 (0..4294967295)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
           "The link state incarnation number of this LSR.  This is
           used to identify most recent instance of an LSR while
           updating the topology database when an LSR is received.
           The updating of an LSR includes incrementing its
           incarnation number prior to transmission of the updated
           LSR.  So, the most recent LSR is the one with the
           largest incarnation number."
    ::= { t11FspfLsrEntry 5 }

t11FspfLsrCheckSum OBJECT-TYPE
    SYNTAX      Unsigned32 (0..65535)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
           "The checksum of the LSR."
    ::= { t11FspfLsrEntry 6 }

t11FspfLsrLinks OBJECT-TYPE
    SYNTAX      Unsigned32 (0..65355)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
           "Number of entries in the t11FspfLinkTable associated with
           this LSR."
    ::= { t11FspfLsrEntry 7 }
--
-- t11FspfLinkTable

t11FspfLinkNumber  OBJECT-TYPE
    SYNTAX      Unsigned32 (0..2147483647)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
            "The number of rows in the t11FspfLinkTable."
        ::= { t11FspfDatabase 3 }

t11FspfLinkTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FspfLinkEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "This table contains the list of Inter-Switch Links and
           their information that is part of an LSR, either
           received or transmitted."
    ::= { t11FspfDatabase 4 }

t11FspfLinkEntry OBJECT-TYPE
    SYNTAX      T11FspfLinkEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
           "An entry that contains information about a link
           contained in an LSR in this Fabric.  An entry is created
           whenever a new link appears in an (issued or received)
           LSR.  An entry is deleted when a link no longer appears
           in an (issued or received) LSR."
    INDEX      { fcmInstanceIndex, fcmSwitchIndex, t11FspfFabricIndex,
                 t11FspfLsrDomainId, t11FspfLsrType, t11FspfLinkIndex}
    ::= { t11FspfLinkTable 1 }

T11FspfLinkEntry ::= SEQUENCE {
    t11FspfLinkIndex             Unsigned32,
    t11FspfLinkNbrDomainId       FcDomainIdOrZero,
    t11FspfLinkPortIndex         Unsigned32,
    t11FspfLinkNbrPortIndex      Unsigned32,
    t11FspfLinkType              T11FspfLinkType,
    t11FspfLinkCost              Integer32
}

t11FspfLinkIndex OBJECT-TYPE
    SYNTAX      Unsigned32 (1..4294967295)
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
           "An arbitrary index of this link."
    ::= { t11FspfLinkEntry 1 }

t11FspfLinkNbrDomainId OBJECT-TYPE

    SYNTAX      FcDomainIdOrZero
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
           "The Domain Id of the neighbor on the other end of this
           link in this Fabric."
    ::= { t11FspfLinkEntry 2 }

t11FspfLinkPortIndex OBJECT-TYPE
    SYNTAX      Unsigned32 (0..16777215)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
           "The source E_port of this link, as indicated by the index
           value in the LSR received from the switch identified by
           't11FspfLsrDomainId'."
    ::= { t11FspfLinkEntry 3 }

t11FspfLinkNbrPortIndex OBJECT-TYPE
    SYNTAX      Unsigned32 (0..16777215)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
           "The destination E_port of this link, as indicated by the
           index value in the LSR received from the switch identified
           by 't11FspfLinkNbrDomainId'."
    ::= { t11FspfLinkEntry 4 }

t11FspfLinkType OBJECT-TYPE
    SYNTAX      T11FspfLinkType
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
           "The type of this link."
    ::= { t11FspfLinkEntry 5 }
t11FspfLinkCost OBJECT-TYPE
    SYNTAX      Integer32 (0..65535)
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
           "The cost of sending a frame on this link in this Fabric.
           Link cost is calculated using the formula:

                 link cost = S * (1.0625e12 / Signalling Rate)

           For issued LSRs, S is determined by the value of
           t11FspfIfLinkCostFactor for the corresponding interface
           and Fabric."
    ::= { t11FspfLinkEntry 6 }

okay the link cost formula is literally giving math bestie ๐Ÿงฎ๐Ÿ’– it's basically how expensive it is to send a frame over a link, and the number depends on the signalling rate, so the faster the link, the cheaper it is ๐Ÿฆ‹

--
-- Notification-related object

t11FspfIfPrevNbrState OBJECT-TYPE
    SYNTAX      T11FspfInterfaceState
    MAX-ACCESS  accessible-for-notify
    STATUS      current
    DESCRIPTION
           "The previous state of FSPF's Neighbor Finite State
           Machine on an interface.

           This object is only used in the
           't11FspfNbrStateChangNotify' notification."
    ::= { t11FspfConfiguration 3 }

--
-- Notifications

t11FspfNbrStateChangNotify NOTIFICATION-TYPE
    OBJECTS     { ifIndex,
                  t11FamConfigDomainId,
                  t11FspfIfNbrDomainId,
                  t11FspfIfNbrState,
                  t11FspfIfPrevNbrState
    }
    STATUS      current
    DESCRIPTION
           "This notification signifies that there has been a change in
           the state of an FSPF neighbor.  This is generated when the
           FSPF state changes to a terminal state, through either
           regression (i.e., goes from Full to Init or Down) or
           progression (i.e., from any state to Full).  The value of
           't11FspfIfNbrState' is the state of the neighbor after the
           change."
    ::= { t11FspfNotifications 1 }

--
-- Conformance

t11FspfMIBCompliances
    OBJECT IDENTIFIER ::= { t11FspfConformance 1 }

t11FspfMIBGroups
    OBJECT IDENTIFIER ::= { t11FspfConformance 2 }

t11FspfMIBCompliance MODULE-COMPLIANCE
    STATUS     current
    DESCRIPTION
           "The compliance statement for entities that
           implement the FSPF."
    MODULE -- this module
        MANDATORY-GROUPS { t11FspfGeneralGroup,
                           t11FspfIfGroup,
                           t11FspfDatabaseGroup,
                           t11FspfNotificationGroup }

        GROUP      t11FspfIfCounterGroup
        DESCRIPTION
               "These counters, for particular FSPF-packet
               occurrences on an interface, are mandatory only
               for those systems that count such events."

        OBJECT     t11FspfIfRowStatus
        SYNTAX     INTEGER { active(1) }
        MIN-ACCESS read-only
        DESCRIPTION
               "Write access is not required, so only
               one value needs to be supported."

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

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

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

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

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

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

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

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

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

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

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

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

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

        ::= { t11FspfMIBCompliances 1 }

-- Units of Conformance

t11FspfGeneralGroup OBJECT-GROUP
    OBJECTS  { t11FspfMinLsArrival,
               t11FspfMinLsInterval,
               t11FspfLsRefreshTime,
               t11FspfMaxAge,
               t11FspfMaxAgeDiscards,
               t11FspfPathComputations,
               t11FspfChecksumErrors,
               t11FspfLsrs,
               t11FspfCreateTime,
               t11FspfAdminStatus,
               t11FspfOperStatus,
               t11FspfNbrStateChangNotifyEnable,
               t11FspfSetToDefault,
               t11FspfStorageType }
    STATUS   current
    DESCRIPTION
           "A collection of objects for displaying and
           configuring FSPF parameters."
    ::= { t11FspfMIBGroups 1 }

t11FspfIfGroup OBJECT-GROUP
    OBJECTS  { t11FspfIfHelloInterval,
               t11FspfIfDeadInterval,
               t11FspfIfRetransmitInterval,
               t11FspfIfNbrState,
               t11FspfIfNbrDomainId,
               t11FspfIfNbrPortIndex,
               t11FspfIfAdminStatus,
               t11FspfIfCreateTime,
               t11FspfIfSetToDefault,
               t11FspfIfLinkCostFactor,
               t11FspfIfRowStatus,
               t11FspfIfStorageType,
               t11FspfIfPrevNbrState }
    STATUS   current
    DESCRIPTION
           "A collection of objects for displaying the FSPF
           interface information."
    ::= { t11FspfMIBGroups 2 }

t11FspfIfCounterGroup OBJECT-GROUP
    OBJECTS  { t11FspfIfInLsuPkts,
               t11FspfIfInLsaPkts,
               t11FspfIfOutLsuPkts,
               t11FspfIfOutLsaPkts,
               t11FspfIfOutHelloPkts,
               t11FspfIfInHelloPkts,
               t11FspfIfRetransmittedLsuPkts,
               t11FspfIfInErrorPkts  }
    STATUS   current
    DESCRIPTION

            "A collection of objects for counting particular
            FSPF-packet occurrences on an interface."
    ::= { t11FspfMIBGroups 3 }

t11FspfDatabaseGroup OBJECT-GROUP
    OBJECTS  { t11FspfLsrAdvDomainId,
               t11FspfLsrAge,
               t11FspfLsrIncarnationNumber,
               t11FspfLsrCheckSum,
               t11FspfLsrLinks,
               t11FspfLinkNbrDomainId,
               t11FspfLinkPortIndex,
               t11FspfLinkNbrPortIndex,
               t11FspfLinkType,
               t11FspfLinkCost,
               t11FspfLinkNumber }
    STATUS   current
    DESCRIPTION
           "A collection of objects for displaying the FSPF
           topology database information."
    ::= { t11FspfMIBGroups 4 }
t11FspfNotificationGroup NOTIFICATION-GROUP
    NOTIFICATIONS  { t11FspfNbrStateChangNotify }
    STATUS   current
    DESCRIPTION
           "A collection of notifications for FSPF."
    ::= { t11FspfMIBGroups 5 }
END

7. Acknowledgements โœจ

okay so this whole doc was originally cooked up as the SM-FSM project by INCITS Task Group T11.5 (http://www.t11.org) ๐Ÿซถ and they wanted to give a huge shoutout to the whole T11 crew for all their contributions and comments, especially these legends:

  • 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
    • Elizabeth G. Rodriguez, Dot Hill

Then the IETF's IMSS Working Group, chaired by David Black (EMC Corporation), approved it afterwards ๐Ÿ’… and they also thanked Bert Wijnen (Lucent Technologies), the IETF Area Director, for reviewing it. iconic behaviour, honestly ๐Ÿ‘‘


8. IANA Considerations ๐ŸŽ€

ngl this one is short and sweet: IANA assigned a MIB OID for the T11-FC-FSPF-MIB module under the appropriate subtree ๐ŸŒธ


9. Security Considerations ๐Ÿ’€

okay bestie, this section is deadass important, so read it with your whole chest ๐Ÿ˜ญ

there are a bunch of management objects in this MIB module with a MAX-ACCESS of read-write and/or read-create. those ones can be sensitive or vulnerable in some network environments, and SET operations in a non-secure environment without proper protection can seriously mess with network operations ๐Ÿ™ˆ the ones to watch are:

t11FspfMinLsArrival, t11FspfMinLsInterval,
t11FspfIfHelloInterval, t11FspfIfDeadInterval &
t11FspfIfRetransmitInterval
   -- alter the responsiveness of the FSPF protocol

t11FspfAdminStatus & t11FspfIfAdminStatus
   -- enable/disable dynamic routing via FSPF

t11FspfSetToDefault & t11FspfIfSetToDefault
   -- nullify valid configuration changes

t11FspfIfLinkCostFactor
   -- alter the choice of links

t11FspfNbrStateChangNotifyEnable
   -- enable/disable notifications.

again, SET operations in a non-secure environment without proper protection can have a negative effect on network operations. not a vibe ๐Ÿ’”

some of the readable objects in this MIB module (the ones with a MAX-ACCESS other than not-accessible) can also be sensitive or vulnerable in some environments. so it's super important to control even GET and/or NOTIFY access to them, and maybe even encrypt their values when they're sent over the network via SNMP ๐Ÿ” these are the tables and objects, and why they're sensitive:

t11FspfTable -- contains per-Fabric parameters and statistics

t11FspfIfTable -- contains per-interface parameters and statistics

t11FspfLsrTable & t11FspfLinkTable -- database of LSR information,

SNMP versions before SNMPv3 did not include adequate security ๐Ÿ˜ค even if the network itself is secure (for example by using IPSec), there's still no control over who on that secure network gets to access and GET/SET (read/change/create/delete) the objects in this MIB module. main character problem, fr fr ๐Ÿฅ€

It is RECOMMENDED that implementors consider the security features provided by the SNMPv3 framework (see [RFC3410], section 8), including full support for the SNMPv3 cryptographic mechanisms (for authentication and privacy). lowkey the best move ๐Ÿฆ‹

Further, deployment of SNMP versions prior to SNMPv3 is NOT RECOMMENDED. Instead, it is RECOMMENDED to deploy SNMPv3 and to enable cryptographic security. it is then a customer/operator responsibility to make sure the SNMP entity giving access to an instance of this MIB module is properly configured, so that only the principals (users) with legitimate rights can GET or SET (change/create/delete) those objects ๐Ÿงš๐Ÿ’œ

10. Normative References โœจ

okay bestie, these are the must-read sources the spec leans on so hard it literally can't stand without them ๐Ÿ“š๐Ÿซถ

  • [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.
  • [RFC2578] McCloghrie, K., Perkins, D., Schoenwaelder, J., Case, J., Rose, M., and S. Waldbusser, "Structure of Management Information Version 2 (SMIv2)", STD 58, RFC 2578, April 1999.
  • [RFC2579] McCloghrie, K., Perkins, D., Schoenwaelder, J., Case, J., Rose, M., and S. Waldbusser, "Textual Conventions for SMIv2", STD 58, RFC 2579, April 1999.
  • [RFC2580] McCloghrie, K., Perkins, D., Schoenwaelder, J., Case, J., Rose, M., and S. Waldbusser, "Conformance Statements for SMIv2", STD 58, RFC 2580, April 1999.
  • [RFC2863] McCloghrie, K. and F. Kastenholz, "The Interfaces Group MIB", RFC 2863, June 2000.
  • [RFC3411] Harrington, D., Presuhn, R., and B. Wijnen, "An Architecture for Describing Simple Network Management Protocol (SNMP) Management Frameworks", STD 62, RFC 3411, December 2002.
  • [FC-FS] "Fibre Channel - Framing and Signaling (FC-FS)" ANSI INCITS 373-2003, April 2003.
  • [FC-SW-4] "Fibre Channel - Switch Fabric - 4 (FC-SW-4)", ANSI INCITS 418-2006, 2006.
  • [FC-MGMT] McCloghrie, K., "Fibre Channel Management MIB", RFC 4044, May 2005.
  • [RFC4439] DeSanti, C., Gaonkar, V., McCloghrie, K., and S. Gai, "Fibre Channel Fabric Address Manager MIB", RFC 4439, March 2006.

11. Informative References ๐Ÿง 

these ones are the extra reading that's good to know about, but the spec doesn't need you to read them to function ๐Ÿ’…

  • [RFC2741] Daniele, M., Wijnen, B., Ellison, M., and D. Francisco, "Agent Extensibility (AgentX) Protocol Version 1", RFC 2741, January 2000.
  • [RFC4044] McCloghrie, K., "Fibre Channel Management MIB", RFC 4044, May 2005.
  • [RFC3410] Case, J., Mundy, R., Partain, D. and B. Stewart, "Introduction and Applicability Statements for Internet-Standard Management Framework", RFC 3410, December 2002.

Authors' Addresses ๐ŸŽ€

here's who wrote this whole thing, and yes, they're all from the same Cisco crew, so it's a whole team moment ๐Ÿฆ‹

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

this is the legal bit, so it's a little more serious, but still very much main character ๐Ÿ’œ

Copyright (C) The Internet Society (2006).

This document is subject to the rights, licenses and restrictions contained in BCP 78, and except as set forth therein, the authors retain 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 ๐Ÿ”

the IETF is basically saying "we're not picking a side on who owns what, but here's where to look" ๐Ÿงš

The IETF takes no position regarding the validity or scope of any Intellectual Property Rights or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; nor does it represent that it has made any independent effort to identify any such rights. Information on the procedures with respect to rights in RFC documents can be found in BCP 78 and BCP 79.

Copies of IPR disclosures made to the IETF Secretariat and any assurances of licenses to be made available, or the result of an attempt made to obtain a general license or permission for the use of such proprietary rights by implementers or users of this specification can be obtained from the IETF on-line IPR repository at http://www.ietf.org/ipr.

The IETF invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights that may cover technology that may be required to implement this standard. Please address the information to the IETF at ietf-ipr@ietf.org.

Acknowledgement ๐ŸŒˆ

last but not least, shoutout to whoever keeps the RFC Editor lights on โœจ

Funding for the RFC Editor function is provided by the IETF Administrative Support Activity (IASA).

๐Ÿ“ฆ where this page comes from