RFC 4747

The Virtual Fabrics MIB

πŸ“… published November 2006, from ietf

1. Introduction ✨

okay so this memo defines a piece of the Management Information Base (MIB) πŸ’– that network management protocols in the Internet community can use. the main point is that it describes managed objects for info about the Fibre Channel network's Virtual Fabric function πŸ¦‹

quick note on the big words: "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" are to be read the way RFC 2119 [RFC2119] describes them 🫢

2. The Internet-Standard Management Framework πŸŽ€

if you want the full tea on the Internet-Standard Management Framework, check section 7 of RFC 3410 [RFC3410] πŸ“š managed objects are reached through a virtual info store called the Management Information Base, or MIB, and people usually get at MIB objects through the Simple Network Management Protocol (SNMP) 🌸

the objects in the MIB are defined with the Structure of Management Information (SMI). this memo's MIB module is SMIv2 compliant, which is covered by STD 58, RFC 2578 [RFC2578], STD 58, RFC 2579 [RFC2579] and STD 58, RFC 2580 [RFC2580] πŸ’…

3. Short Overview of Fibre Channel 🧚

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

physically, Fibre Channel is a bunch of communication points called N_Ports, linked either through a switching network called a Fabric, or through a point-to-point link. an FC "node" is one or more N_Ports. a Fabric can have several Interconnect Elements, and some of them are switches 🌈 an N_Port hooks up to the Fabric through a port on a switch called an F_Port. when several FC nodes plug into one switch port using an "Arbitrated Loop" topology, that switch port is an FL_Port and the nodes' ports are NL_Ports πŸ‘‘ "Nx_Port" means either an N_Port or an NL_Port, and "Fx_Port" means either an F_Port or an FL_Port πŸ’œ

a switch port linked to another switch port by an Inter-Switch Link (ISL) is an E_Port ✨ a B_Port connects a bridge device to an E_Port on a switch, and it only does a subset of what an E_Port does πŸ“

lots of FC components (the Fabric, each node, and most ports) have globally-unique names. these are usually formatted as World Wide Names (WWNs), and you can read more about them in [FC-FS] πŸ¦‹ WWNs are expected to stay persistent across agent and unit resets 🫢

FC frames carry 24-bit address identifiers that say which source and destination ports they belong to. every FC port has both an address identifier and a WWN πŸ’… when a Fabric is in use, the FC address identifiers are dynamic and a switch assigns them. each octet of a 24-bit address is one level of an address hierarchy, and the Domain_ID is the highest level πŸ‘‘

now the Virtual Fabrics part, which is my favourite 😭 Virtual Fabrics let one physical Fabric get split into several logical Fabrics. each Virtual Fabric can be managed on its own, like a traditional Fabric 🌸 the whole point is better use of the physical infrastructure, plus keeping events in one Virtual Fabric from messing with the others πŸ”₯ when one Core Switch handles switching for several Virtual Fabrics, that Core Switch is modelled as holding several Virtual Switches, one per Virtual Fabric 🧚

each Virtual Fabric has a 12-bit Virtual Fabric ID (VF_ID) πŸŽ€ when frames from several Virtual Fabrics go over one physical link, the VF_ID in a frame's Virtual Fabric Tagging Header (VFT_Header) tells you which Virtual Fabric that frame belongs to. VFT_Headers get switched on through an initial negotiation exchange between the two connected ports 🌈

4. Relationship to Other MIBs πŸ’–

this MIB goes beyond [RFC4044]. it covers the part where Fibre Channel switches provide the Virtual Fabrics function πŸ¦‹

5. MIB Overview 🌸

this MIB module lets you monitor how one or more instances of Fibre Channel Virtual Fabric functionality are running, and configure some of their parameters πŸ’… (heads up, there are no "managed actions" defined in this MIB module that a remote network management protocol like SNMP can invoke πŸ™ˆ) it has IMPORTS from [RFC2578], [RFC2579], [RFC2580], [RFC2863], [RFC4044], and [RFC4439]. its REFERENCE clauses refer to [FC-SW-4] ✨

5.1. Fibre Channel Management Instance 🧚

