RFC 5240

Protocol Independent Multicast (PIM) Bootstrap Router MIB

πŸ“… published June 2008, from ietf

Protocol Independent Multicast (PIM) Bootstrap Router MIB πŸŽ€

RFC 5240 ✨ is a Standards Track document from the Network Working Group, published in June 2008. The authors are B. Joshi from Infosys Technologies Ltd. and R. Bijlani πŸ’–. It doesn't list any RFCs it obsoletes or updates, so it's standing on its own πŸ’….


Status of This Memo ✨

This doc is an Internet standards track protocol for the Internet community, and it's asking for discussion and suggestions to make it better πŸ¦‹. If you want to know where this protocol stands in the standardization process, check the current edition of the "Internet Official Protocol Standards" (STD 1) πŸ“š. Distribution of this memo is unlimited, so share it with everyone 🌈.

Abstract

Okay so this doc defines a piece of the Management Information Base (MIB) for network management protocols in the Internet community 🧚. Specifically, it describes the managed objects used to manage the Bootstrap Router (BSR) mechanism for PIM (Protocol Independent Multicast) πŸ’œ.

Table of Contents

1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  2
2.  The Internet-Standard Management Framework . . . . . . . . . .  2
3.  Conventions  . . . . . . . . . . . . . . . . . . . . . . . . .  2
4.  Overview . . . . . . . . . . . . . . . . . . . . . . . . . . .  2
5.  Definitions  . . . . . . . . . . . . . . . . . . . . . . . . .  3
6.  Security Considerations  . . . . . . . . . . . . . . . . . . . 17
7.  IANA Considerations  . . . . . . . . . . . . . . . . . . . . . 19
8.  Acknowledgments  . . . . . . . . . . . . . . . . . . . . . . . 19
9.  References . . . . . . . . . . . . . . . . . . . . . . . . . . 20
  9.1.  Normative References . . . . . . . . . . . . . . . . . . . 20
  9.2.  Informative References . . . . . . . . . . . . . . . . . . 20

1. Introduction ✨

Okay bestie, so this memo defines a portion of the Management Information Base (MIB) that network management protocols use across the Internet community πŸ’…. It focuses on the managed objects for the Bootstrap Router (BSR) mechanism in PIM, which is covered in [RFC4601] and [RFC5059] 🌸.

This document was made by moving some of the PIM BSR-specific MIB tables out of an earlier version of the PIM MIB [RFC5060]. Main character glow-up energy πŸ‘‘.

2. The Internet-Standard Management Framework πŸ¦‹

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

Managed objects live in a virtual information store called the Management Information Base, or MIB 🧚. You usually reach MIB objects through the Simple Network Management Protocol (SNMP) πŸ’œ. The objects are defined using the Structure of Management Information (SMI) πŸŽ€. This memo specifies a MIB module that complies with SMIv2, which is described in STD 58, RFC 2578 [RFC2578], STD 58, RFC 2579 [RFC2579], and STD 58, RFC 2580 [RFC2580] πŸ”₯.

3. Conventions 🫢

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be read as described in RFC 2119 [RFC2119] πŸ’….

4. Overview 🌈

Okay so this MIB module has four tables πŸ“. Here they are:

  1. The Candidate-RP Table, which has one row for each multicast group address prefix that the local router is set up to advertise itself as a Candidate-RP (C-RP) for. This table only shows up on routers configured as a Candidate-RP πŸ¦‹.
  2. The Elected BSR RP-Set Table, which has one row for each Group-to-RP mapping received in C-RP advertisements. This table only exists on a router that is an elected BSR (E-BSR) πŸ‘‘.
  3. The Candidate-BSR Table, which has one row for each Candidate-BSR configuration for the local router. This table only shows up on routers configured as a Candidate-BSR ✨.
  4. The Elected-BSR Table, which has one row for each elected BSR. This table only exists on a router that is an elected BSR πŸ’–.

This MIB module uses textual conventions defined in the INET-ADDRESS-MIB [RFC4001] 🧚.

5. Definitions πŸ’œ

Here's the full MIB module, copied exactly as-is because implementers rely on every single character πŸŽ€:

PIM-BSR-MIB DEFINITIONS ::= BEGIN

IMPORTS
    MODULE-IDENTITY, OBJECT-TYPE,
    NOTIFICATION-TYPE,
    mib-2, Unsigned32, TimeTicks     FROM SNMPv2-SMI
    RowStatus, TruthValue,
    StorageType                      FROM SNMPv2-TC
    MODULE-COMPLIANCE, OBJECT-GROUP,
    NOTIFICATION-GROUP               FROM SNMPv2-CONF
    InetAddressType,
    InetAddressPrefixLength,
    InetAddress,
    InetZoneIndex                    FROM INET-ADDRESS-MIB;

