This post is talking about using MSDP to join multicast domains together.
The topology here is very simple even if it does consist of 6 routers.
R1-R2-R3---------
R4-R5-R6
Multicast Domain 1
R1, R2 and R3 use EIGRP as their IGP
AutoRP is used for RP election and R3 will be the RP
Multicast Domain 2
R4, R5 and R6 use OSPF as their IGP
AutoRP is used for RP election and R4 will be the RP
Both Multicast Domains are connected using BGP (R3 AS 3) and (R4 AS 4)
All routers have their loopback0 interfaces and interconnecting interfaces running PIM sparse-mode so we are using "ip pim autorp listener"
Note: AutoRP advertisements are blocked between R3 and R4 on their
corresponding interfaces "ip multicast boundary 1" is
applied where the 1 refers to an access list which blocks AutoRP rp candidate and mapping agent advertisements but allows all other multicast traffic
The base configurations are shown below
R1
hostname R1
!
no ip domain lookup
ip multicast-routing
!
interface Loopback0
ip address 1.1.1.1 255.255.255.255
ip pim sparse-mode
!
interface Serial0/0
description FR Switch
no ip address
encapsulation frame-relay
!
interface Serial0/0.12 point-to-point
description PVC to R2
ip address 10.1.12.1 255.255.255.0
ip pim sparse-mode
frame-relay interface-dlci 102
!
router eigrp 123
network 1.1.1.1 0.0.0.0
network 10.1.12.1 0.0.0.0
no auto-summary
!
ip pim autorp listener
R2
hostname R2
!
no ip domain lookup
ip multicast-routing
!
interface Loopback0
ip address 2.2.2.2 255.255.255.255
ip pim sparse-mode
!
interface Loopback23
ip address 23.23.23.2 255.255.255.255
!
interface Serial0/0
description FR Switch
no ip address
encapsulation frame-relay
!
interface Serial0/0.21 point-to-point
description PVC to R1
ip address 10.1.12.2 255.255.255.0
ip pim sparse-mode
frame-relay interface-dlci 201
!
interface Serial0/0.23 point-to-point
description PVC to R3
ip address 10.1.23.2 255.255.255.0
ip pim sparse-mode
frame-relay interface-dlci 203
!
router eigrp 123
network 2.2.2.2 0.0.0.0
network 10.1.12.2 0.0.0.0
network 10.1.23.2 0.0.0.0
no auto-summary
!
ip pim autorp listener
R3
hostname R3
!
no ip domain lookup
ip multicast-routing
!
interface Loopback0
ip address 3.3.3.3 255.255.255.255
ip pim sparse-mode
!
interface Loopback34
ip address 34.34.34.3 255.255.255.255
!
interface Serial0/0
description FR Switch
no ip address
encapsulation frame-relay
!
interface Serial0/0.32 point-to-point
description PVC to R2
ip address 10.1.23.3 255.255.255.0
ip pim sparse-mode
frame-relay interface-dlci 302
!
interface Serial0/0.34 point-to-point
description PVC to R4
ip address 10.1.34.3 255.255.255.0
ip pim sparse-mode
frame-relay interface-dlci 304
ip multicast boundary 1
!
router eigrp 123
network 3.3.3.3 0.0.0.0
network 10.1.23.3 0.0.0.0
no auto-summary
!
router bgp 3
no synchronization
bgp log-neighbor-changes
network 34.34.34.3 mask 255.255.255.255
neighbor 10.1.34.4 remote-as 4
no auto-summary
!
ip pim autorp listener
ip pim send-rp-announce Loopback0 scope 3
ip pim send-rp-discovery Loopback0 scope 3
ip msdp peer 34.34.34.4 connect-source Loopback34
!
access-list 1 deny 224.0.1.39
access-list 1 deny 224.0.1.40
access-list 1 permit any
R4
hostname R4
!
no ip domain lookup
ip multicast-routing
!
interface Loopback0
ip address 4.4.4.4 255.255.255.255
ip pim sparse-mode
!
interface Loopback34
ip address 34.34.34.4 255.255.255.255
!
interface Serial0/0
description FR Switch
no ip address
encapsulation frame-relay
!
interface Serial0/0.43 point-to-point
description PVC to R3
ip address 10.1.34.4 255.255.255.0
ip pim sparse-mode
frame-relay interface-dlci 403
ip multicast boundary 1
!
interface Serial0/0.45 point-to-point
description PVC to R5
ip address 10.1.45.4 255.255.255.0
ip pim sparse-mode
frame-relay interface-dlci 405
!
router ospf 1
network 4.4.4.4 0.0.0.0 area 0
network 10.1.45.4 0.0.0.0 area 0
!
router bgp 4
no synchronization
bgp log-neighbor-changes
network 34.34.34.4 mask 255.255.255.255
neighbor 10.1.34.3 remote-as 3
no auto-summary
!
ip pim autorp listener
ip pim send-rp-announce Loopback0 scope 3
ip pim send-rp-discovery Loopback0 scope 3
ip msdp peer 34.34.34.3 connect-source Loopback34
!
access-list 1 deny 224.0.1.39
access-list 1 deny 224.0.1.40
access-list 1 permit any
R5
hostname R5
!
no ip domain lookup
ip multicast-routing
!
interface Loopback0
ip address 5.5.5.5 255.255.255.255
ip pim sparse-mode
!
interface Serial0/0
no ip address
encapsulation frame-relay
no frame-relay inverse-arp
!
interface Serial0/0.54 point-to-point
ip address 10.1.45.5 255.255.255.0
ip pim sparse-mode
frame-relay interface-dlci 504
!
interface Serial0/0.56 point-to-point
ip address 10.1.56.5 255.255.255.0
ip pim sparse-mode
frame-relay interface-dlci 506
!
router ospf 1
log-adjacency-changes
network 5.5.5.5 0.0.0.0 area 0
network 10.1.45.5 0.0.0.0 area 0
network 10.1.56.5 0.0.0.0 area 0
!
ip pim autorp listener
R6
hostname R6
!
no ip domain lookup
ip multicast-routing
!
interface Loopback0
ip address 6.6.6.6 255.255.255.255
ip pim sparse-mode
!
interface Serial0/0
no ip address
encapsulation frame-relay
no frame-relay inverse-arp
!
interface Serial0/0.65 point-to-point
ip address 10.1.56.6 255.255.255.0
ip pim sparse-mode
frame-relay interface-dlci 605
!
router ospf 1
log-adjacency-changes
network 6.6.6.6 0.0.0.0 area 0
network 10.1.56.6 0.0.0.0 area 0
!
ip pim autorp listener
Quick verification of RP Mappings
R1/R2/R3 should have R3 as the RP:
R1#sh ip pim rp map
PIM Group-to-RP Mappings
Group(s) 224.0.0.0/4
RP 3.3.3.3 (?), v2v1
Info source: 3.3.3.3 (?), elected via Auto-RP
Uptime: 00:13:05, expires: 00:02:45
R2#sh ip pim rp map
PIM Group-to-RP Mappings
Group(s) 224.0.0.0/4
RP 3.3.3.3 (?), v2v1
Info source: 3.3.3.3 (?), elected via Auto-RP
Uptime: 00:13:25, expires: 00:02:23
R3#sh ip pim rp map
PIM Group-to-RP Mappings
This system is an RP (Auto-RP)
This system is an RP-mapping agent (Loopback0)
Group(s) 224.0.0.0/4
RP 3.3.3.3 (?), v2v1
Info source: 3.3.3.3 (?), elected via Auto-RP
Uptime: 00:14:41, expires: 00:02:17
R4/R5/R6 will use R4 as their RP:
R4#sh ip pim rp map
PIM Group-to-RP Mappings
This system is an RP (Auto-RP)
This system is an RP-mapping agent (Loopback0)
Group(s) 224.0.0.0/4
RP 4.4.4.4 (?), v2v1
Info source: 4.4.4.4 (?), elected via Auto-RP
Uptime: 00:11:28, expires: 00:02:45
R5#sh ip pim rp map
PIM Group-to-RP Mappings
Group(s) 224.0.0.0/4
RP 4.4.4.4 (?), v2v1
Info source: 4.4.4.4 (?), elected via Auto-RP
Uptime: 00:04:49, expires: 00:02:11
R6#sh ip pim rp map
PIM Group-to-RP Mappings
Group(s) 224.0.0.0/4
RP 4.4.4.4 (?), v2v1
Info source: 4.4.4.4 (?), elected via Auto-RP
Uptime: 00:05:04, expires: 00:02:55
R3 and R4 each have loopback34 advertised into BGP and use this for MSDP peering. MSDP is used to transmit the knowledge of multicast sources between domains. PIM does not need to be run on these interfaces
R3#sh ip msdp peer
MSDP Peer 34.34.34.4 (?), AS 4
Connection status:
State: Up, Resets: 0, Connection source: Loopback34 (34.34.34.3)
Uptime(Downtime): 00:04:40, Messages sent/received: 5/5
Output messages discarded: 0
Connection and counters cleared 00:16:10 ago
SA Filtering:
Input (S,G) filter: none, route-map: none
Input RP filter: none, route-map: none
Output (S,G) filter: none, route-map: none
Output RP filter: none, route-map: none
SA-Requests:
Input filter: none
Peer ttl threshold: 0
SAs learned from this peer: 0
Input queue size: 0, Output queue size: 0
MD5 signature protection on MSDP TCP connection: not enabled
R4#sh ip msdp peer
MSDP Peer 34.34.34.3 (?), AS 3
Connection status:
State: Up, Resets: 0, Connection source: Loopback34 (34.34.34.4)
Uptime(Downtime): 00:04:51, Messages sent/received: 5/5
Output messages discarded: 0
Connection and counters cleared 00:12:34 ago
SA Filtering:
Input (S,G) filter: none, route-map: none
Input RP filter: none, route-map: none
Output (S,G) filter: none, route-map: none
Output RP filter: none, route-map: none
SA-Requests:
Input filter: none
Peer ttl threshold: 0
SAs learned from this peer: 0
Input queue size: 0, Output queue size: 0
MD5 signature protection on MSDP TCP connection: not enabled
So with everything looking ok, our objective is to verify multicast traffic can traverse the domains by having R1 Loopback0 join multicast group 239.1.1.1 with R6 receive a response when it pings that group
R1#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R1(config)#int loopback0
R1(config-if)#ip igmp join-group 239.1.1.1
Lets enable a debug to see if check ping packets arrive (we could use debug ip icmp however that presents less detail):
R1(config-if)#access-list 101 permit icmp any any
R1(config)#do deb ip pack detail 101
IP packet debugging is on (detailed) for access list 101
R1#end
*Mar 1 00:25:49.379: %SYS-5-CONFIG_I: Configured from console by console
R1#sh ip mroute | s 239.1.1.1
(*, 239.1.1.1), 00:05:42/00:02:14, RP 3.3.3.3, flags: SJCL
Incoming interface: Serial0/0.12, RPF nbr 10.1.12.2
Outgoing interface list:
Loopback0, Forward/Sparse, 00:05:42/00:02:14
R1 has R2 as the RPF neighbor for *,239.1.1.1
R2#sh ip mroute | s 239.1.1.1
(*, 239.1.1.1), 00:04:01/00:03:25, RP 3.3.3.3, flags: S
Incoming interface: Serial0/0.23, RPF nbr 10.1.23.3
Outgoing interface list:
Serial0/0.21, Forward/Sparse, 00:04:01/00:03:25
R2 has R3 as the RPF neighbor for *,239.1.1.1
R3#sh ip mroute | s 239.1.1.1
(*, 239.1.1.1), 00:04:27/00:02:57, RP 3.3.3.3, flags: S
Incoming interface: Null, RPF nbr 0.0.0.0
Outgoing interface list:
Serial0/0.32, Forward/Sparse, 00:04:27/00:02:57
R3 has nothing as the RPF neighbor for *,239.1.1.1
When R6 pings 239.1.1.1 it's RP (R4) will discover it as a new multicast source and advertise it to its MSDP peer (R3)
R3#sh ip msdp sa-cache
MSDP Source-Active Cache - 0 entries
R3#deb ip msdp routes
MSDP Routes debugging is on
R6#ping 239.1.1.1
Type escape sequence to abort.
Sending 1, 100-byte ICMP Echos to 239.1.1.1, timeout is 2 seconds:
.
Well that was unsuccessful let's see if R3 learnt about our multicast sources:
R3#
*Mar 1 00:04:42.431: MSDP(0): (6.6.6.6/32, 239.1.1.1), accepted
*Mar 1 00:04:42.479: MSDP(0): (10.1.56.6/32, 239.1.1.1), accepted
Yes it did - what did we see on R1?
R1#
*Mar 1 00:04:50.315: IP: s=10.1.12.1 (local), d=6.6.6.6, len 100, unroutable
*Mar 1 00:04:50.319: ICMP type=0, code=0
*Mar 1 00:04:50.379: IP: s=10.1.12.1 (local), d=10.1.56.6, len 100, unroutable
*Mar 1 00:04:50.379: ICMP type=0, code=0
We can see that R1 must have recieved the ping because it's attempting to respond, however R6 didn't obtain a reply since R1 doesn't know how to get back to it
R1#sh ip mroute | s 239.1.1.1
(*, 239.1.1.1), 00:07:35/00:02:42, RP 3.3.3.3, flags: SJCL
Incoming interface: Serial0/0.12, RPF nbr 10.1.12.2
Outgoing interface list:
Loopback0, Forward/Sparse, 00:07:35/00:02:19
(10.1.56.6, 239.1.1.1), 00:00:17/00:02:42, flags: LJ
Incoming interface: Null, RPF nbr 0.0.0.0
Outgoing interface list:
Loopback0, Forward/Sparse, 00:00:17/00:02:42
(6.6.6.6, 239.1.1.1), 00:00:17/00:02:42, flags: LJ
Incoming interface: Null, RPF nbr 0.0.0.0
Outgoing interface list:
Loopback0, Forward/Sparse, 00:00:17/00:02:42
We can even see that R1 is trying to build a specific path to get to the multicast sources 10.1.56.6 (R6 S0/0.65) and 6.6.6.6 (R6 Lo0) but is failing the RPF checks
R2#sh ip mroute | s 239.1.1.1
(*, 239.1.1.1), 00:05:39/00:03:11, RP 3.3.3.3, flags: S
Incoming interface: Serial0/0.23, RPF nbr 10.1.23.3
Outgoing interface list:
Serial0/0.21, Forward/Sparse, 00:05:39/00:02:46
R2 is able to use R3 as its RPF neighbor and pass traffic destined to 239.1.1.1 out to R1
R3#sh ip mroute | s 239.1.1.1
(*, 239.1.1.1), 00:05:41/00:03:02, RP 3.3.3.3, flags: S
Incoming interface: Null, RPF nbr 0.0.0.0
Outgoing interface list:
Serial0/0.32, Forward/Sparse, 00:05:41/00:02:41
R3 knows that someone at R2 or further downstream is subscribed to group 239.1.1.1
R3#sh ip msdp sa-cache
MSDP Source-Active Cache - 2 entries
(6.6.6.6, 239.1.1.1), RP 4.4.4.4, BGP/AS 0, 00:02:20/00:05:10, Peer 34.34.34.4
(10.1.56.6, 239.1.1.1), RP 4.4.4.4, BGP/AS 0, 00:02:20/00:05:10, Peer 34.34.34.4
So R3 knows about the sources and that the RP is Lo0 on R4 but doesn't know where the sources came from (BGP/AS 0)
Lets fix this by putting the sources into BGP
R4#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R4(config)#router bgp 4
R4(config-router)#redistribute ospf 1
R4(config-router)#end
Let's see if that's resolved things:
R3#sh ip msdp sa-cache
MSDP Source-Active Cache - 2 entries
(6.6.6.6, 239.1.1.1), RP 4.4.4.4, BGP/AS 4, 00:05:40/00:05:31, Peer 34.34.34.4
(10.1.56.6, 239.1.1.1), RP 4.4.4.4, BGP/AS 4, 00:05:40/00:05:31, Peer 34.34.34.4
R3 has determined these source are via BGP and can establish paths back to the sources
R3#sh ip mroute | s 239.1.1.1
(*, 239.1.1.1), 00:08:03/00:03:17, RP 3.3.3.3, flags: S
Incoming interface: Null, RPF nbr 0.0.0.0
Outgoing interface list:
Serial0/0.32, Forward/Sparse, 00:08:03/00:03:17
(6.6.6.6, 239.1.1.1), 00:00:19/00:02:40, flags: M
Incoming interface: Serial0/0.34, RPF nbr 10.1.34.4
Outgoing interface list:
Serial0/0.32, Forward/Sparse, 00:00:19/00:03:17
(10.1.56.6, 239.1.1.1), 00:00:19/00:02:40, flags: M
Incoming interface: Serial0/0.34, RPF nbr 10.1.34.4
Outgoing interface list:
Serial0/0.32, Forward/Sparse, 00:00:19/00:03:17
This doesn't work for R1 though as it's not aware of how to get to these sources (RPF nbr 0.0.0.0)
R1#sh ip mroute | s 239.1.1.1
(*, 239.1.1.1), 00:07:35/00:02:42, RP 3.3.3.3, flags: SJCL
Incoming interface: Serial0/0.12, RPF nbr 10.1.12.2
Outgoing interface list:
Loopback0, Forward/Sparse, 00:07:35/00:02:19
(10.1.56.6, 239.1.1.1), 00:00:17/00:02:42, flags: LJ
Incoming interface: Null, RPF nbr 0.0.0.0
Outgoing interface list:
Loopback0, Forward/Sparse, 00:00:17/00:02:42
(6.6.6.6, 239.1.1.1), 00:00:17/00:02:42, flags: LJ
Incoming interface: Null, RPF nbr 0.0.0.0
Outgoing interface list:
Loopback0, Forward/Sparse, 00:00:17/00:02:42
So we need to redistribute those routes into eigrp
R3#conf t
R3(config)#router eigrp 123
R3(config-router)#redistribute bgp 3 metric 1 1 1 1 1
R3(config-router)#end
This should give us a return route for the ping and resolve the RPF for the shortest path to the sources
R1#sh ip route eigrp | i EX
D EX 34.34.34.3 [170/2561024256] via 10.1.12.2, 01:33:57, Serial0/0.12
D EX 34.34.34.4 [170/2561024256] via 10.1.12.2, 01:33:57, Serial0/0.12
D EX 6.6.6.6 [170/2561024256] via 10.1.12.2, 01:33:57, Serial0/0.12
D EX 10.1.56.0 [170/2561024256] via 10.1.12.2, 01:33:57, Serial0/0.12
R1#sh ip mroute | s 239.1.1.1
(*, 239.1.1.1), 00:13:44/stopped, RP 3.3.3.3, flags: SJCL
Incoming interface: Serial0/0.12, RPF nbr 10.1.12.2
Outgoing interface list:
Loopback0, Forward/Sparse, 00:13:44/00:02:18
(10.1.56.6, 239.1.1.1), 00:00:05/00:02:56, flags: LJT
Incoming interface: Serial0/0.12, RPF nbr 10.1.12.2
Outgoing interface list:
Loopback0, Forward/Sparse, 00:00:05/00:02:54
(6.6.6.6, 239.1.1.1), 00:00:05/00:02:56, flags: LJT
Incoming interface: Serial0/0.12, RPF nbr 10.1.12.2
Outgoing interface list:
Loopback0, Forward/Sparse, 00:00:05/00:02:54
So lets give it another shot:
R6#ping 239.1.1.1
Type escape sequence to abort.
Sending 1, 100-byte ICMP Echos to 239.1.1.1, timeout is 2 seconds:
Reply to request 0 from 10.1.12.1, 32 ms
Reply to request 0 from 10.1.12.1, 32 ms
On R1 we see
R1#
*Mar 1 00:12:47.815: IP: tableid=0, s=10.1.12.1 (local), d=10.1.56.6 (Serial0/0.12), routed via FIB
*Mar 1 00:12:47.815: IP: s=10.1.12.1 (local), d=10.1.56.6 (Serial0/0.12), len 100, sending
*Mar 1 00:12:47.815: ICMP type=0, code=0
*Mar 1 00:12:47.823: IP: tableid=0, s=10.1.12.1 (local), d=6.6.6.6 (Serial0/0.12), routed via FIB
*Mar 1 00:12:47.827: IP: s=10.1.12.1 (local), d=6.6.6.6 (Serial0/0.12), len 100, sending
*Mar 1 00:12:47.827: ICMP type=0, code=0
Success!