a Fibre Channel management instance is defined in [RFC4044] as a separable managed instance of Fibre Channel functionality πŸŽ€ you can group Fibre Channel functionality into management instances however is most convenient for the implementation(s) 🫢 for example, one grouping is a single SNMP agent with several AgentX [RFC2741] sub-agents, each sub-agent running a different Fibre Channel management instance πŸ‘‘

the object fcmInstanceIndex is IMPORTed from the FC-MGMT-MIB [RFC4044] and is the index value that uniquely identifies each Fibre Channel management instance, for example within the same SNMP context ([RFC3411] section 3.3.1) πŸ’œ the t11vfVirtualSwitchTable augments the fcmSwitchTable, and the fcmSwitchTable's primary index variable is fcmInstanceIndex 🌈

5.2. Representing Core and Virtual Switches πŸ¦‹

when Virtual Switches exist, the fcmSwitchTable in RFC 4044 has a row for each Virtual Switch πŸ’… the fcmSwitchTable, t11vfCoreSwitchTable, and t11vfVirtualSwitchTable are complementary to each other πŸ“ the t11vfCoreSwitchTable and t11vfVirtualSwitchTable hold info that helps a management client figure out which Switches are Virtual Switches and how each one relates to a Core Switch 🌸 a Virtual Switch has to live inside a single Core Switch, and a Core Switch is defined as a set of entities that share the same Core Switch_Name πŸ”₯

RFC 4044 came out before Virtual Switches were standard, and it only represented physical Switches. so the RFC 4044 tables weren't defined as read-create 😭 now that Virtual Switches exist, administrators can create them, so read-create tables are required πŸ™ˆ the StorageType of the RFC 4044 tables wasn't defined, and the StorageTypes used in this MIB should also apply to the RFC 4044 tables this MIB augments 🫢

6. The T11-FC-VIRTUAL-FABRIC-MIB Module πŸ’…

the module itself is next, and it's pure SMI, so here it is exactly as written 🧚

T11-FC-VIRTUAL-FABRIC-MIB DEFINITIONS ::= BEGIN

IMPORTS
    MODULE-IDENTITY, OBJECT-TYPE,
    Unsigned32, mib-2
                            FROM SNMPv2-SMI         -- [RFC2578]
    MODULE-COMPLIANCE, OBJECT-GROUP
                            FROM SNMPv2-CONF        -- [RFC2580]
    RowStatus, StorageType  FROM SNMPv2-TC          -- [RFC2579]
    InterfaceIndex          FROM IF-MIB             -- [RFC2863]
    fcmInstanceIndex, FcNameIdOrZero,
    fcmPortEntry, fcmSwitchEntry
                            FROM FC-MGMT-MIB        -- [RFC4044]
    T11FabricIndex          FROM T11-TC-MIB;        -- [RFC4439]

t11FcVirtualFabricMIB  MODULE-IDENTITY
    LAST-UPDATED    "200611100000Z"
    ORGANIZATION    "IETF IMSS (Internet and Management Support
                     for Storage) Working Group"
    CONTACT-INFO
            "
                     Scott Kipp
                     McDATA Corporation
                Tel: +1 720 558-3452
             E-mail: scott.kipp@mcdata.com
             Postal: 4 McDATA Parkway
                     Broomfield, CO USA 80021

                     G D Ramkumar
                     SnapTell, Inc.
                Tel: +1 650-326-7627
             E-mail: gramkumar@stanfordalumni.org
             Postal: 2741 Middlefield Rd, Suite 200
                     Palo Alto, CA USA 94306

                     Keith McCloghrie
                     Cisco Systems, Inc.
                Tel: +1 408 526-5260
             E-mail: kzm@cisco.com
             Postal: 170 West Tasman Drive
                     San Jose, CA USA 95134
            "

    DESCRIPTION
        "This module defines management information specific to
         Fibre Channel Virtual Fabrics.  A Virtual Fabric is a
         Fabric composed of partitions of switches, links and
         N_Ports with a single Fabric management domain, Fabric
         Services and independence from other Virtual Fabrics.

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

t11vfObjects       OBJECT IDENTIFIER ::= { t11FcVirtualFabricMIB 1 }
t11vfConformance   OBJECT IDENTIFIER ::= { t11FcVirtualFabricMIB 2 }

