RFC 5324

MIB for Fibre-Channel Security Protocols (FC-SP)

๐Ÿ“… published September 2008, from ietf

RFC 5324: MIB for Fibre-Channel Security Protocols (FC-SP) ๐ŸŽ€

okay bestie, this one is a MIB spec for FC-SP, the security protocols for Fibre Channel ๐Ÿ”โœจ It's a Standards Track doc, which means it's a real protocol spec, not just a vibe. It was written by C. DeSanti, F. Maino, and K. McCloghrie at Cisco Systems, and it's dated September 2008 ๐Ÿ“ It's part of the Network Working Group series. Nothing is listed as obsoleted or updated in the header, so this one stands on its own ๐Ÿ’…


Status of This Memo ๐Ÿ“œ

so this doc is an Internet standards track protocol for the Internet community, and the authors are asking for discussion and suggestions to make it better ๐Ÿซถ If you want to know where it sits in the official standardization process, check the current edition of "Internet Official Protocol Standards" (STD 1). And yes, distribution is totally unlimited, so share away ๐ŸŒˆ

Abstract ๐Ÿฆ‹

this memo defines a chunk of the Management Information Base (MIB), which is what network management protocols use to look at stuff ๐Ÿ‘€ The specific bit it covers is managed objects for FC-SP, the Security Protocols for Fibre Channel. Main character energy ๐Ÿ‘‘

Table of Contents ๐Ÿ“‘

1. Introduction ....................................................3
2. The Internet-Standard Management Framework ......................3
3. Overview of Fibre Channel .......................................3
   3.1. Introduction ...............................................3
   3.2. Zoning .....................................................4
   3.3. Virtual Fabrics ............................................5
   3.4. Security ...................................................5
        3.4.1. Authentication ......................................5
        3.4.2. Security Associations ...............................6
        3.4.3. Fabric Security Policies ............................7
        3.4.4. Policy Model ........................................8
        3.4.5. Policy Objects ......................................9
               3.4.5.1. Policy Object Names .......................10
        3.4.6. Three Kinds of Switches ............................10
        3.4.7. Security Policy Management .........................11
        3.4.8. FC-SP Zoning .......................................11
4. Document Overview ..............................................12
   4.1. Fibre Channel Management Instance .........................12
   4.2. Entity Name ...............................................12
   4.3. Fabric Index ..............................................13
   4.4. Interface Index ...........................................13
   4.5. Syntax for Policy Object Names ............................14
   4.6. Certificates, CAs, and CRLs ...............................14
   4.7. Traffic Selectors .........................................15
   4.8. The MIB Modules ...........................................16
        4.8.1. The T11-FC-SP-TC-MIB Module ........................16
        4.8.2. The T11-FC-SP-AUTHENTICATION-MIB Module ............16
        4.8.3. The T11-FC-SP-ZONING-MIB Module ....................16
        4.8.4. The T11-FC-SP-POLICY-MIB Module ....................17
        4.8.5. The T11-FC-SP-SA-MIB Module ........................17
   4.9. Rate Control for Notifications ............................18
5. Relationship to Other MIB Modules ..............................19
6. MIB Module Definitions .........................................20
   6.1. The T11-FC-SP-TC-MIB Module ...............................20
   6.2. The T11-FC-SP-AUTHENTICATION-MIB Module ...................33
   6.3. The T11-FC-SP-ZONING-MIB Module ...........................52
   6.4. The T11-FC-SP-POLICY-MIB Module ...........................64
   6.5. The T11-FC-SP-SA-MIB Module ..............................152
7. IANA Considerations ...........................................204
8. Security Considerations .......................................204
   8.1. Information Not Defined in This Document .................204
   8.2. The T11-FC-SP-TC-MIB Module ..............................204
   8.3. The T11-FC-SP-AUTHENTICATION-MIB Module ..................205
   8.4. The T11-FC-SP-ZONING-MIB Module ..........................206
   8.5. The T11-FC-SP-POLICY-MIB Module ..........................207
   8.6. The T11-FC-SP-SA-MIB Module ..............................209
   8.7. Recommendations Common to All MIB Modules ................211
9. Normative References ..........................................212
10. Informative References .......................................213
11. Acknowledgements .............................................215

1. Introduction โœจ

same energy as the abstract: this memo defines a portion of the Management Information Base (MIB) for network management protocols in the Internet community ๐Ÿ’œ It describes managed objects for info about the Fibre Channel Security Protocols (FC-SP), as specified in [FC-SP]. The FC-SP standard is a whole package deal. It covers protocols to authenticate Fibre Channel entities ๐Ÿชช, protocols to set up session keys ๐Ÿ—๏ธ, protocols to negotiate the parameters needed for frame-by-frame integrity and confidentiality ๐Ÿ›ก๏ธ, and protocols to establish and distribute policies across a Fibre Channel Fabric ๐Ÿ“‹

this memo was first developed by the INCITS T11 committee (http://www.t11.org), which then approved it for forwarding to the IETF ๐Ÿฆ‹

this memo uses one of the following terms:

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 BCP 14, RFC 2119 [RFC2119].

2. The Internet-Standard Management Framework ๐ŸŒธ

if you want the full tour of the current Internet-Standard Management Framework, go read 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 usually accessed through the Simple Network Management Protocol (SNMP). 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 with SMIv2, which is described in STD 58, RFC 2578 [RFC2578], STD 58, RFC 2579 [RFC2579], and STD 58, RFC 2580 [RFC2580] ๐Ÿงš

3. Overview of Fibre Channel ๐Ÿ“

3.1. Introduction ๐ŸŒˆ

Fibre Channel (FC) is logically a bidirectional point-to-point serial data channel, and it's built for high performance ๐Ÿš€ It's 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 more ๐Ÿ’–

physically, Fibre Channel is a bunch of communication points called N_Ports, which are connected 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 port on a Switch called an F_Port ๐Ÿ”Œ When several FC Nodes share a single Switch port in an "Arbitrated Loop" topology, the Switch port is called an FL_Port, and the Nodes' ports are called 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 linked to another Switch port over an Inter-Switch Link (ISL) is called an E_Port. A B_Port connects a bridge device to an E_Port on a Switch, and it gives you a subset of E_Port functionality ๐ŸŒ‰

a lot 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 on WWNs in [FC-FS-2]. WWNs are expected to stay persistent across agent and unit resets โœจ

Fibre Channel frames carry 24-bit address identifiers that show the source and destination ports of the frame ๐Ÿ“ฎ Each 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 ๐Ÿชœ

3.2. Zoning ๐Ÿšง

zones inside a Fabric are a way to control frame delivery between Nx_Ports (that's "Hard Zoning"), or to show selected views of Name Server information (that's "Soft Zoning") ๐Ÿ‘€

communication only works when the endpoints talking to each other are members of a common zone. It's kinda like virtual private networks, because the Fabric can group devices into Zones ๐Ÿซง

hard zoning and soft zoning are two different ways of doing this. Hard zoning is enforced in the Fabric (so, the Switches) ๐Ÿ”’ Soft zoning is enforced at the endpoints (like Host Bus Adapters) ๐Ÿค It works by relying on the endpoints to not send traffic to an N_Port_ID they didn't get from the Name Server, with a few exceptions for well known Addresses, like the Name Server itself ๐Ÿ’…

admins create Zones to boost network security and prevent data loss or corruption, by controlling access between devices or user groups ๐Ÿ›ก๏ธ

3.3. Virtual Fabrics ๐Ÿฆ‹

the standard for an interconnecting Fabric containing multiple Fabric Switch elements is [FC-SW-4]. [FC-SW-4] keeps the earlier spec for running a single Fabric on a physical infrastructure, and then adds the definition of Virtual Fabrics and how multiple Virtual Fabrics can run within one or more physical infrastructures ๐ŸŒธ Virtual Fabrics let each frame be tagged in its header to show which of several Virtual Fabrics it's being sent on ๐Ÿท๏ธ All frames that enter a particular "Core Switch" [FC-SW-4] (aka one physical Switch) on the same Virtual Fabric get processed by the same "Virtual Switch" inside that Core Switch ๐Ÿงš

3.4. Security ๐Ÿ”

the Fibre Channel Security Protocols (FC-SP) standard [FC-SP] describes the protocols used to implement security in a Fibre Channel Fabric. It defines:

  • protocols to authenticate Fibre Channel entities ๐Ÿชช
  • protocols to set up session keys ๐Ÿ—๏ธ
  • protocols to negotiate the parameters needed for frame-by-frame integrity and confidentiality ๐Ÿ›ก๏ธ
  • protocols to establish and distribute (security) policies across a Fibre Channel Fabric ๐Ÿ“‹

3.4.1. Authentication

Okay so two entities can negotiate whether authentication is required and which Authentication Protocol they're gonna use ๐Ÿค Authentication can be used in Switch-to-Switch, Node-to-Switch, and Node-to-Node communication. The defined Authentication Protocols are able to do mutual authentication with optional shared key establishment โœจ and the shared key computed at the end of an Authentication Transaction may be used to set up Security Associations ๐Ÿ”

The Fabric security architecture is set up for several authentication infrastructures, so it's giving options ๐Ÿ’… Secret-based, certificate-based, and password-based infrastructures are all accommodated, and specific authentication protocols that directly use these three infrastructures are defined ๐ŸŽ€

With a secret-based infrastructure, entities in the Fabric that want a security relationship either share a common secret or hand off the secret administration to an external server, like RADIUS [RFC2865], Diameter [RFC3588], or Terminal Access Controller Access Control System (TACACS) [RFC1492] ๐Ÿ—๏ธ Entities may mutually authenticate with other entities using the Diffie-Hellman Challenge Handshake Authentication Protocol (DH-CHAP) [FC-SP]. Security Associations may be set up using the session key computed at the end of the DH-CHAP transaction ๐ŸŒธ

With a certificate-based infrastructure, entities in the Fabric are certified by a trusted Certificate Authority (CA) ๐Ÿ“œ The resulting certificates bind each entity to a public-private key pair that may be used to mutually authenticate with other certified entities through the Fibre Channel Certificate Authentication Protocol (FCAP) [FC-SP]. Security Associations may be set up using these entity certificates and associated keys, or by using the session key computed at the end of the FCAP transaction ๐Ÿฆ‹

With a password-based infrastructure, entities in the Fabric that establish a security relationship know the password-based credential material of other entities ๐Ÿ”‘ Entities may use this credential material to mutually authenticate with other entities using the Fibre Channel Password Authentication Protocol (FCPAP) [FC-SP]. Security Associations may be set up using the session key computed at the end of the FCPAP transaction ๐Ÿ’œ

Besides DH-CHAP, FCAP, and FCPAP, there's one more Authentication Protocol: Internet Key Exchange Protocol version 2-AUTH (IKEv2-AUTH) ๐Ÿ‘‘ It uses an SA Management Transaction of the Security Association Management Protocol (see below) to do two jobs at once: SA management and authentication. The credentials used in an IKEv2-AUTH transaction are either strong shared secrets or certificates ๐Ÿงš

3.4.2. Security Associations

A subset of the IKEv2 protocol [RFC4306] that's suitable for Fibre Channel is defined as the (Fibre Channel) Security Association Management protocol [RFC4595]. This protocol (which is not IPsec ๐Ÿ™…โ€โ™€๏ธ) gives you a way to establish Security Associations (SAs) between Fibre Channel entities. Traffic Selectors specify which type of traffic has to be protected by which SA, and what the characteristics of that protection are. There are two mechanisms for protecting specific classes of traffic:

  • ESP_Header is used to protect FC-2 frames (see [FC-FS-2] and the conceptually similar mechanisms in [RFC4303]), and
  • CT_Authentication is used to protect CT_IUs (Common Transport Information Units) [FC-GS-5].

An entity protecting specific classes of traffic keeps an internal Security Association Database (SADB) with the currently active Security Associations and Traffic Selectors ๐Ÿ—‚๏ธ

Each active SA has a Security Association entry in the SADB. Each SA entry includes the SA's SPI (the Security Parameters Index, which shows up in frames sent on the SA), a Sequence Number counter, and the parameters for the selected transforms (like the encryption algorithm, integrity algorithm, mode of operation of the algorithms, and keys) ๐Ÿ“

Each active Traffic Selector has an entry in the SADB that says whether it's used for ingress traffic or egress traffic. These Traffic Selector entries are ordered, so they get searched (when checking for a match) in the given order ๐Ÿ“‹ Two types of Traffic Selector entries may be present:

  • Traffic Selector entries identifying FC-2 frames or CT_IUs to be bypassed or discarded; and
  • Traffic Selector entries identifying FC-2 frames or CT_IUs to be protected or verified. These entries point to the corresponding SA entry that defines the parameters and the security processing to be performed.

SAs are unidirectional, but they always exist as an SA pair of the same type, one in each direction ๐Ÿ”โœจ

3.4.3. Fabric Security Policies

There are two separate approaches to defining Policies in FC-SP, but both follow the same general concept for their Policy model ๐Ÿ’– The first one defines a Policy Model for Fabric Policies that focus on Security. These Security Policies specify the membership and connectivity allowed within a Fabric, and also which IP hosts are allowed to manage a Fabric ๐Ÿ›ก๏ธ

The other approach is a variant of the Enhanced Zoning model defined in [FC-SW-4] and [FC-GS-5], with extensions for use in a secure environment. This variant of Zoning, denoted as "FC-SP Zoning", follows the same general concepts as the Policy model for Security Policies, but keeps Zoning management and enforcement completely independent from the management and enforcement of other policies ๐ŸŒˆ

3.4.4. Policy Model

Figure 25 of [FC-SP] depicts FC-SP's policy management model like this ๐ŸŽจ

*****          ************************
*   *          *  Policy              *    *********************
* M *  Add,    *  Configuration       *    * Policy            *
* A *  Get,    *  Entity              *    * Enforcement       *
* N *  Remove  *                      *    * Entity            *
* A *  Policy  *  +----------------+  *    *                   *
* G *  Objects *  | Non-Active     |  *    *  +-------------+  *
* I *<-------->*  | Policy Objects |==*====*=>| Active      |  *
* N *          *  +----------------+  *    *  | Policy      |  *
* G *          ************************    *  | Objects     |  *
*   *                                      *  +-------------+  *
*   *              Activate Policy Summary *                   *
* E *=====================================>*  +-------------+  *
* N *            Deactivate Policy Summary *  | Policy      |  *
* T *=====================================>*  | Summary     |  *
* I *                                      *  | Object      |  *
* T *            Get Policy Summary        *  +-------------+  *
* Y *<-------------------------------------*                   *
*   *            Get Policy Objects        *                   *
*   *<-------------------------------------*                   *
*****                                      *********************

Note that the arrows in the picture are used to show the movement of "data", not the direction of "messages". For example, a "Get" (with no data) in one direction that triggers a "Response" (typically with data) in the reverse direction, the diagram only has arrows for the "with data" direction ๐Ÿง

3.4.5. Policy Objects

The Policies a Fabric enforces are specified in a set of Policy Objects ๐Ÿ“ฆ The various types of Policy Objects are:

  • The Policy Summary Object is a list of pointers to other Policy Objects, one pointer per each other active Policy Object. Each pointer in a Policy Summary Object is paired with a cryptographic hash of the referenced Policy Object.
  • The Switch Membership List Object is a Fabric-wide Policy Object that defines which Switches are allowed to be part of a Fabric.
  • The Node Membership List Object is a Fabric-wide Policy Object that defines which Nodes are allowed to be connected to a Fabric.
  • The IP Management List Object is a Fabric-wide Policy Object that describes which IP hosts are allowed to manage a Fabric.
  • A Switch Connectivity Object is a per-Switch Policy Object that describes the topology restrictions for a specific Switch. It specifies the other Switches or Nodes that the particular Switch may be connected to, at the Node level and/or at the Port level.
  • Attribute Objects are Fabric-wide Policy Objects that define optional attributes to be associated with Switches or Nodes. They let you extend this policy model by defining new attributes as required ๐ŸŒŸ

Note that the administratively specified name for a Fabric lives in the Switch Membership List Object (not in the Policy Summary Object) ๐Ÿท๏ธ

When FC-SP is in use, each Fabric has a set of active Policy Objects:

  • one Policy Summary Object,
  • one Switch Membership List Object,
  • one Node Membership List Object,
  • one IP Management List Object,
  • zero or more Switch Connectivity Objects, and
  • zero or more Attribute Objects.

The active Policy Objects specify the Policies currently being enforced. Policies that aren't being enforced right now live in non-active Policy Objects. To change the active Policy Objects, you edit the non-active Policy Objects as needed, and then activate a new Policy Summary Object that includes or references the changed Policy Objects ๐Ÿ”„

3.4.5.1. Policy Object Names

Every Policy Object has a name. In a Fabric's database of Policy Objects, a Policy Object Name is specified as a type/length/value (see section 7.2 of [FC-SP]) ๐Ÿงฉ The possible types are:

  • Node_Name
  • Restricted Node_Name
  • Port_Name
  • Restricted Port_Name
  • Wildcard
  • Negated Wildcard
  • Alphanumeric Name
  • IPv6 Address Range
  • IPv4 Address Range

3.4.6. Three Kinds of Switches

For a Fabric made of n Switches and m Nodes, the potential complexity of Switch Connectivity Objects is O(n**2) to describe Switch-to-Switch connections, and O(n*m) for Switch-to-Node connections. To scale better, Switch Connectivity Objects aren't Fabric-wide information. They're only distributed to where they're needed ๐Ÿ“ก To support this, the policy model supports three kinds of Switches in a Fabric:

  • Server Switches, which maintain the Fabric-wide Policy Objects, all the Switch Connectivity Objects, and a full copy of the FC-SP Zoning Database;
  • Autonomous Switches, which maintain the Fabric-wide Policy Objects, their own Switch Connectivity Object, and a full copy of the FC-SP Zoning Database; and
  • Client Switches, which maintain the Fabric-wide Policy Objects, their own Switch Connectivity Object, and a subset of the FC-SP Active Zone Set (which is the configurations of zones currently being enforced by a Fabric, see section 10.4.3.3 of [FC-SW-4]) ๐Ÿฆ‹

3.4.7. Security Policy Management โœจ

okay so Security Policy can be changed in a server session [FC-GS-5] with a Security Policy Server ๐Ÿ” All write access to a Security Policy Server happens inside a server session, so no sneaking edits in. Read access is allowed at any time ๐Ÿ‘€ but the consistency of what you get back is only guaranteed inside a server session ๐Ÿ’…

The Enhanced Commit Service [FC-SW-4] is what handles Fabric operations whenever they're needed (see table 144 of [FC-SP]) ๐ŸŽ€ A lot of these operations have acronym-style names: SSB for Server Session Begin, SSE for Server Session End, SW_ILS for Switch Fabric Internal Link Services, EACA for Enhanced Acquire Change Authorization, ERCA for Enhanced Release Change Authorization, and SFC for Stage Fabric Configuration ๐Ÿงš

Each server session begins and ends with an SSB request and an SSE request respectively, both sent to a Security Policy Server ๐Ÿฆ‹ On the Fabric side, the SSB asks for a lock on the Fabric through an EACA SW_ILS, and the SSE asks for that lock to be released through the ERCA SW_ILS [FC-SW-4] ๐Ÿ”“ Active and non-active Policy Objects are persistent, which means they survive after the server session ends ๐Ÿ’œ

3.4.8. FC-SP Zoning ๐ŸŒธ

to keep things backward compatible with existing Zoning definitions and implementations, FC-SP Zoning is defined as a variant of the Enhanced Zoning model from [FC-SW-4] and [FC-GS-5] ๐Ÿซถ It follows the general ideas of the Policy model for Security Policy Management, but Zoning management and enforcement stay completely independent from each other ๐Ÿ™ˆ

FC-SP Zoning lets some Switches keep less than a complete replicated copy of the Zoning Database, like this:

  • Server Switches maintain the policies data structures for all Switches in the Fabric plus a replica of the Zoning data structures;
  • Autonomous Switches maintain only the subset of policies data structures relevant for their operations plus a replica of the Zoning Database; and
  • Client Switches maintain only the subset of policies data structures and the subset of the Active Zone Set relevant for their operations.

so if Client Switches are deployed in a Fabric, at least one Server Switch has to be deployed in that same Fabric too ๐Ÿ“ A client-server protocol lets Client Switches dynamically retrieve the Zoning information they might need from the Server Switches ๐Ÿ‘‘

A management application handles the Fabric Zoning configuration through the Fabric Zone Server, while other policies are managed through the Security Policy Server โœจ A new Zoning Check Protocol replaces the Zone Merge Protocol [FC-SW-4], and new command codes are defined for the SFC SW_ILS so the FC-SP Zoning configuration can be distributed across a Fabric ๐Ÿ”ฅ The Zoning definitions are ordered so a hash of the Active Zone Set and a hash of the Zone Set Database can be computed, plus other optional security data (e.g., for integrity protection of Zoning information) ๐ŸŒˆ the ordering is literally what makes the hashes possible, so don't skip past it bestie ๐Ÿ’…

4. Document Overview โœจ

okay so this document defines five MIB modules that together give you the means to monitor the operation of, and configure some parameters of, one or more instances of the FC-SP protocols ๐Ÿ’–

4.1. Fibre Channel Management Instance

A Fibre Channel management instance is defined in [RFC4044] as a separable managed instance of Fibre Channel functionality ๐Ÿฆ‹ Fibre Channel functionality can 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 [RFC2741] sub-agents, with each sub-agent implementing a different Fibre Channel management instance ๐ŸŽ€

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

4.2. Entity Name

A central capability of FC-SP is the use of an Authentication Protocol ๐Ÿ” The purpose of each possible Authentication Protocol is to let a Fibre Channel entity be assured of the identity of each entity it's communicating with. Examples of such entities are Fibre Channel Switches and Fibre Channel Nx_Ports ๐Ÿ’…

Each entity is identified by a name, and the FC-MGMT-MIB [RFC4044] defines MIB objects for those names:

  • for entities that are Fibre Channel Switches, the definition of a Fibre Channel management instance allows multiple Switches to be managed by the same Fibre Channel management instance. In this case, each entity is a Switch and has the name given by the MIB object, fcmSwitchWWN.
  • for entities other than Fibre Channel Switches, a Fibre Channel management instance can manage only one entity, and the name of the entity is given by the MIB object, fcmInstanceWwn.

4.3. Fabric Index

With multiple Fabrics, each Fabric has its own instances of the Fabric-related management instrumentation ๐ŸŒธ So these MIB modules define all Fabric-related information in tables that are INDEX-ed by an arbitrary integer, named a "Fabric Index" ๐Ÿซถ The syntax of a Fabric Index is T11FabricIndex, imported from T11-TC-MIB [RFC4439] ๐Ÿ’ซ When a device is connected to a single physical Fabric, without using any virtual Fabrics, the value of this Fabric Index will always be 1 โœจ In an environment with multiple virtual and/or physical Fabrics, this index is how you tell one Fabric from another ๐Ÿ‘‘

4.4. Interface Index

Several of the MIB modules defined in this document use the InterfaceIndexOrZero syntax so information can be specified or instantiated on a per-port/interface basis, e.g., for: statistics, Traffic Selectors, Security Associations, etc. ๐Ÿฆ‹ This lets the same object be used either when there is a separate row for each of multiple ports/interfaces, or when multiple interfaces are represented by a single row ๐Ÿ“ The use of a zero value supports the simpler cases of: a) when there is only one port/interface, b) where the implementation chooses to aggregate the information for multiple ports/interfaces. The minimum (for compliance) requirement is to implement any one of the above cases ๐Ÿ™ˆ

When a Fabric Index and an object with the InterfaceIndexOrZero syntax are used together in a single INDEX clause, the InterfaceIndexOrZero object is listed before the Fabric Index ๐ŸŒˆ That order makes it easier to run management queries that retrieve information about multiple Fabrics connected to the same port/interface ๐Ÿงš

4.5. Syntax for Policy Object Names

T11FcSpPolicyNameType and T11FcSpPolicyName are two Textual Conventions defined in this document (in the T11-FC-SP-TC-MIB module) to represent the types and values of Policy Object Names (see section 3.4.5.1 above) ๐ŸŽ€ However, two of the nine possible types are IPv4 Address Range and IPv6 Address Range ๐Ÿ‘€ It's standard practice in MIB modules to represent all IP addresses using the standard Textual Conventions defined in [RFC4001] for IP addresses, specifically InetAddressType and InetAddress ๐Ÿ’… This document follows that standard practice to the following extent:

  • for MIB objects representing a Policy Object Name that can only be an IPv4 Address Range or an IPv6 Address Range, then those MIB objects are defined as a 3-tuple: (InetAddressType, InetAddress, InetAddress), in which the first address is the low end of the range, the second address is the high end of the range, and both addresses are of the type given by InetAddressType.
  • for MIB objects representing a Policy Object Name that is (possibly) of a different type, i.e., it is not (necessarily) an IPv4 or IPv6 Address Range, then those MIB objects are defined as a 2-tuple: (T11FcSpPolicyNameType, T11FcSpPolicyName), in which the first object represents the type of Policy Object Name and the second object represents the value of the Policy Object Name. For MIB objects defined in this manner, if and when they represent a range of IP addresses: a) the value of T11FcSpPolicyNameType differentiates between an IPv4 Address Range and an IPv6 Address Range; and b) the value of T11FcSpPolicyName is one string containing the concatenation of the two addresses that are the low and high addresses of the range. This is the same format as used within FC-SP Policy Objects [FC-SP] ๐ŸŒธ

4.6. Certificates, CAs, and CRLs

In order to authenticate with the FCAP protocol, each entity, identified by a unique Name, is provided with: a digital certificate associated with that Name, the private/public key pair that corresponds to the certificate, and the Root Certificate (the certificate of the signing Certification Authority) ๐Ÿ”‘ To authenticate another entity, an entity is required to be provided with the certificate of the associated Certification Authority ๐Ÿซถ

FCAP requires entities to support at least four Root Certificates against which received corresponding certificates can be validated ๐Ÿ’– Support for certificate chains, and verification of certificate chains containing more than one certificate, is optional ๐Ÿฆ‹ Entities need to be able to access a Certificate Revocation List (CRL) for each configured Root Certificate, if one is available from the CA ๐ŸŒˆ Certificates on the CRL are considered invalid ๐Ÿ’€

The management of certificates, Certification Authorities, and Certificate Revocation Lists is the same in Fibre Channel networks as it is in other networks. Therefore, this document does not define any MIB objects for such management ๐Ÿงš

4.7. Traffic Selectors

When Traffic Selectors are compared against an ingress or egress frame to determine the security processing to be applied to that frame, there are circumstances where multiple Traffic Selectors, specifying different actions, can match the frame ๐Ÿ‘€ Specifically, this happens when matching against an egress frame to decide which active Security Association to transmit on, or against an ingress frame unprotected by FC-SP (i.e., without an SPI value in it) to decide which action ('drop' or 'bypass') to apply ๐Ÿ’… For these cases, the MIB includes a unique precedence value for each Traffic Selector, so the one with the numerically lowest precedence value is determined to be the one that matches ๐ŸŽ€ In contrast, ingress frames on active Security Associations (i.e., protected by FC-SP) are compared against the set of traffic selectors negotiated when the Security Association was set up and identified by the SPI value contained in the frame. The action taken depends on whether any Traffic Selector matches, but not on which one ๐Ÿ”ฅ

This difference between ingress and egress Traffic Selectors on active Security Associations is reflected in having separate MIB tables for them: the table for Traffic Selectors on egress SAs, t11FcSpSaTSelNegOutTable, has a precedence value in its INDEX clause, whereas the table for Traffic Selectors on ingress SAs, t11FcSpSaTSelNegInTable, has an arbitrary integer value in its INDEX clause ๐ŸŒธ For 'drop' and 'bypass' Traffic Selectors, one table, t11FcSpSaTSelDrByTable, having a precedence value in its INDEX clause, is sufficient for both ingress and egress traffic ๐Ÿ’œ

4.8. The MIB Modules

4.8.1. The T11-FC-SP-TC-MIB Module ๐Ÿ’–

Okay so this MIB module is the Textual Conventions grab bag โœจ. It holds the ones that are being used, or have the potential to be used, in more than one MIB module ๐Ÿงš. It also hands out Object Identifiers for the Cryptographic Algorithms listed in [FC-SP], so they can be the value of various MIB objects that say which algorithms an FC-SP implementation is using, or is going to use ๐Ÿ”.

4.8.2. The T11-FC-SP-AUTHENTICATION-MIB Module ๐ŸŽ€

This is the management info you need to manage the FC-SP Authentication Protocols ๐Ÿซถ. It has three tables:

  • t11FcSpAuEntityTable -- a table of Fibre Channel entities that can be authenticated using FC-SP's Authentication Protocols, including the names, capabilities, and basic configuration parameters of the entities.
  • t11FcSpAuIfStatTable -- this one has two jobs: it's a list of how an FC-SP Authentication entity maps onto an interface, and it holds Authentication Protocol per-interface statistics ๐Ÿ“Š.
  • t11FcSpAuRejectTable -- a table of FC-SP Authentication Protocol transactions that were recently rejected ๐Ÿ™ˆ.

It also defines two notifications: one for sending a reject in response to an AUTH message, and another for receiving a reject in response to an AUTH message ๐Ÿ””.

4.8.3. The T11-FC-SP-ZONING-MIB Module ๐Ÿฆ‹

This MIB module extends the T11-FC-ZONE-SERVER-MIB module [RFC4936] so you can manage FC-SP Zoning Servers ๐ŸŒธ. Specifically, it augments three tables in T11-FC-ZONE-SERVER-MIB:

  • t11FcSpZsServerTable -- this table gets FC-SP Zoning information defined for Zone Servers.
  • t11ZsStatsTable -- this table gets FC-SP Zoning statistics for Zone Servers.
  • t11ZsNotifyControlTable -- this table gets control information for FC-SP Zoning notifications.

It also defines two FC-SP Zoning notifications: one for success and one for failure when two Fabrics try to join โญ.

4.8.4. The T11-FC-SP-POLICY-MIB Module ๐Ÿ’…

This MIB module is all about managing FC-SP policies ๐Ÿ‘‘. It has five parts:

  • Active Policy Objects -- read-only MIB objects representing the set of active Policy Objects for each Fabric.
  • Activate/Deactivate Operations -- read-write MIB objects for invoking operations, either 1) to activate policies that are specified as a set of non-active Policy Objects, or 2) to deactivate the currently active policies. There are also objects giving the status of invoked operations.
  • Non-Active Policy Objects -- read-create MIB objects to create and modify non-active Policy Objects.
  • Statistics for FC-SP Security Policy Servers ๐Ÿ“ˆ.
  • The definition and control of notifications for the success or failure of the activation or deactivation of FC-SP policies ๐Ÿ”ฅ.

4.8.5. The T11-FC-SP-SA-MIB Module ๐ŸŒˆ

This MIB module covers the management info you need to manage Security Associations established via FC-SP. Every table in this MIB module is INDEX-ed by t11FcSpSaIfIndex, with syntax InterfaceIndexOrZero. That value is either non-zero for a specific interface, or zero for all (of the management instance's) interfaces to the particular Fabric ๐Ÿ’œ.

The MIB module has six parts:

  • A per-Fabric table, t11FcSpSaIfTable, of capabilities, parameters, status information, and counters. The counters include non-transient aggregates of per-SA transient counters.
  • Three tables, t11FcSpSaPropTable, t11FcSpSaTSelPropTable, and t11FcSpSaTransTable, specify the proposals an FC-SP entity acting as an SA_Initiator presents to the SA_Responder while Security Associations are being negotiated. The same information is also used by an FC-SP entity acting as an SA_Responder to decide what to accept during that negotiation. One of these tables, t11FcSpSaTransTable, is used not only for information about security transforms to propose and to accept, but also for what's agreed upon during the negotiation of Security Associations ๐Ÿค.
  • A table, t11FcSpSaTSelDrByTable, of Traffic Selectors that have the security action of 'drop' or 'bypass'. This action applies either to ingress traffic, which is unprotected by FC-SP, or to all egress traffic ๐Ÿšซ.
  • Four tables, t11FcSpSaPairTable, t11FcSpSaTSelNegInTable, t11FcSpSaTSelNegOutTable, and t11FcSpSaTSelSpiTable, contain information about active bidirectional pairs of Security Associations. In particular, t11FcSpSaPairTable has one row per active bidirectional SA pair. t11FcSpSaTSelNegInTable and t11FcSpSaTSelNegOutTable contain information on the Traffic Selectors negotiated on the SAs. The t11FcSpSaTSelSpiTable is an alternate lookup table, so the Traffic Selector(s) in use on a particular Security Association can be quickly determined based on its (ingress) SPI value ๐Ÿ”.
  • A table, t11FcSpSaControlTable, of control and other information about generating notifications for events related to FC-SP Security Associations ๐Ÿ›Ž๏ธ.
  • One notification, t11FcSpSaNotifyAuthFailure, generated when an Authentication failure happens for a received FC-2 or CT_IU frame ๐Ÿšจ.

4.9. Rate Control for Notifications ๐Ÿ›‘

Almost every notification in the five MIB modules in this document is generated by events in the "control plane", such as notifications that happen at the pace of operator-initiated activities ๐Ÿง‘โ€๐Ÿ’ป. The one exception is t11FcSpSaNotifyAuthFailure. It's generated by an event in the "data plane", and in a worst case scenario it could happen for every received ingress frame ๐Ÿ˜ญ. So rate controlling notification generation is needed for t11FcSpSaNotifyAuthFailure, but not for any of the other notifications ๐Ÿ’….

For t11FcSpSaNotifyAuthFailure, rate control works like this: a) after the first Authentication failure on any particular Security Association, the SNMP notifications for second and subsequent failures are suppressed for the duration of a time window. And b) even the notification for the first occurrence is suppressed after it has been sent in the same time window, for a configured (in t11FcSpSaControlMaxNotifs) number of Security Associations within a Fabric ๐ŸชŸ. Note that while these suppressions keep the network from being flooded with notifications, the Authentication Failures themselves must still be detected and counted ๐Ÿงพ.

The length of the time window is given by t11FcSpSaControlWindow, a read-write object in the t11FcSpSaControlTable โฑ๏ธ. If and when the time since the last generation of the notification is less than the value of sysUpTime (e.g., if one or more notifications have occurred since the last re-initialization of the management system), then t11FcSpSaControlElapsed and t11FcSpSaControlSuppressed contain the elapsed time since the last notification and the number of notifications suppressed in the window after sending the last one, respectively. Otherwise, t11FcSpSaControlElapsed contains the value of sysUpTime, and t11FcSpSaControlSuppressed has the value zero ๐ŸŒŸ.


5. Relationship to Other MIB Modules ๐Ÿงฉ

The first standardized MIB module for Fibre Channel [RFC2837] was focused on Fibre Channel Switches ๐Ÿ”€. It was obsoleted by the more generic Fibre Channel Management MIB [RFC4044], which defines basic information for Fibre Channel Nodes and Switches. That includes extensions to the standard IF-MIB [RFC2863] for Fibre Channel interfaces ๐Ÿ”Œ. Several other MIB modules have since been defined to extend [RFC4044] for various specific Fibre Channel functionality (e.g., [RFC4438], [RFC4439], [RFC4625], [RFC4626], [RFC4747], [RFC4936], [RFC4935], and [RFC4983]) ๐Ÿ’ซ.

The MIB modules defined in this memo further extend [RFC4044] to cover the operation of Fibre Channel Security Protocols, as specified in [FC-SP] ๐Ÿ”.

One part of the FC-SP specification is "FC-SP Zoning", which is an extension/variant of the Fibre Channel Zoning defined in [FC-GS-5]. Management information for the latter is defined in the T11-FC-ZONE-SERVER-MIB module [RFC4936]. So the T11-FC-SP-ZONING-MIB module defined in this document defines the extensions to the T11-FC-ZONE-SERVER-MIB module that are needed to manage FC-SP Zoning ๐Ÿฆฉ.

The MIB modules in this memo import some common Textual Conventions from T11-TC-MIB, defined in [RFC4439], and from INET-ADDRESS-MIB, defined in [RFC4001] ๐Ÿ“ฅ.

If the RADIUS protocol is used for access to an external server, information about RADIUS Servers is likely to be available from the RADIUS-AUTH-CLIENT-MIB [RFC4668] ๐Ÿ›ฐ๏ธ.


6. MIB Module Definitions ๐Ÿ“œ

6.1. The T11-FC-SP-TC-MIB Module ๐Ÿ“

T11-FC-SP-TC-MIB  DEFINITIONS ::= BEGIN

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

t11FcTcMIB  MODULE-IDENTITY
    LAST-UPDATED  "200808200000Z"
    ORGANIZATION  "This MIB module was developed through the
                  coordinated effort of two organizations:
                  T11 began the development and the IETF (in
                  the IMSS Working Group) finished it."
    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 95134 USA
                  Email: kzm@cisco.com"
    DESCRIPTION
           "This MIB module defines Textual Conventions for use in
           the multiple MIB modules, which together define the
           instrumentation for an implementation of the Fibre Channel
           Security Protocols (FC-SP) specification.

           This MIB module also defines Object Identities (for use as
           possible values of MIB objects with syntax AutonomousType),
           including OIDs for the Cryptographic Algorithms defined
           in FC-SP.

           Copyright (C) The IETF Trust (2008).  This version
           of this MIB module is part of RFC 5324;  see the RFC
           itself for full legal notices."
    REVISION  "200808200000Z"
    DESCRIPTION
           "Initial version of this MIB module, published as RFC 5324."
    ::= { mib-2 175 }

t11FcSpIdentities OBJECT IDENTIFIER ::= { t11FcTcMIB 1 }
t11FcSpAlgorithms OBJECT IDENTIFIER ::= { t11FcSpIdentities 1 }

--
-- Textual Conventions
--

Okay bestie, picking up right where we left off ๐Ÿ’– We're now in the textual conventions ๐ŸŽ€ These are the custom little types the MIB reuses everywhere, so every hash, auth reason code, and policy name stays consistent ๐Ÿ’…

T11FcSpPolicyHashFormat ::=  TEXTUAL-CONVENTION
    STATUS        current
    DESCRIPTION
           "Identifies a cryptographic hash function used to create
           a hash value that summarizes an FC-SP Policy Object.

           Each definition of an object with this TC as its syntax
           must be accompanied by a corresponding definition of an
           object with T11FcSpPolicyHashValue as its syntax, and
           containing the hash value.

           The first two cryptographic hash functions are:

                Hash Type    Hash Tag     Hash Length (Bytes)
                  SHA-1     '00000001'h        20
                 SHA-256    '00000002'h        32
           "
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.3.1 and table 106.
            - FIPS PUB 180-2."
    SYNTAX        OCTET STRING (SIZE (4))

T11FcSpPolicyHashValue ::=  TEXTUAL-CONVENTION
    STATUS        current
    DESCRIPTION
           "Represents the value of the cryptographic hash function
           of an FC-SP Policy Object.

           Each definition of an object with this TC as its syntax
           must be accompanied by a corresponding definition of an
           object with T11FcSpPolicyHashFormat as its syntax.
           The corresponding object identifies the cryptographic
           hash function used to create the hash value."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.3.1 and table 106."
    SYNTAX        OCTET STRING (SIZE (0..64))

T11FcSpHashCalculationStatus ::= TEXTUAL-CONVENTION
    STATUS       current
    DESCRIPTION
           "When some kind of 'database' is defined in a set of
           read-write MIB objects, it is common that multiple changes
           in the data need to be made at the same time.  So, if hash
           values are maintained for that data, those hash values are
           only correct if and when they are re-calculated after every
           change.  In such circumstances, the use of an object with
           this syntax allows the re-calculation of the hash values to
           be deferred until all changes have been made, and therefore
           the calculation need only be done once after all changes,
           rather than repeatedly/after each individual change.

           The definition of an object defined using this TC is
           required to specify which one or more instances of which
           MIB objects contain the hash values operated upon (or
           whose status is given) by the value of this TC.

           When read, the value of an object with this syntax is
           either:

             correct -- the identified MIB object instance(s)
                        contain the correct hash values; or
             stale   -- the identified MIB object instance(s)
                        contain stale (possibly incorrect) values.

           Writing a value of 'calculate' is a request to re-calculate
           and update the values of the corresponding instances of the
           identified MIB objects.  Writing a value of 'correct' or
           'stale' to this object is an error (e.g., 'wrongValue')."
    SYNTAX       INTEGER {
                     calculate(1),
                     correct(2),
                     stale(3)
                 }

T11FcSpAuthRejectReasonCode ::=  TEXTUAL-CONVENTION
    STATUS        current
    DESCRIPTION
           "A reason code contained in an AUTH_Reject message, or
           in an SW_RJT (rejecting an AUTH_ILS), or in an LS_RJT
           (rejecting an AUTH-ELS)."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, Table 17, 48, 52."
    SYNTAX        INTEGER {

                      authFailure(1),
                      logicalError(2),
                      logicalBusy(3),
                      authILSNotSupported(4),
                      authELSNotSupported(5),
                      notLoggedIn(6)
                  }

T11FcSpAuthRejReasonCodeExp ::= TEXTUAL-CONVENTION
    STATUS        current
    DESCRIPTION
           "A reason code explanation contained in an AUTH_Reject
           message, or in an SW_RJT (rejecting an AUTH_ILS), or in
           an LS_RJT (rejecting an AUTH-ELS)."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, Tables 18, 48, 52."
    SYNTAX        INTEGER {
                      authMechanismNotUsable(1),
                      dhGroupNotUsable(2),
                      hashFunctionNotUsable(3),
                      authTransactionAlreadyStarted(4),
                      authenticationFailed(5),
                      incorrectPayload(6),
                      incorrectAuthProtocolMessage(7),
                      restartAuthProtocol(8),
                      authConcatNotSupported(9),
                      unsupportedProtocolVersion(10),
                      logicalBusy(11),
                      authILSNotSupported(12),
                      authELSNotSupported(13),
                      notLoggedIn(14)
                  }

T11FcSpHashFunctions ::= TEXTUAL-CONVENTION
    STATUS        current
    DESCRIPTION
           "A set of zero, one, or more hash functions defined for
           use in FC-SP."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, Table 14."
    SYNTAX        BITS {
                      md5(0),
                      sha1(1)
                  }

T11FcSpSignFunctions ::= TEXTUAL-CONVENTION
    STATUS        current
    DESCRIPTION
           "A set of zero, one, or more signature functions defined
           for signing certificates for use with FCAP in FC-SP."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, tables 38 & 39."
    SYNTAX        BITS {
                      rsaSha1(0)
                  }

T11FcSpDhGroups ::= TEXTUAL-CONVENTION
    STATUS        current
    DESCRIPTION
           "A set of zero, one, or more DH Groups defined for use
           in FC-SP."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, Table 15."
    SYNTAX        BITS {
                      null(0),
                      group1024(1),
                      group1280(2),
                      group1536(3),
                      group2048(4),
                      group3072(5),
                      group4096(6),
                      group6144(7),
                      group8192(8)
                  }

T11FcSpPolicyObjectType ::= TEXTUAL-CONVENTION
    STATUS        current
    DESCRIPTION
           "A value that identifies the type of an FC-SP Policy
           Object."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, Table 102."
    SYNTAX   INTEGER {
                 summary(1),
                 switchMemberList(2),
                 nodeMemberList(3),
                 switchConnectivity(4),
                 ipMgmtList(5),
                 attribute(6)
             }

T11FcSpPolicyNameType ::= TEXTUAL-CONVENTION
    STATUS        current
    DESCRIPTION
           "The format and usage of a companion object having
           T11FcSpPolicyName as its syntax.

           Six of the values indicate the same format, i.e., they
           differ only in semantics.  That common format is a Fibre
           Channel 'Name_Identifier', i.e., the same syntax as
           'FcNameIdOrZero (SIZE(8))'.

           These six are three pairs of one restricted and one
           unrestricted.  Each usage of this syntax must specify
           what the meaning of 'restricted' is for that usage and
           how the characteristics and behavior of restricted
           names differ from unrestricted names.

           The six are:

             'nodeName'           - a Node_Name, which is the
                                    Name_Identifier associated
                                    with a Fibre Channel Node.

             'restrictedNodeName' - a Restricted Node_Name.

             'portName'           - the Name_Identifier associated
                                    with a Fibre Channel Port.

             'restrictedPortName' - a Restricted Port_Name.

             'wildcard'           - a Wildcard value that is used to
                                    identify 'all others' (typically,
                                    all other members of a Policy
                                    Object, not all other Policy
                                    Objects).

             'restrictedWildcard' - a Restricted Wildcard value.

           Other possible values are:

             'alphaNumericName'   - the value begins with an ASCII
           letter (upper or lower case) followed by (0 ... 63)
           characters from the set:  lower case letters, upper case
           letters, digits, and the four symbols: dollar-sign ($),
           dash (-), caret (^), and underscore (_).

             'ipv6AddressRange'   - two IPv6 addresses in network
           byte order, the numerically smallest first and the
           numerically largest second; total length is 32 bytes.

             'ipv4AddressRange'   - two IPv4 addresses in network
           byte order, the numerically smallest first and the
           numerically largest second; total length is 8 bytes."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, Table 103."
    SYNTAX   INTEGER {
                 nodeName(1),
                 restrictedNodeName(2),
                 portName(3),
                 restrictedPortName(4),
                 wildcard(5),
                 restrictedWildcard(6),
                 alphaNumericName(7),
                 ipv6AddressRange(8),
                 ipv4AddressRange(9)
             }

T11FcSpPolicyName ::= TEXTUAL-CONVENTION
    STATUS        current
    DESCRIPTION
           "A syntax used, when defining Policy Objects, for the
           name of something.

           An object that uses this syntax always identifies a
           companion object with syntax T11FcSpPolicyNameType
           such that the companion object specifies the format
           and usage of the object with this syntax.

           When the companion object has the value 'wildcard' or
           'restrictedWildcard', the value of the T11FcSpPolicyName
           object is:  '0000000000000000'h."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, Table 103."
    SYNTAX   OCTET STRING (SIZE (1..64))

T11FcSpAlphaNumName ::= TEXTUAL-CONVENTION
    STATUS        current
    DESCRIPTION

           "A syntax used when defining Policy Objects for the
           name of something, where the name is always in the format
           specified by:

               T11FcSpPolicyNameType = 'alphaNumericName'
           "
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, Table 103."
    SYNTAX   OCTET STRING (SIZE (1..64))

okay bestie, the textual conventions keep coming ๐Ÿ’…โœจ

T11FcSpAlphaNumNameOrAbsent ::= TEXTUAL-CONVENTION
    STATUS        current
    DESCRIPTION
           "An extension of the T11FcSpAlphaNumName TC with
           one additional possible value: the zero-length string
           to indicate the absence of a name."
    SYNTAX   OCTET STRING (SIZE (0..64))

T11FcSaDirection ::= TEXTUAL-CONVENTION
    STATUS        current
    DESCRIPTION
           "The direction of frame transmission on a Security
           Association.  Note that Security Associations are
           unidirectional, but they always exist as part of an
           SA pair of the same type in opposite directions."
    SYNTAX   INTEGER { ingress(1), egress(2) }

T11FcSpiIndex ::= TEXTUAL-CONVENTION
    STATUS        current
    DESCRIPTION
           "An SPI (Security Parameter Index) value is carried in the
           SPI field of a frame protected by the ESP_Header.  An SPI
           is also carried in the SAID field of a Common Transport
           Information Unit (CT_IU) protected by CT_Authentication.
           An SPI value identifies the Security Association on which
           the frame is being transmitted."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 4.7.2 and 4.7.3."
    SYNTAX   Unsigned32 (0..4294967295) -- the default range!!

T11FcSpPrecedence ::= TEXTUAL-CONVENTION
    DISPLAY-HINT "d"
    STATUS       current
    DESCRIPTION

           "The precedence of a Traffic Selector.  If a frame
           matches with two or more Traffic Selectors, then the match
           that takes precedence is the one with the Traffic Selector
           having the numerically smallest precedence value.  Note that
           precedence values are not necessarily contiguous."
    SYNTAX   Unsigned32 (0..4294967295)  -- the default range!!

T11FcRoutingControl ::= TEXTUAL-CONVENTION
    DISPLAY-HINT "1x"
    STATUS        current
    DESCRIPTION
           "A value stored in the R_CTL (Routing Control) 8-bit field
           of an FC-2 frame containing routing and information bits to
           categorize the frame function.

           For FC-2 frames, an R_CTL value typically distinguishes
           between control versus data frames and/or solicited versus
           unsolicited frames, and in combination with the TYPE field
           (see T11FcSpType), identifies a particular link-layer
           service/protocol using FC-2.

           For CT_Authentication, the information field in the R_CTL
           field contains '02'h for Request CT_IUs and '03'h for
           Response CT_IUs.

           The comparison of two values having this syntax is done
           by treating each string as an 8-bit numeric value."
    REFERENCE
           "- Fibre Channel - Framing and Signaling-2 (FC-FS-2),
              ANSI INCITS 424-2007, Project T11/1619-D,
              February 2007, section 9.3.
            - Fibre Channel - Generic Services-5 (FC-GS-5),
              ANSI INCITS 427-2006, sections 4.5.2.4.2, 4.5.2.4.3
              and table 12."
    SYNTAX   OCTET STRING (SIZE(1))

T11FcSpType ::= TEXTUAL-CONVENTION
    DISPLAY-HINT "2x"
    STATUS        current
    DESCRIPTION
           "A value, or combination of values, contained in a frame
           header used in identifying the link layer service/protocol
           of a frame.  The value is always two octets:

             - for FC-2 frames, the first octet is zero and the second
               octet contains the Data structure type (TYPE) value
               defined by FC-FS-2.  The TYPE value is used in
               combination with T11FcRoutingControl to identify a link
               layer service/protocol.

             - for Common Transport Information Units (CT_IUs), the
               first octet contains a GS_Type value and the second
               octet contains a GS_Subtype value, defined by FC-GS-5.

           The comparison of two values having this syntax is done
           by treating each string as the numeric value obtained by
           numerically combining the individual octet's value as
           follows:

               (256 * 1st-octet) + 2nd-octet
           "
    REFERENCE
           "- Fibre Channel - Framing and Signaling-2 (FC-FS-2),
              ANSI INCITS 424-2007, Project T11/1619-D,
              February 2007, section 9.6.
            - Fibre Channel - Generic Services-5 (FC-GS-5),
              ANSI INCITS 427-2006, sections 4.3.2.4 and 4.3.2.5."
    SYNTAX   OCTET STRING (SIZE(2))

T11FcSpTransforms ::= TEXTUAL-CONVENTION
    STATUS        current
    DESCRIPTION
           "A list of the standardized transforms that are defined
           by FC-SP for use with ESP_Header, CT_Authentication, and/or
           IKEv2 Support."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP), February 2007,
              Appendix A.3.1, tables A.23, A.24, A.25, A.26."
    SYNTAX       BITS {
                     encrNull(0),
                     encrAesCbc(1),
                     encrAesCtr(2),
                     encrAesGcm(3),
                     encr3Des(4),
                     prfHmacMd5(5),
                     prfHmacSha1(6),
                     prfAesCbc(7),
                     authHmacMd5L96(8),
                     authHmacSha1L96(9),
                     authHmacMd5L128(10),
                     authHmacSha1L160(11),
                     encrNullAuthAesGmac(12),
                     dhGroups1024bit(13),
                     dhGroups2048bit(14)
                 }

T11FcSpSecurityProtocolId ::= TEXTUAL-CONVENTION
    STATUS       current
    DESCRIPTION
           "A Security Protocol identifier to identify
           the protocol by which traffic is to be protected,
           e.g., ESP_Header or CT_Authentication."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 6.3.2.2 and table 67."
    SYNTAX       INTEGER { espHeader(1), ctAuth(2) }

T11FcSpLifetimeLeft ::= TEXTUAL-CONVENTION
    STATUS       current
    DESCRIPTION
           "This TC is used for one object of an associated pair
           of objects.  The object with this syntax specifies a
           remaining lifetime of something, e.g., of an SA, where
           the lifetime is given in the units specified by the other
           object of the pair which has T11FcSpLifetimeLeftUnits
           as its syntax."
    SYNTAX       Unsigned32

T11FcSpLifetimeLeftUnits ::= TEXTUAL-CONVENTION
    STATUS       current
    DESCRIPTION
           "An object, defined using T11FcSpLifetimeLeft TC as
           its syntax, is required to be one of an associated
           pair of objects such that the other object of the pair
           is defined with this T11FcSpLifetimeLeftUnits TC as
           its syntax and with its value specifying the
           units of the remaining lifetime given by the
           value of the T11FcSpLifetimeLeft object."
    SYNTAX       INTEGER {
                     seconds(1),      -- seconds
                     kiloBytes(2),    -- 10^^3 bytes
                     megaBytes(3),    -- 10^^6 bytes
                     gigaBytes(4),    -- 10^^9 bytes
                     teraBytes(5),    -- 10^^12 bytes
                     petaBytes(6),    -- 10^^15 bytes
                     exaBytes(7),     -- 10^^18 bytes
                     zettaBytes(8),   -- 10^^21 bytes
                     yottaBytes(9)    -- 10^^24 bytes
                 }

--
-- Object Identities to identify the Cryptographic Algorithms
-- listed in FC-SP.

--

t11FcSpEncryptAlgorithms
     OBJECT IDENTIFIER ::= { t11FcSpAlgorithms 1 }

t11FcSpEncrNull OBJECT-IDENTITY
    STATUS     current
    DESCRIPTION "The ENCR_NULL algorithm."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, Table 70."
    ::= { t11FcSpEncryptAlgorithms 1 }

t11FcSpEncrAesCbc OBJECT-IDENTITY
    STATUS     current
    DESCRIPTION "The ENCR_AES_CBC algorithm."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, Table 70."
    ::= { t11FcSpEncryptAlgorithms 2 }

t11FcSpEncrAesCtr OBJECT-IDENTITY
    STATUS     current
    DESCRIPTION "The ENCR_AES_CTR algorithm."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, Table 70."
    ::= { t11FcSpEncryptAlgorithms 3 }

t11FcSpEncrAesGcm OBJECT-IDENTITY
    STATUS     current
    DESCRIPTION "The ENCR_AES_GCM algorithm."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, Table 70."
    ::= { t11FcSpEncryptAlgorithms 4 }

t11FcSpEncr3Des OBJECT-IDENTITY
    STATUS     current
    DESCRIPTION "The ENCR_3DES algorithm."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, Table 70."

    ::= { t11FcSpEncryptAlgorithms 5 }

t11FcSpAuthAlgorithms
     OBJECT IDENTIFIER ::= { t11FcSpAlgorithms 2 }

t11FcSpAuthNull OBJECT-IDENTITY
    STATUS     current
    DESCRIPTION "The AUTH_NONE algorithm."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, Table 72."
    ::= { t11FcSpAuthAlgorithms 1 }

t11FcSpAuthHmacMd5L96 OBJECT-IDENTITY
    STATUS     current
    DESCRIPTION "The AUTH_HMAC_MD5_96 algorithm."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, Table 72."
    ::= { t11FcSpAuthAlgorithms 2 }

t11FcSpAuthHmacSha1L96 OBJECT-IDENTITY
    STATUS     current
    DESCRIPTION "The AUTH_HMAC_SHA1_96 algorithm."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, Table 72."
    ::= { t11FcSpAuthAlgorithms 3 }

t11FcSpAuthHmacMd5L128 OBJECT-IDENTITY
    STATUS     current
    DESCRIPTION "The AUTH_HMAC_MD5_128 algorithm."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, Table 72."
    ::= { t11FcSpAuthAlgorithms 4 }

t11FcSpAuthHmacSha1L160 OBJECT-IDENTITY
    STATUS     current
    DESCRIPTION "The AUTH_HMAC_SHA1_160 algorithm."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, Table 72."

    ::= { t11FcSpAuthAlgorithms 5 }

t11FcSpEncrNullAuthAesGmac OBJECT-IDENTITY
    STATUS     current
    DESCRIPTION "The ENCR_NULL_AUTH_AES_GMAC algorithm."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, Table 70."
    ::= { t11FcSpEncryptAlgorithms 6 }

END

6.2. The T11-FC-SP-AUTHENTICATION-MIB Module โœจ

okay now we're entering the MIB module itself ๐Ÿฆ‹ this is where the good stuff lives, so the header block comes first ๐ŸŽ€

--********************************************************************
-- FC-SP Authentication Protocols
--

T11-FC-SP-AUTHENTICATION-MIB  DEFINITIONS ::= BEGIN

okay bestie, this is where the MIB module really comes alive ๐Ÿฆ‹ the imports, the module identity, and the first config objects are all in here, and the stuff in the DESCRIPTION strings is exact on purpose โœจ

IMPORTS
    MODULE-IDENTITY, OBJECT-TYPE, OBJECT-IDENTITY,
    NOTIFICATION-TYPE,
    mib-2, Counter32, Unsigned32
                                      FROM SNMPv2-SMI  -- [RFC2578]
    MODULE-COMPLIANCE, OBJECT-GROUP,
    NOTIFICATION-GROUP
                                      FROM SNMPv2-CONF -- [RFC2580]
    StorageType, AutonomousType,
    TruthValue, TimeStamp             FROM SNMPv2-TC   -- [RFC2579]
    InterfaceIndex                    FROM IF-MIB      -- [RFC2863]
    fcmInstanceIndex,
    FcNameIdOrZero                    FROM FC-MGMT-MIB -- [RFC4044]
    t11FamLocalSwitchWwn
                       FROM T11-FC-FABRIC-ADDR-MGR-MIB -- [RFC4439]
    T11FabricIndex                    FROM T11-TC-MIB  -- [RFC4439]
    T11FcSpDhGroups,
    T11FcSpHashFunctions,
    T11FcSpSignFunctions,
    T11FcSpLifetimeLeft,
    T11FcSpLifetimeLeftUnits,
    T11FcSpAuthRejectReasonCode,
    T11FcSpAuthRejReasonCodeExp       FROM T11-FC-SP-TC-MIB;

t11FcSpAuthenticationMIB  MODULE-IDENTITY
    LAST-UPDATED  "200808200000Z"
    ORGANIZATION  "This MIB module was developed through the

                  coordinated effort of two organizations:
                  T11 began the development and the IETF (in
                  the IMSS Working Group) finished it."
    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 95134 USA
                  Email: kzm@cisco.com"
    DESCRIPTION
           "This MIB module specifies the management information
           required to manage the Authentication Protocols defined by
           Fibre Channel's FC-SP specification.

           This MIB module defines three tables:

            - t11FcSpAuEntityTable is a table of Fibre Channel
              entities that can be authenticated using FC-SP's
              Authentication Protocols.

            - t11FcSpAuIfStatTable is a table with one row for each
              mapping of an Authentication entity onto an interface,
              containing statistics information.

            - t11FcSpAuRejectTable is a table of volatile information
              about FC-SP Authentication Protocol transactions
              that were most recently rejected.

           Copyright (C) The IETF Trust (2008).  This version
           of this MIB module is part of RFC 5324;  see the RFC
           itself for full legal notices."
    REVISION  "200808200000Z"
    DESCRIPTION
           "Initial version of this MIB module, published as RFC 5324."
    ::= { mib-2 176 }

t11FcSpAuMIBNotifications
                   OBJECT IDENTIFIER ::= { t11FcSpAuthenticationMIB 0 }
t11FcSpAuMIBObjects
                   OBJECT IDENTIFIER ::= { t11FcSpAuthenticationMIB 1 }
t11FcSpAuMIBConformance
                   OBJECT IDENTIFIER ::= { t11FcSpAuthenticationMIB 2 }

t11FcSpAuMIBIdentities
                   OBJECT IDENTIFIER ::= { t11FcSpAuthenticationMIB 3 }

--
-- OIDs defined for use as values of t11FcSpAuServerProtocol
--

t11FcSpAuServerProtocolRadius OBJECT-IDENTITY
    STATUS       current
    DESCRIPTION
           "This OID identifies RADIUS as the protocol used
           to communicate with an External Server as part of
           the process by which identities are verified.
           In this case, information about the RADIUS Servers
           is likely to be provided in radiusAuthServerExtTable
           defined in the RADIUS-AUTH-CLIENT-MIB."
    REFERENCE
           "radiusAuthServerExtTable in 'RADIUS Authentication
            Client MIB', RFC 4668, August 2006."
    ::= { t11FcSpAuMIBIdentities 1 }

t11FcSpAuServerProtocolDiameter OBJECT-IDENTITY
    STATUS       current
    DESCRIPTION
           "This OID identifies Diameter as the protocol used
           to communicate with an External Server as part of
           the process by which identities are verified."
    REFERENCE
           "RFC 3588, September 2003."
    ::= { t11FcSpAuMIBIdentities 2 }

t11FcSpAuServerProtocolTacacs OBJECT-IDENTITY
    STATUS       current
    DESCRIPTION
           "This OID identifies TACACS as the protocol used
           to communicate with an External Server as part of
           the process by which identities are verified."
    REFERENCE
           "RFC 1492, July 1993."
    ::= { t11FcSpAuMIBIdentities 3 }

--
-- Configuration for the Authentication Protocols
--

t11FcSpAuEntityTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FcSpAuEntityEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A table of Fibre Channel entities that can be authenticated
           using FC-SP's Authentication Protocols.

           The purpose of an FC-SP Authentication Protocol is to verify
           that a claimed name is associated with the claiming entity.
           The Authentication Protocols can be used to authenticate
           Nx_Ports, B_Ports, or Switches."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 3.2.25."
    ::= { t11FcSpAuMIBObjects 1 }

t11FcSpAuEntityEntry OBJECT-TYPE
    SYNTAX       T11FcSpAuEntityEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "Information about the configuration and capabilities of an
           FC-SP entity (which is managed within the Fibre Channel
           management instance identified by fcmInstanceIndex) on a
           particular Fabric with respect to FC-SP's Authentication
           Protocols."
    INDEX   { fcmInstanceIndex, t11FcSpAuEntityName,
              t11FcSpAuFabricIndex }
    ::= { t11FcSpAuEntityTable 1 }

T11FcSpAuEntityEntry ::= SEQUENCE {
    t11FcSpAuEntityName             FcNameIdOrZero,
    t11FcSpAuFabricIndex            T11FabricIndex,
    t11FcSpAuServerProtocol         AutonomousType,
                                                   -- Config parameters
    t11FcSpAuStorageType            StorageType,
    t11FcSpAuSendRejNotifyEnable    TruthValue,
    t11FcSpAuRcvRejNotifyEnable     TruthValue,
    t11FcSpAuDefaultLifetime        T11FcSpLifetimeLeft,
    t11FcSpAuDefaultLifetimeUnits   T11FcSpLifetimeLeftUnits,
    t11FcSpAuRejectMaxRows          Unsigned32,
                                                   -- Capabilities
    t11FcSpAuDhChapHashFunctions    T11FcSpHashFunctions,
    t11FcSpAuDhChapDhGroups         T11FcSpDhGroups,
    t11FcSpAuFcapHashFunctions      T11FcSpHashFunctions,
    t11FcSpAuFcapCertsSignFunctions T11FcSpSignFunctions,
    t11FcSpAuFcapDhGroups           T11FcSpDhGroups,
    t11FcSpAuFcpapHashFunctions     T11FcSpHashFunctions,
    t11FcSpAuFcpapDhGroups          T11FcSpDhGroups

}

t11FcSpAuEntityName OBJECT-TYPE
    SYNTAX     FcNameIdOrZero (SIZE (8))
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "The name used to identify the FC-SP entity.

           For entities that are Fibre Channel Switches, this value
           corresponds to the Switch's value of fcmSwitchWWN.  For
           entities other than Fibre Channel Switches, this value
           corresponds to the value of fcmInstanceWwn for the
           corresponding Fibre Channel management instance."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 5.3.3.
            - fcmInstanceWwn & fcmSwitchWWN,
              'Fibre Channel Management MIB', RFC 4044, May 2005."
    ::= { t11FcSpAuEntityEntry 1 }

t11FcSpAuFabricIndex OBJECT-TYPE
    SYNTAX       T11FabricIndex
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "An index value that uniquely identifies a
           particular Fabric to which the entity is attached."
    ::= { t11FcSpAuEntityEntry 2 }

t11FcSpAuServerProtocol OBJECT-TYPE
    SYNTAX       AutonomousType
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The protocol, if any, used by the entity to communicate
           with a third party (i.e., an External Server) as part of
           the process by which it verifies DH-CHAP responses.  For
           example, if the entity is using an external RADIUS server
           to verify DH-CHAP responses, then this object will have
           the value t11FcSpAuServerProtocolRadius.

           The value, zeroDotZero, is used to indicate that no
           protocol is being used to communicate with a third
           party to verify DH-CHAP responses.

           When no protocol is being used, or if the third party is
           unreachable via the specified protocol, then locally
           configured information (if any) may be used instead."
    ::= { t11FcSpAuEntityEntry 3 }

t11FcSpAuStorageType OBJECT-TYPE
    SYNTAX       StorageType
    MAX-ACCESS   read-write
    STATUS       current
    DESCRIPTION
           "This object specifies the memory realization of
           configuration information related to an FC-SP
           Entity on a particular Fabric: specifically, for
           MIB objects in the row containing this object.

           Even if an instance of this object has the value
           'permanent(4)', none of the information in the
           corresponding row of this table needs to be writable."
    ::= { t11FcSpAuEntityEntry 4 }

t11FcSpAuSendRejNotifyEnable OBJECT-TYPE
    SYNTAX     TruthValue
    MAX-ACCESS read-write
    STATUS     current
    DESCRIPTION
           "An indication of whether or not the entity should issue
           t11FcSpAuRejectSentNotify notifications when sending
           AUTH_Reject/SW_RJT/LS_RJT to reject an AUTH message.

           If the value of the object is 'true', then this type of
           notification is generated.  If the value is 'false',
           this type of notification is not generated."
    DEFVAL { false }
    ::= { t11FcSpAuEntityEntry 5 }

t11FcSpAuRcvRejNotifyEnable OBJECT-TYPE
    SYNTAX     TruthValue
    MAX-ACCESS read-write
    STATUS     current
    DESCRIPTION
           "An indication of whether or not the entity should issue
           t11FcSpAuRejectReceivedNotify notifications on the receipt
           of AUTH_Reject/SW_RJT/LS_RJT messages.

           If the value of the object is 'true', then this type of
           notification is generated.  If the value is 'false',
           this type of notification is not generated."
    DEFVAL { false }
    ::= { t11FcSpAuEntityEntry 6 }

t11FcSpAuDefaultLifetime OBJECT-TYPE
    SYNTAX       T11FcSpLifetimeLeft
    MAX-ACCESS   read-write
    STATUS       current
    DESCRIPTION
           "When the value of this object is non-zero, it specifies the
           default value of a lifetime, specified in units given by
           the corresponding instance of t11FcSpAuDefaultLifetimeUnits.
           This default lifetime is to be used for any Security
           Association that has no explicitly specified value for its
           lifetime.

           An SA's lifetime is either the time interval or the number
           of passed bytes, after which the SA has to be terminated and
           (if necessary) replaced with a new SA.

           If this object is zero, then there is no default value for
           lifetime."
    DEFVAL       { 28800 }         -- 8 hours (in units of seconds)
     ::= { t11FcSpAuEntityEntry 7 }

okay so we're picking right back up with the default lifetime units ๐ŸŽ€ this one tells you what the unit is for the default lifetime we just looked at, and the default is seconds ๐Ÿ’…

t11FcSpAuDefaultLifetimeUnits OBJECT-TYPE
    SYNTAX       T11FcSpLifetimeLeftUnits
    MAX-ACCESS   read-write
    STATUS       current
    DESCRIPTION
           "The units in which the value of the corresponding
           instance of t11FcSpAuDefaultLifetime specifies a
           default lifetime for a Security Association that has
           no explicitly-specified value for its lifetime."
    DEFVAL       { seconds }
    ::= { t11FcSpAuEntityEntry 8 }

next up is the reject max rows object ๐Ÿฅน it caps how many rows the t11FcSpAuRejectTable can hold for each entity on each Fabric. once the table is full, the oldest row gets tossed to make room for the newest rejection, which is so iconic of a little rotating diary ๐Ÿ““๐ŸŒธ it also says the table can have fewer rows than the max in weird situations like after an agent restart, and if an implementation doesn't support that table at all, this object is always zero โœจ

t11FcSpAuRejectMaxRows OBJECT-TYPE
    SYNTAX       Unsigned32 (0..1000)
    MAX-ACCESS   read-write
    STATUS       current
    DESCRIPTION
           "The maximum number of rows in the t11FcSpAuRejectTable for
           this entity on this Fabric.  If and when an AUTH message is
           rejected, and the t11FcSpAuRejectTable already contains this
           maximum number of rows for the specific entity and Fabric,
           the row containing the oldest information is discarded and
           replaced by a row containing information about the new
           rejection.

           There will be less than this maximum number of rows in
           the t11FcSpAuRejectTable in exceptional circumstances,
           e.g., after an agent restart.

           In an implementation that does not support the
           t11FcSpAuRejectTable, this object will always be zero."
    ::= { t11FcSpAuEntityEntry 9 }

Now the DH-CHAP capability objects ๐Ÿฆ‹ These are read-only lists of what the entity supports. The hash functions and DH groups use the T11FcSpHashFunctions and T11FcSpDhGroups types.

t11FcSpAuDhChapHashFunctions OBJECT-TYPE
    SYNTAX     T11FcSpHashFunctions
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "The hash functions that the entity supports when using
           the DH-CHAP algorithm."
    ::= { t11FcSpAuEntityEntry 10 }

t11FcSpAuDhChapDhGroups OBJECT-TYPE
    SYNTAX     T11FcSpDhGroups
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "The DH Groups that the entity supports when using the
           DH-CHAP algorithm in FC-SP."
    ::= { t11FcSpAuEntityEntry 11 }

Next is the FCAP set ๐ŸŒˆ these two objects have REFERENCE clauses pointing at FC-SP, so I kept those citations exactly as written, down to the section and table numbers.

t11FcSpAuFcapHashFunctions OBJECT-TYPE
    SYNTAX     T11FcSpHashFunctions
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "The hash functions that the entity supports when
           specified as Protocol Parameters in the AUTH_Negotiate
           message for FCAP in FC-SP."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 5.5.2.1 and table 28."
    ::= { t11FcSpAuEntityEntry 12 }

t11FcSpAuFcapCertsSignFunctions OBJECT-TYPE
    SYNTAX     T11FcSpSignFunctions
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "The signature functions used within certificates that
           the entity supports when using FCAP in FC-SP."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 5.5.4.2 and tables 38 & 39."
    ::= { t11FcSpAuEntityEntry 13 }

t11FcSpAuFcapDhGroups OBJECT-TYPE
    SYNTAX     T11FcSpDhGroups
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "The DH Groups that the entity supports when using the
           FCAP algorithm in FC-SP."
    ::= { t11FcSpAuEntityEntry 14 }

And the FCPAP pair ๐Ÿ’œ same deal, read-only capability lists.

t11FcSpAuFcpapHashFunctions OBJECT-TYPE
    SYNTAX     T11FcSpHashFunctions
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "The hash functions that the entity supports when using
           the FCPAP algorithm in FC-SP."
    ::= { t11FcSpAuEntityEntry 15 }

t11FcSpAuFcpapDhGroups OBJECT-TYPE
    SYNTAX     T11FcSpDhGroups
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "The DH Groups that the entity supports when using the
           FCPAP algorithm in FC-SP."
    ::= { t11FcSpAuEntityEntry 16 }

Now we're moving into the mapping of authentication entities onto interfaces and statistics ๐Ÿงš This is where the stats live. Each entity can run on one or more interfaces, but only one entity per interface, and there's a row for every interface to every Fabric that an entity runs on.

--
-- The Mapping of Authentication Entities onto Interfaces
-- and Statistics
--

t11FcSpAuIfStatTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FcSpAuIfStatEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "Each FC-SP Authentication entity can operate on one or more
           interfaces, but at most one of them can operate on each
           interface.  A row in this table exists for each interface
           to each Fabric on which each Authentication entity operates.

           The objects within this table contain statistics information
           related to FC-SP's Authentication Protocols."
    ::= { t11FcSpAuMIBObjects 2 }

t11FcSpAuIfStatEntry OBJECT-TYPE
    SYNTAX       T11FcSpAuIfStatEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A set of Authentication Protocols statistics for an FC-SP
           Authentication entity (identified by t11FcSpAuEntityName) on
           one of its interfaces to a particular Fabric, which is
           managed within the Fibre Channel management instance
           identified by fcmInstanceIndex."
    INDEX   { fcmInstanceIndex, t11FcSpAuEntityName,
              t11FcSpAuIfStatInterfaceIndex,
              t11FcSpAuIfStatFabricIndex }
    ::= { t11FcSpAuIfStatTable 1 }

T11FcSpAuIfStatEntry ::= SEQUENCE {
    t11FcSpAuIfStatInterfaceIndex        InterfaceIndex,
    t11FcSpAuIfStatFabricIndex           T11FabricIndex,
    t11FcSpAuIfStatTimeouts              Counter32,
    t11FcSpAuIfStatInAcceptedMsgs        Counter32,
    t11FcSpAuIfStatInLsSwRejectedMsgs    Counter32,
    t11FcSpAuIfStatInAuthRejectedMsgs    Counter32,
    t11FcSpAuIfStatOutAcceptedMsgs       Counter32,
    t11FcSpAuIfStatOutLsSwRejectedMsgs   Counter32,
    t11FcSpAuIfStatOutAuthRejectedMsgs   Counter32
}

t11FcSpAuIfStatInterfaceIndex OBJECT-TYPE
    SYNTAX       InterfaceIndex
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "The interface on which the FC-SP Authentication entity
           operates and for which the statistics are collected."
    ::= { t11FcSpAuIfStatEntry 1 }

t11FcSpAuIfStatFabricIndex OBJECT-TYPE
    SYNTAX       T11FabricIndex
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "An index value identifying the particular Fabric for
           which the statistics are collected."
    ::= { t11FcSpAuIfStatEntry 2 }

Now the counters ๐Ÿ“Š I'm obsessed with how each one is its own little bucket. There's one for timeouts, then a pile of accepted, LS/SW-rejected, and AUTH-rejected counts, in both directions, in and out ๐Ÿซถ Every one is a Counter32 with the same note about discontinuities, so I kept that wording identical.

t11FcSpAuIfStatTimeouts OBJECT-TYPE
    SYNTAX       Counter32
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The number of FC-SP Authentication Protocol messages sent
           by the particular entity on the particular Fabric on the
           particular interface, for which no response was received
           within a timeout period.

           This counter has no discontinuities other than those
           that all Counter32's have when sysUpTime=0."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 5.11."
    ::= { t11FcSpAuIfStatEntry 3 }

t11FcSpAuIfStatInAcceptedMsgs OBJECT-TYPE
    SYNTAX       Counter32
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The number of FC-SP Authentication Protocol messages
           received and accepted by the particular entity on the
           particular Fabric on the particular interface.

           This counter has no discontinuities other than those
           that all Counter32's have when sysUpTime=0."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 5.1."
    ::= { t11FcSpAuIfStatEntry 4 }

t11FcSpAuIfStatInLsSwRejectedMsgs OBJECT-TYPE
    SYNTAX       Counter32
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The number of FC-SP Authentication Protocol messages
           received by the particular entity on the particular Fabric
           on the particular interface, and rejected by a lower-level
           (SW_RJT or LS_RJT) reject.

           This counter has no discontinuities other than those
           that all Counter32's have when sysUpTime=0."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 5.1."

    ::= { t11FcSpAuIfStatEntry 5 }

t11FcSpAuIfStatInAuthRejectedMsgs OBJECT-TYPE
    SYNTAX       Counter32
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The number of FC-SP Authentication Protocol messages
           received by the particular entity on the particular Fabric
           on the particular interface, and rejected by an AUTH_Reject
           message.

           This counter has no discontinuities other than those
           that all Counter32's have when sysUpTime=0."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 5.1."
    ::= { t11FcSpAuIfStatEntry 6 }

t11FcSpAuIfStatOutAcceptedMsgs OBJECT-TYPE
    SYNTAX       Counter32
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The number of FC-SP Authentication Protocol messages sent
           by the particular entity on the particular Fabric on the
           particular interface, which were accepted by the
           neighboring entity, i.e., not rejected by an AUTH_Reject
           message, nor by a lower-level (SW_RJT or LS_RJT) reject.

           This counter has no discontinuities other than those
           that all Counter32's have when sysUpTime=0."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 5.1."
    ::= { t11FcSpAuIfStatEntry 7 }

t11FcSpAuIfStatOutLsSwRejectedMsgs OBJECT-TYPE
    SYNTAX       Counter32
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The number of FC-SP Authentication Protocol messages sent
           by the particular entity on the particular Fabric on the
           particular interface, which were rejected by a lower-level
           (SW_RJT or LS_RJT) reject.

           This counter has no discontinuities other than those
           that all Counter32's have when sysUpTime=0."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 5.1."
    ::= { t11FcSpAuIfStatEntry 8 }

t11FcSpAuIfStatOutAuthRejectedMsgs OBJECT-TYPE
    SYNTAX       Counter32
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The number of FC-SP Authentication Protocol messages sent
           by the particular entity on the particular Fabric on the
           particular interface, which were rejected by an
           AUTH_Reject message.

           This counter has no discontinuities other than those
           that all Counter32's have when sysUpTime=0."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 5.1."
    ::= { t11FcSpAuIfStatEntry 9 }

Last bit for this part โœจ we're now at the header for the rejected-transactions stuff, so the next part is where the recently rejected Authentication Protocol transactions finally show up ๐Ÿ‘‘

--
-- Information about Authentication Protocol Transactions
-- which were recently rejected
--

okay so this is the reject table, and it is โœจ the drama corner โœจ ๐Ÿ’…

It holds info on FC-SP Authentication Protocol transactions that got rejected recently, either with an AUTH_Reject or with an SW_RJT/LS_RJT ๐Ÿ™ˆ

t11FcSpAuRejectTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FcSpAuRejectEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A table of volatile information about FC-SP Authentication
           Protocol transactions that were recently rejected with
           an AUTH_Reject message, or with an SW_RJT/LS_RJT.

           The maximum number of rows in this table for a specific
           entity on a specific Fabric is given by the value of the
           corresponding instance of t11FcSpAuRejectMaxRows.

           The syntax of t11FcSpAuRejTimestamp is TimeStamp, and thus
           its value rolls over to zero after approximately 497 days.
           To avoid any confusion due to such a rollover, rows should
           be deleted from this table before they are 497 days old.

           This table will be empty if no AUTH_Reject messages,
           nor any SW_RJT/LS_RJT's rejecting an AUTH message,
           have been sent or received since the last
           re-initialization of the agent."
    ::= { t11FcSpAuMIBObjects 3 }

t11FcSpAuRejectEntry OBJECT-TYPE
    SYNTAX       T11FcSpAuRejectEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "Information about one AUTH message (either an
           AUTH_ELS or an AUTH_ILS) that was rejected with an
           AUTH_Reject, SW_RJT or LS_RJT message, sent/received by
           the entity identified by values of fcmInstanceIndex and
           t11FcSpAuEntityName, on an interface to a particular
           Fabric."
    INDEX   { fcmInstanceIndex, t11FcSpAuEntityName,
              t11FcSpAuRejInterfaceIndex, t11FcSpAuRejFabricIndex,
              t11FcSpAuRejTimestamp }
    ::= { t11FcSpAuRejectTable 1 }

T11FcSpAuRejectEntry ::= SEQUENCE {
    t11FcSpAuRejInterfaceIndex        InterfaceIndex,
    t11FcSpAuRejFabricIndex           T11FabricIndex,
    t11FcSpAuRejTimestamp             TimeStamp,
    t11FcSpAuRejDirection             INTEGER,
    t11FcSpAuRejType                  INTEGER,
    t11FcSpAuRejAuthMsgString         OCTET STRING,
    t11FcSpAuRejReasonCode            T11FcSpAuthRejectReasonCode,
    t11FcSpAuRejReasonCodeExp         T11FcSpAuthRejReasonCodeExp
}

t11FcSpAuRejInterfaceIndex OBJECT-TYPE
    SYNTAX       InterfaceIndex
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "The interface on which the rejected AUTH message was
           sent or received."
    ::= { t11FcSpAuRejectEntry 1 }

t11FcSpAuRejFabricIndex OBJECT-TYPE
    SYNTAX       T11FabricIndex
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "An index value identifying the particular Fabric on
           which the rejected AUTH message was sent or received."
    ::= { t11FcSpAuRejectEntry 2 }

t11FcSpAuRejTimestamp OBJECT-TYPE
    SYNTAX       TimeStamp
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "The time at which the AUTH message was rejected.  If two
           rows have the same value of this object for the same
           entity on the same interface and Fabric, the value of
           this object for the later one is incremented by one."
    ::= { t11FcSpAuRejectEntry 3 }

t11FcSpAuRejDirection OBJECT-TYPE
    SYNTAX       INTEGER { sent(1), received(2) }
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "An indication of whether the rejection was sent or
           received by the identified entity.

           The value 'sent(1)' corresponds to a notification of
           type t11FcSpAuRejectSentNotify; the value 'received(2)'
           corresponds to t11FcSpAuRejectReceivedNotify."
    ::= { t11FcSpAuRejectEntry 4 }

t11FcSpAuRejType OBJECT-TYPE
    SYNTAX       INTEGER {
                     authReject(1),
                     swRjt(2),
                     lsRjt(3)
                 }
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "An indication of whether the rejection was an
           AUTH_Reject, an SW_RJT or an LS_RJT."
    ::= { t11FcSpAuRejectEntry 5 }

t11FcSpAuRejAuthMsgString OBJECT-TYPE
    SYNTAX       OCTET STRING (SIZE(0..255))
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The binary content of the AUTH message that was
           rejected, formatted as an octet string (in network
           byte order) containing the content of the message.

           If the binary content is unavailable, then the
           length is zero.  Otherwise, the first octet of the
           message identifies the type of message:

              '90'h - an AUTH_ELS, see Table 6 in FC-SP,
              '40'h - an AUTH_ILS, see Table 3 in FC-SP, or
              '41'h - an B_AUTH_ILS, see Table 5 in FC-SP.

           and the remainder of the message may be truncated."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, Tables 3, 5 and 6."
    ::= { t11FcSpAuRejectEntry 6 }

t11FcSpAuRejReasonCode OBJECT-TYPE
    SYNTAX       T11FcSpAuthRejectReasonCode
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The reason code with which this AUTH message was
           rejected."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, Table 17, 48, 52."
    ::= { t11FcSpAuRejectEntry 7 }

t11FcSpAuRejReasonCodeExp OBJECT-TYPE
    SYNTAX       T11FcSpAuthRejReasonCodeExp
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The reason code explanation with which this AUTH
           message was rejected."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, Table 17, 48, 52."
    ::= { t11FcSpAuRejectEntry 8 }

okay now the notifications ๐Ÿ”” these are the ones that actually ping the switch's people when something gets rejected ๐Ÿซถ

--
-- Notifications
--

t11FcSpAuRejectSentNotify NOTIFICATION-TYPE
    OBJECTS   { t11FamLocalSwitchWwn,
                t11FcSpAuRejAuthMsgString,
                t11FcSpAuRejType,
                t11FcSpAuRejReasonCode,
                t11FcSpAuRejReasonCodeExp }
    STATUS       current
    DESCRIPTION
           "This notification indicates that a Switch (identified
           by the value of t11FamLocalSwitchWwn) has sent a reject
           message of the type indicated by t11FcSpAuRejType in
           response to an AUTH message.

           The content of the rejected AUTH message is given by the
           value of t11FcSpAuRejAuthMsgString.  The values of the
           Reason Code and Reason Code Explanation in the
           AUTH_Reject/SW_RJT/LS_RJT are indicated by the values of
           t11FcSpAuRejReasonCode and t11FcSpAuRejReasonCodeExp."
    ::= { t11FcSpAuMIBNotifications 1 }

t11FcSpAuRejectReceivedNotify NOTIFICATION-TYPE
    OBJECTS   { t11FamLocalSwitchWwn,
                t11FcSpAuRejAuthMsgString,
                t11FcSpAuRejType,
                t11FcSpAuRejReasonCode,
                t11FcSpAuRejReasonCodeExp }
    STATUS       current
    DESCRIPTION
           "This notification indicates that a Switch (identified
           by the value of t11FamLocalSwitchWwn) has received a
           reject message of the type indicated by t11FcSpAuRejType
           in response to an AUTH message.

           The content of the rejected AUTH message is given by the
           value of t11FcSpAuRejAuthMsgString.  The values of the
           Reason Code and Reason Code Explanation in the
           AUTH_Reject/SW_RJT/LS_RJT are indicated by the values of
           t11FcSpAuRejReasonCode and t11FcSpAuRejReasonCodeExp."
    ::= { t11FcSpAuMIBNotifications 2 }

and now conformance ๐ŸŽ€ this is the part that says what an implementation has to have to count as compliant, so it's giving rules ๐Ÿ‘‘

--
-- Conformance
--

t11FcSpAuMIBCompliances
                  OBJECT IDENTIFIER ::= { t11FcSpAuMIBConformance 1 }
t11FcSpAuMIBGroups
                  OBJECT IDENTIFIER ::= { t11FcSpAuMIBConformance 2 }

t11FcSpAuMIBCompliance MODULE-COMPLIANCE
    STATUS       current
    DESCRIPTION
           "The compliance statement for entities that
           implement one or more of the Authentication Protocols
           defined in FC-SP."

    MODULE  -- this module
        MANDATORY-GROUPS { t11FcSpAuGeneralGroup,
                           t11FcSpAuRejectedGroup,
                           t11FcSpAuNotificationGroup }

        GROUP      t11FcSpAuIfStatsGroup
        DESCRIPTION
               "These counters, of particular FC-SP messages and
               events, are mandatory only for those systems that
               count such messages/events."

-- Write access is not required for any objects in this MIB module:

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

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

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

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

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

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

        ::= { t11FcSpAuMIBCompliances 1 }

-- Units of Conformance

t11FcSpAuGeneralGroup OBJECT-GROUP
    OBJECTS  { t11FcSpAuServerProtocol,
               t11FcSpAuStorageType,
               t11FcSpAuSendRejNotifyEnable,
               t11FcSpAuRcvRejNotifyEnable,
               t11FcSpAuDefaultLifetime,
               t11FcSpAuDefaultLifetimeUnits,
               t11FcSpAuRejectMaxRows,
               t11FcSpAuDhChapHashFunctions,
               t11FcSpAuDhChapDhGroups,
               t11FcSpAuFcapHashFunctions,
               t11FcSpAuFcapCertsSignFunctions,
               t11FcSpAuFcapDhGroups,
               t11FcSpAuFcpapHashFunctions,
               t11FcSpAuFcpapDhGroups,
               t11FcSpAuIfStatTimeouts }
    STATUS   current
    DESCRIPTION
           "A collection of objects for the capabilities and
           configuration parameters of FC-SP's Authentication
           Protocols.  The inclusion of t11FcSpAuIfStatTimeouts
           in this group provides information on mappings of
           Authentication entities onto interfaces."
    ::= { t11FcSpAuMIBGroups 1 }

t11FcSpAuIfStatsGroup OBJECT-GROUP
    OBJECTS  { t11FcSpAuIfStatInAcceptedMsgs,
               t11FcSpAuIfStatInLsSwRejectedMsgs,
               t11FcSpAuIfStatInAuthRejectedMsgs,
               t11FcSpAuIfStatOutAcceptedMsgs,
               t11FcSpAuIfStatOutLsSwRejectedMsgs,
               t11FcSpAuIfStatOutAuthRejectedMsgs }
    STATUS   current
    DESCRIPTION
           "A collection of objects for monitoring the
           operations of FC-SP's Authentication Protocols."
    ::= { t11FcSpAuMIBGroups 2 }

t11FcSpAuRejectedGroup OBJECT-GROUP
    OBJECTS  { t11FcSpAuRejDirection,
               t11FcSpAuRejType,
               t11FcSpAuRejAuthMsgString,
               t11FcSpAuRejReasonCode,
               t11FcSpAuRejReasonCodeExp }

    STATUS   current
    DESCRIPTION
           "A collection of objects holding information concerning
           FC-SP Authentication Protocol transactions that were
           recently rejected with an AUTH_Reject, with an SW_RJT,
           or with an LS_RJT."
    ::= { t11FcSpAuMIBGroups 3 }
t11FcSpAuNotificationGroup NOTIFICATION-GROUP
    NOTIFICATIONS  { t11FcSpAuRejectSentNotify,
                     t11FcSpAuRejectReceivedNotify }
    STATUS   current
    DESCRIPTION
           "A collection of notifications for use in the management
           of FC-SP's Authentication Protocols."
    ::= { t11FcSpAuMIBGroups 4 }

END

6.3. The T11-FC-SP-ZONING-MIB Module โœจ

okay bestie, this is where we switch over to the zoning side of FC-SP ๐Ÿงš it's the same vibe as the auth MIB, just pointed at Zone Servers instead ๐Ÿ’…

--*******************************************************************
-- FC-SP Zoning
--

T11-FC-SP-ZONING-MIB  DEFINITIONS ::= BEGIN

IMPORTS
    MODULE-IDENTITY, OBJECT-TYPE,
    NOTIFICATION-TYPE, mib-2,
    Counter32
                        FROM SNMPv2-SMI                -- [RFC2578]
    TruthValue          FROM SNMPv2-TC                 -- [RFC2579]
    MODULE-COMPLIANCE, OBJECT-GROUP,
    NOTIFICATION-GROUP
                        FROM SNMPv2-CONF               -- [RFC2580]
    ifIndex             FROM IF-MIB                    -- [RFC2863]
    t11ZsServerEntry,
    t11ZsStatsEntry,
    t11ZsNotifyControlEntry,
    t11ZsFabricIndex    FROM T11-FC-ZONE-SERVER-MIB    -- [RFC4936]
    T11FcSpPolicyHashValue,
    T11FcSpPolicyHashFormat,
    T11FcSpHashCalculationStatus
                        FROM T11-FC-SP-TC-MIB;

t11FcSpZoningMIB  MODULE-IDENTITY
    LAST-UPDATED  "200808200000Z"
    ORGANIZATION  "This MIB module was developed through the
                  coordinated effort of two organizations:
                  T11 began the development and the IETF (in
                  the IMSS Working Group) finished it."
    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 95134 USA
                  Email: kzm@cisco.com"
    DESCRIPTION
           "This MIB module specifies the extensions to the
           T11-FC-ZONE-SERVER-MIB module that are necessary for the
           management of Fibre Channel's FC-SP Zoning Servers, as
           defined in the FC-SP specification.

           The persistence of values written to these MIB objects is
           the same as the persistence of the objects they extend,
           i.e., it is given by the value of the relevant instance of
           t11ZsServerDatabaseStorageType (defined in the
           T11-FC-ZONE-SERVER-MIB module).

           Copyright (C) The IETF Trust (2008).  This version
           of this MIB module is part of RFC 5324;  see the RFC
           itself for full legal notices."
    REVISION  "200808200000Z"
    DESCRIPTION
           "Initial version of this MIB module, published as RFC 5324."
    ::= { mib-2 177 }

t11FcSpZsMIBNotifications  OBJECT IDENTIFIER ::= { t11FcSpZoningMIB 0 }
t11FcSpZsMIBObjects        OBJECT IDENTIFIER ::= { t11FcSpZoningMIB 1 }
t11FcSpZsMIBConformance    OBJECT IDENTIFIER ::= { t11FcSpZoningMIB 2 }
t11FcSpZsConfiguration  OBJECT IDENTIFIER ::= { t11FcSpZsMIBObjects 1 }
t11FcSpZsStatistics     OBJECT IDENTIFIER ::= { t11FcSpZsMIBObjects 2 }

--
-- Augmenting the table of Zone Servers
--

t11FcSpZsServerTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FcSpZsServerEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A table which provides FC-SP-specific information about
           the Zone Servers on each Fabric in one or more Switches."
    ::= { t11FcSpZsConfiguration 1 }

t11FcSpZsServerEntry OBJECT-TYPE
    SYNTAX       T11FcSpZsServerEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "Each entry contains information relevant to FC-SP
           for a particular Zone Server for a particular Fabric
           on a particular Switch.  The Fabric and Switch are
           identified in the same manner as in t11ZsServerEntry."
    AUGMENTS   { t11ZsServerEntry }
    ::= { t11FcSpZsServerTable 1 }

T11FcSpZsServerEntry ::= SEQUENCE {
    t11FcSpZsServerCapabilityObject      BITS,
    t11FcSpZsServerEnabled               TruthValue,
    t11FcSpZoneSetHashStatus             T11FcSpHashCalculationStatus,
    t11FcSpActiveZoneSetHashType         T11FcSpPolicyHashFormat,
    t11FcSpActiveZoneSetHash             T11FcSpPolicyHashValue,
    t11FcSpZoneSetDatabaseHashType       T11FcSpPolicyHashFormat,
    t11FcSpZoneSetDatabaseHash           T11FcSpPolicyHashValue
}

t11FcSpZsServerCapabilityObject OBJECT-TYPE
    SYNTAX       BITS {
                     fcSpZoning(0)
                 }
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "Capabilities of the Zone Server for the particular Fabric
           on the particular Switch, with respect to FC-SP Zoning:

               fcSpZoning -- set to 1 to indicate the Switch is
                             capable of supporting FC-SP Zoning.
           "
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, Table 184."
    ::= { t11FcSpZsServerEntry 1 }

t11FcSpZsServerEnabled OBJECT-TYPE
    SYNTAX       TruthValue
    MAX-ACCESS   read-write
    STATUS       current
    DESCRIPTION
           "This object indicates whether the Zone Server for the
           particular Fabric on the particular Switch, is operating in
           FC-SP Zoning mode."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, Table 185."
    ::= { t11FcSpZsServerEntry 2 }

t11FcSpZoneSetHashStatus OBJECT-TYPE
    SYNTAX       T11FcSpHashCalculationStatus
    MAX-ACCESS   read-write
    STATUS       current
    DESCRIPTION
           "When read, the value of this object is either:

             correct -- the corresponding instances of both
                        t11FcSpActiveZoneSetHash and
                        t11FcSpZoneSetDatabaseHash contain
                        the correct hash values; or
             stale   -- the corresponding instances of
                        t11FcSpActiveZoneSetHash and
                        t11FcSpZoneSetDatabaseHash contain
                        stale (possibly incorrect) values;

           Writing a value of 'calculate' is a request to re-calculate
           and update the values of the corresponding instances of both
           t11FcSpActiveZoneSetHash and t11FcSpZoneSetDatabaseHash.
           Writing a value of 'correct' or 'stale' to this object
           is an error (e.g., 'wrongValue').

           When the Active Zone Set and/or the Zone Set Database are
           updated, it is common that multiple changes need to be made
           at the same time.  In such circumstances, the use of this
           object allows the hash values to be updated only once after
           all changes, rather than repeatedly/after each individual
           change.

           If and when the corresponding instance of
           t11ZsServerDatabaseStorageType has the value 'permanent(4)',
           then if write access is supported to any instance of a
           read-write object in any row of any table governed by the
           'permanent' value of t11ZsServerDatabaseStorageType, then
           write access to the corresponding instance of this object
           must also be supported."
    REFERENCE
           "t11ZsServerDatabaseStorageType in
           'Fibre Channel Zone Server MIB', RFC 4936, August 2007."
    DEFVAL      { stale }
    ::= { t11FcSpZsServerEntry 3 }

t11FcSpActiveZoneSetHashType OBJECT-TYPE
    SYNTAX       T11FcSpPolicyHashFormat
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The format used for the hash value contained in the
           corresponding instance of t11FcSpActiveZoneSetHash."
    ::= { t11FcSpZsServerEntry 4 }

t11FcSpActiveZoneSetHash OBJECT-TYPE
    SYNTAX       T11FcSpPolicyHashValue
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The value of the hash for the current Active Zone Set.
            The format of this value is given by the corresponding
            instance of t11FcSpActiveZoneSetHashType."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, Table 187."
    ::= { t11FcSpZsServerEntry 5 }

t11FcSpZoneSetDatabaseHashType OBJECT-TYPE
    SYNTAX       T11FcSpPolicyHashFormat
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The format used for the hash value contained in the
           corresponding instance of t11FcSpZoneSetDatabaseHash."
    ::= { t11FcSpZsServerEntry 6 }

t11FcSpZoneSetDatabaseHash OBJECT-TYPE
    SYNTAX       T11FcSpPolicyHashValue
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The value of the hash for the current Zone Set Database.
            The format of this value is given by the corresponding
            instance of t11FcSpZoneSetDatabaseHashType."

    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, Table 187."
    ::= { t11FcSpZsServerEntry 7 }

--
-- Additional Statistics for FC-SP Zoning
--

t11FcSpZsStatsTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FcSpZsStatsEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A table of statistics specific to FC-SP that are
           maintained by Zone Servers."
    ::= { t11FcSpZsStatistics 1 }

t11FcSpZsStatsEntry OBJECT-TYPE
    SYNTAX       T11FcSpZsStatsEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A set of statistics specific to FC-SP for a particular
           Zone Server for a particular Fabric on a particular Switch.
           The Fabric and Switch are identified in the same manner as
           in t11ZsStatsEntry."
    AUGMENTS   { t11ZsStatsEntry }
    ::= { t11FcSpZsStatsTable 1 }

T11FcSpZsStatsEntry ::= SEQUENCE {
    t11FcSpZsSPCMITrequestsSent       Counter32,
    t11FcSpZsSPCMITrequestsAccepted   Counter32,
    t11FcSpZsSPCMITrequestsRejected   Counter32,
    t11FcSpZsZcpRequestsSent          Counter32,
    t11FcSpZsZcpRequestsAccepted      Counter32,
    t11FcSpZsZcpRequestsRejected      Counter32,
    t11FcSpZsZirRequestsAccepted      Counter32,
    t11FcSpZsZirRequestsRejected      Counter32
}

t11FcSpZsSPCMITrequestsSent OBJECT-TYPE
    SYNTAX       Counter32
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The number of SP Commit Zone Changes (SPCMIT) operation
           requests sent by the Zone Server.

           This counter has no discontinuities other than those
           that all Counter32's have when sysUpTime=0."
    ::= { t11FcSpZsStatsEntry 1 }

t11FcSpZsSPCMITrequestsAccepted OBJECT-TYPE
    SYNTAX       Counter32
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The number of SP Commit Zone Changes (SPCMIT) operation
           requests received and accepted by the Zone Server.

           This counter has no discontinuities other than those
           that all Counter32's have when sysUpTime=0."
    ::= { t11FcSpZsStatsEntry 2 }

t11FcSpZsSPCMITrequestsRejected OBJECT-TYPE
    SYNTAX       Counter32
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The number of SP Commit Zone Changes (SPCMIT) operation
           requests received but rejected by the Zone Server.

           This counter has no discontinuities other than those
           that all Counter32's have when sysUpTime=0."
    ::= { t11FcSpZsStatsEntry 3 }

okay so the ZCP and ZIR counters are next, and they're giving packet-counting obsession ๐Ÿ“Š๐Ÿ’… each one just tallies how many requests went out or came in and got accepted or rejected, and they only reset when the counter wraps or sysUpTime hits 0 ๐Ÿฆ‹

t11FcSpZsZcpRequestsSent OBJECT-TYPE
    SYNTAX       Counter32
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The number of Zoning Check Protocol (ZCP) requests sent
           by the Zone Server.

           This counter has no discontinuities other than those
           that all Counter32's have when sysUpTime=0."
    ::= { t11FcSpZsStatsEntry 4 }

t11FcSpZsZcpRequestsAccepted OBJECT-TYPE
    SYNTAX       Counter32
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The number of Zoning Check Protocol (ZCP) requests received
           and accepted by the Zone Server.

           This counter has no discontinuities other than those
           that all Counter32's have when sysUpTime=0."
    ::= { t11FcSpZsStatsEntry 5 }

t11FcSpZsZcpRequestsRejected OBJECT-TYPE
    SYNTAX       Counter32
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The number of Zoning Check Protocol (ZCP) requests received
           but rejected by the Zone Server.

           This counter has no discontinuities other than those
           that all Counter32's have when sysUpTime=0."
    ::= { t11FcSpZsStatsEntry 6 }

t11FcSpZsZirRequestsAccepted OBJECT-TYPE
    SYNTAX       Counter32
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The number of Zoning Information Request (ZIR) requests
           received and accepted by the Zone Server.

           This counter has no discontinuities other than those
           that all Counter32's have when sysUpTime=0."
    ::= { t11FcSpZsStatsEntry 7 }

t11FcSpZsZirRequestsRejected OBJECT-TYPE
    SYNTAX       Counter32
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The number of Zoning Information Request (ZIR) requests
           received but rejected by the Zone Server.

           This counter has no discontinuities other than those
           that all Counter32's have when sysUpTime=0."
    ::= { t11FcSpZsStatsEntry 8 }

--
--  Enable/Disable for Notifications
--

t11FcSpZsNotifyControlTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FcSpZsNotifyControlEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A table of control information for notifications
           generated due to Zone Server events related to
           FC-SP Zoning."
    ::= { t11FcSpZsConfiguration 2 }

t11FcSpZsNotifyControlEntry OBJECT-TYPE
    SYNTAX       T11FcSpZsNotifyControlEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "Each entry is an augmentation of the notification control
           information for a Zone Server for a particular Fabric on a
           particular Switch.  The Fabric and Switch are identified in
           the same manner as in t11ZsNotifyControlEntry."
    AUGMENTS   { t11ZsNotifyControlEntry }
    ::= { t11FcSpZsNotifyControlTable 1 }

T11FcSpZsNotifyControlEntry ::= SEQUENCE {
     t11FcSpZsNotifyJoinSuccessEnable    TruthValue,
     t11FcSpZsNotifyJoinFailureEnable    TruthValue
}

t11FcSpZsNotifyJoinSuccessEnable OBJECT-TYPE
    SYNTAX       TruthValue
    MAX-ACCESS   read-write
    STATUS       current
    DESCRIPTION
           "This object specifies whether
           t11FcSpZsFabricJoinFailureNotify notifications should be
           generated by the Zone Server for this Fabric."
    ::= { t11FcSpZsNotifyControlEntry 1 }

t11FcSpZsNotifyJoinFailureEnable OBJECT-TYPE
    SYNTAX       TruthValue
    MAX-ACCESS   read-write
    STATUS       current
    DESCRIPTION
           "This object specifies whether
           t11FcSpZsFabricJoinSuccessNotify notifications should be
           generated by the Zone Server for this Fabric."
    ::= { t11FcSpZsNotifyControlEntry 2 }

--
-- Notifications
--
t11FcSpZsFabricJoinSuccessNotify NOTIFICATION-TYPE
    OBJECTS      { ifIndex, t11ZsFabricIndex }
    STATUS       current
    DESCRIPTION
           "This notification indicates that a Switch that is part
           of one Fabric (indicated by the value of t11ZsFabricIndex)
           has successfully joined (on the interface indicated by the
           value of ifIndex) with a Switch that is part of another
           Fabric.

           If multiple Virtual Fabrics are configured on an interface,
           and all are successfully joined at the same time, and if
           the agent so chooses, then it can generate just one
           notification in which t11ZsFabricIndex has the value 4096."
    ::= { t11FcSpZsMIBNotifications 1 }

t11FcSpZsFabricJoinFailureNotify NOTIFICATION-TYPE
    OBJECTS      { ifIndex, t11ZsFabricIndex }
    STATUS       current
    DESCRIPTION
           "This notification indicates that an E_Port on the local
           Switch has entered the Isolated state because a join
           between two Fabrics failed.  The failure occurred on the
           local Fabric indicated by the value of t11ZsFabricIndex,
           on the interface indicated by the value of ifIndex.

           If multiple Virtual Fabrics are configured on an interface,
           and all have a failure to join at the same time, and if the
           agent so chooses, then it can generate just one notification
           in which t11ZsFabricIndex has the value 4096."
    ::= { t11FcSpZsMIBNotifications 2 }

--
-- Conformance
--

t11FcSpZsMIBCompliances
                    OBJECT IDENTIFIER ::= { t11FcSpZsMIBConformance 1 }
t11FcSpZsMIBGroups  OBJECT IDENTIFIER ::= { t11FcSpZsMIBConformance 2 }

t11FcSpZsMIBCompliance MODULE-COMPLIANCE
    STATUS       current
    DESCRIPTION
           "The compliance statement for entities that
           implement the extensions specified in FC-SP for
           Fibre Channel's Zone Server."

    MODULE  -- this module

        MANDATORY-GROUPS { t11FcSpZsObjectsGroup,
                           t11FcSpZsNotificationControlGroup,
                           t11FcSpZsNotificationGroup }

        GROUP        t11FcSpZsStatisticsGroup
        DESCRIPTION
            "These counters, containing Zone Server statistics,
            are mandatory only for those systems that count
            such events."

-- Write access is not required for any objects in this MIB module:

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

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

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

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

    ::= { t11FcSpZsMIBCompliances 1 }

-- Units of Conformance

t11FcSpZsObjectsGroup OBJECT-GROUP
    OBJECTS  { t11FcSpZsServerCapabilityObject,
               t11FcSpZsServerEnabled,
               t11FcSpZoneSetHashStatus,
               t11FcSpActiveZoneSetHashType,
               t11FcSpActiveZoneSetHash,
               t11FcSpZoneSetDatabaseHashType,
               t11FcSpZoneSetDatabaseHash
             }
    STATUS   current
    DESCRIPTION
           "A collection of objects for Zone configuration
           information of a Zone Server capable of
           operating in FC-SP Zoning mode."
    ::= { t11FcSpZsMIBGroups 1 }

t11FcSpZsNotificationControlGroup OBJECT-GROUP
    OBJECTS  { t11FcSpZsNotifyJoinSuccessEnable,
               t11FcSpZsNotifyJoinFailureEnable
             }
    STATUS   current
    DESCRIPTION
           "A collection of notification control objects for
           monitoring Zone Server failures specific to FC-SP."
    ::= { t11FcSpZsMIBGroups 2 }

t11FcSpZsStatisticsGroup OBJECT-GROUP
    OBJECTS  { t11FcSpZsSPCMITrequestsSent,
               t11FcSpZsSPCMITrequestsAccepted,
               t11FcSpZsSPCMITrequestsRejected,
               t11FcSpZsZcpRequestsSent,
               t11FcSpZsZcpRequestsAccepted,
               t11FcSpZsZcpRequestsRejected,
               t11FcSpZsZirRequestsAccepted,
               t11FcSpZsZirRequestsRejected
             }
    STATUS   current
    DESCRIPTION
           "A collection of objects for collecting Zone Server
            statistics which are specific to FC-SP."
    ::= { t11FcSpZsMIBGroups 3 }

t11FcSpZsNotificationGroup NOTIFICATION-GROUP
    NOTIFICATIONS { t11FcSpZsFabricJoinSuccessNotify,
                    t11FcSpZsFabricJoinFailureNotify
                  }
    STATUS        current
    DESCRIPTION
           "A collection of notification(s) for monitoring
           Zone Server events that are specific to FC-SP."
    ::= { t11FcSpZsMIBGroups 4 }

END

6.4. The T11-FC-SP-POLICY-MIB Module โœจ

okay bestie, this is where the policy MIB starts ๐ŸŽ€ it opens with a big divider, then the module header, then all the imports it pulls in from other MIBs and TC modules ๐Ÿงš

--*******************************************************************
-- FC-SP Policy
--

T11-FC-SP-POLICY-MIB  DEFINITIONS ::= BEGIN

IMPORTS
    MODULE-IDENTITY, OBJECT-TYPE, NOTIFICATION-TYPE, mib-2,
    Counter32, Unsigned32
                          FROM SNMPv2-SMI              -- [RFC2578]
    RowStatus, StorageType, TimeStamp,
    TruthValue            FROM SNMPv2-TC               -- [RFC2579]
    MODULE-COMPLIANCE, OBJECT-GROUP,
    NOTIFICATION-GROUP
                          FROM SNMPv2-CONF             -- [RFC2580]
    SnmpAdminString       FROM SNMP-FRAMEWORK-MIB      -- [RFC3411]
    InetAddress, InetPortNumber,
    InetAddressType       FROM INET-ADDRESS-MIB        -- [RFC4001]
    fcmInstanceIndex,
    FcNameIdOrZero,
    FcDomainIdOrZero      FROM FC-MGMT-MIB             -- [RFC4044]
    T11NsGs4RejectReasonCode
                          FROM T11-FC-NAME-SERVER-MIB  -- [RFC4438]
    T11FabricIndex        FROM T11-TC-MIB              -- [RFC4439]
    T11FcSpAlphaNumName,
    T11FcSpAlphaNumNameOrAbsent,
    T11FcSpPolicyName,
    T11FcSpPolicyNameType,
    T11FcSpPolicyObjectType,
    T11FcSpPolicyHashFormat,
    T11FcSpPolicyHashValue,
    T11FcSpHashCalculationStatus   FROM T11-FC-SP-TC-MIB;

okay the MIB module itself starts here ๐ŸŽ€ the top-level identity block is all the admin stuff: who wrote it, when, and the big DESCRIPTION that explains the five parts of the module โœจ

t11FcSpPolicyMIB  MODULE-IDENTITY
    LAST-UPDATED  "200808200000Z"
    ORGANIZATION  "This MIB module was developed through the
                  coordinated effort of two organizations:
                  T11 began the development and the IETF (in
                  the IMSS Working Group) finished it."
    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 95134 USA
                  Email: kzm@cisco.com"
    DESCRIPTION
           "This MIB module specifies the management information
           required to manage Fabric Policies as defined by Fibre
           Channel's FC-SP specification.

           FC-SP uses the term 'Policy Objects', sometimes abbreviated
           to just 'Objects', to refer to containers used to hold the
           data by which Fabric Policies are specified/stored.  This
           obviously has the potential to cause confusion between
           'Policy Objects' and 'MIB objects'.  The DESCRIPTIONs in
           this MIB module attempt to avoid such confusion by the use
           of different adjectives and capitalization, even though such
           mechanisms are less effective when used in descriptors.

           Some types of Policy Objects contain multiple items of
           information, each of which are held in the same format
           within the Policy Object.  In such cases, FC-SP uses the
           term 'Entry' to describe each instance of the common format.
           For example, FC-SP defines an Attribute Policy Object as
           containing one or more 'Attribute Entries'.  Again, this MIB
           module attempts to avoid confusion by the use of adjectives
           and capitalization to distinguish an Entry within a Policy
           Object from an entry within a MIB table.

           A Fabric's database of Policy Objects consists of a set of
           active Objects that are to be enforced by that Fabric, as
           well as non-active Objects that are not enforced.
           Operations defined (in FC-SP) for Policy Management are:

            - Add/Get/Remove operations on individual non-active
              Policy Objects,
            - Activate/Deactivate operations on a Policy Summary
              Object, and
            - Get operations on the active Policy Summary Object
              and/or on individual active Policy Objects.

           This MIB module has five parts:

            1) Active Policy Objects - read-only MIB objects
               representing the set of active Policy Objects for
               each Fabric,

            2) Activate/Deactivate Operations

               - a read-write MIB object to invoke an Activate
                 operation of the policies specified via a non-active
                 Policy Summary Object, and
               - a read-write MIB object to invoke a Deactivate
                 operation.

            3) Non-active Policy Objects
               - read-create MIB objects to allow the creation of
                 non-active Policy Summary Objects (which reference
                 non-active Policy Objects), and
               - read-create MIB objects representing non-active
                 Policy Objects.

            4) Statistics

            5) Control information and Notifications

           Copyright (C) The IETF Trust (2008).  This version
           of this MIB module is part of RFC 5324;  see the RFC
           itself for full legal notices."
    REVISION  "200808200000Z"
    DESCRIPTION
           "Initial version of this MIB module, published as RFC 5324."
    ::= { mib-2 178 }

the DESCRIPTION is basically the module's whole tour guide ๐Ÿฆ‹ it sorts everything into five parts: active objects, activate/deactivate ops, non-active objects, stats, and control plus notifications ๐Ÿ’…


t11FcSpPoMIBNotifications  OBJECT IDENTIFIER ::= { t11FcSpPolicyMIB 0 }
t11FcSpPoMIBObjects        OBJECT IDENTIFIER ::= { t11FcSpPolicyMIB 1 }
t11FcSpPoMIBConformance    OBJECT IDENTIFIER ::= { t11FcSpPolicyMIB 2 }
t11FcSpPoActive         OBJECT IDENTIFIER ::= { t11FcSpPoMIBObjects 1 }
t11FcSpPoOperations     OBJECT IDENTIFIER ::= { t11FcSpPoMIBObjects 2 }
t11FcSpPoNonActive      OBJECT IDENTIFIER ::= { t11FcSpPoMIBObjects 3 }
t11FcSpPoStatistics     OBJECT IDENTIFIER ::= { t11FcSpPoMIBObjects 4 }
t11FcSpPoControl        OBJECT IDENTIFIER ::= { t11FcSpPoMIBObjects 5 }

--
--  Part 1 - Active Policy Objects
--

t11FcSpPoTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FcSpPoEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A table containing top-level information about active
           FC-SP policies on various Fabrics."
    ::= { t11FcSpPoActive 1 }

t11FcSpPoEntry OBJECT-TYPE

    SYNTAX       T11FcSpPoEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "Each entry contains information about active FC-SP policies
           for a particular Fabric, managed as part of the Fibre
           Channel management instance identified by fcmInstanceIndex."
    INDEX  { fcmInstanceIndex, t11FcSpPoFabricIndex }
    ::= { t11FcSpPoTable 1 }

T11FcSpPoEntry ::= SEQUENCE {
    t11FcSpPoFabricIndex           T11FabricIndex,
    t11FcSpPoPolicySummaryObjName  T11FcSpAlphaNumName,
    t11FcSpPoAdminFabricName       FcNameIdOrZero,
    t11FcSpPoActivatedTimeStamp    TimeStamp
}

t11FcSpPoFabricIndex OBJECT-TYPE
    SYNTAX       T11FabricIndex
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "An index value that uniquely identifies a particular
           Fabric."
    ::= { t11FcSpPoEntry 1 }

t11FcSpPoPolicySummaryObjName OBJECT-TYPE
    SYNTAX       T11FcSpAlphaNumName
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The name of this Fabric's (active) Policy Summary Object."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.3 and table 104."
    ::= { t11FcSpPoEntry 2 }

t11FcSpPoAdminFabricName OBJECT-TYPE
    SYNTAX       FcNameIdOrZero (SIZE (8))
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The administratively-specified name for this Fabric, as
           specified in the active Switch Membership List Object.
           This value is meaningful only when Static Domain_IDs are
           in use in a Fabric (see FC-SW-4).  Static Domain_IDs are
           administratively enabled by a setting of the Switch Flags
           in each Switch Entry in the Switch Membership List Object.
           If Static Domain_IDs are not in use, this value might be
           '0000000000000000'h.

           The t11FamEnable, t11FamFabricName, and
           t11FamConfigDomainIdType objects defined in the
           T11-FC-FABRIC-ADDR-MGR-MIB module are also concerned with
           the use of an administratively-specified name for a Fabric
           and Static Domain_IDs.  When FC-SP Policy is in use in a
           Fabric, the values of t11FamEnable, t11FamFabricName, and
           t11FamConfigDomainIdType must be read-only and reflect the
           active Policy Objects.  For example, the value of
           t11FamFabricName must reflect the value of
           t11FcSpPoAdminFabricName."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.4.1 and table 108.
            - Fibre Channel - Switch Fabric-4 (FC-SW-4),
              ANSI INCITS 418-2006, April 2006, section 7.1.
            - Fibre Channel Fabric Address Manager MIB', RFC 4439,
              March 2006."
    ::= { t11FcSpPoEntry 3 }

t11FcSpPoActivatedTimeStamp OBJECT-TYPE
    SYNTAX       TimeStamp
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The value of sysUpTime at which this Fabric's Policy
           Summary Object was last activated, or zero if the same
           Policy Summary Object has been active since the last
           restart of the management system."
    ::= { t11FcSpPoEntry 4 }

--
-- The table of Policy Summary Objects
--

t11FcSpPoSummaryTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FcSpPoSummaryEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A table of information about active Policy Objects listed
           within FC-SP Policy Summary Objects."
    ::= { t11FcSpPoActive 2 }

t11FcSpPoSummaryEntry OBJECT-TYPE
    SYNTAX       T11FcSpPoSummaryEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "Each entry contains information about one of the active
           Policy Objects listed within the Policy Summary Object for
           the Fabric identified by t11FcSpPoFabricIndex and managed
           within the Fibre Channel management instance identified by
           fcmInstanceIndex.

           How many Policy Objects of a given type can be active at
           any one time for a given Fabric depends on the type, as
           specified in FC-SP.  For some types, it is one per Fabric;
           for other types, more than one can be active per Fabric.
           In both of these cases, the absence of any entries in this
           table for a particular type is equivalent to there being one
           Policy Object of that type that is empty, e.g., a Switch
           Membership List Object that identifies zero Switches."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.3 and table 104."
    INDEX  { fcmInstanceIndex, t11FcSpPoFabricIndex,
             t11FcSpPoSummaryPolicyNameType,
             t11FcSpPoSummaryPolicyName }
    ::= { t11FcSpPoSummaryTable 1 }

T11FcSpPoSummaryEntry ::= SEQUENCE {
    t11FcSpPoSummaryPolicyNameType  T11FcSpPolicyNameType,
    t11FcSpPoSummaryPolicyName      T11FcSpPolicyName,
    t11FcSpPoSummaryPolicyType      T11FcSpPolicyObjectType,
    t11FcSpPoSummaryHashFormat      T11FcSpPolicyHashFormat,
    t11FcSpPoSummaryHashValue       T11FcSpPolicyHashValue
}

t11FcSpPoSummaryPolicyNameType OBJECT-TYPE
    SYNTAX       T11FcSpPolicyNameType {
                     nodeName(1),
                     alphaNumericName(7)
                 }
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "The combination of t11FcSpPoSummaryPolicyNameType and
           t11FcSpPoSummaryPolicyName specify the name of the Policy
           Object contained in the Policy Summary Object.

           The type of name is 'nodeName' if the value of the
           corresponding instance of t11FcSpPoSummaryPolicyType is
           'switchConnectivity', or 'alphaNumericName' otherwise."
    ::= { t11FcSpPoSummaryEntry 1 }

t11FcSpPoSummaryPolicyName OBJECT-TYPE
    SYNTAX       T11FcSpPolicyName
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "The combination of t11FcSpPoSummaryPolicyNameType and
           t11FcSpPoSummaryPolicyName specify the name of the Policy
           Object contained in the Policy Summary Object."
    ::= { t11FcSpPoSummaryEntry 2 }

t11FcSpPoSummaryPolicyType OBJECT-TYPE
    SYNTAX       T11FcSpPolicyObjectType
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The 'Identifier' that specifies the type of this
           Policy Object."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.3.1 and table 104."
    ::= { t11FcSpPoSummaryEntry 3 }

and that's the Active Policy Objects part wrapped up ๐ŸŒธ the summary table is where the policy names and types finally show up, so the next bit is gonna be iconic ๐Ÿ”ฅ

okay bestie, the hash stuff comes first ๐Ÿ’…โœจ

t11FcSpPoSummaryHashFormat OBJECT-TYPE
    SYNTAX       T11FcSpPolicyHashFormat
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The format of this Policy Object's hash value as
           contained in the corresponding instance of the
           t11FcSpPoSummaryHashValue object."
    ::= { t11FcSpPoSummaryEntry 4 }

t11FcSpPoSummaryHashValue OBJECT-TYPE
    SYNTAX       T11FcSpPolicyHashValue
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The hash value of this Policy Object, in the format
           identified by the corresponding instance of the
           t11FcSpPoSummaryHashFormat object."
    ::= { t11FcSpPoSummaryEntry 5 }

next up: the Switch Membership stuff, and it's lowkey the main character of this whole section ๐Ÿฆ‹

--
-- Switch Entries in Active Switch Membership List Objects
--

t11FcSpPoSwMembTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FcSpPoSwMembEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A table of Switch Entries in active Switch Membership List
           Objects.

           One Switch Membership List Object is represented by all
           of the rows of this table that have the same values
           of fcmInstanceIndex and t11FcSpPoFabricIndex."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.4.1 and table 110."
    ::= { t11FcSpPoActive 3 }

t11FcSpPoSwMembEntry OBJECT-TYPE
    SYNTAX       T11FcSpPoSwMembEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "Each entry contains information about one Switch Entry
           within the active Switch Membership List Object for the
           Fabric identified by t11FcSpPoFabricIndex and managed
           within the Fibre Channel management instance identified
           by fcmInstanceIndex."
    INDEX  { fcmInstanceIndex, t11FcSpPoFabricIndex,
             t11FcSpPoSwMembSwitchNameType, t11FcSpPoSwMembSwitchName }
    ::= { t11FcSpPoSwMembTable 1 }

T11FcSpPoSwMembEntry ::= SEQUENCE {
    t11FcSpPoSwMembSwitchNameType   T11FcSpPolicyNameType,
    t11FcSpPoSwMembSwitchName       FcNameIdOrZero,
    t11FcSpPoSwMembSwitchFlags      BITS,
    t11FcSpPoSwMembDomainID         FcDomainIdOrZero,
    t11FcSpPoSwMembPolicyDataRole   INTEGER,
    t11FcSpPoSwMembAuthBehaviour    BITS,
    t11FcSpPoSwMembAttribute        T11FcSpAlphaNumNameOrAbsent
}

t11FcSpPoSwMembSwitchNameType OBJECT-TYPE
    SYNTAX       T11FcSpPolicyNameType {
                     nodeName(1),
                     restrictedNodeName(2),
                     wildcard(5),
                     restrictedWildcard(6)
                 }
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "If the value of this object is 'nodeName' or
           'restrictedNodeName', then the combination of
           this object and t11FcSpPoSwMembSwitchName specify the
           Switch Name of this Switch Entry.

           The membership is restricted or unrestricted based on the
           name type.  Restricted membership means that the Switch is
           not allowed to be part of the Fabric unless allowed by a
           specific Switch Connectivity Object.  Unrestricted
           membership means that the Switch is allowed to be part of
           the Fabric unless disallowed by a specific Switch
           Connectivity Object.

           The values of 'wildcard' and 'restrictedWildcard' provide
           the means to specify whether to allow/deny membership for
           Switches not explicitly named in the Switch Membership
           List Object."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.4.1 and table 110."
    ::= { t11FcSpPoSwMembEntry 1 }

t11FcSpPoSwMembSwitchName OBJECT-TYPE
    SYNTAX       FcNameIdOrZero (SIZE (8))
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "When the value of t11FcSpPoSwMembSwitchNameType is
           'wildcard' or 'restrictedWildcard', this object has the
           value '0000000000000000'h.

           Otherwise, the combination of t11FcSpPoSwMembSwitchNameType
           and this object specify the Switch Name of this Switch
           Entry."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.4.1 and table 110."
    ::= { t11FcSpPoSwMembEntry 2 }

t11FcSpPoSwMembSwitchFlags OBJECT-TYPE
    SYNTAX       BITS {
                     staticDomainID(0),
                     insistentDomainID(1),
                     serialPortsAccess(2),
                     physicalPortsAccess(3),
                     managerRole(4)
                 }
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "Configurable options in respect to the administration
           of Policy Objects at this Switch:

              'staticDomainID'      - if this bit is set, the Switch
           uses the 'Static Domain_IDs behavior' (as defined in
           FC-SW-4).  This bit needs to have the same setting for all
           Switches in a Fabric's Switch Membership List Object, or
           else the Fabric will partition.  If this bit is set, the
           Domain_ID for the Switch is given by the corresponding
           instance of t11FcSpPoSwMembDomainID.

              'insistentDomainID'   -  if this bit is set, the
           Switch uses the 'Insistent Domain_ID behavior' (see
           t11FamConfigDomainId of T11-FC-FABRIC-ADDR-MGR-MIB), the
           Domain_ID for the Switch is given by the corresponding
           instance of t11FcSpPoSwMembDomainID.

              'serialPortsAccess'   - the Switch allows management
           through serial ports when and only when this bit is set.

              'physicalPortsAccess' - the Switch allows management
           through the physical panel when and only when this bit
           is set.

              'managerRole'         - the Switch is allowed to change
           the Fabric Policy configuration (on receipt of any of the
           EACA, Enhanced Stage Fabric Configuration (ESFC), Enhanced
           Update Fabric Configuration (EUFC), ACA, SFC, or UFC
           SW_ILSs) if and only if this bit is set.

           Whenever a Fabric has Active Policy Objects, the value of
           the t11FamConfigDomainIdType object defined in the
           T11-FC-FABRIC-ADDR-MGR-MIB module must be read-only and
           reflect the values of the 'staticDomainID' and
           'insistentDomainID' bits of this object."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,

              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.4.1 and table 112.
            - Fibre Channel - Switch Fabric-4 (FC-SW-4),
              ANSI INCITS 418-2006, April 2006, section 7.1.
            - t11FamConfigDomainIdType, T11-FC-FABRIC-ADDR-MGR-MIB,
              Fibre Channel Fabric Address Manager MIB, RFC 4439."
    ::= { t11FcSpPoSwMembEntry 3 }

t11FcSpPoSwMembDomainID OBJECT-TYPE
    SYNTAX       FcDomainIdOrZero
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The specified Domain_ID value when either of the
           'staticDomainID' or 'insistentDomainID' bits are set in
           the corresponding instance of t11FcSpPoSwMembSwitchFlags.

           Whenever a Fabric has Active Policy Objects, the value
           of the t11FamConfigDomainId object defined in the
           T11-FC-FABRIC-ADDR-MGR-MIB module must be read-only and
           reflect the value of this object."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.4.1 and tables 111 and 112.
            - t11FamConfigDomainId, T11-FC-FABRIC-ADDR-MGR-MIB,
              Fibre Channel Fabric Address Manager MIB, RFC 4439."
    ::= { t11FcSpPoSwMembEntry 4 }

t11FcSpPoSwMembPolicyDataRole OBJECT-TYPE
    SYNTAX       INTEGER {
                     client(1),
                     autonomous(2),
                     server(3)
                 }
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The role of the Switch in terms of which Policy data
           it retains/maintains:

             'client' - the Switch operates as a Client Switch.
           A Client Switch maintains its own Switch Connectivity
           Object and all Fabric-wide List Objects.  If FC-SP
           Zoning is used, a Client Switch maintains only the
           subset of the Active Zone Set that it requires to
           enforce the current Fabric Zoning configuration.

             'autonomous' -  the Switch operates as an Autonomous
           Switch.  An Autonomous Switch maintains its own Switch
           Connectivity Object and all Fabric-wide List Objects.
           This is the same as 'client' except that if FC-SP Zoning
           is used, an Autonomous Switch maintains a complete copy
           of the Fabric Zoning Database.

             'server' - the Switch operates as a Server Switch.
           A Server Switch maintains all Fabric-wide List Objects
           and the Switch Connectivity Objects of each Switch in
           the Fabric.  If FC-SP Zoning is used, a Server Switch
           maintains a complete copy of the Fabric Zoning Database."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.4.1 and table 113."
    ::= { t11FcSpPoSwMembEntry 5 }

t11FcSpPoSwMembAuthBehaviour  OBJECT-TYPE
    SYNTAX       BITS {
                     mustAuthenticate(0),
                     rejectIsFailure(1)
                 }
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The authentication behaviour of the Switch:

             'mustAuthenticate' - if this bit is set, all connections
           between this Switch and neighbor Switches must be
           authenticated.

             'rejectIsFailure' - if this bit is set, the rejection of
           an AUTH_Negotiate message must be considered as an
           authentication failure by this Switch."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.4.1 and table 114."
    ::= { t11FcSpPoSwMembEntry 6 }

t11FcSpPoSwMembAttribute  OBJECT-TYPE
    SYNTAX       T11FcSpAlphaNumNameOrAbsent
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The name of an active Attribute Policy Object that is
           defined for this Switch, or the zero-length string.  The
           zero-length string indicates that no Attribute Policy
           Object is defined for this Switch."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.4.1 and table 110."
    ::= { t11FcSpPoSwMembEntry 7 }

--
-- Node Entries in Active Node Membership List Objects
--

t11FcSpPoNoMembTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FcSpPoNoMembEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A table of Node Entries in active Node Membership List
           Objects.

           One Node Membership List Object is represented by all
           of the rows of this table that have the same values
           of fcmInstanceIndex and t11FcSpPoFabricIndex."
    ::= { t11FcSpPoActive 4 }

the Node Membership bits are next, bestie ๐Ÿงš

Okay bestie, we're deep in the Node Entries era now ๐Ÿงš Each Node gets its own little row in the Membership List, and the rows are keyed by name, so it's basically a VIP guest list for the fabric ๐ŸŽ€

t11FcSpPoNoMembEntry OBJECT-TYPE
    SYNTAX       T11FcSpPoNoMembEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "Each entry contains information about one Node Entry
           within the active Node Membership List Object for the
           Fabric identified by t11FcSpPoFabricIndex and managed
           within the Fibre Channel management instance identified
           by fcmInstanceIndex."
    INDEX  { fcmInstanceIndex, t11FcSpPoFabricIndex,
             t11FcSpPoNoMembNodeNameType, t11FcSpPoNoMembNodeName }
    ::= { t11FcSpPoNoMembTable 1 }

T11FcSpPoNoMembEntry ::= SEQUENCE {
    t11FcSpPoNoMembNodeNameType   T11FcSpPolicyNameType,
    t11FcSpPoNoMembNodeName       FcNameIdOrZero,
    t11FcSpPoNoMembFlags          BITS,
    t11FcSpPoNoMembCtAccessIndex  Unsigned32,
    t11FcSpPoNoMembAttribute      T11FcSpAlphaNumNameOrAbsent
}

t11FcSpPoNoMembNodeNameType OBJECT-TYPE

    SYNTAX       T11FcSpPolicyNameType {
                     nodeName(1),
                     restrictedNodeName(2),
                     portName(3),
                     restrictedPortName(4),
                     wildcard(5),
                     restrictedWildcard(6)
                 }
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "If the value of this object is 'wildcard' or
           'restrictedWildcard', this Node Entry applies to Nodes not
           explicitly named in the Node Membership List Object.

           Otherwise, the combination of this object and
           t11FcSpPoNoMembNodeName specify the name of this Node Entry
           in the active Node Membership List Object.  A Node is
           identified by its Node Name or by one or more of its Port
           Names.

           Restricted membership means that a Node is not allowed to be
           connected to the Fabric unless allowed by a specific Switch
           Connectivity Object.  Unrestricted membership means that a
           Node is allowed to be connected to the Fabric unless
           disallowed by a specific Switch Connectivity Object."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.4.1 and table 116."
    ::= { t11FcSpPoNoMembEntry 1 }

t11FcSpPoNoMembNodeName OBJECT-TYPE
    SYNTAX       FcNameIdOrZero (SIZE (8))
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "If the value of t11FcSpPoNoMembNodeNameType is
           'wildcard' or 'restrictedWildcard', this object has the
           value '0000000000000000'h.

           Otherwise, the combination of t11FcSpPoNoMembNodeNameType
           and this object specify the name of this Node Entry is the
           active Node Membership List Object."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.4.1 and table 116."

    ::= { t11FcSpPoNoMembEntry 2 }

t11FcSpPoNoMembFlags OBJECT-TYPE
    SYNTAX       BITS {
                     scsiEnclosureAccess(0),
                     authenticationRequired(1)
                 }
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "Configurable options in respect to the administration
           of Policy Objects at this Node:

                'scsiEnclosureAccess'      - the Node is allowed to
           control any Switch through SCSI Enclosure Services if this
           bit is set.  If a Switch does not support SCSI Enclosure
           Services, this bit is ignored.

                'authenticationRequired'   - the Node is required to
           authenticate itself to any Switch to which it is connected
           if and only if this bit is set."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.4.1 and table 118."
    ::= { t11FcSpPoNoMembEntry 3 }

t11FcSpPoNoMembCtAccessIndex  OBJECT-TYPE
    SYNTAX       Unsigned32 (0..4294967295)
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "If the value of this object is zero, then access by this
           Node to Generic Services is not limited by a Common
           Transport Access Specifier.

           Otherwise, the limits are specified by the set of Common
           Transport Access Descriptors contained in those rows of
           the t11FcSpPoCtDescrTable for the same Fabric and for which
           the value of t11FcSpPoCtDescrSpecifierIndex is the same as
           the value of this object."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP), February 2007,
              section 7.1.4.1 and tables 118/119/120/121."
    ::= { t11FcSpPoNoMembEntry 4 }

t11FcSpPoNoMembAttribute  OBJECT-TYPE

    SYNTAX       T11FcSpAlphaNumNameOrAbsent
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The name of an active Attribute Policy Object that is
           defined for this Node, or the zero-length string.  The
           zero-length string indicates that no Attribute Policy
           Object is defined for this Node."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.4.1 and table 116."
    ::= { t11FcSpPoNoMembEntry 5 }

--
--
-- Common Transport Access Descriptors
--

t11FcSpPoCtDescrTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FcSpPoCtDescrEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A table of Common Transport Access Descriptors being used
           within active Policy Objects.

           A Common Transport Access Specifier is a list of Common
           Transport Access Descriptors that specify whether a Node
           is allowed to access a Generic Service or Sub-Server.

           An active Common Transport Access Specifier is represented
           by all rows of this table that have the same values of
           fcmInstanceIndex, t11FcSpPoFabricIndex, and
           t11FcSpPoCtDescrSpecifierIndex."
    ::= { t11FcSpPoActive 5 }

t11FcSpPoCtDescrEntry OBJECT-TYPE
    SYNTAX       T11FcSpPoCtDescrEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "Each entry contains information about one Common
           Transport Access Descriptor of an active Common Transport
           Access Specifier used within the Fabric identified by
           t11FcSpPoFabricIndex and managed within the Fibre Channel
           management instance identified by fcmInstanceIndex."
    INDEX  { fcmInstanceIndex, t11FcSpPoFabricIndex,

             t11FcSpPoCtDescrSpecifierIndex, t11FcSpPoCtDescrIndex }
    ::= { t11FcSpPoCtDescrTable 1 }

T11FcSpPoCtDescrEntry ::= SEQUENCE {
    t11FcSpPoCtDescrSpecifierIndex   Unsigned32,
    t11FcSpPoCtDescrIndex            Unsigned32,
    t11FcSpPoCtDescrFlags            BITS,
    t11FcSpPoCtDescrGsType           OCTET STRING,
    t11FcSpPoCtDescrGsSubType        OCTET STRING
}

t11FcSpPoCtDescrSpecifierIndex OBJECT-TYPE
    SYNTAX       Unsigned32 (1..4294967295)
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "An index value that uniquely identifies a particular
           Common Transport Access Specifier within a Fabric."
    ::= { t11FcSpPoCtDescrEntry 1 }

t11FcSpPoCtDescrIndex OBJECT-TYPE
    SYNTAX       Unsigned32 (1..4294967295)
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "An index value that uniquely identifies a particular
           Common Transport Access Descriptor within a Common Transport
           Access Specifier."
    ::= { t11FcSpPoCtDescrEntry 2 }

t11FcSpPoCtDescrFlags OBJECT-TYPE
    SYNTAX       BITS {
                     allow(0),
                     gsTypeWildcard(1),
                     gsSubTypeWildcard(2),
                     readOnly(3)
                 }
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The flag bits that specify how access is to be limited by
           this Common Transport Access Descriptor:

            - allow -- access to the specified Generic Service and
              Server is allowed if this bit is set, and is to be denied
              if this bit is not set.

            - gsTypeWildcard -- if this bit is set, the Generic Service

              to be allowed/denied is specified by the value of
              t11FcSpPoCtDescrGsType.  If this bit is set, then the
              gsSubTypeWildcard bit must not be set.

            - gsSubTypeWildcard -- if this bit is set, the Generic
              Service to be allowed/denied is specified by the value of
              t11FcSpPoCtDescrGsSubType.  If this bit is set, then the
              gsTypeWildcard bit must not be set.

            - readOnly -- if this bit is set, then access is to be
              granted only for reading."
    ::= { t11FcSpPoCtDescrEntry 3 }

t11FcSpPoCtDescrGsType OBJECT-TYPE
    SYNTAX       OCTET STRING (SIZE (1))
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The GS_Type of the Generic Service (e.g., the FC-GS-5
           Management Service) that is subject to access control.
           This value is ignored if the gsTypeWildcard bit is not set
           in the corresponding value of t11FcSpPoCtDescrFlags."
    REFERENCE
           "- Fibre Channel - Generic Services-5 (FC-GS-5),
              ANSI INCITS 427-2006, section 4.3.2.4."
    ::= { t11FcSpPoCtDescrEntry 4 }

t11FcSpPoCtDescrGsSubType OBJECT-TYPE
    SYNTAX       OCTET STRING (SIZE (1))
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The GS_Subtype of the Generic Server (e.g., the Fabric Zone
           Server) that is subject to access control.  This value is
           ignored if the gsSubTypeWildcard bit is not set in the
           corresponding value of t11FcSpPoCtDescrFlags."
    REFERENCE
           "- Fibre Channel - Generic Services-5 (FC-GS-5),
              ANSI INCITS 427-2006, section 4.3.2.5."
    ::= { t11FcSpPoCtDescrEntry 5 }

--
--
-- Switches/Nodes in Active Switch Connectivity Objects
--

t11FcSpPoSwConnTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FcSpPoSwConnEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A table of active Switch Connectivity Objects.

           A Switch Connectivity Object defines to which other
           Switches or Nodes a particular Switch may/may not be
           connected at the Node level and/or at the Port level."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.6.1, tables 123/124."
    ::= { t11FcSpPoActive 6 }

t11FcSpPoSwConnEntry OBJECT-TYPE
    SYNTAX       T11FcSpPoSwConnEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "Each entry contains the name of either a Switch or a Node
           with which any port of a particular Switch, or a particular
           port of that Switch, is allowed or not allowed to be
           connected.

           The particular Switch is on the Fabric identified by
           t11FcSpPoFabricIndex and managed within the Fibre Channel
           management instance identified by fcmInstanceIndex."
    INDEX  { fcmInstanceIndex, t11FcSpPoFabricIndex,
             t11FcSpPoSwConnSwitchName, t11FcSpPoSwConnAllowedType,
             t11FcSpPoSwConnPortNameOrAll,
             t11FcSpPoSwConnAllowedIndex }
    ::= { t11FcSpPoSwConnTable 1 }

okay the switch connectivity stuff is wrapping up and then we get into IP management, which is giving main character energy ๐Ÿ’…โœจ

T11FcSpPoSwConnEntry ::= SEQUENCE {
    t11FcSpPoSwConnSwitchName       FcNameIdOrZero,
    t11FcSpPoSwConnAllowedType      INTEGER,
    t11FcSpPoSwConnPortNameOrAll    FcNameIdOrZero,
    t11FcSpPoSwConnAllowedIndex     Unsigned32,
    t11FcSpPoSwConnAllowedNameType  T11FcSpPolicyNameType,
    t11FcSpPoSwConnAllowedName      T11FcSpPolicyName
}

t11FcSpPoSwConnSwitchName OBJECT-TYPE
    SYNTAX       FcNameIdOrZero (SIZE (8))
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "The name of the particular Switch for which this Switch
           Connectivity Object specifies topology restrictions."
    ::= { t11FcSpPoSwConnEntry 1 }

t11FcSpPoSwConnAllowedType OBJECT-TYPE
    SYNTAX       INTEGER { switch(1), node(2) }
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "This object specifies whether this row refers to
           Switch-to-Switch or Switch-to-Node connectivity, i.e.,
           whether the corresponding instance of
           t11FcSpPoSwConnAllowedName specifies the name of a Switch
           or the name of a Node."
    ::= { t11FcSpPoSwConnEntry 2 }

t11FcSpPoSwConnPortNameOrAll OBJECT-TYPE
    SYNTAX       FcNameIdOrZero (SIZE(0 | 8))
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "This object specifies either the particular port to which
           this topology restriction applies, or if the value is the
           zero-length string, that the topology restriction applies
           to all ports on the particular Switch.

           In the FC-SP Policy Database, restrictions for a particular
           port are formatted within a Port Connectivity Entry of a
           Switch Connectivity Object, whereas restrictions for all
           ports on the Switch are specified in the main part of a
           Switch Connectivity Object, i.e., not in a Port Connectivity
           Entry."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.6.1, tables 123/124."
    ::= { t11FcSpPoSwConnEntry 3 }

t11FcSpPoSwConnAllowedIndex OBJECT-TYPE
    SYNTAX       Unsigned32 (1..4294967295)
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "When multiple rows in this table apply to the same
           port(s) in the same Switch's Switch Connectivity Object,
           this object provides a unique index value to distinguish
           between such rows."
    ::= { t11FcSpPoSwConnEntry 4 }

t11FcSpPoSwConnAllowedNameType OBJECT-TYPE
    SYNTAX       T11FcSpPolicyNameType {
                     nodeName(1),
                     restrictedNodeName(2),
                     portName(3),
                     restrictedPortName(4),
                     wildcard(5),
                     restrictedWildcard(6)
                 }
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "If the value of this object is 'wildcard' or
           'restrictedWildcard', this row specifies whether
           connectivity is allowed/not allowed with entities not
           explicitly named by other rows.

           Otherwise, the combination of t11FcSpPoSwConnAllowedNameType
           and t11FcSpPoSwConnAllowedName specify the name of:

           - a Switch (if t11FcSpPoSwConnAllowedType = 'switch'), or
           - a Node (if t11FcSpPoSwConnAllowedType = 'node')

           to which connectivity is:

            - allowed by 'nodeName' and 'portName',
            - not allowed by 'restrictedNodeName' and
              'restrictedPortName'."
    ::= { t11FcSpPoSwConnEntry 5 }

t11FcSpPoSwConnAllowedName OBJECT-TYPE
    SYNTAX       T11FcSpPolicyName (SIZE (8))
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "If the value of t11FcSpPoSwConnAllowedNameType is
           'wildcard' or 'restrictedWildcard', this object has the
           value '0000000000000000'h.

           Otherwise, the combination of t11FcSpPoSwConnAllowedNameType
           and t11FcSpPoSwConnAllowedName specify the name of:

           - a Switch (if t11FcSpPoSwConnAllowedType = 'switch'), or
           - a Node (if t11FcSpPoSwConnAllowedType = 'node')

           to which connectivity is allowed/restricted."
    ::= { t11FcSpPoSwConnEntry 6 }

--
-- IP Management Entries in Active IP Management List Objects
--

t11FcSpPoIpMgmtTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FcSpPoIpMgmtEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A table of IP Management Entries in active IP Management
           List Objects.  An IP Management List Object is a
           Fabric-wide Policy Object that describes which IP hosts
           are allowed to manage a Fabric.

           One IP Management List Object is represented by all
           of the rows of this table that have the same values
           of fcmInstanceIndex and t11FcSpPoFabricIndex."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.7"
    ::= { t11FcSpPoActive 7 }

t11FcSpPoIpMgmtEntry OBJECT-TYPE
    SYNTAX       T11FcSpPoIpMgmtEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "Each entry contains information about one IP Management
           Entry within the active IP Management List Object for the
           Fabric identified by t11FcSpPoFabricIndex and managed
           within the Fibre Channel management instance identified
           by fcmInstanceIndex.

           The Policy Object Name of an IP Management Entry Policy
           Object is either an IPv6 Address Range or an IPv4 Address
           Range, where in each case, the range is specified as two
           addresses: the low and high ends of the range.  In
           particular, since the Policy Object Name in this situation
           can only be an IPv6 Address Range or an IPv4 Address Range,
           it is represented here by three MIB objects defined as a
           (InetAddressType, InetAddress, InetAddress) tuple, in which
           the first address is the low end of the range, the second
           address is the high end of the range, and both addresses are
           of the type designated by InetAddressType.

           In theory, the use of t11FcSpPoIpMgmtEntryNameLow and
           t11FcSpPoIpMgmtEntryNameHigh (which both have the syntax
           of InetAddress) in the INDEX could cause the need for
           excessively long OIDs.  In practice, this can't happen
           because FC-SP doesn't allow these objects to be specified
           as DNS names."
    INDEX  { fcmInstanceIndex, t11FcSpPoFabricIndex,
             t11FcSpPoIpMgmtEntryNameType,
             t11FcSpPoIpMgmtEntryNameLow,
             t11FcSpPoIpMgmtEntryNameHigh }
    ::= { t11FcSpPoIpMgmtTable 1 }

T11FcSpPoIpMgmtEntry ::= SEQUENCE {
    t11FcSpPoIpMgmtEntryNameType   InetAddressType,
    t11FcSpPoIpMgmtEntryNameLow    InetAddress,
    t11FcSpPoIpMgmtEntryNameHigh   InetAddress,
    t11FcSpPoIpMgmtWkpIndex        Unsigned32,
    t11FcSpPoIpMgmtAttribute       T11FcSpAlphaNumNameOrAbsent
}

t11FcSpPoIpMgmtEntryNameType OBJECT-TYPE
    SYNTAX       InetAddressType
                 -- INTEGER { ipv4(1), ipv6(2) }
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "The combination of t11FcSpPoIpMgmtNameType,
           t11FcSpPoIpMgmtNameLow, and t11FcSpPoIpMgmtNameHigh
           specify the Internet address range of this IP Management
           Entry in the IP Management List Object.

           The FC-SP specification does not allow the use of a
           DNS domain name to specify the address at the lower end
           or at the higher end of the Internet address range, nor does
           it allow the specification of a zone index.  Therefore, the
           type of address must be one of: 'ipv4', or 'ipv6'."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP), February 2007,
              sections 7.1.7.1 & 7.1.2, tables 103/126."
    ::= { t11FcSpPoIpMgmtEntry 1 }

t11FcSpPoIpMgmtEntryNameLow OBJECT-TYPE
    SYNTAX       InetAddress (SIZE(4 | 16))
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "The lower end of an Internet address range.  The type
           of this address is given by the corresponding instance
           of t11FcSpPoIpMgmtEntryNameType.

           The combination of t11FcSpPoIpMgmtNameType,
           t11FcSpPoIpMgmtNameLow, and t11FcSpPoIpMgmtNameHigh
           specify the Internet address range of this IP Management
           Entry in the IP Management List Object."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP), February 2007,
              sections 7.1.7.1 & 7.1.2, tables 103/126."
    ::= { t11FcSpPoIpMgmtEntry 2 }

t11FcSpPoIpMgmtEntryNameHigh OBJECT-TYPE
    SYNTAX       InetAddress (SIZE(4 | 16))
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "The higher end of an Internet address range.  The type
           of this address is given by the corresponding instance
           of t11FcSpPoIpMgmtEntryNameType.

           The combination of t11FcSpPoIpMgmtNameType,
           t11FcSpPoIpMgmtNameLow, and t11FcSpPoIpMgmtNameHigh
           specify the Internet address range of this IP Management
           Entry in the IP Management List Object."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, sections 7.1.7.1 & 7.1.2, tables 103/126."
    ::= { t11FcSpPoIpMgmtEntry 3 }

t11FcSpPoIpMgmtWkpIndex OBJECT-TYPE
    SYNTAX       Unsigned32 (0..4294967295)
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "This object identifies the restrictions for IP management
           access by IP hosts in this range of IP addresses, specified
           as the set of Well-Known Protocols Access Descriptors
           contained in those rows of the t11FcSpPoWkpDescrTable for
           which the value of t11FcSpPoWkpDescrSpecifierIndex is the
           same as the value of this object.  A value of zero indicates
           that this IP Management Entry does not identify a Well-Known
           Protocols Access Specifier."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.7.1 and tables 127/129."
    ::= { t11FcSpPoIpMgmtEntry 4 }

t11FcSpPoIpMgmtAttribute OBJECT-TYPE
    SYNTAX       T11FcSpAlphaNumNameOrAbsent
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The name of an active Attribute Policy Object that is
           defined for this IP Management entry or the zero-length
           string.  The zero-length string indicates that no Attribute
           Policy Object is defined for this IP Management entry."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.7.1 and table 128."
    ::= { t11FcSpPoIpMgmtEntry 5 }

--
-- Well-Known Protocol Access Descriptors
--

okay so this part is where the well-known protocol descriptors live ๐ŸŽ€ each one says which protocol, which port, and which flags decide whether IP management access gets let in ๐Ÿšชโœจ

t11FcSpPoWkpDescrTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FcSpPoWkpDescrEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A table of the Well-Known Protocol Access Descriptors
           being used within active Policy Objects.

           A Well-Known Protocol Access Specifier is a list of
           Well-Known Protocol Access Descriptors each of which
           specifies a protocol number, a port number, and/or various
           flags specifying how IP management access is restricted.

           A Well-Known Protocol Transport Access Specifier is
           represented by all rows of this table that have the
           same values of fcmInstanceIndex, t11FcSpPoFabricIndex,
           and t11FcSpPoWkpDescrSpecifierIndex."
    ::= { t11FcSpPoActive 8 }

t11FcSpPoWkpDescrEntry OBJECT-TYPE
    SYNTAX       T11FcSpPoWkpDescrEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "Each entry contains information about one Well-Known
           Protocol Access Descriptor of a Well-Known Protocol
           Access Specifier used within the Fabric identified by
           t11FcSpPoFabricIndex and managed within the Fibre Channel
           management instance identified by fcmInstanceIndex."

    INDEX  { fcmInstanceIndex, t11FcSpPoFabricIndex,
             t11FcSpPoWkpDescrSpecifierIndex, t11FcSpPoWkpDescrIndex }
    ::= { t11FcSpPoWkpDescrTable 1 }

T11FcSpPoWkpDescrEntry ::= SEQUENCE {
    t11FcSpPoWkpDescrSpecifierIndex   Unsigned32,
    t11FcSpPoWkpDescrIndex            Unsigned32,
    t11FcSpPoWkpDescrFlags            BITS,
    t11FcSpPoWkpDescrWkpNumber        Unsigned32,
    t11FcSpPoWkpDescrDestPort         InetPortNumber
}

t11FcSpPoWkpDescrSpecifierIndex OBJECT-TYPE
    SYNTAX       Unsigned32 (1..4294967295)
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "An index value that uniquely identifies a particular
           Well-Known Protocol Access Specifier within a Fabric."
    ::= { t11FcSpPoWkpDescrEntry 1 }

t11FcSpPoWkpDescrIndex OBJECT-TYPE
    SYNTAX       Unsigned32 (1..4294967295)
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "An index value that uniquely identifies a particular
           Well-Known Protocol Access Descriptor within a Well-Known
           Protocol Access Specifier."
    ::= { t11FcSpPoWkpDescrEntry 2 }

t11FcSpPoWkpDescrFlags OBJECT-TYPE
    SYNTAX       BITS {
                     allow(0),
                     wkpWildcard(1),
                     destPortWildcard(2),
                     readOnly(3)
                 }
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The flag bits that specify how access is to be limited by
           this Well-Known Protocol Access Descriptor:

            - allow -- IP management access using this protocol/port
              is allowed if this bit is set, and to be denied if this
              bit is not set.

            - wkpWildcard -- if this bit is set, the IP Protocol number
              of the Well-Known Protocol to be allowed/denied is
              specified by the value of t11FcSpPoWkpDescrWkpNumber.

            - destPortWildcard -- if this bit is set, the Destination
              (TCP/UDP) Port number of the Well-Known Protocol to be
              allowed/denied is specified by the value of
              t11FcSpPoWkpDescrDestPort.

            - readOnly -- if this bit is set, then access is to be
              granted only for reading."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.7.1 and table 131."
    ::= { t11FcSpPoWkpDescrEntry 3 }

t11FcSpPoWkpDescrWkpNumber OBJECT-TYPE
    SYNTAX       Unsigned32 (0..255)
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "When the 'wkpWildcard' bit is set in the corresponding
           instance of t11FcSpPoWkpDescrFlags, this object specifies
           the IP protocol number of the Well-Known Protocol."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.7.1 and table 131.
            - http://www.iana.org/assignments/protocol-numbers."
    ::= { t11FcSpPoWkpDescrEntry 4 }

t11FcSpPoWkpDescrDestPort OBJECT-TYPE
    SYNTAX       InetPortNumber
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "When the 'destPortWildcard' bit is set in the corresponding
           instance of t11FcSpPoWkpDescrFlags, this object specifies
           the Destination (TCP/UDP) Port number of the Well-Known
           Protocol.  When the 'destPortWildcard' bit is reset, this
           object is ignored (and can have the value zero)."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.7.1 and table 131.
            - http://www.iana.org/assignments/port-numbers."
    ::= { t11FcSpPoWkpDescrEntry 5 }

--
-- Attribute Entries in Active Attribute Policy Objects
--

t11FcSpPoAttribTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FcSpPoAttribEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A table of the Attribute Policy Objects being used within
           active Policy Objects.  In the FC-SP Policy Database, each
           Attribute Policy Object consists of an Attribute Object Name
           and a set of Attribute Entries.

           An active Attribute Policy Object is represented by all the
           Attribute Entries in this table that have the same value
           of t11FcSpPoAttribName."
    ::= { t11FcSpPoActive 9 }

t11FcSpPoAttribEntry OBJECT-TYPE
    SYNTAX       T11FcSpPoAttribEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "Each row contains information specific to an Attribute
           Entry contained within an Attribute Policy Object that is
           active within the Fabric identified by t11FcSpPoFabricIndex
           and managed within the Fibre Channel management instance
           identified by fcmInstanceIndex.

           For some types of Attribute Policy Objects, it is valuable
           to break out some semantically significant parts of the
           Policy Object's value into their own individual MIB
           objects; for example, to extract the one or more individual
           Authentication Protocol Identifiers and associated
           Authentication Protocol Parameters out of an Attribute
           Object containing a 'AUTH_Negotiate Message Payload'.
           For such types, another MIB table is defined to hold the
           extracted values in MIB objects specific to the Attribute
           Policy Object's type.  In such cases, the
           t11FcSpPoAttribExtension object in this table points to the
           other MIB table.

           If the value of one Attribute Entry is too large (more than
           256 bytes) to be contained within the value of one instance
           of t11FcSpPoAttribValue, then one row in this table contains
           the first 256 bytes, and one (or more) other row(s) in this
           table contain the rest of the value."

    INDEX  { fcmInstanceIndex, t11FcSpPoFabricIndex,
             t11FcSpPoAttribName, t11FcSpPoAttribEntryIndex,
             t11FcSpPoAttribPartIndex }
    ::= { t11FcSpPoAttribTable 1 }

T11FcSpPoAttribEntry ::= SEQUENCE {
    t11FcSpPoAttribName         T11FcSpAlphaNumName,
    t11FcSpPoAttribEntryIndex   Unsigned32,
    t11FcSpPoAttribPartIndex    Unsigned32,
    t11FcSpPoAttribType         Unsigned32,
    t11FcSpPoAttribValue        OCTET STRING,
    t11FcSpPoAttribExtension    OBJECT IDENTIFIER
}

t11FcSpPoAttribName OBJECT-TYPE
    SYNTAX       T11FcSpAlphaNumName
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "The name of the Attribute Policy Object containing one
           or more Attribute Entries."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.8.1 and table 133."
    ::= { t11FcSpPoAttribEntry 1 }

t11FcSpPoAttribEntryIndex OBJECT-TYPE
    SYNTAX       Unsigned32 (1..4294967295)
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A unique value to distinguish this Attribute Entry
           from other Attribute Entries contained in the same
           Attribute Policy Object."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.8.1, tables 133/134."
    ::= { t11FcSpPoAttribEntry 2 }

t11FcSpPoAttribPartIndex OBJECT-TYPE
    SYNTAX       Unsigned32 (1..4294967295)
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "When the value of an Attribute Entry is shorter than 257
           bytes, the whole value is contained in one instance of
           t11FcSpPoAttribValue, and the value of this object is 1.

           If the value of an Attribute Entry is longer than 256 bytes,
           then that value is divided up on 256-byte boundaries such
           that all parts are 256 bytes long except the last part, which
           is shorter if necessary, with each such part contained in
           a separate row of this table, and the value of this object
           is set to the part number.  That is, this object has the
           value of 1 for bytes 0-255, the value of 2 for bytes
           256-511, etc."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.8.1, tables 134/135."
    ::= { t11FcSpPoAttribEntry 3 }

t11FcSpPoAttribType OBJECT-TYPE
    SYNTAX       Unsigned32 (1..4294967295)
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The type of attribute.  The first type to be defined is:

           t11FcSpPoAttribType    t11FcSpPoAttribValue
           ===================    ====================
             '00000001'h          The AUTH_Negotiate Message Payload
           "
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP), February 2007,
              section 7.1.8.1, tables 134/135 and table 10."
    ::= { t11FcSpPoAttribEntry 4 }

t11FcSpPoAttribValue OBJECT-TYPE
    SYNTAX       OCTET STRING (SIZE (0..256))
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The value of an Attribute Entry is divided up on 256-byte
           boundaries such that all parts are 256 bytes long except the
           last part, which is shorter if necessary, and each such part
           is contained in a separate instance of this object.

           The value of this object is independent of whether some
           parts of its value are broken out into separate MIB objects
           pointed to by the corresponding instance of
           t11FcSpPoAttribExtension."
    REFERENCE

           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP), February 2007,
              section 7.1.8.1, tables 134/135 and table 10."
    ::= { t11FcSpPoAttribEntry 5 }

the attribute entries are like little packages ๐Ÿ“ฆ each one can be split into 256-byte chunks if it's too big, and the part index keeps them in order ๐Ÿ’… the type field just tells you which kind of attribute you're looking at ๐Ÿงš

t11FcSpPoAttribExtension is where the AUTH stuff gets its own little table of parts, bestie ๐Ÿงš

t11FcSpPoAttribExtension OBJECT-TYPE
    SYNTAX       OBJECT IDENTIFIER
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "For some types of Attribute Policy Object, the value of
           this MIB object points to type-specific MIB objects that
           contain individual/broken-out parts of the Attribute Policy
           Object's value.  If this object doesn't point to such
           type-specific MIB objects, then it contains the value:
           zeroDotZero.

           In particular, when the value of t11FcSpPoAttribType
           indicates 'AUTH_Negotiate Message Payload', one or more
           Authentication Protocol Identifiers and their associated
           Authentication Protocol Parameters are embedded within the
           value of the corresponding instance of t11FcSpPoAttribValue;
           MIB objects to contain these individual values are defined
           in the t11FcSpPoAuthProtTable.  Thus, for an 'AUTH_Negotiate
           Message Payload' Attribute, the value of this object
           contains an OID within the t11FcSpPoAuthProtTable, e.g.,
           of the whole table, of an individual row, or of an individual
           instance within the table."
    ::= { t11FcSpPoAttribEntry 6 }

--
-- Auth. Protocol Parameters in Active Attribute Policy Objects
--

t11FcSpPoAuthProtTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FcSpPoAuthProtEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A table of Authentication Protocol Identifier and
           Authentication Protocol Parameters that are embedded in
           Attribute Policy Objects being used within active Policy
           Objects.

           This table is used for Attribute Entries of Attribute Policy
           Objects for which the value of t11FcSpPoAttribType indicates
           'AUTH_Negotiate Message Payload' and the value of
           t11FcSpPoAttribExtension contains the OID of this table."

    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP), February 2007,
              sections 5.3.2 & 7.1.8.1, tables 134/135 and tables
              10/11."
    ::= { t11FcSpPoActive 10 }

t11FcSpPoAuthProtEntry OBJECT-TYPE
    SYNTAX       T11FcSpPoAuthProtEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "Each entry contains information about an Authentication
           Protocol that is extracted out of the Attribute Entry
           (identified by t11FcSpPoAttribEntryIndex) of the Policy
           Attribute Object (identified by t11FcSpPoAttribName), which
           is active within the Fabric identified by
           t11FcSpPoFabricIndex and managed within the Fibre Channel
           management instance identified by fcmInstanceIndex.

           If the value of one Attribute Protocol Parameters string is
           too large (more than 256 bytes) to be contained within the
           value of one instance of t11FcSpPoAuthProtParams, then one
           row in this table contains the first 256 bytes, and one (or
           more) other row(s) in this table contain the rest of the
           value."
    INDEX  { fcmInstanceIndex, t11FcSpPoFabricIndex,
             t11FcSpPoAttribName, t11FcSpPoAttribEntryIndex,
             t11FcSpPoAuthProtIdentifier,
             t11FcSpPoAuthProtPartIndex }
    ::= { t11FcSpPoAuthProtTable 1 }

T11FcSpPoAuthProtEntry ::= SEQUENCE {
    t11FcSpPoAuthProtIdentifier   Unsigned32,
    t11FcSpPoAuthProtPartIndex    Unsigned32,
    t11FcSpPoAuthProtParams       OCTET STRING
}

t11FcSpPoAuthProtIdentifier OBJECT-TYPE
    SYNTAX       Unsigned32 (0..4294967295)
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "The Authentication Protocol Identifier:

                    1      = DH-CHAP
                    2      = FCAP
                    3      = FCPAP
                    4      = IKEv2
                    5      = IKEv2-AUTH
              240 thru 255 = Vendor Specific Protocols

            all other values are 'Reserved' (by T11)."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 5.3.2, table 11."
    ::= { t11FcSpPoAuthProtEntry 1 }

t11FcSpPoAuthProtPartIndex OBJECT-TYPE
    SYNTAX       Unsigned32 (1..4294967295)
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "When the value of an Attribute Protocol Parameters string
           is shorter than 257 bytes, the whole value is contained in
           one instance of t11FcSpPoAuthProtParams, and the value of
           this object is 1. (This includes the case when the Attribute
           Protocol Parameters string is zero bytes in length.)

           If the value of an Authentication Protocol Parameters string
           is longer than 256 bytes, then that value is divided up on
           256-byte boundaries such that all parts are 256 bytes long
           except the last part, which is shorter if necessary, with
           each such part contained in a separate row of this table,
           and the value of this object is set to the part number.
           That is, this object has the value of 1 for bytes 0-255,
           the value of 2 for bytes 256-511, etc."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 5.3.2, table 10."
    ::= { t11FcSpPoAuthProtEntry 2 }

t11FcSpPoAuthProtParams OBJECT-TYPE
    SYNTAX       OCTET STRING (SIZE (0..256))
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The value of an Authentication Protocol Parameters string
           is divided up on 256-byte boundaries such that all parts
           are 256 bytes long except the last part, which is shorter
           if necessary, and each such part is contained in a
           separate instance of this object."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,

              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 5.3.2, table 10."
    ::= { t11FcSpPoAuthProtEntry 3 }

Next up is the Activate/De-Activate stuff, which is basically the big "make it go live" button for policies ๐Ÿš€

--
-- Part 2 - Activate/De-Activate Operations
--

--
-- Objects to Invoke Activate/De-Activate Operations
--

t11FcSpPoOperTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FcSpPoOperEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A table that allows Activate and Deactivate operations
           to be invoked for FC-SP Policies on various Fabrics.

           Activating a new policy configuration is a two-step
           process:

            1) create a single Policy Summary Object as a set of rows
               in the t11FcSpPoNaSummaryTable specifying a set of
               Policy Objects that describe the new configuration; and
            2) activate that Policy Summary Object using the
               t11FcSpPoOperActivate object defined in this table.

           Deactivating the current policy configuration is a one-step
           process: the current Policy Summary Object is deactivated
           using the t11FcSpPoOperDeActivate object."
    ::= { t11FcSpPoOperations 1 }

t11FcSpPoOperEntry OBJECT-TYPE
    SYNTAX       T11FcSpPoOperEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "Each entry allows an Activate and/or Deactivate operation
           to be invoked on a particular Fabric, which is managed as
           part of the Fibre Channel management instance identified
           by fcmInstanceIndex."
    INDEX  { fcmInstanceIndex, t11FcSpPoFabricIndex }
    ::= { t11FcSpPoOperTable 1 }

T11FcSpPoOperEntry ::= SEQUENCE {
    t11FcSpPoOperActivate     T11FcSpAlphaNumName,
    t11FcSpPoOperDeActivate   T11FcSpAlphaNumName,
    t11FcSpPoOperResult       INTEGER,
    t11FcSpPoOperFailCause    SnmpAdminString
}

t11FcSpPoOperActivate OBJECT-TYPE
    SYNTAX       T11FcSpAlphaNumName
    MAX-ACCESS   read-write
    STATUS       current
    DESCRIPTION
           "Writing the name of a Policy Summary Object into this
           object is a request to activate the policy configuration
           described by the combination of all rows in
           t11FcSpPoNaSummaryTable that have that name as their
           value of t11FcSpPoNaSummaryName and are for the same
           Fabric.

           Before issuing such a request, the relevant rows in the
           t11FcSpPoNaSummaryTable must exist and represent a complete
           and consistent Policy Summary Object.  If they do not, the
           request will fail, with t11FcSpPoOperResult having the
           'badSummaryObject' value.

           When read, the value of this object is always the zero-
           length string.

           Writing to this object does not delete (or in any way
           affect) any rows in the MIB tables for non-active
           Policy Objects."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.3.6.2"
    ::= { t11FcSpPoOperEntry 1 }

t11FcSpPoOperDeActivate OBJECT-TYPE
    SYNTAX       T11FcSpAlphaNumName
    MAX-ACCESS   read-write
    STATUS       current
    DESCRIPTION
           "Writing the current value of t11FcSpPoPolicySummaryObjName
           into this object (for a particular Fabric) is a request
           to deactivate that Fabric's current policy configuration.
           Writing any other value into this object is an error
           (e.g., 'wrongValue').

           When read, the value of this object is always the zero-
           length string."

    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.3.6.3"
    ::= { t11FcSpPoOperEntry 2 }

t11FcSpPoOperResult OBJECT-TYPE
    SYNTAX       INTEGER {
                     activateSuccess(1),
                     badSummaryObject(2),
                     activateFailure(3),
                     deactivateSuccess(4),
                     deactivateFailure(5),
                     inProgress(6),
                     none(7)
                 }
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "This object indicates the status/result of the last
           activation/deactivation that was invoked via the
           corresponding instance of t11FcSpPoOperActivate or
           t11FcSpPoOperDeActivate.

           When the value of this object is 'inProgress', the
           values of the corresponding instances of
           t11FcSpPoOperActivate and t11FcSpPoOperDeActivate
           cannot be modified.

           The value 'badSummaryObject' indicates an activation
           request that did not name a complete and consistent
           Policy Summary Object.

           The value 'none' indicates activation/deactivation
           has not been attempted since the last restart of
           the management system."
    ::= { t11FcSpPoOperEntry 3 }

t11FcSpPoOperFailCause OBJECT-TYPE
    SYNTAX       SnmpAdminString (SIZE (0..64))
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "A textual message indicating the reason for the
           most recent activation/deactivation failure, or the
           zero-length string if no information is available
           (e.g., because the corresponding instance of
           t11FcSpPoOperResult has the value 'none').

           When the corresponding instance of
           t11FcSpPoOperResult is either 'activateFailure'
           or 'deactivateFailure', the value of this object
           indicates the reason for that failure."
    ::= { t11FcSpPoOperEntry 4 }

--
-- Part 3 - Non-Active Policy Objects
--

--

Okay bestie, this part is all about the non-active policy stuff, and it's giving "saved drafts" energy ๐Ÿ’– Here's the MIB code, untouched so the definitions stay perfect.

-- Non-Active Policy Summary Objects Available for Activation
--

t11FcSpPoNaSummaryTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FcSpPoNaSummaryEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A table of non-active Policy Summary Objects available
           to be activated.

           The functionality of this table deviates slightly from FC-SP
           in that FC-SP specifies that the only Policy Summary Object
           is the Active one, i.e., FC-SP does not store non-active
           Policy Summary Objects in the Policy Database.  Instead,
           FC-SP requires a new Policy Summary Object to be created
           for, and embedded within, every Activate (APS) request.
           Thus, the newly created Policy Summary Object outlasts the
           APS request only as the new active Policy Summary Object and
           only if the APS succeeds.  In contrast, the Activate
           operation provided by this MIB module consists of two steps:

           1) create a non-active Policy Summary Object as a set of
              entries in this table describing a new configuration;
           2) activate a Policy Summary Object (stored as a set of
              entries in this table) using t11FcSpPoOperActivate.

           These two steps are only loosely connected, i.e., the result
           of the first operation is a non-active Policy Summary Object
           that is retained (in this table) even if it isn't
           immediately activated.  Even after an attempt to activate
           it succeeds or fails, a non-active Policy Summary Object
           is not deleted, but is retained and still available for
           subsequent modification/re-use."
    ::= { t11FcSpPoNonActive 1 }

Okay, so this table is where the non-active Policy Summary Objects live, and the vibe is that they're waiting to be activated ๐Ÿฆ‹ The big difference from FC-SP is that FC-SP doesn't keep non-active ones around at all. It makes a brand new Policy Summary Object for every Activate (APS) request, and that object only sticks around if the APS succeeds. This MIB module does it in two steps instead: first you create the non-active one as rows in this table, then you activate it with t11FcSpPoOperActivate. The two steps are only loosely linked, so even if activation fails, the object just chills in the table, ready for editing or reuse ๐ŸŒธ

t11FcSpPoNaSummaryEntry OBJECT-TYPE

    SYNTAX       T11FcSpPoNaSummaryEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "Each entry contains information about one non-active
           Policy Object within a non-active Policy Summary Object
           defined for potential use on the Fabric identified by
           t11FcSpPoFabricIndex, and managed within the Fibre Channel
           management instance identified by fcmInstanceIndex.

           A non-active Policy Summary Object is described by a set
           of entries in this table that have the same value of
           t11FcSpPoNaSummaryName.

           As and when a Policy Summary Object is activated using the
           t11FcSpPoOperActivate object, if the activation is
           successful, existing rows (if any) in MIB tables for active
           Policy Objects are deleted and replaced by the appropriate
           new set of rows.  Existing rows in this table and/or in
           other tables for non-active Policy Objects are not
           affected by the activate operation.

           The StorageType of a row in this table is specified by the
           instance of t11FcSpPoStorageType that is INDEX-ed by the
           same values of fcmInstanceIndex and t11FcSpPoFabricIndex."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.3 and table 104."
    INDEX  { fcmInstanceIndex, t11FcSpPoFabricIndex,
             t11FcSpPoNaSummaryName, t11FcSpPoNaSummaryPolicyType,
             t11FcSpPoNaSummaryPolicyIndex }
    ::= { t11FcSpPoNaSummaryTable 1 }

T11FcSpPoNaSummaryEntry ::= SEQUENCE {
    t11FcSpPoNaSummaryName            T11FcSpAlphaNumName,
    t11FcSpPoNaSummaryPolicyType      T11FcSpPolicyObjectType,
    t11FcSpPoNaSummaryPolicyIndex     Unsigned32,
    t11FcSpPoNaSummaryPolicyNameType  T11FcSpPolicyNameType,
    t11FcSpPoNaSummaryPolicyName      T11FcSpPolicyName,
    t11FcSpPoNaSummaryHashStatus      T11FcSpHashCalculationStatus,
    t11FcSpPoNaSummaryHashFormat      T11FcSpPolicyHashFormat,
    t11FcSpPoNaSummaryHashValue       T11FcSpPolicyHashValue,
    t11FcSpPoNaSummaryRowStatus       RowStatus
}

Each row here is one non-active Policy Object inside a non-active Policy Summary Object, and rows that share the same t11FcSpPoNaSummaryName make up one whole summary ๐Ÿ’… When one of these gets activated successfully, the active rows in the other MIB tables get swapped out for the new set. Meanwhile, the non-active rows in this table just stay put, totally unaffected โœจ Storage type follows the t11FcSpPoStorageType instance that shares the same fcmInstanceIndex and t11FcSpPoFabricIndex.

t11FcSpPoNaSummaryName OBJECT-TYPE
    SYNTAX       T11FcSpAlphaNumName
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "The name of the non-active Policy Summary Object that
           contains this Policy Object."
    ::= { t11FcSpPoNaSummaryEntry 1 }

t11FcSpPoNaSummaryPolicyType OBJECT-TYPE
    SYNTAX       T11FcSpPolicyObjectType
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "The 'Identifier' (i.e., the type) of this Policy Object."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.3.1 and table 104."
    ::= { t11FcSpPoNaSummaryEntry 2 }

t11FcSpPoNaSummaryPolicyIndex OBJECT-TYPE
    SYNTAX       Unsigned32 (1..4294967295)
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A unique integer value to distinguish this Policy Object
           from any others that have the same type and that are
           contained in the same Policy Summary Object."
    ::= { t11FcSpPoNaSummaryEntry 3 }

These three are the index crew ๐Ÿ‘‘ The name tells you which summary you're in, the type is the Policy Object's "Identifier" (aka its type), and the index is a unique number that tells apart Policy Objects of the same type inside the same summary. Iykyk, it's basically how you find your exact object in the pile ๐ŸŽ€

t11FcSpPoNaSummaryPolicyNameType OBJECT-TYPE
    SYNTAX       T11FcSpPolicyNameType {
                     nodeName(1),
                     alphaNumericName(7)
                 }
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The combination of t11FcSpPoNaSummaryPolicyNameType and
           t11FcSpPoNaSummaryPolicyName specify the name of the
           non-active Policy Object identified by this row.

           The type of name must be 'nodeName' if the value of the
           corresponding instance of t11FcSpPoNaSummaryPolicyType is
           'switchConnectivity', or 'alphaNumericName' otherwise."
    ::= { t11FcSpPoNaSummaryEntry 4 }

t11FcSpPoNaSummaryPolicyName OBJECT-TYPE
    SYNTAX       T11FcSpPolicyName
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The combination of t11FcSpPoNaSummaryPolicyNameType and
           t11FcSpPoNaSummaryPolicyName specify the name of the
           non-active Policy Object identified by this row."
    ::= { t11FcSpPoNaSummaryEntry 5 }

Together these two make the name combo for the Policy Object ๐Ÿฆ‹ The name type has to be 'nodeName' when the policy type is 'switchConnectivity', and 'alphaNumericName' for every other type. No cap, that's the one rule to remember here ๐Ÿซถ

t11FcSpPoNaSummaryHashStatus OBJECT-TYPE
    SYNTAX       T11FcSpHashCalculationStatus
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "When read, the value of this object is either:

             correct -- the corresponding instance of
                        t11FcSpPoNaSummaryHashValue contains
                        the correct value; or
             stale   -- the corresponding instance of
                        t11FcSpPoNaSummaryHashValue contains
                        a stale (possibly incorrect) value;

           Writing a value of 'calculate' is a request to re-calculate
           and update the value of the corresponding instance of
           t11FcSpPoNaSummaryHashValue.  Writing a value of 'correct'
          or 'stale' to this object is an error (e.g., 'wrongValue')."
    DEFVAL      { stale }
    ::= { t11FcSpPoNaSummaryEntry 6 }

t11FcSpPoNaSummaryHashFormat OBJECT-TYPE
    SYNTAX       T11FcSpPolicyHashFormat
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The format of this Policy Object's hash value as
           contained in the corresponding instance of the
           t11FcSpPoNaSummaryHashValue object."
    DEFVAL      { '00000001'h }
    ::= { t11FcSpPoNaSummaryEntry 7 }

t11FcSpPoNaSummaryHashValue OBJECT-TYPE
    SYNTAX       T11FcSpPolicyHashValue
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The hash value of this Policy Object, in the format
           identified by the corresponding instance of the
           t11FcSpPoNaSummaryHashFormat object."

    DEFVAL      { "" }
    ::= { t11FcSpPoNaSummaryEntry 8 }

Hash time! ๐Ÿงš The hash status can read as 'correct' or 'stale', and it defaults to 'stale'. Writing 'calculate' asks for a fresh re-calc and update of the hash value, but writing 'correct' or 'stale' is an error (like 'wrongValue') ๐Ÿ’€ The hash format is read-only and defaults to '00000001'h, and the hash value is also read-only and defaults to an empty string.

t11FcSpPoNaSummaryRowStatus OBJECT-TYPE
    SYNTAX       RowStatus
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The status of this row.

           Before a row in this table can have 'active' status,
           a non-Active Policy Object must already be represented
           in the table corresponding to the value of
           t11FcSpPoNaSummaryPolicyType with the name given by the
           combination of t11FcSpPoNaSummaryPolicyNameType and
           t11FcSpPoNaSummaryPolicyName.  If such a Policy Object gets
           deleted from the relevant table, the row in this table must
           also get deleted.

           When a row has 'active' status, the only write-able MIB
           objects in this table are t11FcSpPoNaSummaryHashStatus and
           t11FcSpPoNaSummaryRowStatus."
    ::= { t11FcSpPoNaSummaryEntry 9 }

Row status is the boss move here ๐Ÿ’œ A row can only go 'active' once its matching non-active Policy Object is already sitting in the right table, and if that object gets deleted, the row has to go too. Once a row is active, the only things you can still write are the hash status and the row status. Everything else is locked, bestie ๐Ÿ”’

--
-- Non-Active Switch Membership List Objects
--

t11FcSpPoNaSwListTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FcSpPoNaSwListEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A table of non-active Switch Membership List Objects."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.4.1 and table 108."
    ::= { t11FcSpPoNonActive 2 }

t11FcSpPoNaSwListEntry OBJECT-TYPE
    SYNTAX       T11FcSpPoNaSwListEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "Each entry contains information about one non-active
           Switch Membership List Object for the Fabric identified
           by t11FcSpPoFabricIndex and managed within the Fibre
           Channel management instance identified by
           fcmInstanceIndex.

           The StorageType of a row in this table is specified by the
           instance of t11FcSpPoStorageType that is INDEX-ed by the
           same values of fcmInstanceIndex and t11FcSpPoFabricIndex."
    INDEX  { fcmInstanceIndex, t11FcSpPoFabricIndex,
             t11FcSpPoNaSwListName }
    ::= { t11FcSpPoNaSwListTable 1 }

T11FcSpPoNaSwListEntry ::= SEQUENCE {
    t11FcSpPoNaSwListName         T11FcSpAlphaNumName,
    t11FcSpPoNaSwListFabricName   FcNameIdOrZero,
    t11FcSpPoNaSwListRowStatus    RowStatus
}

t11FcSpPoNaSwListName OBJECT-TYPE
    SYNTAX       T11FcSpAlphaNumName
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "The name of the Switch Membership List Object."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.4.1 and table 108."
    ::= { t11FcSpPoNaSwListEntry 1 }

t11FcSpPoNaSwListFabricName OBJECT-TYPE
    SYNTAX       FcNameIdOrZero
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The administratively specified Fabric_Name.  This value
           is meaningful only when static Domain_IDs are used in a
           Fabric.  If Static Domain_IDs are not used, the Fabric_Name
           is dynamically determined, in which case the value of this
           object can be '0000000000000000'h or the zero-length
           string."
    REFERENCE
           "- t11FamConfigDomainId, T11-FC-FABRIC-ADDR-MGR-MIB,
              Fibre Channel Fabric Address Manager MIB, RFC 4439;
            - ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, table 108."
    ::= { t11FcSpPoNaSwListEntry 2 }

t11FcSpPoNaSwListRowStatus OBJECT-TYPE

    SYNTAX       RowStatus
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The status of this row.  Values of object instances
           within the row can be modified at any time.

           If a row in this table is deleted, any row in the
           t11FcSpPoNaSwMembTable for the same Switch Membership
           List Object will also get deleted."
    ::= { t11FcSpPoNaSwListEntry 3 }

--

Last up, the non-active Switch Membership List Objects ๐ŸŒˆ This table holds the non-active lists, and each row is one list for a given fabric. The Fabric_Name is administratively set and only means something when static Domain_IDs are in use. If they aren't, the name is decided dynamically, and it can read as '0000000000000000'h or as an empty zero-length string ๐Ÿ“ You can change row values whenever you like, but if you delete a row, any matching rows in t11FcSpPoNaSwMembTable go with it, no exceptions ๐Ÿซ 

Switch Entries in Non-Active Switch Membership List Objects โœจ

-- Switch Entries in Non-Active Switch Membership List Objects
--

t11FcSpPoNaSwMembTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FcSpPoNaSwMembEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A table of Switch Entries in non-active Switch Membership
           List Objects."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.4.1 and table 110."
    ::= { t11FcSpPoNonActive 3 }

t11FcSpPoNaSwMembEntry OBJECT-TYPE
    SYNTAX       T11FcSpPoNaSwMembEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "Each entry contains information about one Switch that
           is listed in a Switch Entry of a non-active Switch Membership
           List Object for the Fabric identified by t11FcSpPoFabricIndex
           and managed within the Fibre Channel management instance
           identified by fcmInstanceIndex.

           A row cannot exist unless there is a row in
           t11FcSpPoNaSwListTable for the given Switch Membership List
           Object, i.e., the row in t11FcSpPoNaSwListTable for a
           Switch Membership List Object must be created before (or
           simultaneously with) a row in this table for a Switch
           Entry in that Switch Membership List Object, and when a
           row in t11FcSpPoNaSwListTable is deleted, all rows in this
           table for Switch Entries in that Switch Membership List
           Object also get deleted.

           The StorageType of a row in this table is specified by the
           instance of t11FcSpPoStorageType that is INDEX-ed by the
           same values of fcmInstanceIndex and t11FcSpPoFabricIndex."
    INDEX  { fcmInstanceIndex, t11FcSpPoFabricIndex,
             t11FcSpPoNaSwListName,
             t11FcSpPoNaSwMembSwitchNameType,
             t11FcSpPoNaSwMembSwitchName }
    ::= { t11FcSpPoNaSwMembTable 1 }

T11FcSpPoNaSwMembEntry ::= SEQUENCE {
    t11FcSpPoNaSwMembSwitchNameType   T11FcSpPolicyNameType,
    t11FcSpPoNaSwMembSwitchName       FcNameIdOrZero,
    t11FcSpPoNaSwMembFlags            BITS,
    t11FcSpPoNaSwMembDomainID         FcDomainIdOrZero,
    t11FcSpPoNaSwMembPolicyDataRole   INTEGER,
    t11FcSpPoNaSwMembAuthBehaviour    BITS,
    t11FcSpPoNaSwMembAttribute        T11FcSpAlphaNumNameOrAbsent,
    t11FcSpPoNaSwMembRowStatus        RowStatus
}

t11FcSpPoNaSwMembSwitchNameType OBJECT-TYPE
    SYNTAX       T11FcSpPolicyNameType {
                     nodeName(1),
                     restrictedNodeName(2),
                     wildcard(5),
                     restrictedWildcard(6)
                 }
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "If the value of this object is 'nodeName' or
           'restrictedNodeName', then the combination of
           this object and t11FcSpPoNaSwMembSwitchName specify the
           Switch Name of this Switch Entry.

           The membership is restricted or unrestricted based on the
           name type.  Restricted membership means that the Switch is
           not allowed to be part of the Fabric unless allowed by a
           specific Switch Connectivity Object.  Unrestricted
           membership means that the Switch is allowed to be part of
           the Fabric unless disallowed by a specific Switch
           Connectivity Object.

           The values of 'wildcard' and 'restrictedWildcard' provide
           the means to specify whether to allow/deny membership for
           Switches not explicitly named in the Switch Membership
           List Object."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.4.1 and table 110."
    ::= { t11FcSpPoNaSwMembEntry 1 }

t11FcSpPoNaSwMembSwitchName OBJECT-TYPE
    SYNTAX       FcNameIdOrZero (SIZE (8))
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "If the value of t11FcSpPoSwMembSwitchNameType is
           'wildcard' or 'restrictedWildcard', this object has the
           value '0000000000000000'h.

           Otherwise, the combination of
           t11FcSpPoNaSwMembSwitchNameType and this object specify the
           Switch Name of this Switch Entry."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.4.1 and table 110."
    ::= { t11FcSpPoNaSwMembEntry 2 }

t11FcSpPoNaSwMembFlags OBJECT-TYPE
    SYNTAX       BITS {
                     staticDomainID(0),
                     insistentDomainID(1),
                     serialPortsAccess(2),
                     physicalPortsAccess(3),
                     managerRole(4)
                 }
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "Configurable options in respect to the administration
           of Policy Objects at this Switch:

              'staticDomainID'     - the Switch uses the 'Static
           Domain_IDs behavior' (as defined in FC-SW-4) when this bit
           is set.  This bit should have the same setting for all
           Switches in a Fabric's Switch Membership List Object, or
           else the Fabric will partition.  If this bit is set,
           the 'insistentDomainID' bit must not be set.

              'insistentDomainID'  - if this bit is set, the Switch
           uses the 'Insistent Domain_IDs behavior' (as defined in
           FC-SW-4), and the 'staticDomainID' bit must not be set.

              'serialPortsAccess'  - the Switch allows management
           through serial ports when and only when this bit is set.

              'physicalPortsAccess' - the Switch allows management
           through the physical panel when and only when this bit
           is set.

              'managerRole'        - the Switch is allowed to change
           the Fabric Policy configuration (on receipt of any of the
           EACA, ESFC, EUFC, ACA, SFC, or UFC SW_ILSs) if this bit is
           set."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.4.1 and table 112."
    ::= { t11FcSpPoNaSwMembEntry 3 }

t11FcSpPoNaSwMembDomainID OBJECT-TYPE
    SYNTAX       FcDomainIdOrZero
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The Domain_ID to be used when either the 'staticDomainID'
           bit or the 'insistentDomainID' bit is set in the
           corresponding value of t11FcSpPoNaSwMembFlags."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.4.1 and tables 111 and 112."
    ::= { t11FcSpPoNaSwMembEntry 4 }

t11FcSpPoNaSwMembPolicyDataRole OBJECT-TYPE
    SYNTAX       INTEGER {
                     client(1),
                     autonomous(2),
                     server(3)
                 }
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The role of the Switch in terms of which Policy data
           it retains/maintains:

             'client' - the Switch operates as a Client Switch.
           A Client Switch maintains its own Switch Connectivity
           Object and all Fabric-wide List Objects.  If FC-SP
           Zoning is used, a Client Switch maintains only the
           subset of the Active Zone Set that it requires to
           enforce the current Fabric Zoning configuration.

             'autonomous' -  the Switch operates as an Autonomous
           Switch.  An Autonomous Switch maintains its own Switch
           Connectivity Object and all Fabric-wide List Objects.
           This is the same as 'client' except that if FC-SP Zoning
           is used, an Autonomous Switch maintains a complete copy
           of the Fabric Zoning Database.

             'server' - the Switch operates as a Server Switch.
           A Server Switch maintains all Fabric-wide List Objects
           and the Switch Connectivity Objects of each Switch in
           the Fabric.  If FC-SP Zoning is used, a Server Switch
           maintains a complete copy of the Fabric Zoning Database."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.4.1 and table 113."
    ::= { t11FcSpPoNaSwMembEntry 5 }

t11FcSpPoNaSwMembAuthBehaviour  OBJECT-TYPE
    SYNTAX       BITS {
                      mustAuthenticate(0),
                      rejectIsFailure(1)
                 }
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The authentication behaviour of the Switch:

             'mustAuthenticate' - if this bit is set, all connections
           between this Switch and neighbor Switches must be
           authenticated.

             'rejectIsFailure' - if this bit is set, the rejection of
           an AUTH_Negotiate message must be considered as an
           authentication failure by this Switch."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.4.1 and table 114."
    ::= { t11FcSpPoNaSwMembEntry 6 }

t11FcSpPoNaSwMembAttribute OBJECT-TYPE
    SYNTAX       T11FcSpAlphaNumNameOrAbsent
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The name of a non-active Attribute Policy Object that
           is defined for this Switch.  The zero-length string
           indicates that no non-active Attribute Policy Object is
           defined for this Switch.

           The effect of having no rows in the t11FcSpPoNaAttribTable
           for which the value of t11FcSpPoNaAttribName is the
           same as the value of this object, is the same as
           this object's value being the zero-length string."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.4.1 and table 110."
    ::= { t11FcSpPoNaSwMembEntry 7 }

t11FcSpPoNaSwMembRowStatus OBJECT-TYPE
    SYNTAX       RowStatus
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The status of this row.  Values of object instances
           within the row can be modified at any time.

           A row cannot exist unless there is a row in the
           t11FcSpPoNaSwListTable for the Switch Membership List
           Object containing the Switch Entry for this Switch, i.e.,
           the row in t11FcSpPoNaSwListTable for a Switch Membership
           List Object must be created before (or simultaneously)
           with a row in this table for a Switch Entry in that
           Switch Membership List Object; and when a row in
           t11FcSpPoNaSwListTable is deleted, any row in this
           table for a Switch Entry in that Switch Membership
           List Object also gets deleted."
    ::= { t11FcSpPoNaSwMembEntry 8 }

--
-- Node Entries in Non-Active Node Membership List Objects
--

t11FcSpPoNaNoMembTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FcSpPoNaNoMembEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A table of Node Entries in non-active Node Membership List
           Objects.

           One Node Membership List Object is represented by all
           the rows in this table that have the same value of
           t11FcSpPoNaNoMembListName."
    ::= { t11FcSpPoNonActive 4 }

okay bestie this part is all MIB table stuff, so we're keeping every line exactly as written ๐Ÿ’…โœจ

t11FcSpPoNaNoMembEntry OBJECT-TYPE
    SYNTAX       T11FcSpPoNaNoMembEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "Each entry contains information about one Node Entry of
           a non-active Node Membership List Object for the Fabric
           identified by t11FcSpPoFabricIndex and managed within
           the Fibre Channel management instance identified by
           fcmInstanceIndex.

           The StorageType of a row in this table is specified by the
           instance of t11FcSpPoStorageType that is INDEX-ed by the
           same values of fcmInstanceIndex and t11FcSpPoFabricIndex."
    INDEX  { fcmInstanceIndex, t11FcSpPoFabricIndex,
             t11FcSpPoNaNoMembListName,
             t11FcSpPoNaNoMembNodeNameType,
             t11FcSpPoNaNoMembNodeName }
    ::= { t11FcSpPoNaNoMembTable 1 }

T11FcSpPoNaNoMembEntry ::= SEQUENCE {
    t11FcSpPoNaNoMembListName       T11FcSpAlphaNumName,
    t11FcSpPoNaNoMembNodeNameType   T11FcSpPolicyNameType,
    t11FcSpPoNaNoMembNodeName       FcNameIdOrZero,
    t11FcSpPoNaNoMembFlags          BITS,
    t11FcSpPoNaNoMembCtAccessIndex  Unsigned32,
    t11FcSpPoNaNoMembAttribute      T11FcSpAlphaNumNameOrAbsent,
    t11FcSpPoNaNoMembRowStatus      RowStatus
}

t11FcSpPoNaNoMembListName OBJECT-TYPE
    SYNTAX       T11FcSpAlphaNumName
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "The name of the non-active Node Membership List Object."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.4.1 and table 116."
    ::= { t11FcSpPoNaNoMembEntry 1 }

t11FcSpPoNaNoMembNodeNameType OBJECT-TYPE

    SYNTAX       T11FcSpPolicyNameType {
                     nodeName(1),
                     restrictedNodeName(2),
                     portName(3),
                     restrictedPortName(4),
                     wildcard(5),
                     restrictedWildcard(6)
                 }
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "If the value of this object is 'wildcard' or
           'restrictedWildcard', this Node Entry applies to Nodes not
           explicitly named in the Node Membership List Object.

           Otherwise, the combination of this object and
           t11FcSpPoNaNoMembNodeName specify the name of this Node Entry
           in the active Node Membership List Object.  A Node is
           identified by its Node Name or by one or more of its Port
           Names.

           Restricted membership means that a Node is not allowed to be
           connected to the Fabric unless allowed by a specific Switch
           Connectivity Object.  Unrestricted membership means that a
           Node is allowed to be connected to the Fabric unless
           disallowed by a specific Switch Connectivity Object."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.4.1 and table 116."
    ::= { t11FcSpPoNaNoMembEntry 2 }

t11FcSpPoNaNoMembNodeName OBJECT-TYPE
    SYNTAX       FcNameIdOrZero (SIZE (8))
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "If the value of t11FcSpPoNaNoMembNodeNameType is
           'wildcard' or 'restrictedWildcard', this object has the
           value '0000000000000000'h.

           Otherwise, the combination of t11FcSpPoNaNoMembNodeNameType
           and this object specify the name of this Node Entry is the
           active Node Membership List Object."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.4.1 and table 116."

    ::= { t11FcSpPoNaNoMembEntry 3 }

t11FcSpPoNaNoMembFlags OBJECT-TYPE
    SYNTAX       BITS {
                     scsiEnclosureAccess(0),
                     authenticationRequired(1)
                 }
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "Configurable options in respect to the administration
           of Policy Objects at this Node:

                'scsiEnclosureAccess'      - the Node is allowed to
           control any Switch through SCSI Enclosure Services if this
           bit is set.  If a Switch does not support SCSI Enclosure
           Services, this bit is ignored.

                'authenticationRequired'   - the Node is required to
           authenticate itself to any Switch to which it is connected
           if and only if this bit is set."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.4.1 and table 118."
    ::= { t11FcSpPoNaNoMembEntry 4 }

t11FcSpPoNaNoMembCtAccessIndex  OBJECT-TYPE
    SYNTAX       Unsigned32 (0..4294967295)
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "If the value of this object is zero, then access by this
           Node to Generic Services is not limited by a Common
           Transport Access Specifier.

           Otherwise, the limits are specified by the set of Common
           Transport Access Descriptors contained in those rows of
           the t11FcSpPoNaCtDescrTable for which the value of
           t11FcSpPoNaCtDescrSpecifierIndex is the same as the value
           of this object.  No such rows in t11FcSpPoNaCtDescrTable
           have the same effect as this object's value being zero."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP), February 2007,
              section 7.1.4.1 and tables 118/119/120/121."
    ::= { t11FcSpPoNaNoMembEntry 5 }

t11FcSpPoNaNoMembAttribute  OBJECT-TYPE
    SYNTAX       T11FcSpAlphaNumNameOrAbsent
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The name of a non-active Attribute Policy Object that
           is defined for this Node.  The zero-length string indicates
           that no non-active Attribute Policy Object is defined for
           this Node.

           The effect of having no rows in the t11FcSpPoNaAttribTable
           for which the value of t11FcSpPoNaAttribName is the
           same as the value of this object, is the same as
           this object's value being the zero-length string."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.4.1 and table 116."
    ::= { t11FcSpPoNaNoMembEntry 6 }

t11FcSpPoNaNoMembRowStatus OBJECT-TYPE
    SYNTAX       RowStatus
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The status of this row.  Values of object instances
           within the row can be modified at any time."
    ::= { t11FcSpPoNaNoMembEntry 7 }

--
--
-- Non-Active Common Transport Access Descriptors
--

t11FcSpPoNaCtDescrTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FcSpPoNaCtDescrEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A table of Common Transport Access Descriptors referenced
           by non-active Policy Objects.

           A Common Transport Access Specifier is a list of Common
           Transport Access Descriptors that specify whether a Node
           is allowed to access a Generic Service or Sub-Server.

           A non-active Common Transport Access Specifier is
           represented by all rows of this table that have the same
           values of fcmInstanceIndex, t11FcSpPoFabricIndex, and
           t11FcSpPoNaCtDescrSpecifierIndex."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.5"
    ::= { t11FcSpPoNonActive 5 }

t11FcSpPoNaCtDescrEntry OBJECT-TYPE
    SYNTAX       T11FcSpPoNaCtDescrEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "Each entry contains information about one Common Transport
           Access Descriptor of an non-active Common Transport Access
           Specifier used within the Fabric identified by
           t11FcSpPoFabricIndex and managed within the Fibre Channel
           management instance identified by fcmInstanceIndex.

           The StorageType of a row in this table is specified by the
           instance of t11FcSpPoStorageType that is INDEX-ed by the
           same values of fcmInstanceIndex and t11FcSpPoFabricIndex."
    INDEX  { fcmInstanceIndex, t11FcSpPoFabricIndex,
             t11FcSpPoNaCtDescrSpecifierIndex, t11FcSpPoNaCtDescrIndex }
    ::= { t11FcSpPoNaCtDescrTable 1 }

T11FcSpPoNaCtDescrEntry ::= SEQUENCE {
    t11FcSpPoNaCtDescrSpecifierIndex   Unsigned32,
    t11FcSpPoNaCtDescrIndex            Unsigned32,
    t11FcSpPoNaCtDescrFlags            BITS,
    t11FcSpPoNaCtDescrGsType           OCTET STRING,
    t11FcSpPoNaCtDescrGsSubType        OCTET STRING,
    t11FcSpPoNaCtDescrRowStatus        RowStatus
}

t11FcSpPoNaCtDescrSpecifierIndex OBJECT-TYPE
    SYNTAX       Unsigned32 (1..4294967295)
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "An index value that uniquely identifies a particular
           Common Transport Access Specifier within a Fabric."
    ::= { t11FcSpPoNaCtDescrEntry 1 }

t11FcSpPoNaCtDescrIndex OBJECT-TYPE
    SYNTAX       Unsigned32 (1..4294967295)
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "An index value that uniquely identifies a particular
           Common Transport Access Descriptor within a Common Transport
           Access Specifier."
    ::= { t11FcSpPoNaCtDescrEntry 2 }

t11FcSpPoNaCtDescrFlags OBJECT-TYPE
    SYNTAX       BITS {
                     allow(0),
                     gsTypeWildcard(1),
                     gsSubTypeWildcard(2),
                     readOnly(3)
                 }
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The flag bits that specify how access is to be limited by
           this Common Transport Access Descriptor:

            - allow -- access to the specified Generic Service and
              Server is allowed if this bit is set, and is to be denied
              if this bit is not set.

            - gsTypeWildcard -- if this bit is set, the Generic Service
              to be allowed/denied is specified by the value of
              t11FcSpPoNaCtDescrGsType, and the gsSubTypeWildcard bit
              must not also be set.

            - gsSubTypeWildcard -- if this bit is set, the Generic
              Service to be allowed/denied is specified by the value of
              t11FcSpPoNaCtDescrGsSubType, and the gsTypeWildcard bit
              must not also be set.

            - readOnly -- if this bit is set, then access is to be
              granted only for reading."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP), February 2007,
              section 7.1.5.1, and tables 117, 118, and 120."
    ::= { t11FcSpPoNaCtDescrEntry 3 }

Okay bestie, the GS_Type and GS_Subtype objects are the service labels that access control hangs off of โœจ

t11FcSpPoNaCtDescrGsType OBJECT-TYPE
    SYNTAX       OCTET STRING (SIZE (1))
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The GS_Type of the Generic Service (e.g., the FC-GS-5
           Management Service) that is subject to access control.

           This value is ignored if the gsTypeWildcard bit is not set
           in the corresponding value of t11FcSpPoNaCtDescrFlags."
    REFERENCE
           "- ANSI INCITS 427-2006,
              Fibre Channel - Generic Services-5 (FC-GS-5),
              section 4.3.2.4.
            - ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.5.1 and table 120."
    ::= { t11FcSpPoNaCtDescrEntry 4 }

t11FcSpPoNaCtDescrGsSubType OBJECT-TYPE
    SYNTAX       OCTET STRING (SIZE (1))
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The GS_Subtype of the Generic Server (e.g., the Fabric Zone
           Server) that is subject to access control.  This value is
           ignored if the gsSubTypeWildcard bit is not set in the
           corresponding value of t11FcSpPoNaCtDescrFlags."
    REFERENCE
           "- ANSI INCITS 427-2006,
              Fibre Channel - Generic Services-5 (FC-GS-5),
              section 4.3.2.5.
            - ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.5.1 and table 120."
    ::= { t11FcSpPoNaCtDescrEntry 5 }

t11FcSpPoNaCtDescrRowStatus OBJECT-TYPE
    SYNTAX       RowStatus
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The status of this row.  Values of object instances
           within the row can be modified at any time."
    ::= { t11FcSpPoNaCtDescrEntry 6 }

--
-- Switches/Nodes in Non-Active Switch Connectivity Objects
--

t11FcSpPoNaSwConnTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FcSpPoNaSwConnEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A table of non-active Switch Connectivity Objects.

           A Switch Connectivity Object defines to which other
           Switches or Nodes a particular Switch may/may not be
           connected at the Node level and/or at the Port level."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.6."
    ::= { t11FcSpPoNonActive 6 }

t11FcSpPoNaSwConnEntry OBJECT-TYPE
    SYNTAX       T11FcSpPoNaSwConnEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "Each entry contains the name of a Switch/Node with which
           any port of a particular Switch on a particular Fabric, or
           a particular port on that Switch, is allowed or not allowed
           to be connected.

           The particular Fabric is identified by t11FcSpPoFabricIndex
           and managed within the Fibre Channel management instance
           identified by fcmInstanceIndex.

           The StorageType of a row in this table is specified by the
           instance of t11FcSpPoStorageType that is INDEX-ed by the
           same values of fcmInstanceIndex and t11FcSpPoFabricIndex."
    INDEX  { fcmInstanceIndex, t11FcSpPoFabricIndex,
             t11FcSpPoNaSwConnSwitchName,
             t11FcSpPoNaSwConnAllowedType,
             t11FcSpPoNaSwConnPortNameOrAll,
             t11FcSpPoNaSwConnAllowedIndex }
    ::= { t11FcSpPoNaSwConnTable 1 }

T11FcSpPoNaSwConnEntry ::= SEQUENCE {
    t11FcSpPoNaSwConnSwitchName       FcNameIdOrZero,
    t11FcSpPoNaSwConnAllowedType      INTEGER,
    t11FcSpPoNaSwConnPortNameOrAll    FcNameIdOrZero,
    t11FcSpPoNaSwConnAllowedIndex     Unsigned32,
    t11FcSpPoNaSwConnAllowedNameType  T11FcSpPolicyNameType,
    t11FcSpPoNaSwConnAllowedName      FcNameIdOrZero,
    t11FcSpPoNaSwConnRowStatus        RowStatus
}

t11FcSpPoNaSwConnSwitchName OBJECT-TYPE
    SYNTAX       FcNameIdOrZero (SIZE (8))
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION

           "The name of the Switch for which this Switch Connectivity
           Object specifies topology restrictions."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.6.1 and table 123."
    ::= { t11FcSpPoNaSwConnEntry 1 }

t11FcSpPoNaSwConnAllowedType OBJECT-TYPE
    SYNTAX       INTEGER { switch(1), node(2) }
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "This object specifies whether this row refers to an
           'Allowed Switch' that concerns Switch-to-Switch
           connectivity or an 'Allowed Node' that concerns
           Switch-to-Node connectivity.  Consequently, this object's
           value indicates whether the corresponding instance of
           t11FcSpPoNaSwConnAllowedName specifies the name of a Switch
           or the name of a Node."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.6.1 and table 123."
    ::= { t11FcSpPoNaSwConnEntry 2 }

t11FcSpPoNaSwConnPortNameOrAll OBJECT-TYPE
    SYNTAX       FcNameIdOrZero (SIZE(0 | 8))
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "This object specifies either the particular port on which
           this topology restriction applies, or if the value is the
           zero-length string, that the topology restriction applies
           to all ports of the Switch.

           In other words, if this object's value contains the name of
           a port, then this row represents a 'Port Connectivity Entry'
           (as described in FC-SP) within a Switch Connectivity Object."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.6.1 and tables 123/124."
    ::= { t11FcSpPoNaSwConnEntry 3 }

t11FcSpPoNaSwConnAllowedIndex OBJECT-TYPE
    SYNTAX       Unsigned32 (1..4294967295)
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "When multiple rows in this table refer to different
           'Allowed Switches' or to different 'Allowed Nodes' for the
           same port(s) in the same Switch Connectivity Object, this
           object provides a unique index value to distinguish between
           such rows."
    ::= { t11FcSpPoNaSwConnEntry 4 }

t11FcSpPoNaSwConnAllowedNameType OBJECT-TYPE
    SYNTAX       T11FcSpPolicyNameType {
                     nodeName(1),
                     restrictedNodeName(2),
                     portName(3),
                     restrictedPortName(4),
                     wildcard(5),
                     restrictedWildcard(6)
                 }
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "If the value of this object is 'wildcard' or
           'restrictedWildcard', this row specifies whether
           connectivity is allowed/not allowed with entities not
           explicitly named by other rows.

           Otherwise, the combination of
           t11FcSpPoNaSwConnAllowedNameType and
           t11FcSpPoNaSwConnAllowedName specify the name of:

           - a Switch (if t11FcSpPoNaSwConnAllowedType = 'switch'), or
           - a Node (if t11FcSpPoNaSwConnAllowedType = 'node')

           to which connectivity is allowed/not allowed."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.6.1 and tables 123/124."
    ::= { t11FcSpPoNaSwConnEntry 5 }

t11FcSpPoNaSwConnAllowedName OBJECT-TYPE
    SYNTAX       FcNameIdOrZero (SIZE (8))
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "If t11FcSpPoNaSwConnAllowedNameType has the value
           'wildcard' or 'restrictedWildcard', this object has the
           value '0000000000000000'h.

           Otherwise, the combination of
           t11FcSpPoNaSwConnAllowedNameType and
           t11FcSpPoNaSwConnAllowedName specify the name of:

           - a Switch (if t11FcSpPoNaSwConnAllowedType = 'switch'), or
           - a Node (if t11FcSpPoNaSwConnAllowedType = 'node')

           to which connectivity is allowed/not allowed."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.6.1 and tables 123/124."
    ::= { t11FcSpPoNaSwConnEntry 6 }

t11FcSpPoNaSwConnRowStatus OBJECT-TYPE
    SYNTAX       RowStatus
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The status of this row.  Values of object instances
           within the row can be modified at any time."
    ::= { t11FcSpPoNaSwConnEntry 7 }

--
-- IP Management Entries in Non-Active IP Management List Objects
--

t11FcSpPoNaIpMgmtTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FcSpPoNaIpMgmtEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A table of IP Management Entries in non-active IP
           Management List Objects.  The IP Management List Object is a
           Fabric-wide Policy Object that describes which IP hosts are
           allowed to manage a Fabric.

           One non-active IP Management List Object is represented by
           all rows of this table that have the same values of
           fcmInstanceIndex and t11FcSpPoFabricIndex."
    ::= { t11FcSpPoNonActive 7 }

t11FcSpPoNaIpMgmtEntry OBJECT-TYPE
    SYNTAX       T11FcSpPoNaIpMgmtEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "Each entry contains information about one IP Management
           entry within a non-active IP Management List Object for the
           Fabric identified by t11FcSpPoFabricIndex and managed
           within the Fibre Channel management instance identified
           by fcmInstanceIndex.

           The Policy Object Name of an IP Management Entry Policy
           Object is either an IPv6 Address Range or an IPv4 Address
           Range.  In a Fabric's database of Policy Objects, every
           Policy Object Name, including these Internet address ranges,
           is represented as a (T11FcSpPolicyNameType,
           T11FcSpPolicyName) tuple.  In contrast, this MIB module
           uses the conventional MIB syntax for IP addresses, and
           therefore represents the Policy Object Name of an IP
           Management Entry Policy Object as a (InetAddressType,
           InetAddress, InetAddress) tuple.

           In theory, the use of t11FcSpPoNaIpMgmtEntryNameLow and
           t11FcSpPoNaIpMgmtEntryNameHigh, which have the syntax of
           InetAddress, in the INDEX could cause the need for
           excessively long OIDs.  In practice, this can't happen
           because FC-SP doesn't allow these objects to be specified
           as DNS names.

           The StorageType of a row in this table is specified by the
           instance of t11FcSpPoStorageType that is INDEX-ed by the
           same values of fcmInstanceIndex and t11FcSpPoFabricIndex."
    INDEX  { fcmInstanceIndex, t11FcSpPoFabricIndex,
             t11FcSpPoNaIpMgmtListName,
             t11FcSpPoNaIpMgmtEntryNameType,
             t11FcSpPoNaIpMgmtEntryNameLow,
             t11FcSpPoNaIpMgmtEntryNameHigh }
    ::= { t11FcSpPoNaIpMgmtTable 1 }

The SEQUENCE for the IP Management Entry is where we pick up, bestie ๐Ÿงš Here it is:

T11FcSpPoNaIpMgmtEntry ::= SEQUENCE {
    t11FcSpPoNaIpMgmtListName        T11FcSpAlphaNumName,
    t11FcSpPoNaIpMgmtEntryNameType   InetAddressType,
    t11FcSpPoNaIpMgmtEntryNameLow    InetAddress,
    t11FcSpPoNaIpMgmtEntryNameHigh   InetAddress,
    t11FcSpPoNaIpMgmtWkpIndex        Unsigned32,
    t11FcSpPoNaIpMgmtAttribute       T11FcSpAlphaNumNameOrAbsent,
    t11FcSpPoNaIpMgmtRowStatus       RowStatus
}

t11FcSpPoNaIpMgmtListName OBJECT-TYPE ๐Ÿ’–

Okay so this one is the name of a non-active Node Membership List Object, and it's giving main character energy ๐Ÿ‘‘

t11FcSpPoNaIpMgmtListName OBJECT-TYPE
    SYNTAX       T11FcSpAlphaNumName
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION

           "The name of a non-active Node Membership List Object."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.7.1 and table 125."
    ::= { t11FcSpPoNaIpMgmtEntry 1 }

t11FcSpPoNaIpMgmtEntryNameType OBJECT-TYPE ๐Ÿฆ‹

Ngl this is the type that tells you which address range you're looking at. It's either ipv4 or ipv6, no DNS names, no zone indexes, periodt ๐Ÿ’…

t11FcSpPoNaIpMgmtEntryNameType OBJECT-TYPE
    SYNTAX       InetAddressType { ipv4(1), ipv6(2) }
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "The combination of t11FcSpPoNaIpMgmtEntryNameType,
           t11FcSpPoNaIpMgmtNameLow, and t11FcSpPoNaIpMgmtNameHigh
           specify the Internet address range of this IP Management
           Entry in the IP Management List Object.

           The FC-SP specification does not allow this address to
           be specified using a DNS domain name, nor does it allow
           the specification of zone indexes.  Therefore, the
           type of address must be one of: 'ipv4' or 'ipv6'."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, sections 7.1.7.1 and table 126."
    ::= { t11FcSpPoNaIpMgmtEntry 2 }

t11FcSpPoNaIpMgmtEntryNameLow OBJECT-TYPE ๐ŸŒธ

This is the bottom of the address range. Its type comes from the NameType sitting right next to it, so they're basically besties ๐Ÿซถ

t11FcSpPoNaIpMgmtEntryNameLow OBJECT-TYPE
    SYNTAX       InetAddress (SIZE(4 | 16))
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "The lower end of an Internet address range.  The type
           of this address is given by the corresponding instance
           of t11FcSpPoNaIpMgmtEntryNameType.

           The combination of t11FcSpPoNaIpMgmtEntryNameType,
           t11FcSpPoNaIpMgmtNameLow, and t11FcSpPoIpMgmtNameHigh
           specify the Internet address range of this IP Management
           Entry in the IP Management List Object."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, sections 7.1.7.1 and table 126."
    ::= { t11FcSpPoNaIpMgmtEntry 3 }

t11FcSpPoNaIpMgmtEntryNameHigh OBJECT-TYPE โœจ

And this is the top of the range, so the low and high ends together make the whole range. It's the other half of the duo ๐Ÿ‘ฏโ€โ™€๏ธ

t11FcSpPoNaIpMgmtEntryNameHigh OBJECT-TYPE
    SYNTAX       InetAddress (SIZE(4 | 16))
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "The higher end of an Internet address range.  The type
           of this address is given by the corresponding instance
           of t11FcSpPoNaIpMgmtEntryNameType.

           The combination of t11FcSpPoNaIpMgmtEntryNameType,
           t11FcSpPoNaIpMgmtNameLow, and t11FcSpPoNaIpMgmtNameHigh
           specify the Internet address range of this IP Management
           Entry in the IP Management List Object."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, sections 7.1.7.1 and table 126."
    ::= { t11FcSpPoNaIpMgmtEntry 4 }

t11FcSpPoNaIpMgmtWkpIndex OBJECT-TYPE ๐Ÿ“

This one's the pointer to the restrictions. It points at a bunch of Well-Known Protocol Access Descriptors, and if there's nothing there or the value is zero, then no Well-Known Protocols Access restrictions apply. Lowkey iconic ๐Ÿ™ˆ

t11FcSpPoNaIpMgmtWkpIndex OBJECT-TYPE
    SYNTAX       Unsigned32 (0..4294967295)
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "This object identifies the restrictions for IP management
           access by IP hosts in this range of IP addresses.

           The restrictions are specified as the set of Well-Known
           Protocols Access Descriptors contained in those rows of the
           t11FcSpPoNaWkpDescrTable for which the value of
           t11FcSpPoNaWkpDescrSpecifierIndx is the same as the value
           of this object.  If there are no such rows or if the value
           of this object is zero, then this IP Management Entry does
           not identify any Well-Known Protocols Access restrictions."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.7.1 and tables 127/129."
    ::= { t11FcSpPoNaIpMgmtEntry 5 }

t11FcSpPoNaIpMgmtAttribute OBJECT-TYPE ๐Ÿงš

This is the name of a non-active Attribute Policy Object tied to this IP entry. An empty string means there isn't one, and no matching rows in the attribute table means the same thing ๐ŸŽ€

t11FcSpPoNaIpMgmtAttribute OBJECT-TYPE
    SYNTAX       T11FcSpAlphaNumNameOrAbsent
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The name of a non-active Attribute Policy Object that
           is defined for this IP Management entry.  The zero-length
           string indicates that no non-active Attribute Policy Object
           is defined for it.

           The effect of having no rows in the t11FcSpPoNaAttribTable
           for which the value of t11FcSpPoNaAttribName is the same
           as the value of this object, is the same as this object's
           value being the zero-length string."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.7.1 and table 128."
    ::= { t11FcSpPoNaIpMgmtEntry 6 }

t11FcSpPoNaIpMgmtRowStatus OBJECT-TYPE ๐Ÿ’œ

Row status, and it can be changed at any time, so you can always glow up your entries โœจ

t11FcSpPoNaIpMgmtRowStatus OBJECT-TYPE
    SYNTAX       RowStatus
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The status of this row.  Values of object instances
           within the row can be modified at any time."
    ::= { t11FcSpPoNaIpMgmtEntry 7 }
--
-- Non-Active Well-Known Protocol Access Descriptors
--

t11FcSpPoNaWkpDescrTable OBJECT-TYPE ๐ŸŒˆ

Okay this is the table of Well-Known Protocol Access Descriptors that the non-active Policy Objects point to. It's basically the menu of rules ๐Ÿ“‹

t11FcSpPoNaWkpDescrTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FcSpPoNaWkpDescrEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A table of the Well-Known Protocol Access Descriptors
           referenced from non-active Policy Objects.

           A Well-Known Protocol Access Specifier is a list of
           Well-Known Protocol Access Descriptors each of which
           specifies a protocol number, a port number, and/or various
           flags specifying how IP management access is restricted.

           A non-active Well-Known Protocol Transport Access Specifier
           is represented by all rows of this table that have the same
           values of fcmInstanceIndex, t11FcSpPoFabricIndex, and
           t11FcSpPoNaWkpDescrSpecifierIndx."
    ::= { t11FcSpPoNonActive 8 }

t11FcSpPoNaWkpDescrEntry OBJECT-TYPE ๐Ÿฆ‹

Each row here is one descriptor, and the storage type comes from the t11FcSpPoStorageType row with the same indexes. It's giving organised ๐Ÿ—‚๏ธ

t11FcSpPoNaWkpDescrEntry OBJECT-TYPE
    SYNTAX       T11FcSpPoNaWkpDescrEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "Each entry contains information about one Well-Known
           Protocol Access Descriptor of a non-active Well-Known
           Protocol Access Specifier used within the Fabric identified
           by t11FcSpPoFabricIndex and managed within the Fibre Channel
           management instance identified by fcmInstanceIndex.

           The StorageType of a row in this table is specified by the
           instance of t11FcSpPoStorageType that is INDEX-ed by the
           same values of fcmInstanceIndex and t11FcSpPoFabricIndex."
    INDEX  { fcmInstanceIndex, t11FcSpPoFabricIndex,
             t11FcSpPoNaWkpDescrSpecifierIndx,
             t11FcSpPoNaWkpDescrIndex }
    ::= { t11FcSpPoNaWkpDescrTable 1 }
T11FcSpPoNaWkpDescrEntry ::= SEQUENCE {
    t11FcSpPoNaWkpDescrSpecifierIndx    Unsigned32,
    t11FcSpPoNaWkpDescrIndex            Unsigned32,
    t11FcSpPoNaWkpDescrFlags            BITS,
    t11FcSpPoNaWkpDescrWkpNumber        Unsigned32,
    t11FcSpPoNaWkpDescrDestPort         InetPortNumber,
    t11FcSpPoNaWkpDescrRowStatus        RowStatus
}

t11FcSpPoNaWkpDescrSpecifierIndx OBJECT-TYPE ๐Ÿ’…

This is the index that picks out one particular Specifier inside a Fabric. Think of it as the ID on the group chat name ๐Ÿซถ

t11FcSpPoNaWkpDescrSpecifierIndx OBJECT-TYPE
    SYNTAX       Unsigned32 (1..4294967295)
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "An index value that uniquely identifies a particular
           non-active Well-Known Protocol Access Specifier within
           a Fabric."
    ::= { t11FcSpPoNaWkpDescrEntry 1 }

t11FcSpPoNaWkpDescrIndex OBJECT-TYPE ๐ŸŽ€

And this one picks out a single Descriptor inside that Specifier ๐Ÿ“

t11FcSpPoNaWkpDescrIndex OBJECT-TYPE
    SYNTAX       Unsigned32 (1..4294967295)
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "An index value that uniquely identifies a particular
           Well-Known Protocol Access Descriptor within a
           non-active Well-Known Protocol Access Specifier."
    ::= { t11FcSpPoNaWkpDescrEntry 2 }

t11FcSpPoNaWkpDescrFlags OBJECT-TYPE ๐Ÿ”ฅ

The flags are where the real drama happens. There are four bits: allow, wkpWildcard, destPortWildcard and readOnly, and each one changes how the access gets limited. Iykyk ๐Ÿ’€

t11FcSpPoNaWkpDescrFlags OBJECT-TYPE
    SYNTAX       BITS {
                     allow(0),
                     wkpWildcard(1),
                     destPortWildcard(2),
                     readOnly(3)

                 }
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The flag bits that specify how access is to be limited by
           this Well-Known Protocol Access Descriptor:

            - allow -- IP management access using this protocol/port
              is allowed if this bit is set, and to be denied if this
              bit is not set.

            - wkpWildcard -- if this bit is set, the IP Protocol number
              of the Well-Known Protocol to be allowed/denied is
              specified by the value of t11FcSpPoNaWkpDescrWkpNumber.

            - destPortWildcard -- if this bit is set, the Destination
              (TCP/UDP) Port number of the Well-Known Protocol to be
              allowed/denied is specified by the value of
              t11FcSpPoNaWkpDescrDestPort.

            - readOnly -- if this bit is set, then access is to be
              granted only for reading."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.7.1 and table 131."
    ::= { t11FcSpPoNaWkpDescrEntry 3 }

t11FcSpPoNaWkpDescrWkpNumber OBJECT-TYPE ๐Ÿงš

When the wkpWildcard bit is set, this one holds the IP protocol number for the Well-Known Protocol ๐ŸŒธ

t11FcSpPoNaWkpDescrWkpNumber OBJECT-TYPE
    SYNTAX       Unsigned32 (0..255)
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "When the 'wkpWildcard' bit is set in the corresponding
           instance of t11FcSpPoNaWkpDescrFlags, this object specifies
           the IP protocol number of the Well-Known Protocol."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.7.1 and table 131.
            - http://www.iana.org/assignments/protocol-numbers."
    ::= { t11FcSpPoNaWkpDescrEntry 4 }

t11FcSpPoNaWkpDescrDestPort OBJECT-TYPE ๐Ÿ’œ

When destPortWildcard is set, this one holds the destination port. When it's not set, this gets ignored and can just be zero, no drama ๐Ÿซถ

t11FcSpPoNaWkpDescrDestPort OBJECT-TYPE
    SYNTAX       InetPortNumber
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION

           "When the 'destPortWildcard' bit is set in the corresponding
           instance of t11FcSpPoNaWkpDescrFlags, this object specifies
           the Destination (TCP/UDP) Port number of the Well-Known
           Protocol.  When the 'destPortWildcard' bit is reset, this
           object is ignored (and can have the value zero)."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.7.1 and table 131.
            - http://www.iana.org/assignments/port-numbers."
    ::= { t11FcSpPoNaWkpDescrEntry 5 }

t11FcSpPoNaWkpDescrRowStatus OBJECT-TYPE โญ

Same vibe as the IP one: the row status can be modified at any time ๐Ÿ’–

t11FcSpPoNaWkpDescrRowStatus OBJECT-TYPE
    SYNTAX       RowStatus
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The status of this row.  Values of object instances
           within the row can be modified at any time."
    ::= { t11FcSpPoNaWkpDescrEntry 6 }
--
-- Attribute Entries in Non-Active Attribute Policy Objects
--

okay bestie, the attribute tables are where the non-active policy stuff gets really detailed ๐Ÿฆ‹ Attribute entries get split into 256-byte chunks, and the broken-out auth parameters live in their own table ๐Ÿ’…โœจ

t11FcSpPoNaAttribTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FcSpPoNaAttribEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A table of the Attribute Policy Objects being used within
           non-active Policy Objects.

           A non-active Attribute Policy Object is represented by all
           the Attribute Entries in this table that have the same
           value of t11FcSpPoNaAttribName."
    ::= { t11FcSpPoNonActive 9 }

t11FcSpPoNaAttribEntry OBJECT-TYPE
    SYNTAX       T11FcSpPoNaAttribEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "Each entry contains information about one Attribute
           Entry contained within an Attribute Policy Object
           that is non-active within the Fabric identified by
           t11FcSpPoFabricIndex and managed within the Fibre Channel
           management instance identified by fcmInstanceIndex.

           For some types of Attribute Policy Objects, it is valuable
           to break out some semantically significant parts of the
           Policy Object's value into their own individual MIB
           objects; for example, to extract the one or more individual
           Authentication Protocol Identifiers and associated

           Authentication Protocol Parameters out of an Attribute
           containing a 'AUTH_Negotiate Message Payload'.  For such
           types, another MIB table is defined to hold the extracted
           values in MIB objects specific to the Attribute Policy
           Object's type.  In such cases, the
           t11FcSpPoNaAttribExtension object in this table points to
           the other MIB table.

           If the value of one Attribute Entry is too large (more than
           256 bytes) to be contained within the value of one instance
           of t11FcSpPoNaAttribValue, then one row in this table
           contains the first 256 bytes, and one (or more) other row(s)
           in this table contain the rest of the value.

           The StorageType of a row in this table is specified by the
           instance of t11FcSpPoStorageType that is INDEX-ed by the
           same values of fcmInstanceIndex and t11FcSpPoFabricIndex."
    INDEX  { fcmInstanceIndex, t11FcSpPoFabricIndex,
             t11FcSpPoNaAttribName, t11FcSpPoNaAttribEntryIndex,
             t11FcSpPoNaAttribPartIndex }
    ::= { t11FcSpPoNaAttribTable 1 }

T11FcSpPoNaAttribEntry ::= SEQUENCE {
    t11FcSpPoNaAttribName         T11FcSpAlphaNumName,
    t11FcSpPoNaAttribEntryIndex   Unsigned32,
    t11FcSpPoNaAttribPartIndex    Unsigned32,
    t11FcSpPoNaAttribType         Unsigned32,
    t11FcSpPoNaAttribValue        OCTET STRING,
    t11FcSpPoNaAttribExtension    OBJECT IDENTIFIER,
    t11FcSpPoNaAttribRowStatus    RowStatus
}

t11FcSpPoNaAttribName OBJECT-TYPE
    SYNTAX       T11FcSpAlphaNumName
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "The name of the Attribute Policy Object containing one
           or more Attribute Entries."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.8.1 and table 133."
    ::= { t11FcSpPoNaAttribEntry 1 }

t11FcSpPoNaAttribEntryIndex OBJECT-TYPE
    SYNTAX       Unsigned32 (1..4294967295)
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A unique value to distinguish this Attribute Entry
           from other Attribute Entries contained in the same
           Attribute Policy Object."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.8.1, tables 133/134."
    ::= { t11FcSpPoNaAttribEntry 2 }

t11FcSpPoNaAttribPartIndex OBJECT-TYPE
    SYNTAX       Unsigned32 (1..4294967295)
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "When the value of an Attribute Entry is shorter than 257
           bytes, the whole value is contained in one instance of
           t11FcSpPoNaAttribValue, and the value of this object is 1.

           If the value of an Attribute Entry is longer than 256 bytes,
           then that value is divided up on 256-byte boundaries such
           that all parts are 256 bytes long except the last part which
           is shorter if necessary, with each such part contained in
           a separate row of this table, and the value of this object
           is set to the part number.  That is, this object has the
           value of 1 for bytes 0-255, the value of 2 for bytes
           256-511, etc."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.1.8.1, tables 134/135."
    ::= { t11FcSpPoNaAttribEntry 3 }

t11FcSpPoNaAttribType OBJECT-TYPE
    SYNTAX       Unsigned32 (1..4294967295)
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The type of attribute.  The first type to be defined is:

           t11FcSpPoNaAttribType    t11FcSpPoNaAttribValue
           =====================    ======================
             '00000001'h          The AUTH_Negotiate Message Payload
           "
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP), February 2007,
              section 7.1.8.1, tables 134/135 and table 10."
    ::= { t11FcSpPoNaAttribEntry 4 }

t11FcSpPoNaAttribValue OBJECT-TYPE
    SYNTAX       OCTET STRING (SIZE (0..256))
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The value of an Attribute Entry is divided up on 256-byte
           boundaries such that all parts are 256 bytes long except the
           last part, which is shorter if necessary, and each such part
           is contained in a separate instance of this object.

           When the value of the corresponding instance of
           t11FcSpPoNaAttribExtension is not zeroDotZero, then the same
           underlying management data has its value contained both in
           this object and in the individual/broken-out parts pointed
           to by t11FcSpPoNaAttribExtension.  Thus, after any
           modification of the underlying management data, e.g., after
           a Set operation to the value of either MIB representation,
           then that modification is reflected in the values of both
           MIB representations."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP), February 2007,
              section 7.1.8.1, tables 134/135 and table 10."
    ::= { t11FcSpPoNaAttribEntry 5 }

t11FcSpPoNaAttribExtension OBJECT-TYPE
    SYNTAX       OBJECT IDENTIFIER
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "For some types of Attribute Policy Object, the value of
           this MIB object points to type-specific MIB objects that
           contain individual/broken-out parts of the Attribute Policy
           Object's value.  If this object doesn't point to such
           type-specific MIB objects, then it contains the value:
           zeroDotZero.

           In particular, when the value of t11FcSpPoNaAttribType
           indicates 'AUTH_Negotiate Message Payload', one or more
           Authentication Protocol Identifiers and their associated
           Authentication Protocol Parameters are embedded within
           the value of the corresponding instance of
           t11FcSpPoNaAttribValue; MIB objects to contain these
           individual values are defined in the
           t11FcSpPoAuthProtTable.  Thus, for an 'AUTH_Negotiate
           Message Payload' Attribute, the value of this object would
           contain the OID of t11FcSpPoNaAuthProtTable.

           When the value of this object is not zeroDotZero, then the
           same underlying management data has its value contained in
           both the individual/broken-out parts pointed to by this
           object and in the corresponding instance of
           t11FcSpPoNaAttribValue.  Thus, after any modification of the
           underlying management data, e.g., after a Set operation to
           the value of either MIB representation, then that
           modification is reflected in the values of both MIB
           representations."
    ::= { t11FcSpPoNaAttribEntry 6 }

t11FcSpPoNaAttribRowStatus OBJECT-TYPE
    SYNTAX       RowStatus
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The status of this row.  Values of object instances
           within the row can be modified at any time."
    ::= { t11FcSpPoNaAttribEntry 7 }

--
-- Auth. Protocol Parameters in Non-Active Attribute Policy Objects
--

t11FcSpPoNaAuthProtTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FcSpPoNaAuthProtEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A table of Authentication Protocol Identifier and
           Authentication Protocol Parameters that are embedded in
           Attribute Policy Objects being used within non-active
           Policy Objects.

           This table is used for Attribute Entries of Attribute Policy
           Objects for which the value of t11FcSpPoNaAttribType
           indicates 'AUTH_Negotiate Message Payload' and the value of
           t11FcSpPoNaAttribExtension contains the OID of this table."
    REFERENCE

           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, sections 5.3.2 & 7.1.8.1,
              tables 134/135 and tables 10/11."
    ::= { t11FcSpPoNonActive 10 }

t11FcSpPoNaAuthProtEntry OBJECT-TYPE
    SYNTAX       T11FcSpPoNaAuthProtEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "Each row contains information about an Authentication
           Protocol that is extracted out of the Attribute Entry
           (identified by t11FcSpPoNaAttribEntryIndex) of the
           non-active Policy Attribute Object (identified by
           t11FcSpPoNaAttribName) for the Fabric identified by
           t11FcSpPoFabricIndex and managed within the Fibre Channel
           management instance identified by fcmInstanceIndex.

           If the value of one Attribute Protocol Parameters string is
           too large (more than 256 bytes) to be contained within the
           value of one instance of t11FcSpPoNaAuthProtParams, then
           one row in this table contains the first 256 bytes, and
           one (or more) other row(s) in this table contain the rest
           of the value.

           The same underlying management data that is represented in
           rows of this table is also represented by the corresponding
           instances of t11FcSpPoNaAttribValue.  Thus, after any
           modification of the underlying management data, e.g., after
           a Set operation to the value of either MIB representation,
           then that modification is reflected in the values of both
           MIB representations."
    INDEX  { fcmInstanceIndex, t11FcSpPoFabricIndex,
             t11FcSpPoNaAttribName, t11FcSpPoNaAttribEntryIndex,
             t11FcSpPoNaAuthProtIdentifier,
             t11FcSpPoNaAuthProtPartIndex }
    ::= { t11FcSpPoNaAuthProtTable 1 }

T11FcSpPoNaAuthProtEntry ::= SEQUENCE {
    t11FcSpPoNaAuthProtIdentifier   Unsigned32,
    t11FcSpPoNaAuthProtPartIndex    Unsigned32,
    t11FcSpPoNaAuthProtParams       OCTET STRING,
    t11FcSpPoNaAuthProtRowStatus    RowStatus
}

Okay bestie, we're deep in the MIB now and it's so good ๐Ÿฆ‹ Here's the Authentication Protocol Identifier object, which is basically a list of which auth protocols are allowed ๐Ÿ’…

t11FcSpPoNaAuthProtIdentifier OBJECT-TYPE
    SYNTAX       Unsigned32 (0..4294967295)
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "The Authentication Protocol Identifier:

                    1      = DH-CHAP
                    3      = FCPAP
                    4      = IKEv2
                    5      = IKEv2-AUTH
              240 thru 255 = Vendor Specific Protocols

            all other values are 'Reserved' (by T11)."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 5.3.2, table 11."
    ::= { t11FcSpPoNaAuthProtEntry 1 }

t11FcSpPoNaAuthProtPartIndex OBJECT-TYPE
    SYNTAX       Unsigned32 (1..4294967295)
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "When the value of an Attribute Protocol Parameters string
           is shorter than 257 bytes, the whole value is contained in
           one instance of t11FcSpPoNaAuthProtParams, and the value of
           this object is 1. (This includes the case when the Attribute
           Protocol Parameters string is zero bytes in length.)

           If the value of an Authentication Protocol Parameters string
           is longer than 256 bytes, then that value is divided up on
           256-byte boundaries such that all parts are 256 bytes long
           except the last part, which is shorter if necessary, with
           each such part contained in a separate row of this table,
           and the value of this object is set to the part number.
           That is, this object has the value of 1 for bytes 0-255,
           the value of 2 for bytes 256-511, etc."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 5.3.2, table 10."
    ::= { t11FcSpPoNaAuthProtEntry 2 }

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

           "The value of an Authentication Protocol Parameters string
           is divided up on 256-byte boundaries such that all parts
           are 256 bytes long except the last part, which is shorter
           if necessary, and each such part is contained in a
           separate instance of this object."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 5.3.2, table 10."
    ::= { t11FcSpPoNaAuthProtEntry 3 }

t11FcSpPoNaAuthProtRowStatus  OBJECT-TYPE
    SYNTAX       RowStatus
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The status of this row.  Values of object instances
           within the row can be modified at any time."
    ::= { t11FcSpPoNaAuthProtEntry 4 }

Okay so the params string gets chopped into 256-byte chunks, one chunk per row, and the PartIndex is how you keep track of which chunk is which ๐Ÿงš Super neat, ngl.

Next up is the statistics part, where the policy server counts how many requests it got and how it responded ๐Ÿ“Šโœจ

--
-- Part 4 - Statistics
--

t11FcSpPoStatsTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FcSpPoStatsEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A table of statistics maintained by FC-SP Security
           Policy Servers."
    ::= { t11FcSpPoStatistics 1 }

t11FcSpPoStatsEntry OBJECT-TYPE
    SYNTAX       T11FcSpPoStatsEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A set of statistics for the FC-SP Security Policy Server on
           the Fabric identified by the value of t11FcSpPoFabricIndex,
           and managed within the Fibre Channel management instance
           identified by fcmInstanceIndex."
    INDEX   { fcmInstanceIndex, t11FcSpPoFabricIndex }
    ::= { t11FcSpPoStatsTable 1 }

T11FcSpPoStatsEntry ::= SEQUENCE {
    t11FcSpPoInRequests     Counter32,
    t11FcSpPoInAccepts      Counter32,
    t11FcSpPoInRejects      Counter32
}

t11FcSpPoInRequests OBJECT-TYPE
    SYNTAX       Counter32
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The number of FC-SP Policy Management Requests
           (e.g., GPS, APS, etc.) received by this FC-SP
           Security Policy Server on this Fabric.

           This counter has no discontinuities other than those
           that all Counter32's have when sysUpTime=0."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.3."
    ::= { t11FcSpPoStatsEntry 1 }

t11FcSpPoInAccepts OBJECT-TYPE
    SYNTAX       Counter32
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The number of times that this FC-SP Security Policy Server
           sent an Accept CT_IU on this Fabric in response to a
           received FC-SP Policy Management Request (e.g., GPS, APS,
           etc.).

           This counter has no discontinuities other than those
           that all Counter32's have when sysUpTime=0."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.3."
    ::= { t11FcSpPoStatsEntry 2 }

t11FcSpPoInRejects OBJECT-TYPE
    SYNTAX       Counter32
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The number of times that this FC-SP Security Policy Server
           sent a Reject CT_IU on this Fabric in response to a
           received FC-SP Policy Management Request (e.g., GPS, APS,
           etc.).

           This counter has no discontinuities other than those
           that all Counter32's have when sysUpTime=0."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.3."
    ::= { t11FcSpPoStatsEntry 3 }

Now we're in Part 5, which is all about control info and notifications ๐Ÿ”” The control table is where the policy database gets its memory realization, and it's also where notifications get set up ๐Ÿ’œ

--
-- Part 5 - Control Information & Notifications
--

--
-- Control Information
--

t11FcSpPoServerAddress OBJECT-TYPE
    SYNTAX       FcNameIdOrZero
    MAX-ACCESS   accessible-for-notify
    STATUS       current
    DESCRIPTION
           "The WWN of the FC-SP Security Policy Server that
           received a request that is referenced in a
           notification."
    ::= { t11FcSpPoControl 1 }


t11FcSpPoControlTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FcSpPoControlEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A table of control information, including the memory
           realization of FC-SP Policy Databases, and concerning
           the generation of notifications due to FC-SP
           Policy-related events."
    ::= { t11FcSpPoControl 2 }

t11FcSpPoControlEntry OBJECT-TYPE
    SYNTAX       T11FcSpPoControlEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "Each entry contains control information specific to FC-SP
           Policy and Policy-related events for the Fabric identified
           by the value of t11FcSpPoFabricIndex, and managed within
           the Fibre Channel management instance identified by
           fcmInstanceIndex."

    INDEX   { fcmInstanceIndex, t11FcSpPoFabricIndex }
    ::= { t11FcSpPoControlTable 1 }

T11FcSpPoControlEntry ::= SEQUENCE {
     t11FcSpPoStorageType              StorageType,
     t11FcSpPoNotificationEnable       TruthValue,
     t11FcSpPoLastNotifyType           INTEGER,
     t11FcSpPoRequestSource            FcNameIdOrZero,
     t11FcSpPoReasonCode               T11NsGs4RejectReasonCode,
     t11FcSpPoCtCommandString          OCTET STRING,
     t11FcSpPoReasonCodeExp            Unsigned32,
     t11FcSpPoReasonVendorCode         OCTET STRING
}

t11FcSpPoStorageType OBJECT-TYPE
    SYNTAX       StorageType
    MAX-ACCESS   read-write
    STATUS       current
    DESCRIPTION
           "This object specifies the memory realization of FC-SP
           Policy Objects and related information for a particular
           Fabric; specifically, for:

             - rows created and/or modified for the particular
               Fabric in these tables:

                   t11FcSpPoNaSummaryTable
                   t11FcSpPoNaSwListTable
                   t11FcSpPoNaSwMembTable
                   t11FcSpPoNaNoMembTable
                   t11FcSpPoNaCtDescrTable
                   t11FcSpPoNaSwConnTable
                   t11FcSpPoNaIpMgmtTable
                   t11FcSpPoNaWkpDescrTable
                   t11FcSpPoNaAttribTable

             - the activate and deactivate actions invoked through
               the t11FcSpPoOperActivate and t11FcSpPoOperDeActivate
               objects for the particular Fabric; and

             - modified information contained in the same row
               as an instance of this object.

           Even if an instance of this object has the value
           'permanent(4)', none of the information defined in
           this MIB module for the given Fabric needs to be
           writable."
    ::= { t11FcSpPoControlEntry 1 }

t11FcSpPoNotificationEnable OBJECT-TYPE
    SYNTAX       TruthValue
    MAX-ACCESS   read-write
    STATUS       current
    DESCRIPTION
           "This object specifies whether the following types of
           notifications:

              t11FcSpPoNotifyActivation,
              t11FcSpPoNotifyActivateFail,
              t11FcSpPoNotifyDeactivation and
              t11FcSpPoNotifyDeactivateFail

           should be generated for this Fabric."
    ::= { t11FcSpPoControlEntry 2 }

t11FcSpPoLastNotifyType OBJECT-TYPE
    SYNTAX       INTEGER {
                     none(1),
                     activation(2),
                     activateFail(3),
                     deactivation(4),
                     deactivateFail(5)
                 }
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "An indication of which of the following types of
           notification is currently being/was most recently
           generated for the Fabric:

             'activation'     -- t11FcSpPoNotifyActivation
             'activateFail'   -- t11FcSpPoNotifyActivateFail
             'deactivation'   -- t11FcSpPoNotifyDeactivation
             'deactivateFail' -- t11FcSpPoNotifyDeactivateFail

           The value 'none' indicates that none of these types of
           notifications have been generated since the last restart
           of the network management system, and therefore that the
           corresponding instances of: t11FcSpPoRequestSource,
           t11FcSpPoReasonCode, t11FcSpPoCtCommandString,
           t11FcSpPoReasonCodeExp, and
           t11FcSpPoReasonVendorCode are irrelevant."
    ::= { t11FcSpPoControlEntry 3 }

t11FcSpPoRequestSource OBJECT-TYPE
    SYNTAX       FcNameIdOrZero
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The WWN of the source of the (Activate Policy Summary
           or Deactivate Policy Summary) request for which the
           current/most recent notification of the type indicated by
           the corresponding instance of t11FcSpPoLastNotifyType
           is being/was generated.

           If no source is available, the value of this object is
           the zero-length string."
    DEFVAL { "" }
    ::= { t11FcSpPoControlEntry 4 }

t11FcSpPoReasonCode OBJECT-TYPE
    SYNTAX       T11NsGs4RejectReasonCode
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The reason code associated with the failure that is
           indicated when the value of the corresponding instance
           of t11FcSpPoLastNotifyType is 'activateFail' or
           'deactivateFail'.

           For other values of t11FcSpPoLastNotifyType, the value
           of this object is 'none(1)'."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.3.6.2 & 7.3.6.3"
    ::= { t11FcSpPoControlEntry 5 }

okay so the next object is t11FcSpPoCtCommandString, and it's the one that carries the actual rejected request ๐Ÿ“ฆโœจ

t11FcSpPoCtCommandString OBJECT-TYPE
    SYNTAX        OCTET STRING (SIZE (0..255))
    MAX-ACCESS    read-only
    STATUS        current
    DESCRIPTION
           "The binary content of the failed request that is
           indicated when the value of the corresponding instance of
           t11FcSpPoLastNotifyType is 'activateFail' or
           'deactivateFail'.  The content of the request is formatted
           as an octet string (in network byte order) containing the
           CT_IU, as described in Table 2 of [FC-GS-5] (including the
           preamble).

           For other values of t11FcSpPoLastNotifyType, or if the
           CT_IU's content is unavailable, the value of this object
           is the zero-length string.

           When the length of this object is 255 octets, it
           contains the first 255 octets of the CT_IU (in
           network-byte order)."
    ::= { t11FcSpPoControlEntry 6 }

so basically this is the receipt ๐Ÿงพ of the failed request. It's only filled in when t11FcSpPoLastNotifyType says 'activateFail' or 'deactivateFail'. For every other value, or if the CT_IU isn't available, it's just an empty zero-length string ๐Ÿซง And if it's exactly 255 octets long, that means you're only getting the first 255 octets of the CT_IU, which is a whole vibe on its own ๐Ÿ’€

Next up is t11FcSpPoReasonCodeExp, which is the explanation behind the failure ๐Ÿ™ˆ

t11FcSpPoReasonCodeExp OBJECT-TYPE
    SYNTAX       Unsigned32 (0..255)
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The reason code explanation associated with the failure
           that is indicated when the value of the corresponding
           instance of t11FcSpPoLastNotifyType is 'activateFail' or
           'deactivateFail'.

           For other values of t11FcSpPoLastNotifyType, the value
           of this object is zero."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.3.6.2 & 7.3.6.3"
    ::= { t11FcSpPoControlEntry 7 }

It only matters for the two fail types. For anything else it's zero ๐ŸŒธ It points back to sections 7.3.6.2 & 7.3.6.3 of [FC-SP], which I'm not gonna re-explain because it's giving "go read the source" ๐Ÿ“š

Then there's t11FcSpPoReasonVendorCode, the vendor-specific bit ๐Ÿฆ‹

t11FcSpPoReasonVendorCode  OBJECT-TYPE
    SYNTAX       OCTET STRING (SIZE (0 | 1))
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The vendor-specific reason code associated with the failure
           that is indicated when the value of the corresponding
           instance of t11FcSpPoLastNotifyType is 'activateFail' or
           'deactivateFail'.

           For other values of t11FcSpPoLastNotifyType, or if no
           vendor-specific reason code is available, the value
           of this object is the zero-length string."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.3.6.2 & 7.3.6.3"
    ::= { t11FcSpPoControlEntry 8 }

It's either zero or one octet long, and it's empty when there's no vendor code to show ๐Ÿ’… Same reference vibes as the one before it.


Now the notifications section, which is where the alerts live ๐Ÿ””

--
-- Notification definitions
--

t11FcSpPoNotifyActivation NOTIFICATION-TYPE
    OBJECTS      { t11FcSpPoServerAddress,

                   t11FcSpPoPolicySummaryObjName,
                   t11FcSpPoRequestSource }
    STATUS       current
    DESCRIPTION
           "This notification is generated whenever a Security
           Policy Server (indicated by the value of
           t11FcSpPoServerAddress) successfully completes the
           execution of an Activate Policy Summary request.
           The value of t11FcSpPoRequestSource indicates
           the source of the APS request.  The value of
           t11FcSpPoPolicySummaryObjName indicates the name of
           the activated Policy Summary Object."
    ::= { t11FcSpPoMIBNotifications 1 }

So t11FcSpPoNotifyActivation is the happy one ๐ŸŽ‰ It goes off when a Security Policy Server finishes an Activate Policy Summary request successfully. It tells you which server did it, who sent the request, and the name of the Policy Summary Object that got activated. Iconic โœจ

t11FcSpPoNotifyActivateFail NOTIFICATION-TYPE
    OBJECTS      { t11FcSpPoServerAddress,
                   t11FcSpPoRequestSource,
                   t11FcSpPoCtCommandString,
                   t11FcSpPoReasonCode,
                   t11FcSpPoReasonCodeExp,
                   t11FcSpPoReasonVendorCode }
    STATUS       current
    DESCRIPTION
           "This notification is generated whenever a Security Policy
           Server (indicated by the value of t11FcSpPoServerAddress)
           fails to complete the execution of an Activate Policy
           Summary request.

           The value of t11FcSpPoCtCommandString indicates the
           rejected request, and the values of t11FcSpPoReasonCode,
           t11FcSpPoReasonCodeExp, and t11FcSpPoReasonVendorCode
           indicate the reason for the rejection.  The value of
           t11FcSpPoRequestSource indicates the source of the
           request."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.3.6.2."
    ::= { t11FcSpPoMIBNotifications 2 }

And this is the sad twin ๐Ÿ˜ญ t11FcSpPoNotifyActivateFail fires when that same server fails to finish an Activate Policy Summary request. It packs in the rejected request, the reason code, its explanation, the vendor code, and who asked. The whole crime scene, basically ๐Ÿ”

t11FcSpPoNotifyDeactivation NOTIFICATION-TYPE
    OBJECTS      { t11FcSpPoServerAddress,
                   t11FcSpPoRequestSource }
    STATUS       current
    DESCRIPTION
           "This notification is generated whenever a Security
           Policy Server (indicated by the value of
           t11FcSpPoServerAddress) successfully completes the
           execution of a Deactivate Policy Summary request.
           The value of t11FcSpPoRequestSource indicates
           the source of the DPS request."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 7.3.6.3."
    ::= { t11FcSpPoMIBNotifications 3 }

t11FcSpPoNotifyDeactivation is the successful-deactivation ping ๐ŸŒˆ It goes off when a server completes a Deactivate Policy Summary request, and it tells you who sent that DPS request. Simple and clean ๐Ÿงš

t11FcSpPoNotifyDeactivateFail NOTIFICATION-TYPE
    OBJECTS      { t11FcSpPoServerAddress,
                   t11FcSpPoRequestSource,
                   t11FcSpPoCtCommandString,
                   t11FcSpPoReasonCode,
                   t11FcSpPoReasonCodeExp,
                   t11FcSpPoReasonVendorCode }
    STATUS       current
    DESCRIPTION
           "This notification is generated whenever a Security Policy
           Server (indicated by the value of t11FcSpPoServerAddress)
           fails to complete the execution of a Deactivate Policy
           Summary request.

           The value of t11FcSpPoCtCommandString indicates the
           rejected request, and the values of t11FcSpPoReasonCode,
           t11FcSpPoReasonCodeExp, and t11FcSpPoReasonVendorCode
           indicate the reason for the rejection.  The value of
           t11FcSpPoRequestSource indicates the source of the
           request."
    ::= { t11FcSpPoMIBNotifications 4 }

Same energy as the activation failure, just for deactivation ๐Ÿ’œ Same objects, same explanation of what each one tells you, and this one doesn't have a REFERENCE clause at all.


Last up is conformance, which is basically the checklist for who has to implement what ๐Ÿ“‹

--
-- Conformance
--

t11FcSpPoMIBCompliances
                    OBJECT IDENTIFIER ::= { t11FcSpPoMIBConformance 1 }
t11FcSpPoMIBGroups  OBJECT IDENTIFIER ::= { t11FcSpPoMIBConformance 2 }

t11FcSpPoMIBCompliance MODULE-COMPLIANCE
    STATUS       current
    DESCRIPTION
           "The compliance statement for entities that
           support the Fabric Policies defined in FC-SP,"

    MODULE  -- this module
        MANDATORY-GROUPS { t11FcSpPoActiveObjectsGroup }
        GROUP        t11FcSpPoNonActiveObjectsGroup
        DESCRIPTION
            "These objects are mandatory for FC-SP Security Policy
            Servers."

        GROUP        t11FcSpPoNotifyObjectsGroup
        DESCRIPTION
            "These objects are mandatory for FC-SP Security Policy
            Servers."

        GROUP        t11FcSpPoNotificationGroup
        DESCRIPTION
            "These notifications are mandatory for FC-SP Security
            Policy Servers."

        GROUP        t11FcSpPoOperationsObjectsGroup
        DESCRIPTION
            "These objects are mandatory only for FC-SP Security
            Policy Servers that support the activation/deactivation
            of policies via SNMP."

        GROUP        t11FcSpPoStatsObjectsGroup
        DESCRIPTION
            "These objects are optional."

The compliance block is where the MANDATORY-GROUPS live ๐Ÿ‘‘ t11FcSpPoActiveObjectsGroup is the one that's required across the board. The non-active objects, notify objects, and notification group are also mandatory, but only for FC-SP Security Policy Servers. The operations objects are only mandatory for servers that do activation and deactivation over SNMP, and the stats objects are optional ๐Ÿซถ

okay so this part is where the compliance rules get super strict about write access ๐Ÿ’… every single object in this MIB is read-only, bestie, no exceptions ๐Ÿ”’

-- Write access is not required for any objects in this MIB module:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        OBJECT       t11FcSpPoNaCtDescrRowStatus
        MIN-ACCESS   read-only
        DESCRIPTION

            "Write access is not required."

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    ::= { t11FcSpPoMIBCompliances 1 }

next up are the units of conformance, which are basically the bundles of objects and notifications that you can implement as a group ๐ŸŽ€ the groups are where the real main character energy is, so let's go ๐Ÿฆ‹

-- Units of Conformance

t11FcSpPoActiveObjectsGroup OBJECT-GROUP
    OBJECTS  {   t11FcSpPoPolicySummaryObjName,
                 t11FcSpPoAdminFabricName,
                 t11FcSpPoActivatedTimeStamp,
                 t11FcSpPoSummaryPolicyType,
                 t11FcSpPoSummaryHashFormat,
                 t11FcSpPoSummaryHashValue,
                 t11FcSpPoSwMembSwitchFlags,
                 t11FcSpPoSwMembDomainID,
                 t11FcSpPoSwMembPolicyDataRole,
                 t11FcSpPoSwMembAuthBehaviour,
                 t11FcSpPoSwMembAttribute,
                 t11FcSpPoNoMembFlags,
                 t11FcSpPoNoMembCtAccessIndex,
                 t11FcSpPoNoMembAttribute,
                 t11FcSpPoCtDescrFlags,
                 t11FcSpPoCtDescrGsType,
                 t11FcSpPoCtDescrGsSubType,
                 t11FcSpPoSwConnAllowedNameType,
                 t11FcSpPoSwConnAllowedName,
                 t11FcSpPoIpMgmtWkpIndex,
                 t11FcSpPoIpMgmtAttribute,
                 t11FcSpPoWkpDescrFlags,
                 t11FcSpPoWkpDescrWkpNumber,
                 t11FcSpPoWkpDescrDestPort,
                 t11FcSpPoAttribType,
                 t11FcSpPoAttribValue,
                 t11FcSpPoAttribExtension,
                 t11FcSpPoAuthProtParams
             }
    STATUS   current
    DESCRIPTION
           "A collection of MIB objects that contain information
           about active Policy Objects that express Fibre Channel
           Security (FC-SP) policy."
    ::= { t11FcSpPoMIBGroups 1 }

t11FcSpPoOperationsObjectsGroup OBJECT-GROUP
    OBJECTS  {   t11FcSpPoOperActivate,
                 t11FcSpPoOperDeActivate,
                 t11FcSpPoOperResult,
                 t11FcSpPoOperFailCause
             }
    STATUS   current
    DESCRIPTION
           "A collection of MIB objects that allow a new set of
           Fibre Channel Security (FC-SP) policies to be activated
           or an existing set to be deactivated."
    ::= { t11FcSpPoMIBGroups 2 }

t11FcSpPoNonActiveObjectsGroup OBJECT-GROUP
    OBJECTS  {   t11FcSpPoStorageType,
                 t11FcSpPoNaSummaryPolicyNameType,
                 t11FcSpPoNaSummaryPolicyName,
                 t11FcSpPoNaSummaryHashStatus,
                 t11FcSpPoNaSummaryHashFormat,
                 t11FcSpPoNaSummaryHashValue,
                 t11FcSpPoNaSummaryRowStatus,
                 t11FcSpPoNaSwListFabricName,
                 t11FcSpPoNaSwListRowStatus,
                 t11FcSpPoNaSwMembFlags,
                 t11FcSpPoNaSwMembDomainID,
                 t11FcSpPoNaSwMembPolicyDataRole,
                 t11FcSpPoNaSwMembAuthBehaviour,
                 t11FcSpPoNaSwMembAttribute,
                 t11FcSpPoNaSwMembRowStatus,
                 t11FcSpPoNaNoMembFlags,
                 t11FcSpPoNaNoMembCtAccessIndex,
                 t11FcSpPoNaNoMembAttribute,
                 t11FcSpPoNaNoMembRowStatus,
                 t11FcSpPoNaCtDescrFlags,
                 t11FcSpPoNaCtDescrGsType,
                 t11FcSpPoNaCtDescrGsSubType,
                 t11FcSpPoNaCtDescrRowStatus,
                 t11FcSpPoNaSwConnAllowedNameType,
                 t11FcSpPoNaSwConnAllowedName,
                 t11FcSpPoNaSwConnRowStatus,
                 t11FcSpPoNaIpMgmtWkpIndex,
                 t11FcSpPoNaIpMgmtAttribute,
                 t11FcSpPoNaIpMgmtRowStatus,
                 t11FcSpPoNaWkpDescrFlags,
                 t11FcSpPoNaWkpDescrWkpNumber,
                 t11FcSpPoNaWkpDescrDestPort,
                 t11FcSpPoNaWkpDescrRowStatus,
                 t11FcSpPoNaAttribType,
                 t11FcSpPoNaAttribValue,
                 t11FcSpPoNaAttribExtension,
                 t11FcSpPoNaAttribRowStatus,
                 t11FcSpPoNaAuthProtParams,
                 t11FcSpPoNaAuthProtRowStatus
             }
    STATUS   current
    DESCRIPTION
           "A collection of MIB objects that contain information
           about non-active Policy Objects available for activation
           in order to change Fibre Channel Security (FC-SP) policy."
    ::= { t11FcSpPoMIBGroups 3 }

t11FcSpPoStatsObjectsGroup OBJECT-GROUP
    OBJECTS  {   t11FcSpPoInRequests,
                 t11FcSpPoInAccepts,
                 t11FcSpPoInRejects
             }
    STATUS   current
    DESCRIPTION
           "A collection of MIB objects that contain statistics
           that can be maintained by FC-SP Security Policy Servers."
    ::= { t11FcSpPoMIBGroups 4 }

t11FcSpPoNotifyObjectsGroup OBJECT-GROUP
    OBJECTS  {   t11FcSpPoNotificationEnable,

                 t11FcSpPoServerAddress,
                 t11FcSpPoLastNotifyType,
                 t11FcSpPoRequestSource,
                 t11FcSpPoReasonCode,
                 t11FcSpPoCtCommandString,
                 t11FcSpPoReasonCodeExp,
                 t11FcSpPoReasonVendorCode
             }
    STATUS   current
    DESCRIPTION
           "A collection of MIB objects to control the generation of
           notifications concerning Fibre Channel Security (FC-SP)
           policy, and to hold information contained in such
           notifications."
    ::= { t11FcSpPoMIBGroups 5 }

t11FcSpPoNotificationGroup NOTIFICATION-GROUP
    NOTIFICATIONS  {   t11FcSpPoNotifyActivation,
                       t11FcSpPoNotifyActivateFail,
                       t11FcSpPoNotifyDeactivation,
                       t11FcSpPoNotifyDeactivateFail
                   }
    STATUS   current
    DESCRIPTION
           "A collection of notifications of events concerning
           Fibre Channel Security (FC-SP) policy."
    ::= { t11FcSpPoMIBGroups 6 }

END

6.5. The T11-FC-SP-SA-MIB Module ๐Ÿงš

and now we're starting a whole new MIB module, the T11-FC-SP-SA-MIB, which is all about the security associations ๐Ÿ” it kicks off with a little header block, so here it is:

--*******************************************************************
-- FC-SP Security Associations
--

T11-FC-SP-SA-MIB  DEFINITIONS ::= BEGIN

okay bestie, the import list comes first ๐Ÿงš it's where the module borrows everything it needs from other MIBs, so every name here is a little reference to another spec ๐Ÿ’…

IMPORTS
    MODULE-IDENTITY, OBJECT-TYPE, NOTIFICATION-TYPE,
    Unsigned32, Counter32, Counter64, TimeTicks, Gauge32,
    mib-2                 FROM SNMPv2-SMI              -- [RFC2578]
    RowStatus, StorageType, AutonomousType, TimeStamp,
    TruthValue            FROM SNMPv2-TC               -- [RFC2579]
    MODULE-COMPLIANCE, OBJECT-GROUP,
    NOTIFICATION-GROUP
                          FROM SNMPv2-CONF             -- [RFC2580]
    InterfaceIndex,
    InterfaceIndexOrZero  FROM IF-MIB                  -- [RFC2863]
    fcmInstanceIndex,
    FcAddressIdOrZero     FROM FC-MGMT-MIB             -- [RFC4044]
    T11FabricIndex        FROM T11-TC-MIB              -- [RFC4439]
    T11FcSpType,
    T11FcSpiIndex,
    T11FcSpLifetimeLeft,
    T11FcSpLifetimeLeftUnits,
    T11FcSpSecurityProtocolId,
    T11FcRoutingControl,
    T11FcSaDirection,
    T11FcSpPrecedence,
    T11FcSpTransforms      FROM T11-FC-SP-TC-MIB;

the identity block is next, and it's giving full credits list energy โœจ The LAST-UPDATED date, the organisation story, and the contacts all live in here, and the DESCRIPTION is a full menu of the six parts of the module ๐ŸŽ€

t11FcSpSaMIB  MODULE-IDENTITY
    LAST-UPDATED  "200808200000Z"
    ORGANIZATION  "This MIB module was developed through the
                  coordinated effort of two organizations:
                  T11 began the development and the IETF (in
                  the IMSS Working Group) finished it."
    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 95134 USA
                  Email: kzm@cisco.com"
    DESCRIPTION
           "This MIB module specifies the management information
           required to manage Security Associations established via
           Fibre Channel's FC-SP specification.

           The MIB module consists of six parts:

           - a per-Fabric table, t11FcSpSaIfTable, of capabilities,
             parameters, status information, and counters; the counters
             include non-transient aggregates of per-SA transient
             counters;

           - three tables, t11FcSpSaPropTable, t11FcSpSaTSelPropTable,
             and t11FcSpSaTransTable, specifying the proposals for an
             FC-SP entity acting as an SA_Initiator to present to the
             SA_Responder during the negotiation of Security
             Associations.  The same information is also used by an
             FC-SP entity acting as an SA_Responder to decide what to
             accept during the negotiation of Security Associations.
             One of these tables, t11FcSpSaTransTable, is used not only
             for information about security transforms to propose and
             to accept, but also as agreed upon during the negotiation
             of Security Associations;

           - a table, t11FcSpSaTSelDrByTable, of Traffic Selectors
             having the security action of 'drop' or 'bypass' to be
             applied either to ingress traffic that is unprotected by
             FC-SP, or to all egress traffic;

           - four tables, t11FcSpSaPairTable, t11FcSpSaTSelNegInTable,
             t11FcSpSaTSelNegOutTable, and t11FcSpSaTSelSpiTable,
             containing information about active bidirectional pairs of
             Security Associations; in particular, t11FcSpSaPairTable
             has one row per active bidirectional SA pair,
             t11FcSpSaTSelNegInTable and t11FcSpSaTSelNegOutTable
             contain information on the Traffic Selectors negotiated on
             the SAs, and the t11FcSpSaTSelSpiTable is an alternate
             lookup table such that the Traffic Selector(s) in use on a
             particular Security Association can be quickly determined
             based on the (ingress) SPI value;

           - a table, t11FcSpSaControlTable, of control and other
             information concerning the generation of notifications for
             events related to FC-SP Security Associations;

           - one notification, t11FcSpSaNotifyAuthFailure, generated on
             the occurrence of an Authentication failure for a received
             FC-2 or CT_IU frame.

           Copyright (C) The IETF Trust (2008).  This version
           of this MIB module is part of RFC 5324;  see the RFC
           itself for full legal notices."
    REVISION  "200808200000Z"
    DESCRIPTION
           "Initial version of this MIB module, published as RFC 5324."
    ::= { mib-2 179 }

t11FcSpSaMIBNotifications OBJECT IDENTIFIER ::= { t11FcSpSaMIB 0 }
t11FcSpSaMIBObjects     OBJECT IDENTIFIER ::= { t11FcSpSaMIB 1 }
t11FcSpSaMIBConformance OBJECT IDENTIFIER ::= { t11FcSpSaMIB 2 }
t11FcSpSaBase           OBJECT IDENTIFIER ::= { t11FcSpSaMIBObjects 1 }
t11FcSpSaConfig         OBJECT IDENTIFIER ::= { t11FcSpSaMIBObjects 2 }
t11FcSpSaActive         OBJECT IDENTIFIER ::= { t11FcSpSaMIBObjects 3 }
t11FcSpSaControl        OBJECT IDENTIFIER ::= { t11FcSpSaMIBObjects 4 }
--
--  Base-level Per-Fabric Information
--

the base-level table is where the per-Fabric info lives, and the entry's INDEX is a whole trio: fcmInstanceIndex, t11FcSpSaIfIndex, and t11FcSpSaIfFabricIndex ๐Ÿฆ‹

t11FcSpSaIfTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FcSpSaIfEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A table containing per-Fabric information related to
           FC-SP Security Associations."
    ::= { t11FcSpSaBase 1 }

t11FcSpSaIfEntry OBJECT-TYPE
    SYNTAX       T11FcSpSaIfEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "Each entry contains information related to Security
           Associations on a particular Fabric, and managed as part
           of the Fibre Channel management instance identified by
           fcmInstanceIndex."
    INDEX  { fcmInstanceIndex, t11FcSpSaIfIndex,
             t11FcSpSaIfFabricIndex }
    ::= { t11FcSpSaIfTable 1 }

T11FcSpSaIfEntry ::= SEQUENCE {
    t11FcSpSaIfIndex               InterfaceIndexOrZero,
    t11FcSpSaIfFabricIndex         T11FabricIndex,
             -- capabilities
    t11FcSpSaIfEspHeaderCapab      T11FcSpTransforms,
    t11FcSpSaIfCTAuthCapab         T11FcSpTransforms,
    t11FcSpSaIfIKEv2Capab          T11FcSpTransforms,
    t11FcSpSaIfIkev2AuthCapab      TruthValue,
             -- parameters and status
    t11FcSpSaIfStorageType         StorageType,
    t11FcSpSaIfReplayPrevention    TruthValue,
    t11FcSpSaIfReplayWindowSize    Unsigned32,
    t11FcSpSaIfDeadPeerDetections  Counter32,
    t11FcSpSaIfTerminateAllSas     INTEGER,
             -- summary frame counters
    t11FcSpSaIfOutDrops            Counter64,
    t11FcSpSaIfOutBypasses         Counter64,
    t11FcSpSaIfOutProcesses        Counter64,
    t11FcSpSaIfOutUnMatcheds       Counter64,
    t11FcSpSaIfInUnprotUnmtchDrops Counter64,
             -- aggregates of per-SA transient counters
    t11FcSpSaIfInDetReplays        Counter64,
    t11FcSpSaIfInUnprotMtchDrops   Counter64,
    t11FcSpSaIfInBadXforms         Counter64,
    t11FcSpSaIfInGoodXforms        Counter64,
    t11FcSpSaIfInProtUnmtchs       Counter64
}

t11FcSpSaIfIndex OBJECT-TYPE
    SYNTAX       InterfaceIndexOrZero
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "This object has a non-zero value to identify a particular
           interface, or the value zero to indicate that the
           information in this row applies to all (of the management
           instance's) interfaces to the particular Fabric.

           If any row has a non-zero value of t11FcSpSaIfIndex, then
           all rows for the same Fibre Channel management instance must
           also have a non-zero value of t11FcSpSaIfIndex and thereby
           be specific to a particular interface.

           As and when zero values of t11FcSpSaIfIndex are used in
           this table, then they must also be used in each other
           table that has t11FcSpSaIfIndex in its INDEX clause."
    ::= { t11FcSpSaIfEntry 1 }

t11FcSpSaIfFabricIndex OBJECT-TYPE
    SYNTAX       T11FabricIndex
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "An index value that uniquely identifies a particular
           Fabric."
    ::= { t11FcSpSaIfEntry 2 }

t11FcSpSaIfEspHeaderCapab OBJECT-TYPE
    SYNTAX       T11FcSpTransforms
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "A list of the standardized transforms supported by this
           entity on this interface for ESP_Header protection."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, Appendix A.3.1, tables A.23, A.25."
    ::= { t11FcSpSaIfEntry 3 }

t11FcSpSaIfCTAuthCapab OBJECT-TYPE
    SYNTAX       T11FcSpTransforms
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "A list of the standardized transforms supported by this
           entity on this interface for CT_Authentication protection."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, Appendix A.3.1, tables A.23, A.25."
    ::= { t11FcSpSaIfEntry 4 }

t11FcSpSaIfIKEv2Capab OBJECT-TYPE
    SYNTAX       T11FcSpTransforms
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "A list of the standardized transforms supported by this
           entity on this interface with IKEv2 protection."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, Appendix A.3.1, tables A.23, A.24,
              A.25, A.26."
    ::= { t11FcSpSaIfEntry 5 }

t11FcSpSaIfIkev2AuthCapab OBJECT-TYPE
    SYNTAX     TruthValue
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "An indication of whether the entity is capable of
           supporting the IKEv2-AUTH protocol on this interface, i.e.,
           concatenation of Authentication and SA Management
           Transactions, such that an SA Management Transaction is
           used to perform both the authentication function and
           SA management."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 6.7.2, and table A.27."
    ::= { t11FcSpSaIfEntry 6 }

t11FcSpSaIfStorageType OBJECT-TYPE
    SYNTAX       StorageType
    MAX-ACCESS   read-write
    STATUS       current
    DESCRIPTION
           "This object specifies the memory realization of
           information related to FC-SP Security Associations
           for interface(s) to a particular Fabric; specifically,
           for rows created and/or modified in these tables:

                   t11FcSpSaPropTable
                   t11FcSpSaTSelDrByTable
                   t11FcSpSaControlTable

           and, for modified information contained in the same
           row as an instance of this object.

           Even if an instance of this object has the value
           'permanent(4)', none of the information defined in
           this MIB module for interface(s) to the given Fabric
           need to be writable."
    ::= { t11FcSpSaIfEntry 7 }

t11FcSpSaIfReplayPrevention  OBJECT-TYPE
    SYNTAX       TruthValue
    MAX-ACCESS   read-write
    STATUS       current
    DESCRIPTION
           "This object indicates whether anti-replay protection is
           enabled for frame reception on this interface.

           Note that the replay-protection mechanism in FC-SP is
           conceptually similar to the corresponding mechanism in
           IPsec ESP."
    REFERENCE
           "- IP Encapsulating Security Payload (ESP),
              RFC 4303, December 2005, section 3.3.3."
    ::= { t11FcSpSaIfEntry 8 }

and that's the whole vibe of this chunk: capabilities, status, counters, and a little nod to IPsec ESP replay protection ๐Ÿ’…๐Ÿ”ฅ ๐ŸŒธ

okay so this part is all about the Security Association interface counters and the proposal table, and the MIB text is very particular, so I'm keeping every line exactly as written ๐Ÿฆ‹

t11FcSpSaIfReplayWindowSize OBJECT-TYPE
    SYNTAX       Unsigned32
    MAX-ACCESS   read-write
    STATUS       current
    DESCRIPTION
           "The size of the replay window to be used when
           anti-replay protection is enabled for frame reception
           on this interface.

           Note that the replay-protection mechanism in FC-SP is
           conceptually similar to the corresponding mechanism in
           IPsec ESP."
    REFERENCE

           "- IP Encapsulating Security Payload (ESP),
              RFC 4303, December 2005, section 3.4.3."
    ::= { t11FcSpSaIfEntry 9 }

t11FcSpSaIfDeadPeerDetections OBJECT-TYPE
    SYNTAX       Counter32
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The number of times that a dead peer condition has been
           detected on this interface.

           This counter has no discontinuities other than those
           that all Counter32's have when sysUpTime=0."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 8.5.3.3."
    ::= { t11FcSpSaIfEntry 10 }

t11FcSpSaIfTerminateAllSas OBJECT-TYPE
    SYNTAX       INTEGER { noop(1), terminate(2) }
    MAX-ACCESS   read-write
    STATUS       current
    DESCRIPTION
           "Setting this object to 'terminate' is a request to
           terminate all outstanding Security Associations on this
           interface.

           When read, the value of this object is always 'noop'.
           Setting this object to 'noop' has no effect."
    ::= { t11FcSpSaIfEntry 11 }

t11FcSpSaIfOutDrops OBJECT-TYPE
    SYNTAX       Counter64
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The number of output frames that were dropped, instead
           of being transmitted on this interface, because they matched
           an active (at that time) Traffic Selector with an action of
           'Drop'.

           This counter has no discontinuities other than those
           that all Counter64's have when sysUpTime=0."
    ::= { t11FcSpSaIfEntry 12 }

t11FcSpSaIfOutBypasses        OBJECT-TYPE

    SYNTAX       Counter64
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The number of output frames that were transmitted
           unchanged by FC-SP on this interface because they matched
           an active (at that time) Traffic Selector with an action
           of 'Bypass'.

           This counter has no discontinuities other than those
           that all Counter64's have when sysUpTime=0."
    ::= { t11FcSpSaIfEntry 13 }

t11FcSpSaIfOutProcesses       OBJECT-TYPE
    SYNTAX       Counter64
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The number of output frames that were protected by FC-SP
           before being transmitted on this interface because they
           matched an active (at that time) Traffic Selector with an
           action of 'Process'.

           This counter has no discontinuities other than those
           that all Counter64's have when sysUpTime=0."
    ::= { t11FcSpSaIfEntry 14 }

t11FcSpSaIfOutUnMatcheds OBJECT-TYPE
    SYNTAX       Counter64
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The number of frames that were transmitted unchanged by
           FC-SP on this interface because they did not match any
           Traffic Selector active at that time.

           This counter has no discontinuities other than those
           that all Counter64's have when sysUpTime=0."
    ::= { t11FcSpSaIfEntry 15 }

t11FcSpSaIfInUnprotUnmtchDrops OBJECT-TYPE
    SYNTAX       Counter64
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The number of frames received on this interface that
           were dropped because they were unprotected and did not
           match any Traffic Selector active at that time.

           This counter has no discontinuities other than those
           that all Counter64's have when sysUpTime=0."
    ::= { t11FcSpSaIfEntry 16 }

t11FcSpSaIfInDetReplays OBJECT-TYPE
    SYNTAX       Counter64
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The number of times that a replay has been detected on
           a Security Association that is currently active or was
           previously active on this interface.  Note that a frame
           that is discarded because it is 'behind' the window,
           i.e., too old, is counted as a replay.

           This counter has no discontinuities other than those
           that all Counter64's have when sysUpTime=0."
    ::= { t11FcSpSaIfEntry 17 }

t11FcSpSaIfInUnprotMtchDrops OBJECT-TYPE
    SYNTAX       Counter64
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The number of times that a frame received on this
           interface was dropped because it matched with a Traffic
           Selector for a Security Association that was active at
           the time of receipt but the frame was not protected as
           negotiated for that Security Association.

           This counter has no discontinuities other than those
           that all Counter64's have when sysUpTime=0."
    ::= { t11FcSpSaIfEntry 18 }

t11FcSpSaIfInBadXforms OBJECT-TYPE
    SYNTAX       Counter64
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The number of times that a frame received on this
           interface was dropped because of a failure of one of the
           transforms negotiated for the Security Association on
           which it was received.

           This counter has no discontinuities other than those
           that all Counter64's have when sysUpTime=0."
    ::= { t11FcSpSaIfEntry 19 }

t11FcSpSaIfInGoodXforms OBJECT-TYPE
    SYNTAX       Counter64
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The number of frames received on this interface on a
           Security Association for which the transforms negotiated
           for that Security Association were successfully applied,
           and that matched a Traffic Selector for that Security
           Association.

           This counter has no discontinuities other than those
           that all Counter64's have when sysUpTime=0."
    ::= { t11FcSpSaIfEntry 20 }

t11FcSpSaIfInProtUnmtchs OBJECT-TYPE
    SYNTAX       Counter64
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The number of frames received on this interface that
           were dropped because they did not match any of the Traffic
           Selectors negotiated for the Security Association on which
           they were received, even though the Security Association's
           transforms were successfully applied.

           This counter has no discontinuities other than those
           that all Counter64's have when sysUpTime=0."
    ::= { t11FcSpSaIfEntry 21 }

--
--  Proposals to present in Security Association negotiation
--

t11FcSpSaPropTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FcSpSaPropEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A table of proposals for an FC-SP entity acting as an
           SA_Initiator to present to the SA_Responder during the
           negotiation of Security Associations.  This information
           is also used by an FC-SP entity acting as an SA_Responder
           to decide what to accept during the negotiation of
           Security Associations."
    ::= { t11FcSpSaConfig 1 }

t11FcSpSaPropEntry OBJECT-TYPE

    SYNTAX       T11FcSpSaPropEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "Each entry contains information about one proposal for
           the FC-SP entity to present, or what to accept, during
           the negotiation of Security Associations on one or more
           interfaces (identified by t11FcSpSaIfIndex) to a
           particular Fabric (identified by t11FcSpSaIfFabricIndex),
           and managed as part of the Fibre Channel management
           instance identified by fcmInstanceIndex.

           The StorageType of a row in this table is specified by
           the instance of t11FcSpSaIfStorageType that is INDEX-ed
           by the same values of fcmInstanceIndex, t11FcSpSaIfIndex
           and t11FcSpSaIfFabricIndex."
    INDEX  { fcmInstanceIndex, t11FcSpSaIfIndex,
             t11FcSpSaIfFabricIndex,
             t11FcSpSaPropIndex }
    ::= { t11FcSpSaPropTable 1 }

T11FcSpSaPropEntry ::= SEQUENCE {
    t11FcSpSaPropIndex             Unsigned32,
    t11FcSpSaPropSecurityProt      T11FcSpSecurityProtocolId,
    t11FcSpSaPropTSelListIndex     Unsigned32,
    t11FcSpSaPropTransListIndex    Unsigned32,
    t11FcSpSaPropAcceptAlgorithm   INTEGER,
    t11FcSpSaPropOutMatchSucceeds  Counter64,
    t11FcSpSaPropRowStatus         RowStatus
}

t11FcSpSaPropIndex OBJECT-TYPE
    SYNTAX       Unsigned32 (1..4294967295)
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "An index value that uniquely identifies a particular
           proposal for use on one or more interfaces to a Fabric."
    ::= { t11FcSpSaPropEntry 1 }

t11FcSpSaPropSecurityProt OBJECT-TYPE
    SYNTAX       T11FcSpSecurityProtocolId
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The Security Protocol identifier for this proposal, i.e.,
           whether the proposal is for traffic to be protected using
           ESP_Header or CT_Authentication."

    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 6.3.2.2 and table 67."
    ::= { t11FcSpSaPropEntry 2 }

t11FcSpSaPropTSelListIndex OBJECT-TYPE
    SYNTAX       Unsigned32
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "When the value of this object is non-zero, it points
           to the proposal's list of Traffic Selectors.  The value
           must be non-zero in an active row of this table.

           The identified list is represented by all rows in the
           t11FcSpSaTSelPropTable for which t11FcSpSaTSelPropListIndex
           has the same value as this object (and with corresponding
           values of t11FcSpSaIfIndex and fcmInstanceIndex)."
    ::= { t11FcSpSaPropEntry 3 }

t11FcSpSaPropTransListIndex OBJECT-TYPE
    SYNTAX       Unsigned32
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "When the value of this object is non-zero, it points to
           the proposal's list of Transforms.  The value must be
           non-zero in an active row of this table.

           The identified list is represented by all rows in the
           t11FcSpSaTransTable for which t11FcSpSaTransListIndex
           has the same value as this object (and with corresponding
           values of t11FcSpSaIfIndex and fcmInstanceIndex)."
    ::= { t11FcSpSaPropEntry 4 }

Okay bestie, the AcceptAlgorithm object is where the responder picks how to answer the initiator's traffic selectors ๐Ÿฆ‹

t11FcSpSaPropAcceptAlgorithm OBJECT-TYPE
    SYNTAX       INTEGER {
                     intersection(1),
                     union(2),
                     other(3)
                 }
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The algorithm by which an SA_Responder in an SA negotiation
           decides on which Traffic Selectors to specify in a response
           to an IKE_Create_Child_SA request.  This algorithm is used
           when the Traffic Selectors specified by an SA_Initiator in
           an IKE_Create_Child_SA request overlap with this proposal's
           list of Traffic Selectors:

           intersection(1) - the SA_Responder specifies the largest
                         subset of what the SA_Initiator proposed,
                         which is also a subset of this proposal's
                         Traffic Selectors.

           union(2)    - the SA_Responder specifies the smallest
                         superset of what the SA_Initiator proposed,
                         which is also a superset of this proposal's
                         Traffic Selectors.

           other(3)    - the SA_Responder uses some other algorithm.
           "
    ::= { t11FcSpSaPropEntry 5 }

t11FcSpSaPropOutMatchSucceeds OBJECT-TYPE
    SYNTAX       Counter64
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The number of egress frames that have matched a Traffic
           Selector that was negotiated to select traffic for an
           SA based on this proposal being accepted.

           This counter has no discontinuities other than those
           that all Counter64's have when sysUpTime=0."
    ::= { t11FcSpSaPropEntry 6 }

t11FcSpSaPropRowStatus OBJECT-TYPE
    SYNTAX       RowStatus
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The status of a row.  Values of object instances
           within an active row can be modified at any time.

           The status cannot be set to 'active' unless and
           until the instances of t11FcSpSaPropTSelListIndex
           and t11FcSpSaPropTransListIndex in the row have
           been set to point to active rows in the
           t11FcSpSaTSelPropTable and t11FcSpSaTransTable
           tables, respectively.  A row in this table is
           deleted if the active rows it points to are deleted."
    ::= { t11FcSpSaPropEntry 7 }

Next up is the Traffic Selector Proposals bit, and this is where the good stuff lives โœจ The table is where you define which frames get matched, using source and destination IDs, R_CTL values and types ๐Ÿ’…

--
--  Traffic Selector Proposals
--

t11FcSpSaTSelPropTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FcSpSaTSelPropEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A table containing information about Traffic Selectors
           to propose and/or to accept during the negotiation of
           Security Associations."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 6.4.5.
            - Use of IKEv2 in FC-SP, RFC 4595,
              July 2006, section 4.4."
    ::= { t11FcSpSaConfig 2 }

t11FcSpSaTSelPropEntry OBJECT-TYPE
    SYNTAX       T11FcSpSaTSelPropEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "Each entry contains information about one Traffic
           Selector within a list of Traffic Selectors to propose,
           or for use in determining what to accept during Security
           Association negotiation.

           One such list is configured for use on a Fabric by
           configuring the list's value of t11FcSpSaTSelPropListIndex
           as the value of an instance of t11FcSpSaPropTSelListIndex,
           for corresponding values of t11FcSpSaIfIndex and
           fcmInstanceIndex.  Further, the proposing and accepting
           of Traffic Selectors is only done as a part of a proposal
           specified by a row of the t11FcSpSaPropTable, i.e.,
           in combination with the proposing and accepting of security
           transforms as specified by the combination of
           t11FcSpSaPropTSelListIndex and t11FcSpSaPropTransListIndex
           in one row of the t11FcSpSaPropTable.

           The StorageType of a row in this table is specified by
           the instance of t11FcSpSaTSelPropStorageType in that row."
    INDEX  { fcmInstanceIndex, t11FcSpSaIfIndex,
             t11FcSpSaTSelPropListIndex, t11FcSpSaTSelPropPrecedence }
    ::= { t11FcSpSaTSelPropTable 1 }

T11FcSpSaTSelPropEntry ::= SEQUENCE {
    t11FcSpSaTSelPropListIndex    Unsigned32,
    t11FcSpSaTSelPropPrecedence   T11FcSpPrecedence,
    t11FcSpSaTSelPropDirection    T11FcSaDirection,
    t11FcSpSaTSelPropStartSrcAddr FcAddressIdOrZero,
    t11FcSpSaTSelPropEndSrcAddr   FcAddressIdOrZero,
    t11FcSpSaTSelPropStartDstAddr FcAddressIdOrZero,
    t11FcSpSaTSelPropEndDstAddr   FcAddressIdOrZero,
    t11FcSpSaTSelPropStartRCtl    T11FcRoutingControl,
    t11FcSpSaTSelPropEndRCtl      T11FcRoutingControl,
    t11FcSpSaTSelPropStartType    T11FcSpType,
    t11FcSpSaTSelPropEndType      T11FcSpType,
    t11FcSpSaTSelPropStorageType  StorageType,
    t11FcSpSaTSelPropRowStatus    RowStatus
}

t11FcSpSaTSelPropListIndex OBJECT-TYPE
    SYNTAX       Unsigned32 (1..4294967295)
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "An index value that identifies a particular list of
           Traffic Selectors."
    ::= { t11FcSpSaTSelPropEntry 1 }

t11FcSpSaTSelPropPrecedence OBJECT-TYPE
    SYNTAX       T11FcSpPrecedence
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "The precedence of this Traffic Selector.  Each
           Traffic Selector within a particular list of
           Traffic Selectors must have a different precedence.

           If an egress frame matches multiple Traffic Selectors,
           it should be transmitted on the SA associated with the
           Traffic Selector having the numerically smallest
           precedence value."
    ::= { t11FcSpSaTSelPropEntry 2 }

t11FcSpSaTSelPropDirection OBJECT-TYPE
    SYNTAX       T11FcSaDirection
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "An indication of whether this Traffic Selector is
           to be proposed for ingress or egress traffic."
    DEFVAL   { egress }
    ::= { t11FcSpSaTSelPropEntry 3 }

t11FcSpSaTSelPropStartSrcAddr OBJECT-TYPE
    SYNTAX       FcAddressIdOrZero (SIZE (3))
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The numerically smallest 24-bit value of a source address
           (S_ID) of a frame that will match with this Traffic
           Selector."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 6.4.5."
    DEFVAL   { '000000'h }
    ::= { t11FcSpSaTSelPropEntry 4 }

t11FcSpSaTSelPropEndSrcAddr  OBJECT-TYPE
    SYNTAX       FcAddressIdOrZero (SIZE (3))
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The numerically largest 24-bit value of a source address
           (S_ID) of a frame that will match with this Traffic
           Selector."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 6.4.5."
    DEFVAL   { 'FFFFFF'h }
    ::= { t11FcSpSaTSelPropEntry 5 }

t11FcSpSaTSelPropStartDstAddr OBJECT-TYPE
    SYNTAX       FcAddressIdOrZero (SIZE (3))
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The numerically smallest 24-bit value of a destination
           address (D_ID) of a frame that will match with this
           Traffic Selector."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 6.4.5."
    DEFVAL   { '000000'h }
    ::= { t11FcSpSaTSelPropEntry 6 }

t11FcSpSaTSelPropEndDstAddr OBJECT-TYPE

    SYNTAX       FcAddressIdOrZero (SIZE (3))
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The numerically largest 24-bit value of a destination
           address (D_ID) of a frame that will match with this
           Traffic Selector."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 6.4.5."
    DEFVAL   { 'FFFFFF'h }
    ::= { t11FcSpSaTSelPropEntry 7 }

t11FcSpSaTSelPropStartRCtl OBJECT-TYPE
    SYNTAX       T11FcRoutingControl
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The numerically smallest 8-bit value contained within a
           Routing Control (R_CTL) field of a frame that will match
           with this Traffic Selector."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 6.4.5."
    DEFVAL   { '00'h }
    ::= { t11FcSpSaTSelPropEntry 8 }

t11FcSpSaTSelPropEndRCtl OBJECT-TYPE
    SYNTAX       T11FcRoutingControl
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The numerically largest 8-bit value contained within a
           Routing Control (R_CTL) field of a frame that will match
           with this Traffic Selector."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 6.4.5."
    DEFVAL   { 'FF'h }
    ::= { t11FcSpSaTSelPropEntry 9 }

t11FcSpSaTSelPropStartType OBJECT-TYPE
    SYNTAX       T11FcSpType
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The numerically smallest of a range of possible 'type'
           values of frames that will match with this Traffic
           Selector."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 6.4.5."
    DEFVAL   { '0000'h }
    ::= { t11FcSpSaTSelPropEntry 10 }

t11FcSpSaTSelPropEndType OBJECT-TYPE
    SYNTAX       T11FcSpType
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The numerically largest of a range of possible 'type'
           values of frames that will match with this Traffic
           Selector."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 6.4.5."
    DEFVAL   { 'FFFF'h }
    ::= { t11FcSpSaTSelPropEntry 11 }

t11FcSpSaTSelPropStorageType OBJECT-TYPE
    SYNTAX       StorageType
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "This object specifies the memory realization of
           the information in this row.

           Even if an instance of this object has the value
           'permanent(4)', none of the information in its row
           needs to be writable."
    ::= { t11FcSpSaTSelPropEntry 12 }

t11FcSpSaTSelPropRowStatus OBJECT-TYPE
    SYNTAX       RowStatus
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The status of this row.  Values of object instances
           within the row can be modified at any time."
    ::= { t11FcSpSaTSelPropEntry 13 }

Last bit of this part: the Transform Proposals section kicks off with the transform table, and the rest of it continues next time ๐ŸŒธ

--
--  Transform Proposals
--

t11FcSpSaTransTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FcSpSaTransEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A table containing information about security transforms
           to propose, to accept and/or agreed upon during the
           negotiation of Security Associations."
    ::= { t11FcSpSaConfig 3 }

okay bestie, the transform table is where the actual security recipes live ๐ŸŽ€ each row is one proposal, and the whole table only comes into play when a proposal from a Traffic Selector and transform list pair gets used ๐Ÿ’…

t11FcSpSaTransEntry OBJECT-TYPE
    SYNTAX       T11FcSpSaTransEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "Each entry contains information about one proposal within a
           list of security transforms to be proposed, to be accepted,
           or already agreed upon, for use on a pair of Security
           Associations on one or more interfaces (identified by
           t11FcSpSaIfIndex), managed as part of the Fibre Channel
           management instance identified by fcmInstanceIndex.

           One such list is configured to be proposed or accepted for
           use on a Fabric, by having the list's value of
           t11FcSpSaTransListIndex be the value of an instance of
           t11FcSpSaPropTransListIndex for that Fabric.  Further,
           the proposing and accepting of security transforms is only
           done as a part of a proposal specified by a row of the
           t11FcSpSaPropTable, i.e., in combination with the proposing
           and accepting of Traffic Selectors as specified by the
           combination of t11FcSpSaPropTSelListIndex and
           t11FcSpSaPropTransListIndex in one row of the
           t11FcSpSaPropTable.

           The security (encryption and integrity) transform in use on
           an SA pair is indicated by having the pair's values of
           t11FcSpSaPairTransListIndex and t11FcSpSaPairTransIndex
           contain the values of t11FcSpSaTransListIndex and
           t11FcSpSaTransIndex for the transform's row in this table.

           The StorageType of a row in this table is specified by
           the instance of t11FcSpSaTransStorageType in that row."
    INDEX  { fcmInstanceIndex, t11FcSpSaIfIndex,
             t11FcSpSaTransListIndex, t11FcSpSaTransIndex }

    ::= { t11FcSpSaTransTable 1 }

T11FcSpSaTransEntry ::= SEQUENCE {
    t11FcSpSaTransListIndex      Unsigned32,
    t11FcSpSaTransIndex          Unsigned32,
    t11FcSpSaTransSecurityProt   T11FcSpSecurityProtocolId,
    t11FcSpSaTransEncryptAlg     AutonomousType,
    t11FcSpSaTransEncryptKeyLen  Unsigned32,
    t11FcSpSaTransIntegrityAlg   AutonomousType,
    t11FcSpSaTransStorageType    StorageType,
    t11FcSpSaTransRowStatus      RowStatus
}

Each row is one transform in a list, and it's indexed by the Fibre Channel management instance, the interface, the list index and the transform index ๐Ÿฆ‹ A transform list gets attached to a Fabric through the proposal table, and an SA pair points back to a transform by using its list index and transform index โœจ

t11FcSpSaTransListIndex OBJECT-TYPE
    SYNTAX       Unsigned32 (1..4294967295)
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "An index value that uniquely identifies a particular
           list of security transforms to be proposed, to be accepted,
           or already agreed upon."
    ::= { t11FcSpSaTransEntry 1 }

t11FcSpSaTransIndex OBJECT-TYPE
    SYNTAX       Unsigned32 (1..4294967295)
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "An index value that uniquely identifies one security
           transform within a list identified by
           t11FcSpSaTransListIndex."
    ::= { t11FcSpSaTransEntry 2 }

t11FcSpSaTransSecurityProt OBJECT-TYPE
    SYNTAX       T11FcSpSecurityProtocolId
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The Security Protocol identifier that indicates
           whether this transform is for traffic to be protected
           using ESP_Header or using CT_Authentication."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 6.3.2.2 and table 67."
    ::= { t11FcSpSaTransEntry 3 }

t11FcSpSaTransEncryptAlg OBJECT-TYPE

    SYNTAX       AutonomousType
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The Encryption Algorithm for this transform."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 6.3.2.3 and tables 69 & 70."
    ::= { t11FcSpSaTransEntry 4 }

t11FcSpSaTransEncryptKeyLen OBJECT-TYPE
    SYNTAX       Unsigned32
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The key length in bits to be used with an encryption
           algorithm that has a variable length key.  This object
           is ignored when the corresponding instance of
           t11FcSpSaTransEncryptAlg specifies an algorithm with a
           fixed length key."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 6.3.2.5 and table 77."
    ::= { t11FcSpSaTransEntry 5 }

t11FcSpSaTransIntegrityAlg OBJECT-TYPE
    SYNTAX       AutonomousType
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The Integrity Algorithm for this transform."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, section 6.3.2.3 and tables 69 & 72."
    ::= { t11FcSpSaTransEntry 6 }

t11FcSpSaTransStorageType OBJECT-TYPE
    SYNTAX       StorageType
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "This object specifies the memory realization of
           the information in this row.

           Even if an instance of this object has the value
           'permanent(4)', none of the information in its row
           needs to be writable."
    ::= { t11FcSpSaTransEntry 7 }

t11FcSpSaTransRowStatus OBJECT-TYPE
    SYNTAX       RowStatus
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The status of this row.

           When an instance of t11FcSpSaPairTransListIndex points to
           a row in this table, values of object instances in the row
           cannot be modified nor can the row be deleted.  Otherwise,
           a row can be modified or deleted at any time."
    ::= { t11FcSpSaTransEntry 8 }

The objects in this row are the protocol ID (ESP_Header or CT_Authentication), the encryption algorithm, the key length, and the integrity algorithm ๐Ÿ”ฅ The key length only matters for variable length keys, so it gets ignored for fixed ones, which is very on brand for it ๐Ÿ™ˆ The row status is the lock: once an SA pair is pointing at a row, that row is frozen and can't be edited or deleted ๐Ÿ”’


-- -- Traffic Selectors for Drop & Bypass --

t11FcSpSaTSelDrByTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FcSpSaTSelDrByEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A table containing Traffic Selectors to select which
           traffic is to be dropped or is to bypass further
           security processing."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, sections 4.6, 4.7, and 6.4.5.
            - Use of IKEv2 in FC-SP, RFC 4595,
              July 2006, section 4.4."
    ::= { t11FcSpSaConfig 4 }

t11FcSpSaTSelDrByEntry OBJECT-TYPE
    SYNTAX       T11FcSpSaTSelDrByEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "Each entry represents one Traffic Selector having the
           security action of 'drop' or 'bypass', which is applied
           based on a precedence value, either to ingress traffic
           that is unprotected by FC-SP, or to all egress
           traffic on one or more interfaces (identified by
           t11FcSpSaIfIndex) to a particular Fabric (identified
           by t11FcSpSaIfFabricIndex), and managed as part of the Fibre
           Channel management instance identified by fcmInstanceIndex.

           The StorageType of a row in this table is specified by
           the instance of t11FcSpSaIfStorageType that is INDEX-ed
           by the same values of fcmInstanceIndex, t11FcSpSaIfIndex
           and t11FcSpSaIfFabricIndex."
    INDEX  { fcmInstanceIndex, t11FcSpSaIfIndex, t11FcSpSaIfFabricIndex,
             t11FcSpSaTSelDrByDirection, t11FcSpSaTSelDrByPrecedence }
    ::= { t11FcSpSaTSelDrByTable 1 }

T11FcSpSaTSelDrByEntry ::= SEQUENCE {
    t11FcSpSaTSelDrByDirection     T11FcSaDirection,
    t11FcSpSaTSelDrByPrecedence    T11FcSpPrecedence,
    t11FcSpSaTSelDrByAction        INTEGER,
    t11FcSpSaTSelDrByStartSrcAddr  FcAddressIdOrZero,
    t11FcSpSaTSelDrByEndSrcAddr    FcAddressIdOrZero,
    t11FcSpSaTSelDrByStartDstAddr  FcAddressIdOrZero,
    t11FcSpSaTSelDrByEndDstAddr    FcAddressIdOrZero,
    t11FcSpSaTSelDrByStartRCtl     T11FcRoutingControl,
    t11FcSpSaTSelDrByEndRCtl       T11FcRoutingControl,
    t11FcSpSaTSelDrByStartType     T11FcSpType,
    t11FcSpSaTSelDrByEndType       T11FcSpType,
    t11FcSpSaTSelDrByMatches       Counter64,
    t11FcSpSaTSelDrByRowStatus     RowStatus
}

t11FcSpSaTSelDrByDirection OBJECT-TYPE
    SYNTAX       T11FcSaDirection
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "An indication of whether this Traffic Selector is
           for ingress or egress traffic."
    ::= { t11FcSpSaTSelDrByEntry 1 }

t11FcSpSaTSelDrByPrecedence OBJECT-TYPE
    SYNTAX       T11FcSpPrecedence
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "The precedence of this Traffic Selector.  If and when a
           frame is compared against multiple Traffic Selectors, and
           multiple of them have a match with the frame, the security
           action to be taken for the frame is that specified for the
           matching Traffic Selector having the numerically smallest
           precedence value."
    ::= { t11FcSpSaTSelDrByEntry 2 }

t11FcSpSaTSelDrByAction OBJECT-TYPE
    SYNTAX       INTEGER { drop(1), bypass(2) }
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The security action to be taken for a frame that
           matches this Traffic Selector."
    DEFVAL   { drop }
    ::= { t11FcSpSaTSelDrByEntry 3 }

t11FcSpSaTSelDrByStartSrcAddr OBJECT-TYPE
    SYNTAX       FcAddressIdOrZero (SIZE (3))
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The numerically smallest 24-bit value of a source address
           (S_ID) of a frame that will match with this Traffic
           Selector."
    DEFVAL   { '000000'h }
    ::= { t11FcSpSaTSelDrByEntry 4 }

t11FcSpSaTSelDrByEndSrcAddr  OBJECT-TYPE
    SYNTAX       FcAddressIdOrZero (SIZE (3))
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The numerically largest 24-bit value of a source address
           (S_ID) of a frame that will match with this Traffic
           Selector."
    DEFVAL   { 'FFFFFF'h }
    ::= { t11FcSpSaTSelDrByEntry 5 }

t11FcSpSaTSelDrByStartDstAddr OBJECT-TYPE
    SYNTAX       FcAddressIdOrZero (SIZE (3))
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The numerically smallest 24-bit value of a destination
           address (D_ID) of a frame that will match with this
           Traffic Selector."
    DEFVAL   { '000000'h }
    ::= { t11FcSpSaTSelDrByEntry 6 }

t11FcSpSaTSelDrByEndDstAddr OBJECT-TYPE
    SYNTAX       FcAddressIdOrZero (SIZE (3))
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION

           "The numerically largest 24-bit value of a destination
           address (D_ID) of a frame that will match with this
           Traffic Selector."
    DEFVAL   { 'FFFFFF'h }
    ::= { t11FcSpSaTSelDrByEntry 7 }

t11FcSpSaTSelDrByStartRCtl OBJECT-TYPE
    SYNTAX       T11FcRoutingControl
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The numerically smallest 8-bit value contained within a
           Routing Control (R_CTL) field of a frame that will match
           with this Traffic Selector."
    DEFVAL   { '00'h }
    ::= { t11FcSpSaTSelDrByEntry 8 }

t11FcSpSaTSelDrByEndRCtl OBJECT-TYPE
    SYNTAX       T11FcRoutingControl
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The numerically largest 8-bit value contained within a
           Routing Control (R_CTL) field of a frame that will match
           with this Traffic Selector."
    DEFVAL   { 'FF'h }
    ::= { t11FcSpSaTSelDrByEntry 9 }

Okay bestie, the Traffic Selector drop rules are giving us the first set of type ranges โœจ these define which frame types a selector matches, from the smallest value up to the largest ๐Ÿ’…

t11FcSpSaTSelDrByStartType OBJECT-TYPE
    SYNTAX       T11FcSpType
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The numerically smallest of a range of possible 'type'
           values of frames that will match with this Traffic
           Selector."
    DEFVAL   { '0000'h }
    ::= { t11FcSpSaTSelDrByEntry 10 }

t11FcSpSaTSelDrByEndType OBJECT-TYPE
    SYNTAX       T11FcSpType
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The numerically largest of a range of possible 'type'
           values of frames that will match with this Traffic
           Selector."
    DEFVAL   { 'FFFF'h }
    ::= { t11FcSpSaTSelDrByEntry 11 }

t11FcSpSaTSelDrByMatches OBJECT-TYPE
    SYNTAX       Counter64
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The number of frames for which the action specified by
           the corresponding instance of t11FcSpSaTSelDrByAction was
           taken because of a match with this Traffic Selector.

           This counter has no discontinuities other than those
           that all Counter64's have when sysUpTime=0."
    ::= { t11FcSpSaTSelDrByEntry 12 }

t11FcSpSaTSelDrByRowStatus OBJECT-TYPE
    SYNTAX       RowStatus
    MAX-ACCESS   read-create
    STATUS       current
    DESCRIPTION
           "The status of this row.  Values of object instances
           within the row can be modified at any time."
    ::= { t11FcSpSaTSelDrByEntry 13 }

--
--  Active Security Associations
--

t11FcSpSaPairTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FcSpSaPairEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A table containing information about active
           bidirectional pairs of Security Associations."
    ::= { t11FcSpSaActive 1 }

t11FcSpSaPairEntry OBJECT-TYPE
    SYNTAX       T11FcSpSaPairEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "Each entry contains information about one active
           bidirectional pair of Security Associations on an
           interface to a particular Fabric (identified by
           t11FcSpSaIfFabricIndex), managed as part of the Fibre
           Channel management instance identified by
           fcmInstanceIndex."

    INDEX  { fcmInstanceIndex, t11FcSpSaPairIfIndex,
             t11FcSpSaIfFabricIndex, t11FcSpSaPairInboundSpi }
    ::= { t11FcSpSaPairTable 1 }

T11FcSpSaPairEntry ::= SEQUENCE {
    t11FcSpSaPairIfIndex           InterfaceIndex,
    t11FcSpSaPairInboundSpi        T11FcSpiIndex,
    t11FcSpSaPairSecurityProt      T11FcSpSecurityProtocolId,
    t11FcSpSaPairTransListIndex    Unsigned32,
    t11FcSpSaPairTransIndex        Unsigned32,
    t11FcSpSaPairLifetimeLeft      T11FcSpLifetimeLeft,
    t11FcSpSaPairLifetimeLeftUnits T11FcSpLifetimeLeftUnits,
    t11FcSpSaPairTerminate         INTEGER,
    t11FcSpSaPairInProtUnMatchs    Counter64,
    t11FcSpSaPairInDetReplays      Counter64,
    t11FcSpSaPairInBadXforms       Counter64,
    t11FcSpSaPairInGoodXforms      Counter64
}

t11FcSpSaPairIfIndex OBJECT-TYPE
    SYNTAX       InterfaceIndex
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "This object identifies the interface to the particular
           Fabric on which this SA pair is active."
    ::= { t11FcSpSaPairEntry 1 }

t11FcSpSaPairInboundSpi OBJECT-TYPE
    SYNTAX       T11FcSpiIndex
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "The SPI value that is used to indicate that an incoming
           frame was received on the ingress SA of this SA pair."
    ::= { t11FcSpSaPairEntry 2 }

t11FcSpSaPairSecurityProt OBJECT-TYPE
    SYNTAX       T11FcSpSecurityProtocolId
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The object indicates whether this SA uses ESP_Header to
           protect FC-2 frames, or CT_Authentication to protect Common
           Transport Information Units (CT_IUs)."
    ::= { t11FcSpSaPairEntry 3 }

t11FcSpSaPairTransListIndex OBJECT-TYPE

    SYNTAX       Unsigned32 (1..4294967295)
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The combination of this value and the value of the
           corresponding instance of t11FcSpSaPairTransIndex
           identify the row in the t11FcSpSaTransTable that
           contains the transforms that are in use on this SA pair."
    ::= { t11FcSpSaPairEntry 4 }

t11FcSpSaPairTransIndex OBJECT-TYPE
    SYNTAX       Unsigned32 (1..4294967295)
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The combination of this value and the value of the
           corresponding instance of t11FcSpSaPairTransListIndex
           identify the row in the t11FcSpSaTransTable that
           contains the transforms that are in use on this SA pair."
    ::= { t11FcSpSaPairEntry 5 }

t11FcSpSaPairLifetimeLeft OBJECT-TYPE
    SYNTAX       T11FcSpLifetimeLeft
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The remaining lifetime of this SA pair, given in the
           units specified by the value of the corresponding
           instance of t11FcSpSaPairLifetimeLeft."
    ::= { t11FcSpSaPairEntry 6 }

t11FcSpSaPairLifetimeLeftUnits OBJECT-TYPE
    SYNTAX       T11FcSpLifetimeLeftUnits
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The units in which the value of the corresponding
           instance of t11FcSpSaPairLifetimeLeft specifies the
           remaining lifetime of this SA pair."
    ::= { t11FcSpSaPairEntry 7 }

t11FcSpSaPairTerminate OBJECT-TYPE
    SYNTAX       INTEGER { noop(1), terminate(2) }
    MAX-ACCESS   read-write
    STATUS       current
    DESCRIPTION
           "Setting this object to 'terminate' is a request
           to terminate this pair of Security Associations.

           When read, the value of this object is always 'noop'.
           Setting this object to 'noop' has no effect."
    ::= { t11FcSpSaPairEntry 8 }

t11FcSpSaPairInProtUnMatchs OBJECT-TYPE
    SYNTAX       Counter64
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The number of frames received on this SA for which the
           SA's transforms were successfully applied to the frame,
           but the frame was still dropped because it did not match
           any of the SA's ingress Traffic Selectors.

           This counter has no discontinuities other than those
           that all Counter64's have when sysUpTime=0."
    ::= { t11FcSpSaPairEntry 9 }

t11FcSpSaPairInDetReplays OBJECT-TYPE
    SYNTAX       Counter64
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The number of times that a replay has been detected on
           this Security Association.  Note that a frame that is
           discarded because it is 'behind' the window, i.e., too old,
           is counted as a replay.

           This counter has no discontinuities other than those
           that all Counter64's have when sysUpTime=0."
    ::= { t11FcSpSaPairEntry 10 }

t11FcSpSaPairInBadXforms OBJECT-TYPE
    SYNTAX       Counter64
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The number of times that a received frame was dropped
           because one of the transforms negotiated for this Security
           Association failed.

           This counter has no discontinuities other than those
           that all Counter64's have when sysUpTime=0."
    ::= { t11FcSpSaPairEntry 11 }

t11FcSpSaPairInGoodXforms OBJECT-TYPE
    SYNTAX       Counter64
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The number of received frames for which the transforms
           negotiated for this Security Association, were
           successfully applied.

           This counter has no discontinuities other than those
           that all Counter64's have when sysUpTime=0."
    ::= { t11FcSpSaPairEntry 12 }

--
--  Negotiated Ingress Traffic Selectors
--

t11FcSpSaTSelNegInTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FcSpSaTSelNegInEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A table containing information about ingress Traffic
           Selectors that are in use on active Security
           Associations."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, sections 4.6, 4.7, and 6.4.5.
            - Use of IKEv2 in FC-SP, RFC 4595,
              July 2006, section 4.4."
    ::= { t11FcSpSaActive 2 }

t11FcSpSaTSelNegInEntry OBJECT-TYPE
    SYNTAX       T11FcSpSaTSelNegInEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "Each entry contains information about one ingress Traffic
           Selector that is in use on an active Security Association
           on an interface (identified by t11FcSpSaPairIfIndex) to
           a particular Fabric (identified by t11FcSpSaIfFabricIndex),
           managed as part of the Fibre Channel management instance
           identified by fcmInstanceIndex."
    INDEX  { fcmInstanceIndex, t11FcSpSaPairIfIndex,
             t11FcSpSaIfFabricIndex, t11FcSpSaTSelNegInIndex }
    ::= { t11FcSpSaTSelNegInTable 1 }

T11FcSpSaTSelNegInEntry ::= SEQUENCE {
    t11FcSpSaTSelNegInIndex         Unsigned32,
    t11FcSpSaTSelNegInInboundSpi    T11FcSpiIndex,
    t11FcSpSaTSelNegInStartSrcAddr  FcAddressIdOrZero,
    t11FcSpSaTSelNegInEndSrcAddr    FcAddressIdOrZero,
    t11FcSpSaTSelNegInStartDstAddr  FcAddressIdOrZero,
    t11FcSpSaTSelNegInEndDstAddr    FcAddressIdOrZero,
    t11FcSpSaTSelNegInStartRCtl     T11FcRoutingControl,
    t11FcSpSaTSelNegInEndRCtl       T11FcRoutingControl,
    t11FcSpSaTSelNegInStartType     T11FcSpType,
    t11FcSpSaTSelNegInEndType       T11FcSpType,
    t11FcSpSaTSelNegInUnpMtchDrops  Counter64
}

t11FcSpSaTSelNegInIndex OBJECT-TYPE
    SYNTAX       Unsigned32 (1..4294967295)
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "An index value to distinguish an ingress Traffic Selector
           from all others currently in use by Security Associations
           on the same interface to a particular Fabric."
    ::= { t11FcSpSaTSelNegInEntry 1 }

t11FcSpSaTSelNegInInboundSpi OBJECT-TYPE
    SYNTAX       T11FcSpiIndex
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The SPI of the ingress SA on which this Traffic Selector
           is in use.

           This value can be used to find the SA pair's row in the
           t11FcSpSaPairTable."
    ::= { t11FcSpSaTSelNegInEntry 2 }

t11FcSpSaTSelNegInStartSrcAddr OBJECT-TYPE
    SYNTAX       FcAddressIdOrZero (SIZE (3))
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The numerically smallest 24-bit value of a source address
           (S_ID) of a frame that will match with this Traffic
           Selector."
    ::= { t11FcSpSaTSelNegInEntry 3 }

t11FcSpSaTSelNegInEndSrcAddr  OBJECT-TYPE
    SYNTAX       FcAddressIdOrZero (SIZE (3))
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION

           "The numerically largest 24-bit value of a source address
           (S_ID) of a frame that will match with this Traffic
           Selector."
    ::= { t11FcSpSaTSelNegInEntry 4 }

t11FcSpSaTSelNegInStartDstAddr OBJECT-TYPE
    SYNTAX       FcAddressIdOrZero (SIZE (3))
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The numerically smallest 24-bit value of a destination
           address (D_ID) of a frame that will match with this
           Traffic Selector."
    ::= { t11FcSpSaTSelNegInEntry 5 }

okay bestie, the ingress selector ranges keep going and the egress ones are literally the main character now ๐Ÿ’…โœจ

t11FcSpSaTSelNegInEndDstAddr OBJECT-TYPE
    SYNTAX       FcAddressIdOrZero (SIZE (3))
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The numerically largest 24-bit value of a destination
           address (D_ID) of a frame that will match with this
           Traffic Selector."
    ::= { t11FcSpSaTSelNegInEntry 6 }

t11FcSpSaTSelNegInStartRCtl OBJECT-TYPE
    SYNTAX       T11FcRoutingControl
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The numerically smallest 8-bit value contained within a
           Routing Control (R_CTL) field of a frame that will match
           with this Traffic Selector."
    ::= { t11FcSpSaTSelNegInEntry 7 }

t11FcSpSaTSelNegInEndRCtl OBJECT-TYPE
    SYNTAX       T11FcRoutingControl
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The numerically largest 8-bit value contained within a
           Routing Control (R_CTL) field of a frame that will match
           with this Traffic Selector."
    ::= { t11FcSpSaTSelNegInEntry 8 }

t11FcSpSaTSelNegInStartType OBJECT-TYPE
    SYNTAX       T11FcSpType
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The numerically smallest of a range of possible 'type'
           values of frames that will match with this Traffic
           Selector."
    ::= { t11FcSpSaTSelNegInEntry 9 }

t11FcSpSaTSelNegInEndType OBJECT-TYPE
    SYNTAX       T11FcSpType
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The numerically largest of a range of possible 'type'
           values of frames that will match with this Traffic
           Selector."
    ::= { t11FcSpSaTSelNegInEntry 10 }

t11FcSpSaTSelNegInUnpMtchDrops OBJECT-TYPE
    SYNTAX       Counter64
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The number of times that a received frame was dropped
           because it matched with this Traffic Selector but the
           frame was not protected as negotiated for the Security
           Association identified by t11FcSpSaTSelNegInInboundSpi.

           This counter has no discontinuities other than those
           that all Counter64's have when sysUpTime=0."
    ::= { t11FcSpSaTSelNegInEntry 11 }

--
--  Negotiated Egress Traffic Selectors
--

t11FcSpSaTSelNegOutTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FcSpSaTSelNegOutEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A table containing information about egress Traffic
           Selectors that are in use on active Security
           Associations."
    REFERENCE
           "- ANSI INCITS 426-2007, T11/Project 1570-D,
              Fibre Channel - Security Protocols (FC-SP),
              February 2007, sections 4.6, 4.7, and 6.4.5.
            - Use of IKEv2 in FC-SP, RFC 4595,

              July 2006, section 4.4."
    ::= { t11FcSpSaActive 3 }

t11FcSpSaTSelNegOutEntry OBJECT-TYPE
    SYNTAX       T11FcSpSaTSelNegOutEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "Each entry contains information about one egress Traffic
           Selector that is in use on an active Security Association
           on an interface (identified by t11FcSpSaPairIfIndex) to
           a particular Fabric (identified by t11FcSpSaIfFabricIndex),
           managed as part of the Fibre Channel management instance
           identified by fcmInstanceIndex."
    INDEX  { fcmInstanceIndex, t11FcSpSaPairIfIndex,
             t11FcSpSaIfFabricIndex, t11FcSpSaTSelNegOutPrecedence }
    ::= { t11FcSpSaTSelNegOutTable 1 }

T11FcSpSaTSelNegOutEntry ::= SEQUENCE {
    t11FcSpSaTSelNegOutPrecedence     T11FcSpPrecedence,
    t11FcSpSaTSelNegOutInboundSpi     T11FcSpiIndex,
    t11FcSpSaTSelNegOutStartSrcAddr   FcAddressIdOrZero,
    t11FcSpSaTSelNegOutEndSrcAddr     FcAddressIdOrZero,
    t11FcSpSaTSelNegOutStartDstAddr   FcAddressIdOrZero,
    t11FcSpSaTSelNegOutEndDstAddr     FcAddressIdOrZero,
    t11FcSpSaTSelNegOutStartRCtl      T11FcRoutingControl,
    t11FcSpSaTSelNegOutEndRCtl        T11FcRoutingControl,
    t11FcSpSaTSelNegOutStartType      T11FcSpType,
    t11FcSpSaTSelNegOutEndType        T11FcSpType
}

t11FcSpSaTSelNegOutPrecedence OBJECT-TYPE
    SYNTAX       T11FcSpPrecedence
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "The precedence of this Traffic Selector.  If and when a
           frame is compared against multiple Traffic Selectors, and
           multiple of them have a match with the frame, the security
           action to be taken for the frame is that specified for the
           matching Traffic Selector having the numerically smallest
           precedence value."
    ::= { t11FcSpSaTSelNegOutEntry 1 }

t11FcSpSaTSelNegOutInboundSpi OBJECT-TYPE
    SYNTAX       T11FcSpiIndex
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The SPI of the ingress SA of the SA pair for which this
           Traffic Selector is in use on the egress SA.

           This value can be used to find the SA pair's row in the
           t11FcSpSaPairTable."
    ::= { t11FcSpSaTSelNegOutEntry 2 }

t11FcSpSaTSelNegOutStartSrcAddr OBJECT-TYPE
    SYNTAX       FcAddressIdOrZero (SIZE (3))
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The numerically smallest 24-bit value of a source address
           (S_ID) of a frame that will match with this Traffic
           Selector."
    ::= { t11FcSpSaTSelNegOutEntry 3 }

t11FcSpSaTSelNegOutEndSrcAddr  OBJECT-TYPE
    SYNTAX       FcAddressIdOrZero (SIZE (3))
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The numerically largest 24-bit value of a source address
           (S_ID) of a frame that will match with this Traffic
           Selector."
    ::= { t11FcSpSaTSelNegOutEntry 4 }

t11FcSpSaTSelNegOutStartDstAddr OBJECT-TYPE
    SYNTAX       FcAddressIdOrZero (SIZE (3))
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The numerically smallest 24-bit value of a destination
           address (D_ID) of a frame that will match with this
           Traffic Selector."
    ::= { t11FcSpSaTSelNegOutEntry 5 }

t11FcSpSaTSelNegOutEndDstAddr OBJECT-TYPE
    SYNTAX       FcAddressIdOrZero (SIZE (3))
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The numerically largest 24-bit value of a destination
           address (D_ID) of a frame that will match with this
           Traffic Selector."
    ::= { t11FcSpSaTSelNegOutEntry 6 }

t11FcSpSaTSelNegOutStartRCtl OBJECT-TYPE
    SYNTAX       T11FcRoutingControl
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The numerically smallest 8-bit value contained within a
           Routing Control (R_CTL) field of a frame that will match
           with this Traffic Selector."
    ::= { t11FcSpSaTSelNegOutEntry 7 }

t11FcSpSaTSelNegOutEndRCtl OBJECT-TYPE
    SYNTAX       T11FcRoutingControl
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The numerically largest 8-bit value contained within a
           Routing Control (R_CTL) field of a frame that will match
           with this Traffic Selector."
    ::= { t11FcSpSaTSelNegOutEntry 8 }

t11FcSpSaTSelNegOutStartType OBJECT-TYPE
    SYNTAX       T11FcSpType
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The numerically smallest of a range of possible 'type'
           values of frames that will match with this Traffic
           Selector."
    ::= { t11FcSpSaTSelNegOutEntry 9 }

t11FcSpSaTSelNegOutEndType OBJECT-TYPE
    SYNTAX       T11FcSpType
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The numerically largest of a range of possible 'type'
           values of frames that will match with this Traffic
           Selector."
    ::= { t11FcSpSaTSelNegOutEntry 10 }

--
--  Traffic Selectors index-ed by SPI
--

t11FcSpSaTSelSpiTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FcSpSaTSelSpiEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A table identifying the Traffic Selectors in use on
           particular Security Associations, INDEX-ed by their
           (ingress) SPI values."
    ::= { t11FcSpSaActive 4 }

t11FcSpSaTSelSpiEntry OBJECT-TYPE
    SYNTAX       T11FcSpSaTSelSpiEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "Each entry identifies one Traffic Selector in use on an SA
           pair on the interface (identified by t11FcSpSaPairIfIndex)
           to a particular Fabric (identified by
           t11FcSpSaIfFabricIndex), and managed as part of the Fibre
           Channel management instance identified by fcmInstanceIndex."
    INDEX  { fcmInstanceIndex, t11FcSpSaPairIfIndex,
             t11FcSpSaIfFabricIndex,
             t11FcSpSaTSelSpiInboundSpi, t11FcSpSaTSelSpiTrafSelIndex }
    ::= { t11FcSpSaTSelSpiTable 1 }

T11FcSpSaTSelSpiEntry ::= SEQUENCE {
    t11FcSpSaTSelSpiInboundSpi     T11FcSpiIndex,
    t11FcSpSaTSelSpiTrafSelIndex   Unsigned32,
    t11FcSpSaTSelSpiDirection      T11FcSaDirection,
    t11FcSpSaTSelSpiTrafSelPtr     Unsigned32
}

t11FcSpSaTSelSpiInboundSpi OBJECT-TYPE
    SYNTAX       T11FcSpiIndex
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "An SPI value that identifies the ingress Security
           Association of a particular SA pair."
    ::= { t11FcSpSaTSelSpiEntry 1 }

t11FcSpSaTSelSpiTrafSelIndex OBJECT-TYPE
    SYNTAX       Unsigned32 (1..4294967295)
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "An index value that distinguishes between the
           (potentially multiple) Traffic Selectors in use on
           this Security Association pair."
    ::= { t11FcSpSaTSelSpiEntry 2 }

t11FcSpSaTSelSpiDirection OBJECT-TYPE

    SYNTAX       T11FcSaDirection
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "This object indicates whether this Traffic Selector
           is being used for ingress or for egress traffic."
    ::= { t11FcSpSaTSelSpiEntry 3 }

t11FcSpSaTSelSpiTrafSelPtr OBJECT-TYPE
    SYNTAX       Unsigned32
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "This object contains a pointer into another table that
           can be used to obtain more information about this Traffic
           Selector.

           If the corresponding instance of t11FcSpSaTSelSpiDirection
           has the value 'egress', then this object contains the
           value of t11FcSpSaTSelNegOutPrecedence in the row of
           t11FcSpSaTSelNegOutTable, which contains more information.

           If the corresponding instance of t11FcSpSaTSelSpiDirection
           has the value 'ingress', then this object contains the
           value of t11FcSpSaTSelNegInIndex that identifies the row
           in t11FcSpSaTSelNegInTable containing more information."
    ::= { t11FcSpSaTSelSpiEntry 4 }

--
-- Notification information & control
--

t11FcSpSaControlTable OBJECT-TYPE
    SYNTAX       SEQUENCE OF T11FcSpSaControlEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "A table of control and other information concerning
           the generation of notifications for events related
           to FC-SP Security Associations."
    ::= { t11FcSpSaControl 1 }

more of the MIB is coming, so stay tuned, bestie ๐ŸŽ€๐Ÿ’–

Okay bestie, the control entry is where it gets spicy ๐ŸŒถ๏ธ๐Ÿ’… The table row is keyed by fcmInstanceIndex, t11FcSpSaIfIndex, and t11FcSpSaIfFabricIndex, and its storage type comes from t11FcSpSaIfStorageType. ๐Ÿฆ‹

t11FcSpSaControlEntry OBJECT-TYPE
    SYNTAX       T11FcSpSaControlEntry
    MAX-ACCESS   not-accessible
    STATUS       current
    DESCRIPTION
           "Each entry identifies information for the one or more
           interfaces (identified by t11FcSpSaIfIndex) to a
           particular Fabric (identified by t11FcSpSaIfFabricIndex),
           and managed as part of the Fibre Channel management
           instance identified by fcmInstanceIndex.

           The StorageType of a row in this table is specified by
           the instance of t11FcSpSaIfStorageType that is INDEX-ed
           by the same values of fcmInstanceIndex, t11FcSpSaIfIndex,
           and t11FcSpSaIfFabricIndex."
    INDEX  { fcmInstanceIndex, t11FcSpSaIfIndex,
             t11FcSpSaIfFabricIndex }
    ::= { t11FcSpSaControlTable 1 }

T11FcSpSaControlEntry ::= SEQUENCE {
    t11FcSpSaControlAuthFailEnable  TruthValue,
    t11FcSpSaControlInboundSpi      T11FcSpiIndex,
    t11FcSpSaControlSource          FcAddressIdOrZero,
    t11FcSpSaControlDestination     FcAddressIdOrZero,
    t11FcSpSaControlFrame           OCTET STRING,
    t11FcSpSaControlElapsed         TimeTicks,
    t11FcSpSaControlSuppressed      Gauge32,
    t11FcSpSaControlWindow          Unsigned32,
    t11FcSpSaControlMaxNotifs       Unsigned32,
    t11FcSpSaControlLifeExcdEnable  TruthValue,
    t11FcSpSaControlLifeExcdSpi     T11FcSpiIndex,
    t11FcSpSaControlLifeExcdDir     T11FcSaDirection,
    t11FcSpSaControlLifeExcdTime    TimeStamp
}

Now the auth-fail knobs ๐Ÿ”โœจ This one is a read-write switch that decides whether a t11FcSpSaNotifyAuthFailure gets generated for the first auth failure in a time window on a Fabric. Main character energy ๐Ÿ‘‘

t11FcSpSaControlAuthFailEnable OBJECT-TYPE
    SYNTAX       TruthValue
    MAX-ACCESS   read-write
    STATUS       current
    DESCRIPTION
           "This object specifies whether a t11FcSpSaNotifyAuthFailure
           notification should be generated for the first occurrence
           of an Authentication failure within a time window for this
           Fabric."
    ::= { t11FcSpSaControlEntry 1 }

t11FcSpSaControlInboundSpi OBJECT-TYPE
    SYNTAX       T11FcSpiIndex
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The SPI value of the ingress Security Association on
           which was received the last frame for which a
           t11FcSpSaNotifyAuthFailure was generated.

           If no t11FcSpSaNotifyAuthFailure notifications have
           been generated, the value of this object is zero."
    ::= { t11FcSpSaControlEntry 2 }

t11FcSpSaControlSource OBJECT-TYPE
    SYNTAX       FcAddressIdOrZero
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The S_ID contained in the last frame for which a
           t11FcSpSaNotifyAuthFailure was generated.

           If no t11FcSpSaNotifyAuthFailure notifications have
           been generated, the value of this object is the
           zero-length string."
    ::= { t11FcSpSaControlEntry 3 }

t11FcSpSaControlDestination OBJECT-TYPE
    SYNTAX       FcAddressIdOrZero
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The D_ID contained in the last frame for which a
           t11FcSpSaNotifyAuthFailure was generated.

           If no t11FcSpSaNotifyAuthFailure notifications have
           been generated, the value of this object is the
           zero-length string."
    ::= { t11FcSpSaControlEntry 4 }

t11FcSpSaControlFrame OBJECT-TYPE
    SYNTAX       OCTET STRING (SIZE (0..256))
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The binary content of the last frame for which a
           t11FcSpSaNotifyAuthFailure was generated.  If more than
           256 bytes of the frame are available, then this object
           contains the first 256 bytes.  If less than 256 bytes of
           the frame are available, then this object contains the
           first N bytes, where N is greater or equal to zero.

           If no t11FcSpSaNotifyAuthFailure notifications have
           been generated, the value of this object is the
           zero-length string."
    ::= { t11FcSpSaControlEntry 5 }

t11FcSpSaControlElapsed OBJECT-TYPE

    SYNTAX       TimeTicks
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The elapsed time since the last generation of a
           t11FcSpSaNotifyAuthFailure notification on the same
           Fabric, or the value of sysUpTime if no
           t11FcSpSaNotifyAuthFailure notifications have been
           generated since the last restart."
    ::= { t11FcSpSaControlEntry 6 }

t11FcSpSaControlSuppressed OBJECT-TYPE
    SYNTAX       Gauge32
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The number of occurrences of an Authentication failure
           on a Fabric that were suppressed because they occurred
           on the same Fabric within the same time window as a
           previous Authentication failure for which a
           t11FcSpSaNotifyAuthFailure notification was generated.

           The value of this object is reset to zero on a restart
           of the network management subsystem, and whenever a
           t11FcSpSaNotifyAuthFailure notification is generated.
           In the event that the value of this object reaches its
           maximum value, it remains at that value until it is
           reset on the generation of the next
           t11FcSpSaNotifyAuthFailure notification."
    ::= { t11FcSpSaControlEntry 7 }

t11FcSpSaControlWindow OBJECT-TYPE
    SYNTAX       Unsigned32 (1..4294967295)
    UNITS        "seconds"
    MAX-ACCESS   read-write
    STATUS       current
    DESCRIPTION
           "The length of a time window that begins when a
           t11FcSpSaNotifyAuthFailure notification is generated for
           any Security Association on a particular Fabric.  For the
           duration of the time window, further Authentication failures
           occurring for the same Security Association are counted but
           no t11FcSpSaNotifyAuthFailure notification is generated.

           When this object is modified before the end of a time
           window, that time window is immediately terminated, i.e.,
           the next Authentication failure on the relevant Fabric
           after the modification will cause a new time window to
           begin with the new length."
    DEFVAL   { 300 }
    ::= { t11FcSpSaControlEntry 8 }

t11FcSpSaControlMaxNotifs OBJECT-TYPE
    SYNTAX       Unsigned32
    MAX-ACCESS   read-write
    STATUS       current
    DESCRIPTION
           "The maximum number of t11FcSpSaNotifyAuthFailure
           notifications to be generated per Fabric within a
           t11FcSpSaControlWindow time window.  Subsequent
           Authentication failures occurring on the same Fabric
           in the same time window are counted, but no
           t11FcSpSaNotifyAuthFailure notification is generated.

           When this object is modified before the end of a time
           window, that time window is immediately terminated, i.e.,
           the next Authentication failure on the relevant Fabric
           after the modification will cause a new time window to
           begin with the new length."
    DEFVAL   { 16 }
    ::= { t11FcSpSaControlEntry 9 }

t11FcSpSaControlLifeExcdEnable OBJECT-TYPE
    SYNTAX       TruthValue
    MAX-ACCESS   read-write
    STATUS       current
    DESCRIPTION
           "This object specifies whether t11FcSpSaNotifyLifeExceeded
           notifications should be generated for this Fabric."
    DEFVAL   { true }
    ::= { t11FcSpSaControlEntry 10 }

t11FcSpSaControlLifeExcdSpi OBJECT-TYPE
    SYNTAX       T11FcSpiIndex
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The SPI of the SA that was most recently terminated
           because its lifetime (in seconds or in passed bytes) was
           exceeded.  Such terminations include those due to
           a failed attempt to renew an SA after its lifetime was
           exceeded."
    ::= { t11FcSpSaControlEntry 11 }

t11FcSpSaControlLifeExcdDir OBJECT-TYPE
    SYNTAX       T11FcSaDirection
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The direction of frame transmission on the SA that was
           most recently terminated because its lifetime (in seconds
           or in passed bytes) was exceeded."
    ::= { t11FcSpSaControlEntry 12 }

t11FcSpSaControlLifeExcdTime OBJECT-TYPE
    SYNTAX       TimeStamp
    MAX-ACCESS   read-only
    STATUS       current
    DESCRIPTION
           "The time of the most recent termination of an SA
           due to its lifetime (in seconds or in passed bytes)
           being exceeded.  Such terminations include those
           due to a failed attempt to renew an SA after its
           lifetime was exceeded."
    ::= { t11FcSpSaControlEntry 13 }

Next up are the notifications ๐Ÿ””๐Ÿ’– These are the actual alarms the agent raises. The auth-failure one is rate-limited per Fabric, so you don't get spammed to death ๐Ÿ™ˆ

--
-- Notification definitions
--

t11FcSpSaNotifyAuthFailure NOTIFICATION-TYPE
    OBJECTS      { t11FcSpSaControlInboundSpi,
                   t11FcSpSaControlSource,
                   t11FcSpSaControlDestination,
                   t11FcSpSaControlFrame,
                   t11FcSpSaControlElapsed,
                   t11FcSpSaControlSuppressed }
    STATUS       current
    DESCRIPTION
           "When this notification is generated, it indicates the
           occurrence of an Authentication failure for a received
           FC-2 or CT_IU frame.  The t11FcSpSaControlInboundSpi,
           t11FcSpSaControlSource, and t11FcSpSaControlDestination
           objects in the varbindlist are the frame's SPI, source and
           destination addresses, respectively.  t11FcSpSaControlFrame
           provides the (beginning of the) frame's content if such is
           available.

           This notification is generated only for the first
           occurrence of an Authentication failure on a Fabric within
           a time window.  Subsequent occurrences of an Authentication
           Failure on the same Fabric within the same time window
           are counted but suppressed.

           The value of t11FcSpSaControlElapsed contains (a lower bound
           on) the elapsed time since the last generation of this
           notification for the same Fabric.  The value of
           t11FcSpSaControlSuppressed contains the number of
           generations which were suppressed in the time window after
           that last generation, or zero if unknown."
    ::= { t11FcSpSaMIBNotifications 1 }

t11FcSpSaNotifyLifeExceeded NOTIFICATION-TYPE
    OBJECTS      { t11FcSpSaControlLifeExcdSpi,
                   t11FcSpSaControlLifeExcdDir }
    STATUS       current
    DESCRIPTION
           "This notification is generated when the lifetime (in
           seconds or in passed bytes) of an SA is exceeded, and the
           SA is either immediately terminated or is terminated
           because an attempt to renew the SA fails.  The values of
           t11FcSpSaControlLifeExcdSpi and t11FcSpSaControlLifeExcdDir
           contain the SPI and direction of the terminated SA."
    ::= { t11FcSpSaMIBNotifications 2 }

Last bit of this chunk is the conformance section ๐ŸŽ€ It's just the anchor points for the compliance and group OIDs, so the table of rules is coming next โœจ

--
-- Conformance
--

t11FcSpSaMIBCompliances
                    OBJECT IDENTIFIER ::= { t11FcSpSaMIBConformance 1 }
t11FcSpSaMIBGroups  OBJECT IDENTIFIER ::= { t11FcSpSaMIBConformance 2 }

Okay bestie, picking up right where we left off with the compliance statement and the conformance groups ๐Ÿ’…๐ŸŽ€

t11FcSpSaMIBCompliance MODULE-COMPLIANCE
    STATUS       current
    DESCRIPTION
           "The compliance statement for entities that implement
           FC-SP Security Associations."

    MODULE  -- this module
        MANDATORY-GROUPS
            { t11FcSpSaCapabilityGroup,
              t11FcSpSaParamStatusGroup,
              t11FcSpSaSummaryCountGroup,
              t11FcSpSaProposalGroup,
              t11FcSpSaDropBypassGroup,
              t11FcSpSaActiveGroup,
              t11FcSpSaNotifInfoGroup,
              t11FcSpSaNotificationGroup
            }

       -- The following is an auxiliary (listed in an INDEX clause)
       -- object for which the SMIv2 does not allow an OBJECT clause
       -- to be specified, but for which this MIB has the following
       -- compliance requirement:
       --      OBJECT        t11FcSpSaIfIndex
       --      DESCRIPTION
       --          Compliance requires support for either one of:
       --          - individual interfaces using ifIndex values, or
       --          - the use of the zero value.

-- Write access is not required for any objects in this MIB module:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    ::= { t11FcSpSaMIBCompliances 1 }

-- Units of Conformance

t11FcSpSaCapabilityGroup OBJECT-GROUP
    OBJECTS  { t11FcSpSaIfEspHeaderCapab,
               t11FcSpSaIfCTAuthCapab,
               t11FcSpSaIfIKEv2Capab,
               t11FcSpSaIfIkev2AuthCapab
             }
    STATUS   current
    DESCRIPTION
           "A collection of objects containing information
           related to capabilities of FC-SP entities."
    ::= { t11FcSpSaMIBGroups 1 }

t11FcSpSaParamStatusGroup OBJECT-GROUP

    OBJECTS  { t11FcSpSaIfStorageType,
               t11FcSpSaIfReplayPrevention,
               t11FcSpSaIfReplayWindowSize,
               t11FcSpSaIfDeadPeerDetections,
               t11FcSpSaIfTerminateAllSas
             }
    STATUS   current
    DESCRIPTION
           "A collection of objects containing parameters
           and status information related to FC-SP entities."
    ::= { t11FcSpSaMIBGroups 2 }

t11FcSpSaSummaryCountGroup OBJECT-GROUP
    OBJECTS  { t11FcSpSaIfOutDrops,
               t11FcSpSaIfOutBypasses,
               t11FcSpSaIfOutProcesses,
               t11FcSpSaIfOutUnMatcheds,
               t11FcSpSaIfInUnprotUnmtchDrops,
               t11FcSpSaIfInDetReplays,
               t11FcSpSaIfInUnprotMtchDrops,
               t11FcSpSaIfInBadXforms,
               t11FcSpSaIfInGoodXforms,
               t11FcSpSaIfInProtUnmtchs
             }
    STATUS   current
    DESCRIPTION
           "A collection of objects containing summary
           counters for FC-SP Security Associations."
    ::= { t11FcSpSaMIBGroups 3 }

t11FcSpSaProposalGroup OBJECT-GROUP
    OBJECTS  { t11FcSpSaPropSecurityProt,
               t11FcSpSaPropTSelListIndex,
               t11FcSpSaPropTransListIndex,
               t11FcSpSaPropAcceptAlgorithm,
               t11FcSpSaPropOutMatchSucceeds,
               t11FcSpSaPropRowStatus,
               t11FcSpSaTSelPropDirection,
               t11FcSpSaTSelPropStartSrcAddr,
               t11FcSpSaTSelPropEndSrcAddr,
               t11FcSpSaTSelPropStartDstAddr,
               t11FcSpSaTSelPropEndDstAddr,
               t11FcSpSaTSelPropStartRCtl,
               t11FcSpSaTSelPropEndRCtl,
               t11FcSpSaTSelPropStartType,
               t11FcSpSaTSelPropEndType,
               t11FcSpSaTSelPropStorageType,
               t11FcSpSaTSelPropRowStatus

             }
    STATUS   current
    DESCRIPTION
           "A collection of objects containing information
           related to making and accepting proposals for
           FC-SP Security Associations."
    ::= { t11FcSpSaMIBGroups 4 }

t11FcSpSaDropBypassGroup OBJECT-GROUP
    OBJECTS  { t11FcSpSaTSelDrByAction,
               t11FcSpSaTSelDrByStartSrcAddr,
               t11FcSpSaTSelDrByEndSrcAddr,
               t11FcSpSaTSelDrByStartDstAddr,
               t11FcSpSaTSelDrByEndDstAddr,
               t11FcSpSaTSelDrByStartRCtl,
               t11FcSpSaTSelDrByEndRCtl,
               t11FcSpSaTSelDrByStartType,
               t11FcSpSaTSelDrByEndType,
               t11FcSpSaTSelDrByMatches,
               t11FcSpSaTSelDrByRowStatus
             }
    STATUS   current
    DESCRIPTION
           "A collection of objects containing information
           about Traffic Selectors of traffic to drop or bypass
           for FC-SP Security."
    ::= { t11FcSpSaMIBGroups 5 }

t11FcSpSaActiveGroup OBJECT-GROUP
    OBJECTS  { t11FcSpSaPairSecurityProt,
               t11FcSpSaPairTransListIndex,
               t11FcSpSaPairTransIndex,
               t11FcSpSaPairLifetimeLeft,
               t11FcSpSaPairLifetimeLeftUnits,
               t11FcSpSaPairTerminate,
               t11FcSpSaPairInProtUnMatchs,
               t11FcSpSaPairInDetReplays,
               t11FcSpSaPairInBadXforms,
               t11FcSpSaPairInGoodXforms,
               t11FcSpSaTransSecurityProt,
               t11FcSpSaTransEncryptAlg,
               t11FcSpSaTransEncryptKeyLen,
               t11FcSpSaTransIntegrityAlg,
               t11FcSpSaTransStorageType,
               t11FcSpSaTransRowStatus,
               t11FcSpSaTSelNegInInboundSpi,
               t11FcSpSaTSelNegInStartSrcAddr,
               t11FcSpSaTSelNegInEndSrcAddr,
               t11FcSpSaTSelNegInStartDstAddr,
               t11FcSpSaTSelNegInEndDstAddr,
               t11FcSpSaTSelNegInStartRCtl,
               t11FcSpSaTSelNegInEndRCtl,
               t11FcSpSaTSelNegInStartType,
               t11FcSpSaTSelNegInEndType,
               t11FcSpSaTSelNegInUnpMtchDrops,
               t11FcSpSaTSelNegOutInboundSpi,
               t11FcSpSaTSelNegOutStartSrcAddr,
               t11FcSpSaTSelNegOutEndSrcAddr,
               t11FcSpSaTSelNegOutStartDstAddr,
               t11FcSpSaTSelNegOutEndDstAddr,
               t11FcSpSaTSelNegOutStartRCtl,
               t11FcSpSaTSelNegOutEndRCtl,
               t11FcSpSaTSelNegOutStartType,
               t11FcSpSaTSelNegOutEndType,
               t11FcSpSaTSelSpiDirection,
               t11FcSpSaTSelSpiTrafSelPtr
             }
    STATUS   current
    DESCRIPTION
           "A collection of objects containing information related
           to currently active FC-SP Security Associations."
    ::= { t11FcSpSaMIBGroups 6 }
t11FcSpSaNotifInfoGroup OBJECT-GROUP
    OBJECTS  { t11FcSpSaControlAuthFailEnable,
               t11FcSpSaControlInboundSpi,
               t11FcSpSaControlSource,
               t11FcSpSaControlDestination,
               t11FcSpSaControlFrame,
               t11FcSpSaControlElapsed,
               t11FcSpSaControlSuppressed,
               t11FcSpSaControlWindow,
               t11FcSpSaControlMaxNotifs,
               t11FcSpSaControlLifeExcdEnable,
               t11FcSpSaControlLifeExcdSpi,
               t11FcSpSaControlLifeExcdDir,
               t11FcSpSaControlLifeExcdTime
             }
    STATUS   current
    DESCRIPTION
           "A collection of objects containing information
           related to notifications of events concerning
           FC-SP Security Associations."
    ::= { t11FcSpSaMIBGroups 7 }

t11FcSpSaNotificationGroup NOTIFICATION-GROUP
    NOTIFICATIONS  { t11FcSpSaNotifyAuthFailure,
                     t11FcSpSaNotifyLifeExceeded
                   }
    STATUS         current
    DESCRIPTION
           "A collection of notifications of events concerning
           FC-SP Security Associations."
    ::= { t11FcSpSaMIBGroups 8 }

END

7. IANA Considerations ๐Ÿฆ‹

Okay so IANA made one MIB OID assignment, under the appropriate subtree, for each of the five MIB modules defined in this document. ๐ŸŒธ

8. Security Considerations ๐Ÿ’€

Bestie, this is the dramatic one, so pay attention ๐Ÿ‘€ In this section, the first sub-section explains why this document does not define MIB objects for particular items of (management) information. After that comes one sub-section for each of the MIB modules defined in section 6, listing their individual Security Considerations. The section wraps up with Security Considerations common to all of these MIB modules. โœจ

Quick note: the key word "RECOMMENDED" in this section is a BCP 14 key word, so read it the way BCP 14 [RFC2119] describes. ๐Ÿซถ

8.1. Information Not Defined in This Document ๐Ÿ™ˆ

So this document doesn't define any MIB objects for the secrets that FC-SP entities need to know or figure out in order to use DH-CHAP to authenticate each other. These secrets are "highly sensitive" and need to be "strong secrets" (e.g., randomly generated and/or from an external source, see section 5.4.8 of [FC-SP]) rather than just passwords. Which means those secrets have to be managed by mechanisms other than the MIB modules defined here. ๐Ÿ”

8.2. The T11-FC-SP-TC-MIB Module ๐ŸŒธ

This MIB module defines some data types and assigns some Object Identifiers, for use as the syntax and as values of MIB objects, respectively, but it itself defines no MIB objects. So there's no direct read or write access via a management protocol, such as SNMP, to these definitions. Still, it does include the assignment of enumerations and OIDs to represent cryptographic algorithms/transforms, and it's totally appropriate for those assignments to get new additions as and when new algorithms/transforms are available. ๐Ÿงš

8.3. The T11-FC-SP-AUTHENTICATION-MIB Module ๐Ÿ’…

There are several management objects defined in this MIB module with a MAX-ACCESS clause of read-write. Those objects can be sensitive or vulnerable in some network environments, and SET operations in a non-secure environment without proper protection can really mess with network operations. ๐Ÿ˜ญ Here are the objects and their sensitivity/vulnerability:

  • t11FcSpAuStorageType
    • could cause config changes to be kept or not kept over restarts, even when management didn't want that.
  • t11FcSpAuSendRejNotifyEnable
  • t11FcSpAuRcvRejNotifyEnable
    • could suppress SNMP notifications (e.g., of authentication failures or protocol failures), or disrupt network operations by generating unwanted notifications.
  • t11FcSpAuDefaultLifetime
  • t11FcSpAuDefaultLifetimeUnits
    • could extend the lifetimes of Security Associations longer than might be secure, or shorten them so that using security costs more overhead.
  • t11FcSpAuRejectMaxRows
    • could make the audit trail of Authentication rejects smaller, which hides an attacker's tracks, or bigger, which wastes resources. ๐Ÿ•ต๏ธ

Some of the readable objects in this MIB module (i.e., objects with a MAX-ACCESS other than not-accessible) may be considered sensitive or vulnerable in some network environments. So it's important to control even GET and/or NOTIFY access to these objects, and possibly even encrypt their values when sending them over the network via SNMP. These are the tables and objects and their sensitivity/vulnerability:

  • t11FcSpAuEntityTable
    • the capabilities of FC-SP Authentication entities in terms of which cryptographic algorithms they support, plus various configuration parameters of FC-SP Authentication entities.
  • t11FcSpAuIfStatTable
    • the mapping of which FC-SP Authentication entities operate on which interfaces.
  • t11FcSpAuRejectTable
    • an audit trail of authentication failures and other Authentication Protocol failures.

8.4. The T11-FC-SP-ZONING-MIB Module ๐Ÿฆ‹

There are several management objects defined in this MIB module with a MAX-ACCESS clause of read-write and/or read-create. These can be sensitive or vulnerable in some network environments, and SET operations in a non-secure environment without proper protection can have a negative effect on network operations. Here's the tea โ˜•

  • t11FcSpZsServerEnabled
    • could enable or disable FC-SP Zoning mode, against the wishes of management.
  • t11FcSpZoneSetHashStatus
    • could make an FC-SP implementation recalculate the Active Zone Set Hash and the Zone Set Database Hash more often than management actually needs.
  • t11FcSpZsNotifyJoinSuccessEnable
  • t11FcSpZsNotifyJoinFailureEnable
    • could suppress SNMP notifications that a Switch in one Fabric has successfully joined or failed to join with a Switch in another Fabric, or disrupt network operations by generating unwanted notifications.

Some of the readable objects in this MIB module (i.e., objects with a MAX-ACCESS other than not-accessible) may be considered sensitive or vulnerable in some network environments. So it's important to control even GET and/or NOTIFY access to these objects, and possibly even encrypt their values when sending them over SNMP. These are the objects and their sensitivity/vulnerability:

  • t11FcSpZsServerCapabilityObject
  • t11FcSpZsServerEnabled
    • the FC-SP Zoning capabilities and status of the FC-SP implementation.
  • t11FcSpZoneSetHashStatus
  • t11FcSpActiveZoneSetHashType
  • t11FcSpActiveZoneSetHash
  • t11FcSpZoneSetDatabaseHashType
  • t11FcSpZoneSetDatabaseHash
    • the current values of the Active Zone Set Hash and the Zone Set Database Hash. ๐Ÿ”‘

8.5. The T11-FC-SP-POLICY-MIB Module ๐ŸŒˆ

There are many management objects defined in this MIB module with a MAX-ACCESS clause of read-write and/or read-create. Those can be sensitive or vulnerable in some network environments, and SET operations in a non-secure environment without proper protection can have a negative effect on network operations. The objects and tables and their sensitivity/vulnerability are:

  • t11FcSpPoNaSummaryTable
  • t11FcSpPoNaSwListTable
  • t11FcSpPoNaSwMembTable
  • t11FcSpPoNaNoMembTable
  • t11FcSpPoNaCtDescrTable
  • t11FcSpPoNaSwConnTable
  • t11FcSpPoNaIpMgmtTable
    • could change the currently inactive FC-SP Fabric Policies, so as to allow unauthorized connectivity of Switches and/or Nodes to the network, or between Switches in the network, or to prohibit such connectivity even when it's authorized. ๐Ÿšซ
  • t11FcSpPoNaIpMgmtTable
  • t11FcSpPoNaWkpDescrTable
    • could change the currently inactive FC-SP Fabric Policies, so as to allow unauthorized management access to Switches, or prohibit authorized management access to Switches.
  • t11FcSpPoNaSummaryTable
  • t11FcSpPoNaSwMembTable
  • t11FcSpPoNaNoMembTable
  • t11FcSpPoNaAttribTable
  • t11FcSpPoNaAuthProtTable
    • could change the currently inactive FC-SP Fabric Policies, so as to allow Security Associations with reduced security, or require Security Associations that are unnecessarily secure.
  • t11FcSpPoOperActivate
  • t11FcSpPoOperDeActivate
    • could deactivate the currently active FC-SP Fabric Policies and activate the currently inactive ones instead (e.g., those modified as above). ๐Ÿ˜ฑ
  • t11FcSpPoStorageType
    • could cause changes in the configuration and/or in FC-SP Fabric Policies to be retained or not retained over restarts, against the wishes of management.
  • t11FcSpPoNotificationEnable
    • could suppress SNMP notifications about successful or unsuccessful activation/deactivation of Fabric Policies, which hides successful or failed attempts to make unauthorized changes, or disrupt network operations by generating unwanted notifications.

Some of the readable objects in this MIB module (i.e., objects with a MAX-ACCESS other than not-accessible) may be considered sensitive or vulnerable in some network environments. So it's important to control even GET and/or NOTIFY access to these objects, and possibly even encrypt their values when sending them over SNMP. These are the tables and their sensitivity/vulnerability:

  • t11FcSpPoTable
  • t11FcSpPoSummaryTable
  • t11FcSpPoSwMembTable
  • t11FcSpPoNoMembTable
  • t11FcSpPoCtDescrTable
  • t11FcSpPoSwConnTable
  • t11FcSpPoIpMgmtTable
  • t11FcSpPoWkpDescrTable
  • t11FcSpPoAttribTable
  • t11FcSpPoAuthProtTable
    • the currently active FC-SP Fabric Policies, which an attacker could examine while looking for possible security vulnerabilities in the active policies. ๐Ÿ‘€

8.6. The T11-FC-SP-SA-MIB Module โœจ

Okay bestie, this one is serious ๐Ÿฅบ. A bunch of the objects in this MIB module are read-write or read-create, which means someone can change them with SET operations. In a non-secure environment, that can really mess things up for the network, so you have to be careful with them ๐Ÿ’…. Here's the list of what could go wrong:

  • t11FcSpSaIfStorageType, t11FcSpSaTSelPropStorageType, t11FcSpSaTransStorageType: changing these could make FC-SP Security Association config get saved or not saved across restarts, even when the admin didn't want that ๐Ÿ˜ญ.
  • t11FcSpSaIfReplayPrevention, t11FcSpSaIfReplayWindowSize: this is the anti-replay protection. Mess with it and an attacker could pull off replay attacks ๐Ÿ’€, or the FC-SP devices could end up doing pointless extra replay protection ๐Ÿ™„.
  • t11FcSpSaIfTerminateAllSas, t11FcSpSaPairTerminate: these could abort FC-SP Security Associations that didn't need to die ๐Ÿฅ€.
  • t11FcSpSaControlAuthFailEnable: this one could turn off the SNMP notifications for Authentication failures on received FC-2 or CT_IU frames ๐Ÿ™ˆ. That means someone trying to break the security stuff could go totally unnoticed, or you could get flooded with notifications you don't want ๐Ÿ“ข.
  • t11FcSpSaControlLifeExcdEnable: this could stop the SNMP notifications for when a Security Association goes past its lifetime. That delays finding the problem and fixing it, which can mess with network usage ๐Ÿ˜ค.
  • t11FcSpSaControlWindow: this could hide the second and later SNMP notifications for Authentication failures, so repeated attacks get masked ๐Ÿ‘€. Or it could spam you with notifications you don't need.
  • t11FcSpSaControlMaxNotifs: this could suppress all SNMP notifications for those Authentication failures, which hides attempts to break security. It could also flood the network with unwanted notifications ๐ŸŒช๏ธ.
  • t11FcSpSaPropTable, t11FcSpSaTSelPropTable, t11FcSpSaTransTable: these could make an FC-SP entity propose Security Associations that cover different traffic and/or use different security transforms. Some traffic might end up with weaker protection, which makes it easier for an attacker to win ๐Ÿ˜ˆ. Or it might get more protection than it needs, which wastes processing. It could also make negotiation fail to find parameters both sides accept, so no Security Associations get set up at all ๐Ÿšซ.
  • t11FcSpSaTSelDrByTable: this could make an FC-SP entity pick different sets of traffic that either a) get sent or received without FC-SP protection, which gives an attacker a way to read authentic traffic or slip in fake traffic, or b) get dropped instead of being sent or after being received, which messes with network usage ๐Ÿ’”.

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

  • t11FcSpSaIfTable: info about the capabilities, parameters, and status of an FC-SP entity's support for Security Associations ๐Ÿ“‹.
  • t11FcSpSaPropTable, t11FcSpSaTSelPropTable, t11FcSpSaTransTable: info on the proposals an FC-SP entity uses to negotiate Security Associations ๐Ÿค.
  • t11FcSpSaTSelDrByTable: info on which subsets of traffic an FC-SP entity sends or receives without FC-SP protection, or drops before sending or after receiving ๐Ÿ•ต๏ธ.
  • t11FcSpSaPairTable, t11FcSpSaTSelNegInTable, t11FcSpSaTSelNegOutTable, t11FcSpSaTSelSpiTable: info on which Security Associations are active right now, what traffic they carry, and what security protection they're getting ๐Ÿ‘‘.

8.7. Recommendations Common to All MIB Modules ๐ŸŒธ

Let's talk about SNMP security, because it's a whole thing ๐Ÿซถ. SNMP versions before SNMPv3 just didn't have adequate security. Even if the network itself is secure (say, by using IPsec), there's still no control over who on that secure network can GET and SET (read, change, create, or delete) the objects in this MIB module ๐Ÿ™ƒ.

It is RECOMMENDED that implementors look at the security features the SNMPv3 framework provides (see [RFC3410], section 8), including full support for the SNMPv3 cryptographic mechanisms for authentication and privacy ๐Ÿ”‘.

Also, deploying SNMP versions before SNMPv3 is NOT RECOMMENDED ๐Ÿšซ. Instead, it is RECOMMENDED to deploy SNMPv3 and turn on the cryptographic security. Then it's on the customer or operator to make sure that the SNMP entity giving access to this MIB module is set up so only the principals (users) with legit rights can GET or SET (change, create, or delete) the objects ๐Ÿ’ผ.

Here's another thing to know. The two algorithms currently specified for T11FcSpPolicyHashFormat are SHA-1 and SHA-256. Because of that, the definition of T11FcSpHashCalculationStatus raises a concern about not recomputing the hashes incrementally after each change when you're making a bunch of related changes in a row ๐Ÿงฎ. This trick is meant to make things responsive (cooperating SNMP managers and agents can get stuff done faster). It is not meant as a Denial-of-Service (DoS) countermeasure โš ๏ธ. Even so, implementations should still think about DoS risks in these situations. Some possible countermeasures are requiring authentication for SETs and rate-limiting SET operations if they can cause significant computation ๐Ÿ›ก๏ธ.

9. Normative References ๐Ÿ“š

Here are the normative references, all the details included:

[RFC2578]  McCloghrie, K., Perkins, D., Schoenwaelder, J., Case, J.,
           and M. Rose, S. Waldbusser, "Structure of Management
           Information Version 2 (SMIv2)", STD 58, RFC 2578, April
           1999.

(Wait, let me make sure I copy each entry exactly, so here's the full block ๐Ÿ’–.)

[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.

[RFC4001]  Daniele, M., Haberman, B., Routhier, S., and J.
           Schoenwaelder, "Textual Conventions for Internet Network
           Addresses", RFC 4001, February 2005.

[RFC4044]  McCloghrie, K., "Fibre Channel Management MIB", RFC 4044,
           May 2005.

[RFC4303]  Kent, S., "IP Encapsulating Security Payload (ESP)", RFC
           4303, December 2005.

[RFC4306]  Kaufman, C., Ed., "Internet Key Exchange (IKEv2)
           Protocol", RFC 4306, December 2005.

[RFC4438]  DeSanti, C., Gaonkar, V., Vivek, H., McCloghrie, K., and
           S. Gai, "Fibre-Channel Name Server MIB", RFC 4438, April
           2006.

[RFC4439]  DeSanti, C., Gaonkar, V., McCloghrie, K., and S. Gai,
           "Fibre Channel Fabric Address Manager MIB", RFC 4439,
           March 2006.

[RFC4936]  DeSanti, C., Vivek, H., McCloghrie, K., and S. Gai, "Fibre
           Channel Zone Server MIB", RFC 4936, August 2007.

[FC-FS-2]  "Fibre Channel - Framing and Signaling-2 (FC-FS-2)",
           ANSI INCITS 424-2007, February 2007.

[FC-GS-5]  "Fibre Channel - Generic Services-5 (FC-GS-5)",
           ANSI INCITS 427-2006, December 2006.

[FC-SP]    "Fibre Channel - Security Protocols (FC-SP)",
           ANSI INCITS 426-2007, T11/Project 1570-D, February 2007.

[FC-SW-4]  "Fibre Channel - Switch Fabric-4 (FC-SW-4)",
           ANSI INCITS 418-2006, April 2006.

[RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
           Requirement Levels", BCP 14, RFC 2119, March 1997.

10. Informative References ๐Ÿฆ‹

And here are the informative references, all in one spot ๐Ÿงš:

[RFC1492]  Finseth, C., "An Access Control Protocol, Sometimes Called
           TACACS", RFC 1492, July 1993.

[RFC2741]  Daniele, M., Wijnen, B., Ellison, M., and D. Francisco,
           "Agent Extensibility (AgentX) Protocol Version 1", RFC
           2741, January 2000.

[RFC2837]  Teow, K., "Definitions of Managed Objects for the Fabric
           Element in Fibre Channel Standard", RFC 2837, May 2000.

[RFC2865]  Rigney, C., Willens, S., Rubens, A., and W. Simpson,
           "Remote Authentication Dial In User Service (RADIUS)", RFC
           2865, June 2000.

[RFC3410]  Case, J., Mundy, R., Partain, D., and B. Stewart,
           "Introduction and Applicability Statements for Internet-
           Standard Management Framework", RFC 3410, December 2002.

[RFC3588]  Calhoun, P., Loughney, J., Guttman, E., Zorn, G., and J.
           Arkko, "Diameter Base Protocol", RFC 3588, September 2003.

[RFC4595]  Maino, F. and D. Black, "Use of IKEv2 in the Fibre Channel
           Security Association Management Protocol", RFC 4595, July
           2006.

[RFC4625]  DeSanti, C., McCloghrie, K., Kode, S., and S. Gai, "Fibre
           Channel Routing Information MIB", RFC 4625, September
           2006.

[RFC4626]  DeSanti, C., Gaonkar, V., McCloghrie, K., and S. Gai, "MIB
           for Fibre Channel's Fabric Shortest Path First (FSPF)
           Protocol", RFC 4626, September 2006.

[RFC4668]  Nelson, D., "RADIUS Authentication Client MIB for IPv6",
           RFC 4668, August 2006.

[RFC4747]  Kipp, S., Ramkumar, G., and K. McCloghrie, "The Virtual
           Fabrics MIB", RFC 4747, November 2006.

[RFC4935]  DeSanti, C., Vivek, H., McCloghrie, K., and S. Gai, "Fibre
           Channel Fabric Configuration Server MIB", RFC 4935, August
           2007.

[RFC4983]  DeSanti, C., Vivek, H., McCloghrie, K., and S. Gai, "Fibre
           Channel Registered State Change Notification (RSCN) MIB",
           RFC 4983, August 2007.

11. Acknowledgements ๐Ÿ’–

okay bestie, this is the thank-you section and it's giving gratitude ๐Ÿซถ This document was first developed and approved by the INCITS Task Group T11.5 (http://www.t11.org) as the SM-FSM project. They wanted to shout out the contributions and comments from the INCITS Technical Committee T11, including:

  • T11 Chair: Robert Snively, Brocade
  • T11 Vice Chair: Claudio DeSanti, Cisco Systems
  • T11.5 Chair: Roger Cummings, Symantec
  • T11.5 members:
    • David Black, EMC
    • Don Fraser, HP
    • Larry Hofer, Brocade
    • Scott Kipp, Brocade
    • Ralph Weber, ENDL

Later it became a work item of the IMSS Working Group (of the IETF), chaired by David Black (EMC Corporation) โœจ Bert Wijnen (Alcatel-Lucent) deserves so many thanks for his thorough review of all five MIB modules in this (large!) document ๐Ÿ˜ญ They also wanted to thank Dan Romascanu (Avaya), the IETF Area Director, for his comments and assistance ๐Ÿ™Œ


Authors' Addresses ๐ŸŽ€

Here's who wrote it, with their contact details, all exactly as they appear in the original:

Claudio DeSanti
Cisco Systems, Inc.
170 West Tasman Drive
San Jose, CA 95134 USA
Phone: +1 408 853-9172
EMail: cds@cisco.com

Fabio Maino
Cisco Systems, Inc.
170 West Tasman Drive
San Jose, CA 95134 USA
Phone: +1 408 853-7530
EMail: fmaino@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

Copyright (C) The IETF Trust (2008).

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, THE IETF TRUST 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 takes no position on 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 on whether any license under those rights might or might not be available. It also doesn't say it has made any independent effort to identify any such rights โœจ If you want the procedures for rights in RFC documents, check BCP 78 and BCP 79.

Copies of IPR disclosures made to the IETF Secretariat, any assurances of licenses to be made available, or the result of an attempt to obtain a general license or permission for the use of such proprietary rights by implementers or users of this specification can be found in 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 required to implement this standard. Send that information to the IETF at ietf-ipr@ietf.org ๐Ÿซถ

๐Ÿ“ฆ where this page comes from