Hello, everyone.
I did not find a lesson for MSDP so I am creating a new topic if you don’t mind.
This protocol has been very simple so far until I ran into all of the RPF rules that it uses to prevent loops, that part makes my head spin.
Let’s start with Rule 1..
Rule 1: Applied when the sending MSDP peer is also an interior MBGP peer.
The lines highlight the peerings. Since we have both BGP and MSDP…
R4 is the only RP here. The reason why it’s the RP is because I want it to generate SA messages, the other routers aren’t RPs, they are there just to forward and process them.
The rule seems to state this:
When the sending MSDP peer is also an internal MBGP peer, MSDP checks the BGP MRIB for the best path to the RP that originated the SA mes
If the MRIB contains a best path, the MSDP peer uses that information to RPF check the originating RP of the SA. If there is no best path in the MRIB, the unicast RIB is checked for a proper RPF path. If no path is found in either table, the RPF check fails. The IP address of the sending MSDP peer must be same as the BGP neighbor address (not the next hop) in order to pass the RPF check.
In the example above, when the source starts transmitting, R4 generates an SA and sends it to R2 and R3.
R2 and R3 will send the SA to R1. Both of these MSDP peers are internal and run iBGP.
So if I understand this right, R1 will check its BGP table (I only have the unicast RIB for simplicity), find the best path towards the originator of the SA (R4) and compare whether the sending MSDP peer’s IP matches the one in the BGP table for the best route towards R4?
So in simple terms, R1 receives the SA. It checks the unicast RIB
It realizes that the path via R2 is the best path. It then compares the IP address of the MSDP peer who sent this SA (R2 and R3) with the BGP neighbor address, which has to be 2.2.2.2 in this case.
Since the best path is via R2, it only accepts SAs from peers that have 2.2.2.2 as their IP because this matches the BGP neighbor address.
![]()
![]()
Is my understanding correct here?
I’ve purposely changed the MSDP peering later for R1-R2 to be over the physical interface IP instead. So on R1, the BGP peering is via 2.2.2.2 while the MSDP peering is via 192.168.21.2.
Since the MSDP peer’s IP from R2 does not match the BGP neighbor address, neither the SAs from R2 or R3 are accepted
![]()

Thank you for the confirmation,
David