pimBsrMIB MODULE-IDENTITY
    LAST-UPDATED "200805280000Z" -- 28 May 2008
    ORGANIZATION
            "IETF Protocol Independent Multicast (PIM) Working Group"
    CONTACT-INFO
            "Email: pim@ietf.org
             WG charter:
             http://www.ietf.org/html.charters/pim-charter.html"
    DESCRIPTION
            "The MIB module for management of the Bootstrap Router
            (BSR) mechanism for PIM routers.

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

--
-- Top-level structure
--

pimBsrNotifications   OBJECT IDENTIFIER ::= { pimBsrMIB 0 }
pimBsrObjects         OBJECT IDENTIFIER ::= { pimBsrMIB 1 }
--
-- Conformance Information
--

pimBsrConformance OBJECT IDENTIFIER ::= { pimBsrMIB 2 }
pimBsrCompliances OBJECT IDENTIFIER ::= { pimBsrConformance 1 }
pimBsrGroups      OBJECT IDENTIFIER ::= { pimBsrConformance 2 }

--
-- The BSR Candidate-RP Table
--

pimBsrCandidateRPTable OBJECT-TYPE
    SYNTAX     SEQUENCE OF PimBsrCandidateRPEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
            "The (conceptual) table listing the IP multicast group
            prefixes for which the local router is to advertise
            itself as a Candidate-RP."
    ::= { pimBsrObjects 1 }

pimBsrCandidateRPEntry OBJECT-TYPE
    SYNTAX     PimBsrCandidateRPEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
            "An entry (conceptual row) in the
             pimBsrCandidateRPTable."
    INDEX      { pimBsrCandidateRPAddressType,
                 pimBsrCandidateRPAddress,
                 pimBsrCandidateRPGroupAddress,
                 pimBsrCandidateRPGroupPrefixLength }
    ::= { pimBsrCandidateRPTable 1 }

PimBsrCandidateRPEntry ::= SEQUENCE {
    pimBsrCandidateRPAddressType       InetAddressType,
    pimBsrCandidateRPAddress           InetAddress,
    pimBsrCandidateRPGroupAddress      InetAddress,
    pimBsrCandidateRPGroupPrefixLength InetAddressPrefixLength,
    pimBsrCandidateRPBidir             TruthValue,
    pimBsrCandidateRPAdvTimer          TimeTicks,
    pimBsrCandidateRPPriority          Unsigned32,
    pimBsrCandidateRPAdvInterval       Unsigned32,
    pimBsrCandidateRPHoldtime          Unsigned32,
    pimBsrCandidateRPStatus            RowStatus,
    pimBsrCandidateRPStorageType       StorageType
}
pimBsrCandidateRPAddressType OBJECT-TYPE
    SYNTAX     InetAddressType
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
            "The Inet address type of the Candidate-RP."
    ::= { pimBsrCandidateRPEntry 1 }

pimBsrCandidateRPAddress OBJECT-TYPE
    SYNTAX     InetAddress (SIZE (4|8|16|20))
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
            "The (unicast) address that will be advertised as a
            Candidate-RP.  The InetAddressType is given by the
            pimBsrCandidateRPAddressType object."
    ::= { pimBsrCandidateRPEntry 2 }

pimBsrCandidateRPGroupAddress OBJECT-TYPE
    SYNTAX     InetAddress (SIZE (4|8|16|20))
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
            "The IP multicast group address that, when combined with
            the corresponding value of
            pimBsrCandidateRPGroupPrefixLength, identifies a group
            prefix for which the local router will advertise itself
            as a Candidate-RP.  The InetAddressType is given by the
            pimBsrCandidateRPAddressType object.

            This address object is only significant up to
            pimBsrCandidateRPGroupPrefixLength bits.  The
            remainder of the address bits are zero.  This is
            especially important for this field, which is part of
            the index of this entry.  Any non-zero bits would
            signify an entirely different entry."
    ::= { pimBsrCandidateRPEntry 3 }

pimBsrCandidateRPGroupPrefixLength OBJECT-TYPE
    SYNTAX     InetAddressPrefixLength (4..128)
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
            "The multicast group address mask that, when combined
            with the corresponding value of
            pimBsrCandidateRPGroupAddress, identifies a group prefix
            for which the local router will advertise itself as a
            Candidate-RP.  The InetAddressType is given by the
            pimBsrCandidateRPAddressType object."
    ::= { pimBsrCandidateRPEntry 4 }

