L3 · multicast · reviewed
RP discovery
Rendezvous point discovery: static, BSR, Auto-RP and Anycast-RP
Every router in a sparse-mode domain has to agree which rendezvous point serves which group. Four mechanisms answer that, and disagreement is silent.
Presenter modeEmbed this figure
Why it exists
Sparse mode meets sources and receivers at a rendezvous point. That only works if the source’s router and the receiver’s router pick the same one, and nothing in PIM makes them — the agreement has to come from somewhere else. RP DiscoveryRFC 7761 · INTERNET STANDARD · March 2016
Four mechanisms answer it. Static configuration on every router; BSR, which elects a bootstrap router that publishes an RP set inside PIM; Auto-RP, which is Cisco’s earlier answer using two dense-mode groups; and Anycast RP, which is not a discovery mechanism at all but makes one address resolve to several routers. Protocol OverviewRFC 5059 · PROPOSED STANDARD · January 2008
Bidir-PIM needs an RP too, and SSM needs none. A domain running SSM for its one-to-many traffic has no RP discovery problem for that traffic at all.
Agreeing on the rendezvous point
Static configuration is the simplest answer and the easiest to get subtly wrong. Where several RPs serve one range, a hash — not a preference — decides.
Sparse mode needs a rendezvous point, and every router that might join a group has to name the same one for it. That agreement is the whole problem. RP1 · 10.255.0.1. RP2 · 10.255.0.2. Router A: Needs RP for 239.1.1.1. Router B: Needs RP for 239.1.1.1.
- Link
- Blocking
- Packet in flight
- Discarded
- Emphasis
Text equivalent of this diagram
| Element | Kind | State |
|---|---|---|
| RP1 · 10.255.0.1 | router | — |
| RP2 · 10.255.0.2 | router | — |
| Router A | router | Needs: RP for 239.1.1.1 |
| Router B | router | Needs: RP for 239.1.1.1 |
| Router A — RP1 · 10.255.0.1 | link | up |
| Router B — RP2 · 10.255.0.2 | link | up |
Sparse mode needs a rendezvous point, and every router that might join a group has to name the same one for it. That agreement is the whole problem.
What changed
- Router A: Needs → RP for 239.1.1.1
- Router B: Needs → RP for 239.1.1.1
How it works
However a router learns its candidates, the group-to-RP decision is local and identical everywhere: longest match on the group range first, then highest priority — where a lower number is better — then a hash over the group and RP addresses, then the highest address. Group-to-RP MappingRFC 7761 · INTERNET STANDARD · March 2016
The hash matters more than it looks. It means several RPs serving one range share the groups deterministically, so every router reaches the same answer without negotiating and different groups land on different RPs. Hash FunctionRFC 7761 · INTERNET STANDARD · March 2016
BSR separates two jobs. Candidate RPs unicast their willingness to the elected bootstrap router, which assembles an RP set and floods it hop by hop. The BSR never assigns a group to an RP — every router does that itself from the same list. Receiving and Using the RP-SetRFC 5059 · PROPOSED STANDARD · January 2008
Anycast RP is orthogonal. Several routers own the same RP address and the IGP picks the nearest, which gives sub-second failover and no shared state — so the RPs have to exchange source information themselves, with MSDP in a mesh group or with PIM register forwarding. MechanismRFC 4610 · PROPOSED STANDARD · August 2006
On the wire
Constructed examples, encoded from the field table below them — not captured traffic.
- IPv4
- Protocol 103, multicast to 224.0.0.13 with TTL 1, flooded hop by hop rather than routed — which is why a PIM adjacency gap stops the RP set dead. RFC 7761
- PIM header
- Version, type 4, the no-forward bit, and the checksum. RFC 5059
- RP set
- The elected BSR, then one entry per group range listing its candidate RPs. RFC 5059
Configure it
ip pim bsr-candidate Loopback0 30 200Loopback, hash mask length, priority. Higher priority wins the BSR election — the opposite sense to the RP priority two lines below, in the same mechanism.
Common mistake: Choosing the priority with the RP sense in mind. Nothing warns, and the domain elects the router nobody intended.
RFC 5059 §3.1
ip pim rp-candidate Loopback0 group-list MCAST-RANGES priority 10 ip access-list standard MCAST-RANGES permit 239.0.0.0 0.255.255.255Advertised by unicast to the elected BSR, not flooded. Lower RP priority is better, which is the reverse of the BSR priority above.
RFC 5059 §3.2
! the alternative, and not to be combined with the above: ! ip pim rp-address 10.255.0.1 MCAST-RANGES override`override` makes the static entry win over anything learned — which is also the default on most platforms. A leftover line like this is the usual cause of one router disagreeing with a healthy BSR.
ip pim bsr-candidate Loopback0 30 200 accept-rp-candidate TRUSTED-RPSBounds which routers may advertise themselves as RPs. Without it, any PIM router in the domain can put itself into the RP set.
interface GigabitEthernet0 ip pim bsr-borderStops Bootstrap messages crossing this interface, which is what defines the edge of the PIM domain. Without it the RP set leaks to a neighbouring domain that has its own.
RFC 5059 §3.4
Verify
show ip pim bsr-router- Which router is the elected BSR, and its priority.
show ip pim rp mapping- The RP set as this router received it, and its origin.
show ip pim rp-hash 239.1.1.1- The resolved RP — the answer to compare between routers.
Caveats
- BSR priority: higher is better. RP priority: lower is better. The two run in opposite directions in one mechanism.
- A static RP overrides a learned one by default, which makes a leftover entry invisible in every BSR diagnostic.
- Without `bsr-border` the RP set crosses into a neighbouring domain that has its own.
When it breaks
Symptom first, because that is what you have when it happens.
A group works between some routers and not others. PIM neighbours are up everywhere and nothing is logged.
Narrow it down
- Ask each router which RP it resolves for the group, and compare — not the configuration, the resolved mapping.
- Check for a static entry overriding what BSR advertised.
- Check whether a more specific group range points somewhere else.
Cause
The source’s router and the receiver’s router resolved different RPs, so the register and the join never meet. A router that is not an RP does not object to a join arriving for one.
Fix
Make the resolved mapping identical everywhere, then remove whichever mechanism was not chosen for this domain.
Group-to-RP MappingRFC 7761 · INTERNET STANDARD · March 2016BSR is deployed and one router still uses the old rendezvous point.
Narrow it down
- Look for a static RP configuration on that router.
- Check whether the platform prefers static over learned by default.
- Confirm the router is receiving the RP set at all.
Cause
A leftover static entry, which most platforms prefer over anything learned. Every BSR diagnostic looks healthy because BSR is working — it is being ignored.
Fix
Remove the static entry, or configure it to yield to a learned mapping where the platform supports that.
Part of the domain has an empty RP set and cannot join any group.
Narrow it down
- Trace the Bootstrap message hop by hop and find where it stops.
- Check for a PIM adjacency gap or a boundary filter on the path.
- Confirm the BSR is actually elected and flooding.
Cause
Bootstrap messages are flooded hop by hop through PIM. A gap in PIM adjacency, or a multicast boundary that filters them, stops the RP set at that point.
Fix
Restore PIM adjacency along the path, and check that any multicast boundary does not filter the bootstrap traffic.
Forwarding Bootstrap MessagesRFC 5059 · PROPOSED STANDARD · January 2008Anycast RP is deployed and receivers on one side of the network never see sources on the other.
Narrow it down
- Check which anycast RP the source registered with and which one the receiver joined.
- Confirm the RPs exchange source state, by MSDP mesh group or PIM register forwarding.
- Verify the MSDP session is sourced from a unique loopback rather than the anycast address.
Cause
Anycast made the address redundant and did nothing about the state. Without state sharing, each RP knows half the picture.
Fix
Add an MSDP mesh group between the RPs, or use RFC 4610 register forwarding. Either way, source the sessions from unique addresses.
MechanismRFC 4610 · PROPOSED STANDARD · August 2006Two RPs serve one range at equal priority and almost every group lands on the same one.
Narrow it down
- Check the hash mask length the bootstrap router is advertising.
- List the groups in use and see how much of the address they have in common.
- Compare the resolved RP for several adjacent groups.
Cause
The hash covers only the masked bits of the group address. With a short mask and groups that differ only in the low octet, every group hashes the same way — which is deliberate, because it keeps related groups on one RP.
Fix
Lengthen the hash mask so more of the group address matters, or allocate group addresses that differ in the bits the mask covers.
Hash FunctionRFC 7761 · INTERNET STANDARD · March 2016
Design notes
Choose one mechanism per domain and remove the others. Most RP incidents are not a mechanism failing; they are two mechanisms both working, on different routers, toward different answers.
A static RP usually overrides a dynamically learned one. That default is sensible and it makes a leftover static entry invisible to every BSR or Auto-RP diagnostic — the RP set looks correct and one router ignores it.
Static plus Anycast RP is a defensible modern choice: no discovery protocol to debug, redundancy from the IGP, and failover at IGP speed. Its cost is configuration on every router, so it wants automation rather than an engineer.
Watch the two priorities running in opposite directions. A higher BSR priority is better; a lower RP priority is better. Nothing warns about a value chosen with the wrong sense — the domain simply elects the router nobody meant. Bootstrap Router ElectionRFC 5059 · PROPOSED STANDARD · January 2008
Misconceptions
- “The BSR assigns groups to rendezvous points.”
- It publishes a list. Every router applies the same range, priority and hash rules to that list and reaches the same answer independently, which is what lets the mechanism scale — nothing is recomputed centrally when a group appears. Receiving and Using the RP-SetRFC 5059 · PROPOSED STANDARD · January 2008
- “With several RPs for a range, the lowest address wins.”
- A hash over the group and RP addresses decides, after range specificity and priority. That is deliberate: it spreads groups across the available RPs instead of concentrating all of them on one. Hash FunctionRFC 7761 · INTERNET STANDARD · March 2016
- “Anycast RP is an alternative to BSR.”
- It is orthogonal. Anycast makes one address resolve to several routers; the domain still needs to learn that address, statically or through BSR. And the anycast RPs still have to share source state between themselves. OverviewRFC 4610 · PROPOSED STANDARD · August 2006
- “Higher priority is better throughout the mechanism.”
- A higher BSR priority is better and a lower RP priority is better. The two run in opposite directions inside one design, and a value chosen with the wrong sense produces a silently wrong election. Bootstrap Router ElectionRFC 5059 · PROPOSED STANDARD · January 2008
More walkthroughs
Letting the domain work out its own RP setbaseline
Candidate RPs advertise themselves to an elected bootstrap router, which publishes one RP set to the whole domain inside PIM.
Candidate bootstrap routers flood Bootstrap messages. Highest priority wins, then highest address, and the loser stops flooding its own. C-BSR · priority 200: State Elected. C-BSR · priority 100. C-RP 10.255.0.1. C-RP 10.255.0.2. Every other router.
- Link
- Blocking
- Packet in flight
- Discarded
- Emphasis
Text equivalent of this diagram
| Element | Kind | State |
|---|---|---|
| C-BSR · priority 200 | router | State: Elected |
| C-BSR · priority 100 | router | — |
| C-RP 10.255.0.1 | router | — |
| C-RP 10.255.0.2 | router | — |
| Every other router | router | — |
| C-BSR · priority 200 — C-RP 10.255.0.1 | link | up |
| C-BSR · priority 200 — C-RP 10.255.0.2 | link | up |
| C-BSR · priority 200 — Every other router | link | up |
| C-BSR · priority 200 — C-BSR · priority 100 | link | up |
Candidate bootstrap routers flood Bootstrap messages. Highest priority wins, then highest address, and the loser stops flooding its own.
Note the direction: highest priority, and here a higher number is better. The RP priority that appears later in the same design is the opposite — lower is better. Two priorities in one mechanism, running in opposite directions.
What changed
- Emphasis: Elected BSR
- Emphasis: Standby
- C-BSR · priority 200: State → Elected
Half the domain has a different rendezvous pointfailure
One router was configured with a different RP. Adjacencies are fine, nothing logs, and the group works between some routers and not others.
Some receivers get the group and some get nothing. PIM neighbours are all up, the source is registered, and there is no error anywhere. RP · 10.255.0.1. 10.255.0.9 · not an RP. Source’s DR. Receiver’s DR: Joined (*,G) sent.
- Link
- Blocking
- Packet in flight
- Discarded
- Emphasis
Text equivalent of this diagram
| Element | Kind | State |
|---|---|---|
| RP · 10.255.0.1 | router | — |
| 10.255.0.9 · not an RP | router | — |
| Source’s DR | router | — |
| Receiver’s DR | router | Joined: (*,G) sent |
| Source’s DR — RP · 10.255.0.1 | link | up |
| Receiver’s DR — 10.255.0.9 · not an RP | link | up |
Some receivers get the group and some get nothing. PIM neighbours are all up, the source is registered, and there is no error anywhere.
What changed
- Emphasis: No traffic
- Receiver’s DR: Joined → (*,G) sent
Terms
- RP set
- The list of candidate rendezvous points a BSR floods to the domain. It is a list, not an assignment — each router applies range, priority and hash rules to it and reaches the same answer alone.
- Group-to-RP hash
- The deterministic function that picks an RP when several serve one range at equal priority. It spreads groups across the available RPs and guarantees every router picks the same one.
- Anycast RP
- Several routers owning one RP address, with the IGP choosing the nearest. It makes the address redundant and nothing else — the RPs still have to share source state themselves.