--********************************
--  MIB object definitions
--

Okay bestie, picking up right where we left off πŸ’– We're deep in the MIB module now, and it's giving tables, tables, and more tables πŸ¦‹ First up is the core switch table, which is where each core switch gets its own row 🌸

   t11vfCoreSwitchTable  OBJECT-TYPE
       SYNTAX      SEQUENCE OF T11vfCoreSwitchEntry
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION
           "A table of core switches supported by the current
            management entity."
       ::= { t11vfObjects 1 }

   t11vfCoreSwitchEntry OBJECT-TYPE
       SYNTAX      T11vfCoreSwitchEntry
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION
           "Each entry represents one core switch."
       INDEX   { fcmInstanceIndex, t11vfCoreSwitchSwitchName }
       ::= { t11vfCoreSwitchTable 1}

   T11vfCoreSwitchEntry ::=
       SEQUENCE {
          t11vfCoreSwitchSwitchName   FcNameIdOrZero,
          t11vfCoreSwitchMaxSupported Unsigned32,
         t11vfCoreSwitchStorageType  StorageType
       }

   t11vfCoreSwitchSwitchName OBJECT-TYPE
       SYNTAX      FcNameIdOrZero (SIZE(8 | 16))
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION
           "The Core Switch_Name (WWN) of this Core Switch."
       ::= { t11vfCoreSwitchEntry 1 }

   t11vfCoreSwitchMaxSupported OBJECT-TYPE
       SYNTAX      Unsigned32 (1..4095)
       MAX-ACCESS  read-write
       STATUS      current
       DESCRIPTION
           "In switches that do not support Virtual Fabrics,
            this object has the value of 1.  If Virtual Fabrics
            are supported, this object is the maximum number of
            Virtual Fabrics supported by the Core Switch.  For
            the purpose of this count, the Control VF_ID is
            ignored."
       ::= { t11vfCoreSwitchEntry 2 }

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

Each core switch is identified by its Core Switch_Name (WWN), and the MaxSupported column is the one that counts virtual fabrics. Switches without Virtual Fabric support just report 1, and the Control VF_ID is left out of the count πŸ™ˆ ✨


Next is the Virtual Switch table 🧚 When one core switch runs switching for several virtual fabrics, it's modelled as several virtual switches, one per fabric. This table augments the fcmSwitchTable from the FC-MGMT-MIB, so every row here lines up one-to-one with a row there πŸ’…

   -- Virtual Switch table

   t11vfVirtualSwitchTable  OBJECT-TYPE
       SYNTAX      SEQUENCE OF T11vfVirtualSwitchEntry
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION
           "A table of Virtual Switches.  When one Core Switch
            provides switching functions for multiple Virtual Fabrics,
            that Core Switch is modeled as containing multiple
            Virtual Switches, one for each Virtual Fabric.  This table
            contains one row for every Virtual Switch on every Core
            Switch.  This table augments the basic switch information in
            the fcmSwitchTable Table in the FC-MGMT-MIB."
       REFERENCE
           "fcmSwitchTable is defined in the FC-MGMT-MIB [RFC4044]."
       ::= { t11vfObjects 2 }

   t11vfVirtualSwitchEntry OBJECT-TYPE
       SYNTAX      T11vfVirtualSwitchEntry
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION
           "An entry of the Virtual Switch table.  Each row is for a
            Virtual Switch.

            This table augments the fcmSwitchTable, i.e., every entry
            in this table has a one-to-one correspondence with an
            entry in the fcmSwitchTable.  At the time when the
            fcmSwitchTable was defined, it applied to physical
            switches.  With the definition and usage of virtual
            switches, fcmSwitchTable now applies to virtual switches
            as well as physical switches, and (in contrast to physical
            switches) it is appropriate to provide the capability for
            virtual switches to be created via remote management
            applications, e.g., via SNMP.

            So, this entry contains a RowStatus object (to allow the
            creation of a virtual switch), as well as a StorageType
            object.  Obviously, if a row is created/deleted in this
            table, the corresponding row in the fcmSwitchTable will
            be created/deleted."
       REFERENCE
           "fcmSwitchEntry is defined in the FC-MGMT-MIB module
            [RFC4044]."
       AUGMENTS   { fcmSwitchEntry }
       ::= { t11vfVirtualSwitchTable 1}

   T11vfVirtualSwitchEntry ::=
       SEQUENCE {
           t11vfVirtualSwitchVfId               T11FabricIndex,
           t11vfVirtualSwitchCoreSwitchName     FcNameIdOrZero,
           t11vfVirtualSwitchRowStatus          RowStatus,
           t11vfVirtualSwitchStorageType       StorageType
       }

   t11vfVirtualSwitchVfId OBJECT-TYPE
       SYNTAX      T11FabricIndex
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "The VF_ID of the Virtual Fabric for which this virtual
            switch performs its switching function.  The Control
            VF_ID is implicitly enabled and is not set.
            Communication with the Control VF_ID is required."
       REFERENCE
           "FC-SW-4, REV 7.5, section 12.2"
       ::= { t11vfVirtualSwitchEntry 1 }

   t11vfVirtualSwitchCoreSwitchName OBJECT-TYPE
       SYNTAX      FcNameIdOrZero (SIZE(8 | 16))
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "The Core Switch_Name (WWN) of the Core Switch that
            contains this Virtual Switch."
       REFERENCE
           "FC-SW-4, REV 7.5, section 12.2."
       ::= { t11vfVirtualSwitchEntry 2 }

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

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