pimBsrCandidateRPBidir OBJECT-TYPE
    SYNTAX     TruthValue
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
            "If this object is set to TRUE, this group range is
            advertised with this RP as a BIDIR-PIM group range.  If
            it is set to FALSE, it is advertised as a PIM-SM group
            range."
    DEFVAL { false }
    ::= { pimBsrCandidateRPEntry 5 }

pimBsrCandidateRPAdvTimer OBJECT-TYPE
    SYNTAX     TimeTicks
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
            "The time remaining before the local router next sends
            a Candidate-RP-Advertisement to the elected BSR for
            this zone."
    ::= { pimBsrCandidateRPEntry 6 }

pimBsrCandidateRPPriority OBJECT-TYPE
    SYNTAX     Unsigned32 (0..255)
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
            "The priority for this Candidate-RP advertised in
             Candidate-RP-Advertisements."
    REFERENCE "RFC 5059, section 3.2"
    DEFVAL { 192 }
    ::= { pimBsrCandidateRPEntry 7 }

pimBsrCandidateRPAdvInterval OBJECT-TYPE
    SYNTAX     Unsigned32 (1..26214)
    UNITS      "seconds"
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
            "A Candidate-RP generates Candidate-RP-Advertisements
            periodically.  This object represents the time interval
            in seconds between two consecutive advertisements."

    REFERENCE "RFC 5059, sections 3.2 and 5"
    DEFVAL { 60 }
    ::= { pimBsrCandidateRPEntry 8 }

pimBsrCandidateRPHoldtime OBJECT-TYPE
    SYNTAX     Unsigned32 (0..65535)
    UNITS      "seconds"
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
            "Holdtime for this Candidate-RP.  The amount of time (in
            seconds) this Candidate-RP entry is valid.

            This object's value can be zero only when this C-RP is
            shutting down."

    REFERENCE "RFC 5059, section 4.2"
    DEFVAL { 150 }

    ::= { pimBsrCandidateRPEntry 9 }

Okay, bestie, we're picking up right where the RP stuff leaves off πŸ’– The BSR tables are next, and they're giving organized πŸŽ€

These first two rows are the Candidate-RP status and storage bits. Basically, the status column is how you add or delete a row, and the storage type says how long the row sticks around 🧚

   pimBsrCandidateRPStatus OBJECT-TYPE
       SYNTAX     RowStatus
       MAX-ACCESS read-create
       STATUS     current
       DESCRIPTION
               "The status of this row, by which new entries may be
               created, or old entries deleted from this table.

               This status object can be set to active(1) without
               setting any other columnar objects in this entry.

               All writable objects in this entry can be modified
               when the status of this entry is active(1)."

       ::= { pimBsrCandidateRPEntry 10 }


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

