CCIE SPv5.1 Labs
  • Intro
    • Setup
  • Purpose
  • Video Demonstration
  • Containerlab Tips
  • Labs
    • ISIS
      • Start
      • Topology
      • Prefix Suppression
      • Hello padding
      • Overload Bit
      • LSP size
      • Default metric
      • Hello/Hold Timer
      • Mesh groups
      • Prefix Summarization
      • Default Route Preference
      • ISIS Timers
      • Log Neighbor Changes
      • Troubleshooting 1 - No routes
      • Troubleshooting 2 - Adjacency
      • IPv6 Single Topology
      • IPv6 Single Topology Challenge
      • IPv6 Multi Topology
      • IPv6 Single to Multi Topology
      • Wide Metrics Explained
      • Route Filtering
      • Backdoor Link
      • Non-Optimal Intra-Area routing
      • Multi Area
      • Authentication
      • Conditional ATT Bit
      • Troubleshooting iBGP
      • Troubleshooting TE Tunnel
    • LDP
      • Start
      • Topology
      • LDP and ECMP
      • LDP and Static Routes
      • LDP Timers
      • LDP Authentication
      • LDP Session Protection
      • LDP/IGP Sync (OSPF)
      • LDP/IGP Sync (ISIS)
      • LDP Local Allocation Filtering
      • LDP Conditional Label Advertisement
      • LDP Inbound Label Advertisement Filtering
      • LDP Label Advertisement Filtering Challenge
      • LDP Implicit Withdraw
      • LDP Transport Address Troubleshooting
      • LDP Static Labels
    • MPLS-TE
      • Start
      • Topology
      • Basic TE Tunnel w/ OSPF
      • Basic TE Tunnel w/ ISIS
      • TE Tunnel using Admin Weight
      • TE Tunnel using Link Affinity
      • TE Tunnel with Explicit-Null
      • TE Tunnel with Conditional Attributes
      • RSVP message pacing
      • Reoptimization timer
      • IGP TE Flooding Thresholds
      • CSPF Tiebreakers
      • TE Tunnel Preemption
      • TE Tunnel Soft Preemption
      • Tunneling LDP inside RSVP
      • PE to P TE Tunnel
      • Autoroute Announce Metric (XE)
      • Autoroute Announce Metric (XR)
      • Autoroute Announce Absolute Metric
      • Autoroute Announce Backup Path
      • Forwarding Adjacency
      • Forwarding Adjacency with OSPF
      • TE Tunnels with UCMP
      • Auto-Bandwidth
      • FRR Link Protection (XE, BFD)
      • FRR Link Protection (XE, RSVP Hellos)
      • FRR Node Protection (XR)
      • FRR Path Protection
      • FRR Multiple Backup Tunnels (Node Protection)
      • FRR Multiple Backup Tunnels (Link Protection)
      • FRR Multiple Backup Tunnels (Backwidth/Link Protection)
      • FRR Backup Auto-Tunnels
      • FRR Backup Auto-Tunnels with SRLG
      • Full Mesh Auto-Tunnels
      • Full Mesh Dynamic Auto-Tunnels
      • One-Hop Auto-Tunnels
      • CBTS/PBTS
      • Traditional DS-TE
      • IETF DS-TE with MAM
      • IETF DS-TE with RDM
      • RDM w/ FRR Troubleshooting
      • Per-VRF TE Tunnels
      • Tactical TE Issues
      • Multicast and MPLS-TE
    • SR
      • Start
      • Topology
      • Basic SR with ISIS
      • Basic SR with OSPF
      • SRGB Modifcation
      • SR with ExpNull
      • SR Anycast SID
      • SR Adjacency SID
      • SR LAN Adjacency SID (Walkthrough)
      • SR and RSVP-TE interaction
      • SR Basic Inter-area with ISIS
      • SR Basic Inter-area with OSPF
      • SR Basic Inter-IGP (redistribution)
      • SR Basic Inter-AS using BGP
      • SR BGP Data Center (eBGP)
      • SR BGP Data Center (iBGP)
      • LFA
      • LFA Tiebreakers (ISIS)
      • LFA Tiebreakers (OSPF)
      • Remote LFA
      • RLFA Tiebreakers?
      • TI-LFA
      • Remote LFA or TILFA?
      • TI-LFA Node Protection
      • TI-LFA SRLG Protection
      • TI-LFA Protection Priorities (ISIS)
      • TI-LFA Protection Priorities (OSPF)
      • Microloop Avoidance
      • SR/LDP Interworking
      • SR/LDP SRMS OSPF Inter-Area
      • SR/LDP Design Challenge #1
      • SR/LDP Design Challenge #2
      • Migrate LDP to SR (ISIS)
      • OAM with SR
      • SR-MPLS using IPv6
      • Basic SR-TE with AS
      • Basic SR-TE with AS and ODN
      • SR-TE with AS Primary/Secondary Paths
      • SR-TE Dynamic Policies
      • SR-TE Dynamic Policy with Margin
      • SR-TE Explicit Paths
      • SR-TE Disjoint Planes using Anycast SIDs
      • SR-TE Flex-Algo w/ Latency
      • SR-TE Flex-Algo w/ Affinity
      • SR-TE Disjoint Planes using Flex-Algo
      • SR-TE BSIDs
      • SR-TE RSVP-TE Stitching
      • SR-TE Autoroute Include
      • SR Inter-IGP using PCE
      • SR-TE PCC Features
      • SR-TE PCE Instantiated Policy
      • SR-TE PCE Redundancy
      • SR-TE PCE Redundancy w/ Sync
      • SR-TE Basic BGP EPE
      • SR-TE BGP EPE for Unified MPLS
      • SR-TE Disjoint Paths
      • SR Converged SDN Transport Challenge
      • SR OAM DPM
      • SR OAM Tools
      • Performance-Measurement (Interface Delay)
    • SRv6
      • Start
      • Topology
      • Basic SRv6
      • SRv6 uSID
      • SRv6 uSID w/ EVPN-VPWS and BGP IPv4/IPv6
      • SRv6 uSID w/ SR-TE
      • SRv6 uSID w/ SR-TE Explicit Paths
      • SRv6 uSID w/ L3 IGW
      • SRv6 uSID w/ Dual-Connected PE
      • SRv6 uSID w/ Flex Algo
      • SRv6 uSID - Scale (Pt. 1)
      • SRv6 uSID - Scale (Pt. 2)
      • SRv6 uSID - Scale (Pt. 3) (UPA Walkthrough)
      • SRv6 uSID - Scale (Pt. 4) (Flex Algo)
      • SRv6 uSID w/ TI-LFA
    • Multicast
      • Start
      • Topology
      • Basic PIM-SSM
      • PIM-SSM Static Mapping
      • Basic PIM-SM
      • PIM-SM with Anycast RP
      • PIM-SM with Auto-RP
      • PIM-SM with BSR
      • PIM-SM with BSR for IPv6
      • PIM-BiDir
      • PIM-BiDir for IPv6
      • PIM-BiDir with Phantom RP
      • PIM Security
      • PIM Boundaries with AutoRP
      • PIM Boundaries with BSR
      • PIM-SM IPv6 using Embedded RP
      • PIM SSM Range Note
      • PIM RPF Troubleshooting #1
      • PIM RPF Troubleshooting #2
      • PIM RP Troubleshooting
      • PIM Duplicate Traffic Troubleshooting
      • Using IOS-XR as a Sender/Receiver
      • PIM-SM without Receiver IGMP Joins
      • RP Discovery Methods
      • Basic Interdomain Multicast w/o MSDP
      • Basic Interdomain Multicast w/ MSDP
      • MSDP Filtering
      • MSDP Flood Reduction
      • MSDP Default Peer
      • MSDP RPF Check (IOS-XR)
      • MSDP RPF Check (IOS-XE)
      • Interdomain MBGP Policies
      • PIM Boundaries using MSDP
    • MVPN
      • Start
      • Topology
      • Profile 0
      • Profile 0 with data MDTs
      • Profile 1
      • Profile 1 w/ Redundant Roots
      • Profile 1 with data MDTs
      • Profile 6
      • Profile 7
      • Profile 3
      • Profile 3 with S-PMSI
      • Profile 11
      • Profile 11 with S-PMSI
      • Profile 11 w/ Receiver-only Sites
      • Profile 9 with S-PMSI
      • Profile 12
      • Profile 13
      • UMH (Upstream Multicast Hop) Challenge
      • Profile 13 w/ Configuration Knobs
      • Profile 13 w/ PE RP
      • Profile 12 w/ PE Anycast RP
      • Profile 14 (Partitioned MDT)
      • Profile 14 with Extranet option #1
      • Profile 14 with Extranet option #2
      • Profile 14 w/ IPv6
      • Profile 17
      • Profile 19
      • Profile 21
    • MVPN SR
      • Start
      • Topology
      • Profile 27
      • Profile 27 w/ Constraints
      • Profile 27 w/ FRR
      • Profile 28
      • Profile 28 w/ Constraints and FRR
      • Profile 28 w/ Data MDTs
      • Profile 29
    • VPWS
      • Start
      • Topology
      • Basic VPWS
      • VPWS with Tag Manipulation
      • Redundant VPWS
      • Redundant VPWS (IOS-XR)
      • VPWS with PW interfaces
      • Manual VPWS
      • VPWS with Sequencing
      • Pseudowire Logging
      • VPWS with FAT-PW
      • MS-PS (Pseudowire stitching)
      • VPWS with BGP AD
    • VPLS
      • Start
      • Topology
      • Basic VPLS with LDP
      • VPLS with LDP and BGP
      • VPLS with BGP only
      • Hub and Spoke VPLS
      • Tunnel L2 Protocols over VPLS
      • Basic H-VPLS
      • H-VPLS with BGP
      • H-VPLS with QinQ
      • H-VPLS with Redundancy
      • VPLS with Routing
      • VPLS MAC Protection
      • Basic E-TREE
      • VPLS with LDP/BGP-AD and XRv RR
      • VPLS with BGP and XRv RR
      • VPLS with Storm Control
    • EVPN
      • Start
      • Topology
      • EVPN VPWS
      • EVPN VPWS Multihomed
      • EVPN VPWS Multihomed Single-Active
      • Basic Single-homed EVPN E-LAN
      • EVPN E-LAN Service Label Allocation
      • EVPN E-LAN Ethernet Tag
      • EVPN E-LAN Multihomed
      • EVPN E-LAN on XRv
      • EVPN IRB
      • EVPN-VPWS Multihomed IOS-XR (All-Active)
      • EVPN-VPWS Multihomed IOS-XR (Port-Active)
      • EVPN-VPWS Multihomed IOS-XR (Single-Active)
      • EVPN-VPWS Multihomed IOS-XR (Non-Bundle)
      • PBB-EVPN (Informational)
    • BGP Multi-Homing (XE)
      • Start
      • Topology
      • Lab1 ECMP
      • Lab2 UCMP
      • Lab3 Backup Path
      • Lab4 Shadow Session
      • Lab5 Shadow RR
      • Lab6 RR with Add-Path
      • Lab7 MPLS + Add Path ECMP
      • Lab8 MPLS + Shadow RR
      • Lab9 MPLS + RDs + UCMP
    • BGP Multi-Homing (XR)
      • Start
      • Topology
      • Lab1 ECMP
      • Lab2 UCMP
      • Lab3 Backup Path
      • Lab4 “Shadow Session”
      • Lab5 “Shadow RR”
      • Lab6 RR with Add-Path
      • Lab7 MPLS + Add Path ECMP
      • Lab8 MPLS + “Shadow RR”
      • Lab9 MPLS + RDs + UCMP
      • Lab10 MPLS + Same RD + Add-Path + UCMP
      • Lab11 MPLS + Same RD + Add-Path + Repair Path
    • BGP
      • Start
      • Conditional Advertisement
      • Aggregation and Deaggregation
      • Local AS
      • BGP QoS Policy Propagation
      • Non-Optimal eBGP Routing
      • Multihomed Enterprise Challenge
      • Provider Communities
      • Destination-Based RTBH
      • Destination-Based RTBH (Community-Based)
      • Source-Based RTBH
      • Source-Based RTBH (Community-Based)
      • Multihomed Enterprise Challenge (XRv)
      • Provider Communities (XRv)
      • DMZ Link BW Lab1
      • DMZ Link BW Lab2
      • PIC Edge in the Global Table
      • PIC Edge Troubleshooting
      • PIC Edge for VPNv4
      • AIGP
      • AIGP Translation
      • Cost-Community (iBGP)
      • Cost-Community (confed eBGP)
      • Destination-Based RTBH (VRF Provider-triggered)
      • Destination-Based RTBH (VRF CE-triggered)
      • Source-Based RTBH (VRF Provider-triggered)
      • Flowspec (Global IPv4/6PE)
      • Flowspec (VRF)
      • Flowspec (Global IPv4/6PE w/ Redirect)
      • Flowspec (Global IPv4/6PE w/ Redirect) T-Shoot
      • Flowspec (VRF w/ Redirect)
      • Flowspec (Global IPv4/6PE w/ CE Advertisement)
    • Intra-AS L3VPN
      • Start
      • Partitioned RRs
      • Partitioned RRs with IOS-XR
      • RT Filter
      • Non-Optimal Multi-Homed Routing
      • Troubleshoot #1 (BGP)
      • Troubleshoot #2 (OSPF)
      • Troubleshoot #3 (OSPF)
      • Troubleshoot #4 (OSPF Inter-AS)
      • VRF to Global Internet Access (IOS-XE)
      • VRF to Global Internet Access (IOS-XR)
    • Inter-AS L3VPN
      • Start
      • Inter-AS Option A
      • Inter-AS Option B
      • Inter-AS Option C
      • Inter-AS Option AB (D)
      • CSC
      • CSC with Option AB (D)
      • Inter-AS Option C - iBGP LU
      • Inter-AS Option B w/ RT Rewrite
      • Inter-AS Option C w/ RT Rewrite
      • Inter-AS Option A Multi-Homed
      • Inter-AS Option B Multi-Homed
      • Inter-AS Option C Multi-Homed
    • Russo Inter-AS
      • Start
      • Topology
      • Option A L3NNI
      • Option A L2NNI
      • Option A mVPN
      • Option B L3NNI
      • Option B mVPN
      • Option C L3NNI
      • Option C L3NNI w/ L2VPN
      • Option C mVPN
    • BGP RPKI
      • Start
      • RPKI on IOS-XE (Enabling the feature)
      • RPKI on IOS-XE (Validation)
      • RPKI on IOS-XR (Enabling the feature)
      • Enable SSH in Routinator
      • RPKI on IOS-XR (Validation)
      • RPKI on IOS-XR (RPKI Routes)
      • RPKI on IOS-XR (VRF)
      • RPKI iBGP Mesh (No Signaling)
      • RPKI iBGP Mesh (iBGP Signaling)
    • NAT
      • Start
      • Egress PE NAT44
      • NAT44 within an INET VRF
      • Internet Reachability between VRFs
      • CGNAT
      • NAT64 Stateful
      • NAT64 Stateful w/ Static NAT
      • NAT64 Stateless
      • MAP-T BR
    • BFD
      • Start
      • Topology
      • OSPF Hellos
      • ISIS Hellos
      • BGP Keepalives
      • PIM Hellos
      • Basic BFD for all protocols
      • BFD Asymmetric Timers
      • BFD Templates
      • BFD Tshoot #1
      • BFD for Static Routes
      • BFD Multi-Hop
      • BFD for VPNv4 Static Routes
      • BFD for VPNv6 Static Routes
      • BFD for Pseudowires
    • QoS
      • Start
      • QoS on IOS-XE
      • Advanced QoS on IOS-XE Pt. 1
      • Advanced QoS on IOS-XE Pt. 2
      • MPLS QoS Design
      • Notes - QoS on IOS-XR
    • NSO
      • Start
      • Basic NSO Usage
      • Basic NSO Template Service
      • Advanced NSO Template Service
      • Advanced NSO Template Service #2
      • NSO Template vs. Template Service
      • NSO API using Python
      • NSO API using Python #2
      • NSO API using Python #3
      • Using a NETCONF NED
      • Python Service
      • Nano Services
    • MDT
      • Start
      • MDT Server Setup
      • Basic Dial-Out
      • Filtering Data using XPATH
      • Finding the correct YANG model
      • Finding the correct YANG model #2
      • Event-Driven MDT
      • Basic Dial-In using gNMI
      • Dial-Out with TLS
      • Dial-In with TLS
      • Dial-In with two-way TLS
    • App-Hosting
      • Start
      • Lab - iperf3 Docker Container
      • Notes - LXC Container
      • Notes - Native Applications
      • Notes - Process Scripts
    • ZTP
      • Notes - Classic ZTP
      • Notes - Secure ZTP
    • L2 Connectivity Notes
      • 802.1ad (Q-in-Q)
      • MST-AG
      • MC-LAG
      • G.8032
    • Ethernet OAM
      • Start
      • Topology
      • CFM
      • y1731
      • Notes - y1564
    • Security
      • Start
      • Notes - Security ACLs
      • Notes - Hybrid ACLs
      • Notes - MPP (IOS-XR)
      • Notes - MPP (IOS-XE)
      • Notes - CoPP (IOS-XE)
      • Notes - LPTS (IOS-XR)
      • Notes - WAN MACsec White Paper
      • Notes - WAN MACsec Config Guide
      • Notes - AAA
      • Notes - uRPF
      • Notes - VTY lines (IOS-XR)
      • Lab - uRPF
      • Lab - MPP
      • Lab - AAA (IOS-XE)
      • Lab - AAA (IOS-XR)
      • Lab - CoPP and LPTS
    • Assurance
      • Start
      • Notes - Syslog on IOS-XE
      • Notes - Syslog on IOS-XR
      • Notes - SNMP Traps
      • Syslog (IOS-XR)
      • RMON
      • Netflow (IOS-XE)
      • Netflow (IOS-XR)