The big deal here is that virtual switches can be created remotely over SNMP, which physical switches can't do πŸ”₯ That's why this row has a RowStatus column for creation, and deleting a row here also deletes its partner row in fcmSwitchTable 😭


Now the Port table πŸŽ€ Each physical port gets four extra columns stacked onto its fcmPortEntry row, covering the Virtual Fabric ID and the tagging status πŸ¦‹

   -- Port table

   t11vfPortTable OBJECT-TYPE
       SYNTAX      SEQUENCE OF T11vfPortEntry
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION
           "A table of Port attributes related to Virtual Fabrics."
       ::= { t11vfObjects 3 }

   t11vfPortEntry OBJECT-TYPE
       SYNTAX      T11vfPortEntry
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION
           "Each entry represents a physical Port on a switch.
            Switches that support Virtual Fabrics would add
            these four additional columns to the fcmPortEntry
            row."
       REFERENCE
           "fcmPortEntry is defined in the FC-MGMT-MIB module."
       AUGMENTS   { fcmPortEntry }
       ::= { t11vfPortTable 1}

   T11vfPortEntry ::=
       SEQUENCE {
           t11vfPortVfId                T11FabricIndex,
           t11vfPortTaggingAdminStatus   INTEGER,
           t11vfPortTaggingOperStatus    INTEGER,
           t11vfPortStorageType        StorageType
       }

   t11vfPortVfId OBJECT-TYPE
       SYNTAX      T11FabricIndex
       MAX-ACCESS  read-write
       STATUS      current
       DESCRIPTION
           "The Port VF_ID assigned to this Port.  The Port VF_ID is the
            default Virtual Fabric that is assigned to untagged frames
            arriving at this Port.  The Control VF_ID is implicitly
            enabled and is not set.  Communication with the Control
            VF_ID is required."
       REFERENCE
           "FC-SW-4, REV 7.5, section 12.1"
       DEFVAL    {1}
       ::= { t11vfPortEntry 1 }

   t11vfPortTaggingAdminStatus OBJECT-TYPE
       SYNTAX INTEGER {
           off(1),
           on(2),
           auto(3)
       }
       MAX-ACCESS  read-write
       STATUS      current
       DESCRIPTION
           "This object is used to configure the administrative status
            of Virtual Fabric tagging on this Port.

            SET operation   Description
            --------------  -------------------------------------------
            off(1)          To disable Virtual Fabric tagging on this
                            Port.

            on(2)           To enable Virtual Fabric tagging on this

                            Port if the attached Port doesn't
                            prohibit it.

            auto(3)         To enable Virtual Fabric tagging if the
                            peer requests it."
       REFERENCE
           "FC-SW-4, REV 7.5, section 12.4"
       ::= { t11vfPortEntry 2 }

    t11vfPortTaggingOperStatus OBJECT-TYPE
       SYNTAX INTEGER {
           off(1),
           on(2)
               }
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "This object is used to report the operational status of
            Virtual Fabric tagging on this Port.

            SET operation   Description
            --------------  -------------------------------------------
            off(1)          Virtual Fabric tagging is disabled on this
                            Port.

            on(2)           Virtual Fabric tagging is enabled on this
                            Port."
       REFERENCE
           "FC-SW-4, REV 7.5, section 12.4"
       ::= { t11vfPortEntry 3 }

   t11vfPortStorageType OBJECT-TYPE
       SYNTAX      StorageType
       MAX-ACCESS  read-write
       STATUS      current
       DESCRIPTION
           "The storage type for this conceptual row, and for the
            corresponding row in the augmented fcmPortTable.

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