Now the Elected BSR RP-Set Table πŸ‘‘ This one is only kept on the Elected BSR, and that BSR uses it to build Bootstrap messages after applying a local policy to pick which group mappings get included. Main character energy, honestly πŸ’…

   --
   -- The BSR Elected BSR RP-Set Table
   --

   pimBsrElectedBSRRPSetTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF PimBsrElectedBSRRPSetEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The (conceptual) table listing BSR-specific information
               about PIM group mappings learned via C-RP advertisements
               or created locally using configurations.  This table is
               maintained only on the Elected BSR.

               An Elected BSR uses this table to create Bootstrap
               messages after applying a local policy to include some
               or all of the group mappings in this table."

       ::= { pimBsrObjects 2 }

   pimBsrElectedBSRRPSetEntry OBJECT-TYPE
       SYNTAX     PimBsrElectedBSRRPSetEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry (conceptual row) in the
                pimBsrElectedBSRRPSetTable."
       INDEX      { pimBsrElectedBSRGrpMappingAddrType,
                    pimBsrElectedBSRGrpMappingGrpAddr,
                    pimBsrElectedBSRGrpMappingGrpPrefixLen,
                    pimBsrElectedBSRGrpMappingRPAddr }
       ::= { pimBsrElectedBSRRPSetTable 1 }

   PimBsrElectedBSRRPSetEntry ::= SEQUENCE {
       pimBsrElectedBSRGrpMappingAddrType      InetAddressType,
       pimBsrElectedBSRGrpMappingGrpAddr       InetAddress,
       pimBsrElectedBSRGrpMappingGrpPrefixLen  InetAddressPrefixLength,
       pimBsrElectedBSRGrpMappingRPAddr        InetAddress,
       pimBsrElectedBSRRPSetPriority           Unsigned32,
       pimBsrElectedBSRRPSetHoldtime           Unsigned32,
       pimBsrElectedBSRRPSetExpiryTime         TimeTicks,
       pimBsrElectedBSRRPSetGrpBidir           TruthValue
   }

   pimBsrElectedBSRGrpMappingAddrType OBJECT-TYPE
       SYNTAX     InetAddressType
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION

               "The Inet address type of the IP multicast group
               prefix."
       ::= { pimBsrElectedBSRRPSetEntry 2 }

   pimBsrElectedBSRGrpMappingGrpAddr OBJECT-TYPE
       SYNTAX     InetAddress (SIZE (4|8|16|20))
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The IP multicast group address that, when combined
               with pimBsrElectedBSRGrpMappingGrpPrefixLen, gives the
               group prefix for this mapping.  The InetAddressType is
               given by the pimBsrElectedBSRGrpMappingAddrType object.

               This address object is only significant up to
               pimBsrElectedBSRGrpMappingGrpPrefixLen bits.  The
               remainder of the address bits are zero.  This is
               especially important for this field, which is part of
               the index of this entry.  Any non-zero bits would
               signify an entirely different entry."
       ::= { pimBsrElectedBSRRPSetEntry 3 }

   pimBsrElectedBSRGrpMappingGrpPrefixLen OBJECT-TYPE
       SYNTAX     InetAddressPrefixLength (4..128)
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The multicast group prefix length that, when combined
               with pimBsrElectedBSRGrpMappingGrpAddr, gives the group
               prefix for this mapping.  The InetAddressType is given by
               the pimBsrElectedBSRGrpMappingAddrType object.  If
               pimBsrElectedBSRGrpMappingAddrType is 'ipv4' or 'ipv4z',
               this object must be in the range 4..32.  If
               pimBsrElectedBSRGrpMappingAddrType is 'ipv6' or 'ipv6z',
               this object must be in the range 8..128."
       ::= { pimBsrElectedBSRRPSetEntry 4 }

   pimBsrElectedBSRGrpMappingRPAddr OBJECT-TYPE
       SYNTAX     InetAddress (SIZE (4|8|16|20))
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The IP address of the RP to be used for groups within
               this group prefix.  The InetAddressType is given by the
               pimBsrElectedBSRGrpMappingAddrType object."
       ::= { pimBsrElectedBSRRPSetEntry 5 }

   pimBsrElectedBSRRPSetPriority OBJECT-TYPE

       SYNTAX     Unsigned32 (0..255)
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The priority for RP.  Numerically higher values for
               this object indicate lower priorities, with the value
               zero denoting the highest priority."
       REFERENCE "RFC 5059, section 4.1"
       ::= { pimBsrElectedBSRRPSetEntry 6 }

   pimBsrElectedBSRRPSetHoldtime OBJECT-TYPE
       SYNTAX     Unsigned32 (0..65535)
       UNITS      "seconds"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The holdtime for RP"
       REFERENCE "RFC 5059, section 4.1"
       ::= { pimBsrElectedBSRRPSetEntry 7 }

   pimBsrElectedBSRRPSetExpiryTime OBJECT-TYPE
       SYNTAX     TimeTicks
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The minimum time remaining before this entry will be
               aged out.  The value zero indicates that this entry will
               never be aged out."
       ::= { pimBsrElectedBSRRPSetEntry 8 }

   pimBsrElectedBSRRPSetGrpBidir OBJECT-TYPE
       SYNTAX     TruthValue
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "If this object is TRUE, this group range with this
               RP is a BIDIR-PIM group range.  If it is set to FALSE,
               it is a PIM-SM group range."
       ::= { pimBsrElectedBSRRPSetEntry 9 }