Powered by GitBook
On this page
  • Answer
  • Explanation
  • Failover Considerations
  • RP Load Sharing
  • Summary
  1. Labs
  2. Multicast

PIM-SM with BSR

Load multicast.init.cfg

#IOS-XE
config replace flash:multicast.init.cfg
 
#IOS-XR
configure
load bootflash:multicast.init.cfg
commit replace
y

  • Configure R2 and R4 to join (*, 239.1.1.1)

  • Configure CSR9 and XR4 as RPs for all IPv4 groups using BSR

    • Both CSR9 and XR4 should be BSRs as well

    • CSR9 should be the preferred BSR and Candidate RP

Use R1 and R3 as the sources to verify that multicast traffic is working.

Answer

#XR4
multicast-routing
 address-family ipv4
  interface Loopback0 enable
!
router pim
 address-family ipv4
  bsr candidate-bsr 1.0.0.14
  bsr candidate-rp 1.0.0.14

#R9
int Lo0
 ip pim sparse-mode
!
ip pim bsr-candidate lo0 32 2
ip pim rp-candidate lo0

#R2
! If you want the router to respond to ICMP for testing, we must enable PIM
ip multicast-routing distributed
!
! Additionally, an RP address must be configured so that the "host" has a valid RPF
! interface for the received multicast traffic.
ip pim rp-address 9.2.5.5  
!
int gi2.525
 ip pim sparse-mode
 ip igmp join-group 239.1.1.1