Tagging has three admin settings: off(1), on(2), and auto(3), and auto(3) is the one that only turns tagging on if the peer asks for it πŸ’œ The operational column just tells you whether tagging is off or on right now πŸ‘‘


Last bit for this part is the Locally Enabled table 🌈 It's where you assign and check the locally-enabled VF_IDs on each port. The fabrics that actually run on a port are the bit-wise AND of your local set and the attached port's set, which is kinda iconic ngl ✨

   -- Locally Enabled Table

   t11vfLocallyEnabledTable OBJECT-TYPE

       SYNTAX      SEQUENCE OF T11vfLocallyEnabledEntry
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION
           "A table for assigning and reporting operational status of
            locally-enabled Virtual Fabric IDs to Ports.  The set of
            Virtual Fabrics operational on the Port is the bit-wise
            'AND' of the set of locally-enabled VF_IDs of this Port
            and the locally-enabled VF_IDs of the attached Port."
       ::= { t11vfObjects 4 }

   t11vfLocallyEnabledEntry OBJECT-TYPE
       SYNTAX      T11vfLocallyEnabledEntry
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION
           "An entry for each locally-enabled VF_ID on
            each Port."
       REFERENCE
           "FC-SW-4, REV 7.5, section 12.4"
       INDEX { t11vfLocallyEnabledPortIfIndex, t11vfLocallyEnabledVfId }

       ::= { t11vfLocallyEnabledTable 1}

   T11vfLocallyEnabledEntry ::=
       SEQUENCE {
           t11vfLocallyEnabledPortIfIndex    InterfaceIndex,
           t11vfLocallyEnabledVfId           T11FabricIndex,
           t11vfLocallyEnabledOperStatus     INTEGER,
           t11vfLocallyEnabledRowStatus      RowStatus,
           t11vfLocallyEnabledStorageType    StorageType
       }

   t11vfLocallyEnabledPortIfIndex OBJECT-TYPE
       SYNTAX      InterfaceIndex
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION
           "The value of the ifIndex that identifies the Port."
       ::= { t11vfLocallyEnabledEntry 1 }

   t11vfLocallyEnabledVfId OBJECT-TYPE
       SYNTAX      T11FabricIndex
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION
           "A locally-enabled VF_ID on this Port."
       ::= { t11vfLocallyEnabledEntry 2 }

   t11vfLocallyEnabledOperStatus OBJECT-TYPE
       SYNTAX INTEGER {
           off(1),
           on(2)
               }
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "This object is used to report the operational status of
            Virtual Fabric tagging on this Port.