Last stop for this part: the Candidate-BSR Table πŸ¦‹ This is where the router advertises itself as a Candidate-BSR, with one row per zone. The zone index is a fun one, since zero is reserved as a special "give me the default zone" value 🌈

   --
   -- The BSR Candidate-BSR Table
   --

   pimBsrCandidateBSRTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF PimBsrCandidateBSREntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The (conceptual) table containing Candidate-BSR
               configuration for the local router.  The table contains
               one row for each zone for which the local router is
               to advertise itself as a Candidate-BSR."
       ::= { pimBsrObjects 3 }

   pimBsrCandidateBSREntry OBJECT-TYPE
       SYNTAX     PimBsrCandidateBSREntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry (conceptual row) in the
               pimBsrCandidateBSRTable."
       INDEX      { pimBsrCandidateBSRZoneIndex }
       ::= { pimBsrCandidateBSRTable 1 }

   PimBsrCandidateBSREntry ::= SEQUENCE {
       pimBsrCandidateBSRZoneIndex        InetZoneIndex,
       pimBsrCandidateBSRAddressType      InetAddressType,
       pimBsrCandidateBSRAddress          InetAddress,
       pimBsrCandidateBSRPriority         Unsigned32,
       pimBsrCandidateBSRHashMaskLength   Unsigned32,
       pimBsrCandidateBSRElectedBSR       TruthValue,
       pimBsrCandidateBSRBootstrapTimer   TimeTicks,
       pimBsrCandidateBSRStatus           RowStatus,
       pimBsrCandidateBSRStorageType      StorageType
   }

   pimBsrCandidateBSRZoneIndex OBJECT-TYPE
       SYNTAX     InetZoneIndex (1..4294967295)
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The zone index uniquely identifies the zone on a
               device to which this Candidate-BSR is attached.  There is
               one entry for each zone in ipMcastZoneTable.  Scope-level
               information for this zone can be extracted from
               ipMcastZoneTable in IP Multicast MIB [RFC5132].

               Zero is a special value used to request the default zone
               for a given scope.  Zero is not a valid value for this
               object."

       ::= { pimBsrCandidateBSREntry 1 }

   pimBsrCandidateBSRAddressType OBJECT-TYPE
       SYNTAX     InetAddressType
       MAX-ACCESS read-create
       STATUS     current
       DESCRIPTION
               "The address type of the Candidate-BSR."
       ::= { pimBsrCandidateBSREntry 2 }

   pimBsrCandidateBSRAddress OBJECT-TYPE
       SYNTAX     InetAddress
       MAX-ACCESS read-create
       STATUS     current
       DESCRIPTION
               "The (unicast) address that the local router will
               use to advertise itself as a Candidate-BSR.  The
               InetAddressType is given by the
               pimBsrCandidateBSRAddressType object."
       ::= { pimBsrCandidateBSREntry 3 }

   pimBsrCandidateBSRPriority OBJECT-TYPE
       SYNTAX     Unsigned32 (0..255)
       MAX-ACCESS read-create
       STATUS     current
       DESCRIPTION
               "The priority value for the local router as a
               Candidate-BSR for this zone.  Numerically higher
               values for this object indicate higher priorities."
       DEFVAL { 0 }
       ::= { pimBsrCandidateBSREntry 4 }

   pimBsrCandidateBSRHashMaskLength OBJECT-TYPE
       SYNTAX     Unsigned32 (0..128)
       MAX-ACCESS read-create
       STATUS     current
       DESCRIPTION
               "The hash mask length (used in the RP hash function)
               that the local router will advertise in its Bootstrap
               messages for this zone.  This object defaults
               to 30 if pimBsrCandidateBSRAddressType is 'ipv4' or
               'ipv4z' , and defaults to 126 if
               pimBsrCandidateBSRAddressType is 'ipv6' or 'ipv6z'."
       ::= { pimBsrCandidateBSREntry 5 }

   pimBsrCandidateBSRElectedBSR OBJECT-TYPE
       SYNTAX     TruthValue
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "Whether the local router is the elected BSR for this
               zone."

       ::= { pimBsrCandidateBSREntry 6 }

   pimBsrCandidateBSRBootstrapTimer OBJECT-TYPE
       SYNTAX     TimeTicks
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The time remaining before the local router next
               originates a Bootstrap message for this zone.
               Value of this object is zero if
               pimBsrCandidateBSRElectedBSR is 'FALSE'."
       ::= { pimBsrCandidateBSREntry 7 }

   pimBsrCandidateBSRStatus OBJECT-TYPE
       SYNTAX     RowStatus
       MAX-ACCESS read-create
       STATUS     current
       DESCRIPTION
               "The status of this row, by which new entries may
               be created or old entries deleted from this table.

               This status object can be set to active(1) without
               setting any other columnar objects in this entry.

               All writable objects in this entry can be modified
               when the status of this entry is active(1)."
       ::= { pimBsrCandidateBSREntry 8 }
   pimBsrCandidateBSRStorageType OBJECT-TYPE
       SYNTAX     StorageType
       MAX-ACCESS read-create
       STATUS     current
       DESCRIPTION
               "The storage type for this row.  Rows having the value
               'permanent' need not allow write-access to any columnar
               objects in the row."
         DEFVAL { nonVolatile }
      ::= { pimBsrCandidateBSREntry 9 }

   --
   -- The BSR Elected-BSR Table
   --

   pimBsrElectedBSRTable OBJECT-TYPE
       SYNTAX     SEQUENCE OF PimBsrElectedBSREntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION

               "The (conceptual) table containing information about
               elected BSRs.  The table contains one row for each
               zone for which there is an elected BSR."
       ::= { pimBsrObjects 4 }

   pimBsrElectedBSREntry OBJECT-TYPE
       SYNTAX     PimBsrElectedBSREntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "An entry (conceptual row) in the
                pimBsrElectedBSRTable."
       INDEX      { pimBsrElectedBSRZoneIndex }
       ::= { pimBsrElectedBSRTable 1 }

   PimBsrElectedBSREntry ::= SEQUENCE {
       pimBsrElectedBSRZoneIndex        InetZoneIndex,
       pimBsrElectedBSRAddressType      InetAddressType,
       pimBsrElectedBSRAddress          InetAddress,
       pimBsrElectedBSRPriority         Unsigned32,
       pimBsrElectedBSRHashMaskLength   Unsigned32,
       pimBsrElectedBSRExpiryTime       TimeTicks
   }

   pimBsrElectedBSRZoneIndex OBJECT-TYPE
       SYNTAX     InetZoneIndex (1..4294967295)
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
               "The zone index uniquely identifies the zone on a
               device to which this Elected BSR is attached.  There
               is one entry for each zone in ipMcastZoneTable.
               Scope-level information for this zone can be extracted
               from ipMcastZoneTable in IP Multicast MIB [RFC5132].

               Zero is a special value used to request the default zone
               for a given scope.  Zero is not a valid value for this
               object."

       ::= { pimBsrElectedBSREntry 1 }

   pimBsrElectedBSRAddressType OBJECT-TYPE
       SYNTAX     InetAddressType
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The address type of the elected BSR."
       ::= { pimBsrElectedBSREntry 2 }

   pimBsrElectedBSRAddress OBJECT-TYPE
       SYNTAX     InetAddress (SIZE (4|8|16|20))
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The (unicast) address of the elected BSR.  The
               InetAddressType is given by the
               pimBsrElectedBSRAddressType object."
       ::= { pimBsrElectedBSREntry 3 }

   pimBsrElectedBSRPriority OBJECT-TYPE
       SYNTAX     Unsigned32 (0..255)
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The priority value for the elected BSR for this address
               type.  Numerically higher values for this object indicate
               higher priorities."
       ::= { pimBsrElectedBSREntry 4 }

   pimBsrElectedBSRHashMaskLength OBJECT-TYPE
       SYNTAX     Unsigned32 (0..128)
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The hash mask length (used in the RP hash function)
               advertised by the elected BSR for this zone."
       ::= { pimBsrElectedBSREntry 5 }

   pimBsrElectedBSRExpiryTime OBJECT-TYPE
       SYNTAX     TimeTicks
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
               "The minimum time remaining before the elected BSR for
               this zone will be declared down."
       ::= { pimBsrElectedBSREntry 6 }

   --
   -- PIM BSR Notifications
   --

   pimBsrElectedBSRLostElection   NOTIFICATION-TYPE
       OBJECTS { pimBsrElectedBSRAddressType,
                 pimBsrElectedBSRAddress,
                 pimBsrElectedBSRPriority }
       STATUS     current
       DESCRIPTION

               "A pimBsrElectedBSRLostElection notification should be
               generated when current E-BSR lost election to a new
               Candidate-BSR.  Only an E-BSR should generate this
               notification.

               This notification is generated when
               pimBsrCandidateBSRElectedBSR becomes FALSE."

       REFERENCE "RFC 5059, section 3.1"
       ::= { pimBsrNotifications 1 }

   pimBsrCandidateBSRWinElection   NOTIFICATION-TYPE
       OBJECTS { pimBsrCandidateBSRElectedBSR }
       STATUS     current
       DESCRIPTION
               "A pimBsrCandidateBSRWinElection notification should be
               generated when a C-BSR wins BSR Election.  Only an
               E-BSR should generate this notification.

               This notification is generated when
               pimBsrCandidateBSRElectedBSR becomes TRUE."

       REFERENCE "RFC 5059, section 3.1"
       ::= { pimBsrNotifications 2 }

   --
   -- Compliance Statements
   --

   pimBsrCompliance MODULE-COMPLIANCE
       STATUS  current
       DESCRIPTION
               "The compliance statement for PIM routers that implement
               the Bootstrap Router (BSR) mechanism."
       MODULE  -- this module
       MANDATORY-GROUPS { pimBsrObjectGroup }

         GROUP   pimBsrDiagnosticsGroup
         DESCRIPTION
             "This group is optional."

       ::= { pimBsrCompliances 1 }

   --
   -- Units of Conformance
   --

   pimBsrObjectGroup OBJECT-GROUP

       OBJECTS { pimBsrCandidateRPBidir,
                 pimBsrCandidateRPAdvTimer,
                 pimBsrCandidateRPPriority,
                 pimBsrCandidateRPAdvInterval,
                 pimBsrCandidateRPHoldtime,
                 pimBsrCandidateRPStatus,
                 pimBsrCandidateRPStorageType,
                 pimBsrElectedBSRRPSetPriority,
                 pimBsrElectedBSRRPSetHoldtime,
                 pimBsrElectedBSRRPSetExpiryTime,
                 pimBsrElectedBSRRPSetGrpBidir,
                 pimBsrCandidateBSRAddress,
                 pimBsrCandidateBSRAddressType,
                 pimBsrCandidateBSRPriority,
                 pimBsrCandidateBSRHashMaskLength,
                 pimBsrCandidateBSRElectedBSR,
                 pimBsrCandidateBSRBootstrapTimer,
                 pimBsrCandidateBSRStatus,
                 pimBsrCandidateBSRStorageType,
                 pimBsrElectedBSRAddress,
                 pimBsrElectedBSRAddressType,
                 pimBsrElectedBSRPriority,
                 pimBsrElectedBSRHashMaskLength,
                 pimBsrElectedBSRExpiryTime }
       STATUS  current
       DESCRIPTION
               "A collection of objects for managing the Bootstrap
               Router (BSR) mechanism for PIM routers."
       ::= { pimBsrGroups 1 }

   pimBsrDiagnosticsGroup NOTIFICATION-GROUP
       NOTIFICATIONS  { pimBsrElectedBSRLostElection,
                        pimBsrCandidateBSRWinElection }
       STATUS  current
       DESCRIPTION
               "Objects providing additional diagnostics related to
               the Bootstrap Router (BSR) mechanism for PIM routers."
       ::= { pimBsrGroups 2 }

   END