#R4
! If you want the router to respond to ICMP for testing, we must enable PIM
ip multicast-routing distributed
!
! Additionally, an RP address must be configured so that the "host" has a valid RPF
! interface for the received multicast traffic.
ip pim rp-address 11.4.13.13
!
int GigabitEthernet2.543
 ip pim sparse-mode
 ip igmp join-group 239.1.1.1

Explanation

BSR was created as a standards-based mechanism for propagating RP information within a domain. It is now the preferred choice over the old Cisco-proprietary Auto-RP.

BSR works using native PIM messages that are flooded hop-by-hop. This does not require dense mode, which is a big advantage over Auto-RP.

In BSR, one single BSR (bootstrap router) is elected via the PIM BSR message type. The router with the highest priority, or highest IP address, is elected as the BSR within the PIM domain. A router is configured to be a candidate BSR as follows:

#IOS-XE
ip pim bsr-candidate lo0

#IOS-XR
router pim
 address-family ipv4
  bsr candidate-bsr <IP addr>

An IOS-XE router uses a default BSR priority of 0, while IOS-XR uses a default BSR priority of 1. This means that, by default, an IOS-XR router is always elected over an IOS-XE router. In our lab, we can simply use a priority of 2 on CSR9 to elect it as the BSR. The first parameter after the interface is the hash-mask-len, and is required. We will explore this later in this lab.