Okay that's the table, and the rest of the Locally Enabled stuff is coming up in the next part, so stay tuned πŸ§šπŸ’œ

            SET operation   Description
            --------------  -------------------------------------------
            off(1)          Virtual Fabric tagging is disabled on this
                            Port.

            on(2)           Virtual Fabric tagging is enabled on this
                            Port."
       REFERENCE
           "FC-SW-4, REV 7.3, section 12.4"
       ::= { t11vfLocallyEnabledEntry 3 }

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

                When a row in this table is in 'active(1)' state,
                no object in that row can be modified except
                t11vfLocallyEnabledRowStatus and
                t11vfLocallyEnabledStorageType."
           ::= { t11vfLocallyEnabledEntry 4 }

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

   --********************************
   -- Conformance Section
   --

   t11vfMIBCompliances OBJECT IDENTIFIER ::= { t11vfConformance 1 }
   t11vfMIBGroups      OBJECT IDENTIFIER ::= { t11vfConformance 2 }

   t11vfMIBCompliance MODULE-COMPLIANCE
       STATUS  current
       DESCRIPTION
           "Describes the requirements for compliance to the
            Fibre Channel Virtual Fabric MIB."
       MODULE  -- this module
           MANDATORY-GROUPS { t11vfGeneralGroup }

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

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

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

           OBJECT t11vfVirtualSwitchRowStatus
           SYNTAX RowStatus { active(1) }
           MIN-ACCESS read-only
           DESCRIPTION
               "Write access is not required."

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

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

           OBJECT t11vfPortTaggingAdminStatus
           MIN-ACCESS read-only
           DESCRIPTION

               "Write access is not required."

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

           OBJECT t11vfLocallyEnabledRowStatus
           SYNTAX       RowStatus { active(1) }
           MIN-ACCESS read-only
           DESCRIPTION
               "Write access is not required."

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

       ::= { t11vfMIBCompliances 1 }

   -- Units of conformance

       t11vfGeneralGroup  OBJECT-GROUP
           OBJECTS { t11vfCoreSwitchMaxSupported,
                     t11vfVirtualSwitchVfId,
                     t11vfVirtualSwitchCoreSwitchName,
                     t11vfVirtualSwitchRowStatus,
                     t11vfPortVfId,
                     t11vfPortTaggingAdminStatus,
                     t11vfLocallyEnabledOperStatus,
                     t11vfPortTaggingOperStatus,
                     t11vfLocallyEnabledRowStatus,
                  t11vfCoreSwitchStorageType,
                      t11vfVirtualSwitchStorageType,
                     t11vfPortStorageType,
                     t11vfLocallyEnabledStorageType

           }
           STATUS current
           DESCRIPTION
               "A collection of objects for monitoring and
                configuring Virtual Fabrics in a Fibre Channel switch."
           ::= { t11vfMIBGroups 1 }

   END

7. Security Considerations πŸ”’

Okay bestie, this part is serious. A bunch of objects in this MIB module have a MAX-ACCESS of read-write and/or read-create, which means they can be changed, created, or deleted. In some network environments those objects can be sensitive or vulnerable. Doing SET operations in a non-secure environment without proper protection can seriously mess up network operations 😭 Here's the tea on which objects are the risky ones:

  • Switch-level objects: t11vfCoreSwitchMaxSupported, t11vfVirtualSwitchVfId, t11vfCoreSwitchStorageType, t11vfVirtualSwitchStorageType and t11vfVirtualSwitchRowStatus. The risk is the ability to change the configuration of Virtual Fabrics on a particular switch.
  • Port-level objects: t11vfPortTaggingAdminStatus, t11vfLocallyEnabledRowStatus, t11vfPortVfId, t11vfPortStorageType and t11vfLocallyEnabledStorageType. The risk is the ability to change the configuration of Virtual Fabrics on a port of a particular switch.

Some of the readable objects in this MIB module, meaning objects with a MAX-ACCESS other than not-accessible, might also be sensitive or vulnerable in some environments. So it matters a lot 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 those objects:

  • t11vfVirtualSwitchCoreSwitchName, t11vfPortTaggingOperStatus and t11vfLocallyEnabledOperStatus. The risk is the ability to discover the configuration of Virtual Fabrics on a virtual switch or a port.

SNMP versions before SNMPv3 did not include adequate security. Even if the network itself is secure (for example, by using IPSec), there is still no control over who on that secure network gets to access and GET/SET (read/change/create/delete) the objects in this MIB module. πŸ™ˆ

It is RECOMMENDED that implementers look at the security features provided by the SNMPv3 framework (see [RFC3410], section 8), including full support for the SNMPv3 cryptographic mechanisms for authentication and privacy. πŸ”

Deployment of SNMP versions before SNMPv3 is NOT RECOMMENDED. Instead, it is RECOMMENDED to deploy SNMPv3 and to turn on cryptographic security. It is then the customer or operator's job to make sure the SNMP entity giving access to an instance of this MIB module is configured properly, so that only principals (users) with legitimate rights can GET or SET (change/create/delete) the objects. Security is the main character here, periodt ✨