6. Security Considerations πŸ”

okay bestie, this part is serious so let's be real 😭 there are a bunch of management objects in this MIB module with a MAX-ACCESS of read-write and/or read-create. those can be sensitive or vulnerable in some network environments. doing SET operations in a non-secure environment without proper protection can seriously wreck network operations πŸ’€ here's the tea on which tables and objects are sketchy:

  • a brand-new Candidate-BSR with high priority, or someone messing with the priority (bsrCandidateBSRPriority) of an existing Candidate-BSR, can take over the job of an Elected BSR and prevent and disrupt the services 😱
  • a brand-new Candidate-RP with lower priority, or someone changing the priority (bsrCandidateRPPriority) of an existing Candidate-RP, can force other routers to pick it for a particular group prefix. that can prevent and disrupt the services provided through that group prefix πŸ™ˆ

the read-write and read-create objects in this MIB module are:

bsrCandidateRPBidir
bsrCandidateRPPriority
bsrCandidateRPAdvInterval
bsrCandidateRPHoldtime
bsrCandidateBSRAddressType
bsrCandidateBSRAddress
bsrCandidateBSRPriority
bsrCandidateBSRHashMaskLength

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

pimBsrCandidateRPAdvTimer
pimBsrElectedBSRRPSetPriority
pimBsrElectedBSRRPSetHoldtime
pimBsrElectedBSRRPSetExpiryTime
pimBsrElectedBSRRPSetGrpBidir
pimBsrCandidateBSRElectedBSR
pimBsrCandidateBSRBootstrapTimer
pimBsrElectedBSRAddressType
pimBsrElectedBSRAddress
pimBsrElectedBSRPriority
pimBsrElectedBSRHashMaskLength
pimBsrElectedBSRExpiryTime