#R9
int Lo0
 ip pim sparse-mode
!
ip pim bsr-candidate lo0 32 2

Previously on CSR9 we saw that XR4 was elected as BSR:

Now we see that CSR9 is elected:

We can also see this on XR4:

Another difference between BSR and Auto-RP is that the BSR propagates all RP mappings, not just the best RP for a given mapping. This is called the RP set. We can see this on any PIM router in the domain:

Currently, the RP candidates are left at their default values. What is somewhat annoying is that the lowest priority RP candidate is the best RP. This is completely opposite how priority works for the BSR election. (The elected BSR has the highest priority). IOS-XE’s default priority is 0 and IOS-XR’s default priority is 192. This means that an IOS-XE candidate RP will always be preferred over an IOS-XR candidate RP for the same mapping, by default. IOS-XE’s implementation predates the BSR RFC which specified that the default priority should be 192.

To see which router would be used as RP for a given group address, we can use the following command. I cannot find an equivalent command for IOS-XR.

This means that we don’t need to change priorities to use R9 as the primary RP.

Even though R9 is the primary RP due to the lower priority value, all routers will still build auto-tunnels for Registering to all RPs in the set:

A BSR message looks as follows. It is sent to the link-local PIM multicast address, and is flooded hop-by-hop by PIM routers. Notice that this message controls the BSR election and the RP set advertisement. For each RP range, all RPs are included. If a candidate BSR sees another BSR with a higher priority, it stops sending BSR messages.