8. IANA Considerations πŸŽ€

IANA has assigned 147 for the MIB module under the appropriate subtree. 🌸

9. Acknowledgements 🫢

This document was developed by the INCITS Task Group T11.5. Big thank yous to the INCITS Technical Committee T11 and the IMSS WG for their contributions and comments, including these lovely people:

      T11 Chair: Robert Snively, Brocade
      T11 Vice Chair: Claudio Desanti, Cisco Systems
      T11.5 Chair: Roger Cummings, Symantec
      IMSS WG Chair: David Black, EMC Corporation
      Bert Wijnen, Lucent

10. Normative References πŸ“š

Here are the normative references, bestie. Every single one is listed with all its details:

[RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
           Requirement Levels", BCP 14, RFC 2119, March 1997.

[RFC2578]  McCloghrie, K., Perkins, D., Schoenwaelder, J., Case, J.,
           Rose, M., and S. Waldbusser, "Structure of Management
           Information Version 2 (SMIv2)", 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", RFC 2580, April 1999.

[RFC2863]  McCloghrie, K. and F. Kastenholz, "The Interfaces Group
           MIB", RFC 2863, June 2000.

[RFC4044]  McCloghrie, K., "Fibre Channel Management MIB", RFC 4044,
           May 2005.

[RFC4439]  DeSanti, C., Gaonkar, V., McCloghrie, K., and S. Gai,
           "Fibre Channel Fabric Address Manager MIB", RFC 4439,
           March 2006.

[FC-FS]    "Fibre Channel Framing and Signaling - 2 (FC-FS-2)", ANSI
           INCITS 1619-D,
           http://www.t11.org/t11/stat.nsf/upnum/1619-d, 2006.

[FC-SW-4]  "Fibre Channel Switch Fabric 4 (FC-SW-4)", ANSI INCITS
           418-2006, http://www.t11.org/t11/stat.nsf/upnum/1674-d,
           2006.

11. Informative References πŸ’‘

And here are the informative ones, the nice-to-know reads:

[RFC3410]  Case, J., Mundy, R., Partain, D., and B. Stewart,
           "Introduction and Applicability Statements for Internet-
           Standard Management Framework", RFC 3410, December 2002.

[RFC2741]  Daniele, M., Wijnen, B., Ellison, M., and D. Francisco,
           "Agent Extensibility (AgentX) Protocol Version 1", RFC
           2741, January 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.

Authors' Addresses πŸ¦‹

The lovely authors, with their contact details:

Scott Kipp
McDATA Corporation
4 McDATA Parkway
Broomfield, CO 80021

Phone: +1 720-558-3452
EMail: scott.kipp@mcdata.com


G D Ramkumar
SnapTell, Inc.
2741 Middlefield Rd, Suite 200
Palo Alto, CA 94306

Phone: +1 650-326-7627
EMail: gramkumar@stanfordalumni.org


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

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

Copyright (C) The IETF Trust (2006). ✨

This document is subject to the rights, licenses and restrictions contained in BCP 78. Except as set forth there, the authors keep all their rights. 🌈

This document and the information in it are provided on an "AS IS" basis. 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 ✨

Okay bestie, time for the legal bit πŸ’… The IETF doesn't take a side on whether any Intellectual Property Rights or other rights might be claimed over the tech in this doc, or whether you can actually get a license for them. It also doesn't claim to have checked for any of those rights itself πŸ™ˆ If you want the rules on rights for RFC docs, check out BCP 78 and BCP 79 πŸ¦‹

Copies of IPR disclosures sent to the IETF Secretariat are available, along with any assurances of licenses. You can also find the result of anyone trying to get a general license or permission to use those proprietary rights for implementing or using this spec. Everything is in the IETF online IPR repository at http://www.ietf.org/ipr 🌸

The IETF is inviting any interested party to flag copyrights, patents, patent applications, or other proprietary rights that might cover tech needed to implement this standard. Send that info to ietf-ipr@ietf.org πŸ’œ

Acknowledgement 🫢

Funding for the RFC Editor function is currently provided by the Internet Society 🌈

πŸ“¦ where this page comes from