in this MIB module, possible effects that GET operations can cause include:

  • figuring out who the Elected BSR, Candidate-BSRs, and Candidate-RPs are in the Multicast Network topology. that info can be sensitive, and attackers can use it to prep for Denial-of-Service (DoS) attacks, including any of the attacks described above πŸ‘€

SNMP versions before SNMPv3 did not include adequate security. even if the network itself is secure (for example by using IPsec), there's still no control over who on that secure network gets to access (read/change/create/delete) the objects in this MIB module 😀

it is RECOMMENDED that implementers look at the security features that the SNMPv3 framework provides (see [RFC3410], section 8), including full support for the SNMPv3 cryptographic mechanisms (for authentication and privacy) 🫢

and then, periodt: deploying SNMP versions before SNMPv3 is NOT RECOMMENDED 🚫 instead, it is RECOMMENDED to deploy SNMPv3 and turn on cryptographic security. after that, it's a customer/operator responsibility to make sure the SNMP entity giving access to this MIB module is set up so that only the principals (users) with legitimate rights can access (read/change/create/delete) the objects πŸ’…


7. IANA Considerations 🌸

the MIB module in this document uses the following IANA-assigned OBJECT IDENTIFIER values, which are recorded in the SMI Numbers registry πŸ“‹

Descriptor        OBJECT IDENTIFIER value
----------        -----------------------
pimBsrMIB         { mib-2 172 }