The BSR learns of all RP mappings via unicast PIM RP advertisement messages. Since the BSR is elected within PIM itself, the candidate RP learns of the BSR’s unicast address. The candidate RP then sends its mapping information via a unicast message as we see below. (Note that this was taken before CSR9 took over as the BSR).

Failover Considerations

Above, we see that there is a default 150second hold time. Let’s test failover by shutting down Lo0 on CSR9:

#CSR9
int Lo0
 shut

Immediately, all routers remove R9 as the BSR and candidate RP. It appears that XR4 finds that R9 is no longer reachable in the IGP and therefore immediately becomes the BSR, and advertises a BSR mesage with itself as the Candidate RP.

Update: Actually, I don’t think this is because XR4 finds R9 is no longer reachable. This is because R9 sends a failover BSR message, allowing XR4 to immediately become the best BSR. R9 sends a C-RP mapping for holdtime = 0 to immediately expire its C-RP entry on any candidate BSRs, and sends a failover BSM message, setting its BSR priority to 0.

If we simulate a failure of CSR9 completely by shutting down Gi2, then all routers must simply wait for the BSR holdtime and C-RP holdtime to expire (2.5 minutes). Once the BSR holdtime expires, XR14 becomes the BSR. XR14 also loses any C-RP mapping for CSR9, and only advertises itself as a C-RP.

A more subtle failure is for CSR9 to simply stop advertising itself as Candidate RP.

#CSR9
int Lo0
 no shut
!
! Wait for CSR9 to be advertised as C-RP again
no ip pim rp-candidate Loopback0

In this situation, we again have immediate failover. CSR9 is still acting as BSR, so it immediately removes itself from the RP set and advertises a new BSR message with only XR4 as the C-RP.

Let’s now try disabling both CSR9’s BSR and C-RP advertisements.

#CSR9
no ip pim bsr-candidate Loopback0
no ip pim rp-candidate Loopback0

Immediately, CSR9 sends a “failover” BSR message, reducing its BSR priority to 0.

Interestingly, in the above debug we also see how BSR flooding works. The BSR message must be received on the RPF interface. This prevents BSR messages looping around endlessly.

So immediately all routers will see XR4 as the BSR. However, the CSR9 C-RP mapping still needs to wait 2.5 minutes to time out.

To speed this up, we could try to lower the interval at which the C-RP advertisement is sent to the BSR. Since the BSR is R9, this is sent “internally” to itself. On IOS-XE, we can set this as low as one second, but only as low as 30 seconds on IOS-XR. The hold time appears to be 2.5 times the interval.

#IOS-XE
ip pim rp-candidate Loopback0 interval <1-16383 seconds>