8. Acknowledgments πŸ’œ

this MIB module is based on the original work in [RFC5060] by R. Sivaramu, J. Lingard, and B. Joshi. the whole team is iconic πŸ‘‘

many thanks to Bill Fenner, Stig Venaas, Nidhi Bhaskar, David Mcwalter, David Harrington, and J. W. Atwood for their feedback on this MIB module πŸŽ€

suggested IPv6 multicast MIBs by R. Sivaramu and R. Raghunarayan were used for comparison while editing this MIB module πŸ¦‹

9. References 🧚

9.1. Normative References πŸ“šβœ¨

Okay bestie, these are the docs this whole RFC leans on, so they're basically required reading πŸ€“πŸ’–

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

[RFC2578]  McCloghrie, K., Ed., Perkins, D., Ed., and J.
           Schoenwaelder, Ed., "Structure of Management Information
           Version 2 (SMIv2)", STD 58, RFC 2578, April 1999.

[RFC2579]  McCloghrie, K., Ed., Perkins, D., Ed., and J.
           Schoenwaelder, Ed., "Textual Conventions for SMIv2",
           STD 58, RFC 2579, April 1999.

[RFC2580]  McCloghrie, K., Perkins, D., and J. Schoenwaelder,
           "Conformance Statements for SMIv2", STD 58, RFC 2580,
           April 1999.

[RFC4001]  Daniele, M., Haberman, B., Routhier, S., and J.
           Schoenwaelder, "Textual Conventions for Internet Network
           Addresses", RFC 4001, February 2005.

[RFC4601]  Fenner, B., Handley, M., Holbrook, H., and I. Kouvelas,
           "Protocol Independent Multicast - Sparse Mode (PIM-SM):
           Protocol Specification (Revised)", RFC 4601, August 2006.

[RFC5060]  Sivaramu, R., Lingard, J., McWalter, D., Joshi, B., and A.
           Kessler, "Protocol Independent Multicast MIB", RFC 5060,
           January 2008.

[RFC5059]  Bhaskar, N., Gall, A., Lingard, J., and S. Venaas,
           "Bootstrap Router (BSR) Mechanism for Protocol Independent
           Multicast (PIM)", RFC 5059, January 2008.

[RFC5132]  McWalter, D., Thaler, D., and A. Kessler, "IP Multicast
           MIB", RFC 5132, December 2007.

9.2. Informative References πŸ¦‹

Just one extra read here, but it's a good one, so don't skip it 🫢

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

Authors' Addresses πŸŽ€

Here's who wrote this πŸ’œ

Bharat Joshi
Infosys Technologies Ltd.
44 Electronics City, Hosur Road
Bangalore  560 100
India

EMail: bharat_joshi@infosys.com
URI:   http://www.infosys.com/


Raina Bijlani

EMail: rainab@gmail.com

Legal stuff, but it's important, so here it is word for word πŸ™ˆ

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 ⭐

Okay so the IETF doesn't claim to know whether any patents or other rights apply to the tech in this doc, and it also hasn't checked for them itself. If you want the rules on rights in RFCs, look at BCP 78 and BCP 79 πŸ“–

If you want IPR disclosures, or licenses that people have promised to make available, check the IETF Secretariat or the online IPR repository at http://www.ietf.org/ipr. You can also get a general license or permission through that same process πŸ”₯

And if you know about any copyrights, patents, patent applications, or other proprietary rights that could cover tech needed to implement this standard, tell the IETF at ietf-ipr@ietf.org 🫢🌈

πŸ“¦ where this page comes from