#IOS-XR
router pim
 add ipv4
  bsr candidate-rp 1.0.0.14 interval <30-600 seconds>

Unfortunately this does not help us in this case, because CSR9 itself is also the BSR. So when CSR9 fails as both the BSR and C-RP, all routers still have to hold the RP information for R9 for 2.5 minutes. There does not appear to be a way to tune the holdtime within the BSR message itself. The RP-C interval is only used for the C-RP advertisement that is unicast to the BSR.

If we set XR4 as the BSR, then we can try to use the C-RP interval to provide fast failover:

#XR4
router pim
 address-family ipv4
  bsr candidate-bsr 1.0.0.14 priority 3

#CSR9
ip pim rp-candidate Loopback0 interval 1

Interestingly, IOS-XR as BSR appears to set the C-RP holdtime in the BSR message. This was not the case on IOS-XE. However, XR4 is only sending BSR messages at 30 second intervals. This appears to be the lowest it can go, based on its C-RP interval. So on all other routers, the R9 RP times out after just 2 seconds.

This makes fast failover using a low timer on the BSR message difficult to implement. Instead, Anycast RP would provide faster failover, as the IGP drives the convergence, and you don’t need to worry about inter-operability issues like we do with BSR.

RP Load Sharing

Since the BSR advertises the entire RP set, all routers can alternate using RPs for group addresses. In order for this to work, all routers use the same formula to select the same RP for a given group.

This formula uses the group address, RP address, and the hash mask as input. The hash mask essentially means that only the first X bits in the group address are used. For example, if the hash mask is 30, then group addresses 239.0.0.0 through 239.0.0.3 are all reduced to 239.0.0.0 in the formula. This means that each range will resolve to the same RP. For example, range 239.0.0.0/30 is RP1 and 239.0.0.4/30 is RP2. The BSR controls the hash mask length.

I’ve reverted back to the original configuration. R9 is BSR again and advertises hash mask length 32. This means that every single group address has its own RP. We can confirm the hash mask length by looking at the elected BSR:

IOS-XE also gives us a command to run the RP formula and determine which RP is used for which group. The highest hash mask value is the best.

Currently all groups are picking R9 as the RP. This is because the priority must tie in order for the hash value to be used. R9 has priority 0, so it is always the best RP:

Let’s set R9’s priority to the RFC default of 192 as well.

#CSR9
ip pim rp-candidate lo0 priority 192

Now the hash value selects XR4 for every other group.

By using a mask such as /24, every other range of /24 will use either RP.

#CSR9
ip pim bsr-candidate lo0 24 2

For example, everything in 239.1.1.X is now using R9. Notice that the hash value is the same. This is because the group address is effecitively reduced to 239.1.1.0 in the equation, no matter the last octect.

Another range, such as 239.1.4.0/24, always uses XR4:

In my opinion, the hash mask is not very useful. I don’t see why it matters very much whether all /24s resolve to the same RP, or just every other group address uses a different RP. I think this adds too much complexity, and BSR could have simply just always used a /32 hash mask.

Note that the default hash-mask for IOS-XE is 0. This means that the group address is not used in the hashing function at all. The formula produces a large hash value for whichever RP has the lowest IP address.

Summary

BSR is not all that complex, but you must remember a few things:

  • A single BSR is elected, and the highest priority value is best.

    • IOS-XE uses a BSR prority value of 0 by default

    • IOS-XR uses a BSR prority value of 1 by default

  • All C-RP mappings are advertised as a set by the BSR. Each router uses the RP with the lowest priority value as best. If this ties, the hash value comes into play to select an RP.

    • IOS-XE uses a C-RP priority value of 0 by default, which is the best possible value.

  • BSR messages are flooded hop by hop, within PIM itself. To prevent flooding loops, an RPF check is implemented. The RPF check is based on the IP of the BSR. The BSR must have a valid RPF interface in order for other routers to accept the RP mappings.

PreviousPIM-SM with Auto-RPNextPIM-SM with BSR for IPv6

Last updated 1 month ago