Networking - IP Multicast Routing Configuration

Multicast routing is an important aspect of IP routing. It can be used to distribute data (for example, audio/video streaming broadcasts) to multiple recipients in a very efficient way. Multicast End to End

Two key protocols of multicast routing

  • Multicast Group Membership Discovery protocol: used by clients (receivers) to advertise their group membership to a local multicast router so that they can join and leave multicast groups. The main Multicast Group Membership Discovery protocols are Internet Group Management Protocol (IGMP) for IPv4 and Multicast Listener Discovery (MLD) for IPv6.
  • Multicast Routing Protocol: used to communicate between multicast routers and enables them to calculate the multicast distribution tree of clients. Protocol Independent Multicast (PIM) is the most important Multicast Routing Protocol. It operates three different modes: dense, sparse and sparse-dense.

IPV4 Multicast address

The “classful” IP addressing scheme sets aside a full one-sixteenth of the address space for multicast addresses: Class D. Multicast addresses are identified by the pattern “1110” in the first four bits, which corresponds to a first octet of 224 to 239. So, the full range of multicast addresses is from 224.0.0.0 to 239.255.255.255. See below diagram for further classification:

Below are examples of using IGMP and PIM (under three different modes) to enable muticast routing.

Multicast IPv4 address

A simple multicast IP Network Topology

Multicast network topology

There are three routers (R1, R2, R3), plus one Multicast sender and one Muticast client/receiver. For convience, I use Cisco IOL image. The basic underlying routing is static route:

Muticast Sender: interface and basic routing

Mcast-Snd#show ip interface brief 
Interface              IP-Address      OK? Method Status                Protocol
Ethernet0/0            10.1.1.10       YES TFTP   up                    up      
Mcast-Snd#
Mcast-Snd#show ip route
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       + - replicated route, % - next hop override

Gateway of last resort is not set

      10.0.0.0/8 is variably subnetted, 3 subnets, 3 masks
S        10.0.0.0/8 [1/0] via 10.1.1.1
C        10.1.1.0/24 is directly connected, Ethernet0/0
L        10.1.1.10/32 is directly connected, Ethernet0/0
Mcast-Snd#

Muticast Receiver: interface and basic routing

Mcast-Rcv#show ip interface brief 
Interface              IP-Address      OK? Method Status                Protocol
Ethernet0/0            10.1.5.100      YES TFTP   up                    up      
Mcast-Rcv#show ip route           
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       + - replicated route, % - next hop override

Gateway of last resort is not set

      10.0.0.0/8 is variably subnetted, 3 subnets, 3 masks
S        10.0.0.0/8 [1/0] via 10.1.5.3
C        10.1.5.0/24 is directly connected, Ethernet0/0
L        10.1.5.100/32 is directly connected, Ethernet0/0
Mcast-Rcv#

Muticast Router #1: interface and basic routing

R1#show ip interface brief 
Interface              IP-Address      OK? Method Status                Protocol
Ethernet0/0            10.1.1.1        YES TFTP   up                    up      
Ethernet1/0            10.1.2.1        YES TFTP   up                    up      
Ethernet2/0            10.1.3.1        YES TFTP   up                    up      
R1#show ip route           
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       + - replicated route, % - next hop override

Gateway of last resort is not set

      10.0.0.0/8 is variably subnetted, 8 subnets, 2 masks
C        10.1.1.0/24 is directly connected, Ethernet0/0
L        10.1.1.1/32 is directly connected, Ethernet0/0
C        10.1.2.0/24 is directly connected, Ethernet1/0
L        10.1.2.1/32 is directly connected, Ethernet1/0
C        10.1.3.0/24 is directly connected, Ethernet2/0
L        10.1.3.1/32 is directly connected, Ethernet2/0
S        10.1.4.0/24 [1/0] via 10.1.3.3
S        10.1.5.0/24 [1/0] via 10.1.3.3
R1#

Muticast Router #2: interface and basic routing

R2#show ip interface brief 
Interface              IP-Address      OK? Method Status                Protocol
Ethernet0/0            10.1.2.2        YES TFTP   up                    up      
Ethernet1/0            10.1.4.2        YES TFTP   up                    up      
R2#show ip route
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       + - replicated route, % - next hop override

Gateway of last resort is not set

      10.0.0.0/8 is variably subnetted, 7 subnets, 2 masks
S        10.1.1.0/24 [1/0] via 10.1.2.1
C        10.1.2.0/24 is directly connected, Ethernet0/0
L        10.1.2.2/32 is directly connected, Ethernet0/0
S        10.1.3.0/24 [1/0] via 10.1.2.1
C        10.1.4.0/24 is directly connected, Ethernet1/0
L        10.1.4.2/32 is directly connected, Ethernet1/0
S        10.1.5.0/24 [1/0] via 10.1.4.3
R2#

Muticast Router #3: interface and basic routing

R3#show ip interface brief 
Interface              IP-Address      OK? Method Status                Protocol
Ethernet0/0            10.1.3.3        YES TFTP   up                    up      
Ethernet1/0            10.1.4.3        YES TFTP   up                    up      
Ethernet2/0            10.1.5.3        YES TFTP   up                    up      
R3#show ip route
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       + - replicated route, % - next hop override

Gateway of last resort is not set

      10.0.0.0/8 is variably subnetted, 8 subnets, 2 masks
S        10.1.1.0/24 [1/0] via 10.1.3.1
S        10.1.2.0/24 [1/0] via 10.1.3.1
C        10.1.3.0/24 is directly connected, Ethernet0/0
L        10.1.3.3/32 is directly connected, Ethernet0/0
C        10.1.4.0/24 is directly connected, Ethernet1/0
L        10.1.4.3/32 is directly connected, Ethernet1/0
C        10.1.5.0/24 is directly connected, Ethernet2/0
L        10.1.5.3/32 is directly connected, Ethernet2/0
R3#

Configuration of dense mode

First configure all three Routers R1, R2, R3 to enable PIM dense-mode

R1#show run
Building configuration...
...
!
ip multicast-routing 
ip cef
no ipv6 cef
!
interface Ethernet0/0
 ip address 10.1.1.1 255.255.255.0
 ip pim dense-mode
!
interface Ethernet1/0
 ip address 10.1.2.1 255.255.255.0
 ip pim dense-mode
!         
interface Ethernet2/0
 ip address 10.1.3.1 255.255.255.0
 ip pim dense-mode
!         
!         
ip forward-protocol nd
!         
!         
no ip http server
ip route 10.1.4.0 255.255.255.0 10.1.3.3
ip route 10.1.5.0 255.255.255.0 10.1.3.3
...

Router R2:

R2#show running-config 
Building configuration...
...
!
ip multicast-routing 
ip cef
...
!
interface Ethernet0/0
 ip address 10.1.2.2 255.255.255.0
 ip pim dense-mode
!         
interface Ethernet1/0
 ip address 10.1.4.2 255.255.255.0
 ip pim dense-mode
!   
!         
ip forward-protocol nd
!         
ip route 10.1.1.0 255.255.255.0 10.1.2.1
ip route 10.1.3.0 255.255.255.0 10.1.2.1
ip route 10.1.4.0 255.255.255.0 Ethernet1/0
ip route 10.1.5.0 255.255.255.0 10.1.4.3
!    

Router R3:

R3#show running-config 
Building configuration...

Current configuration : 1576 bytes
...
!
ip multicast-routing 
ip cef
...
!         
interface Ethernet0/0
 ip address 10.1.3.3 255.255.255.0
 ip pim dense-mode
!         
interface Ethernet1/0
 ip address 10.1.4.3 255.255.255.0
 ip pim dense-mode
!
!         
interface Ethernet2/0
 ip address 10.1.5.3 255.255.255.0
 ip pim dense-mode
!
!         
ip forward-protocol nd
!                 
no ip http server
ip route 10.1.1.0 255.255.255.0 10.1.3.1
ip route 10.1.2.0 255.255.255.0 10.1.3.1
ip route 10.1.4.0 255.255.255.0 Ethernet1/0
!
...

Multicast Receiver/Client to register into a multicast group, in this case to join 239.1.1.1:

Mcast-Rcv#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
Mcast-Rcv(config)#interface Ethernet0/0
Mcast-Rcv(config-if)#ip igmp join-group 239.1.1.1
Mcast-Rcv(config-if)#

Multicast Sender can ping to receiver with 239.1.1.1

Mcast-Snd#ping 239.1.1.1 repeat 1000
Type escape sequence to abort.
Sending 3, 100-byte ICMP Echos to 239.1.1.1, timeout is 2 seconds:

Reply to request 0 from 10.1.5.100, 1 ms
Reply to request 1 from 10.1.5.100, 1 ms
Reply to request 2 from 10.1.5.100, 4 ms
...

Now we can check the multicast routing table of each router

R1#show ip mroute 
IP Multicast Routing Table
Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected,
       L - Local, P - Pruned, R - RP-bit set, F - Register flag,
       T - SPT-bit set, J - Join SPT, M - MSDP created entry, E - Extranet,
       X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement,
       U - URD, I - Received Source Specific Host Report, 
       Z - Multicast Tunnel, z - MDT-data group sender, 
       Y - Joined MDT-data group, y - Sending to MDT-data group, 
       G - Received BGP C-Mroute, g - Sent BGP C-Mroute, 
       Q - Received BGP S-A Route, q - Sent BGP S-A Route, 
       V - RD & Vector, v - Vector
Outgoing interface flags: H - Hardware switched, A - Assert winner
 Timers: Uptime/Expires
 Interface state: Interface, Next-Hop or VCD, State/Mode

(*, 239.1.1.1), 00:02:09/stopped, RP 0.0.0.0, flags: D
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    Ethernet2/0, Forward/Dense, 00:02:09/stopped
    Ethernet1/0, Forward/Dense, 00:02:09/stopped
    Ethernet0/0, Forward/Dense, 00:02:09/stopped

(10.1.1.10, 239.1.1.1), 00:02:09/00:00:50, flags: T
  Incoming interface: Ethernet0/0, RPF nbr 10.1.1.10
  Outgoing interface list:
    Ethernet1/0, Prune/Dense, 00:02:09/00:00:50
    Ethernet2/0, Forward/Dense, 00:02:09/stopped

(*, 224.0.1.40), 04:53:49/00:02:28, RP 0.0.0.0, flags: DCL
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    Ethernet2/0, Forward/Dense, 04:52:57/stopped
    Ethernet1/0, Forward/Dense, 04:53:17/stopped
    Ethernet0/0, Forward/Dense, 04:53:49/stopped

Note: From the above output of (10.1.1.10, 239.1.1.1), it is shown that packet comes in 
from Ethernet0/0, outgoing interface is Ethernet2/0, which is in Forward state. 
Ethernet1/0 is pruned.

R1#
R2#show ip mroute 
IP Multicast Routing Table
Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected,
       L - Local, P - Pruned, R - RP-bit set, F - Register flag,
       T - SPT-bit set, J - Join SPT, M - MSDP created entry, E - Extranet,
       X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement,
       U - URD, I - Received Source Specific Host Report, 
       Z - Multicast Tunnel, z - MDT-data group sender, 
       Y - Joined MDT-data group, y - Sending to MDT-data group, 
       G - Received BGP C-Mroute, g - Sent BGP C-Mroute, 
       Q - Received BGP S-A Route, q - Sent BGP S-A Route, 
       V - RD & Vector, v - Vector
Outgoing interface flags: H - Hardware switched, A - Assert winner
 Timers: Uptime/Expires
 Interface state: Interface, Next-Hop or VCD, State/Mode

(*, 239.1.1.1), 00:02:43/stopped, RP 0.0.0.0, flags: D
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    Ethernet1/0, Forward/Dense, 00:02:43/stopped
    Ethernet0/0, Forward/Dense, 00:02:43/stopped

(10.1.1.10, 239.1.1.1), 00:02:43/00:00:16, flags: PT
  Incoming interface: Ethernet0/0, RPF nbr 10.1.2.1
  Outgoing interface list:
    Ethernet1/0, Prune/Dense, 00:02:43/00:00:16

(*, 224.0.1.40), 04:53:51/00:02:54, RP 0.0.0.0, flags: DCL
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    Ethernet1/0, Forward/Dense, 04:53:28/stopped
    Ethernet0/0, Forward/Dense, 04:53:51/stopped

R2#

R3#show ip mroute
IP Multicast Routing Table
Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected,
       L - Local, P - Pruned, R - RP-bit set, F - Register flag,
       T - SPT-bit set, J - Join SPT, M - MSDP created entry, E - Extranet,
       X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement,
       U - URD, I - Received Source Specific Host Report, 
       Z - Multicast Tunnel, z - MDT-data group sender, 
       Y - Joined MDT-data group, y - Sending to MDT-data group, 
       G - Received BGP C-Mroute, g - Sent BGP C-Mroute, 
       Q - Received BGP S-A Route, q - Sent BGP S-A Route, 
       V - RD & Vector, v - Vector
Outgoing interface flags: H - Hardware switched, A - Assert winner
 Timers: Uptime/Expires
 Interface state: Interface, Next-Hop or VCD, State/Mode

(*, 239.1.1.1), 04:48:33/stopped, RP 0.0.0.0, flags: DC
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    Ethernet2/0, Forward/Dense, 04:48:33/stopped
    Ethernet1/0, Forward/Dense, 04:48:33/stopped
    Ethernet0/0, Forward/Dense, 04:48:33/stopped

(10.1.1.10, 239.1.1.1), 00:03:14/00:02:45, flags: T
  Incoming interface: Ethernet0/0, RPF nbr 10.1.3.1
  Outgoing interface list:
    Ethernet1/0, Prune/Dense, 00:00:05/00:02:54, A
    Ethernet2/0, Forward/Dense, 00:03:14/stopped

(*, 224.0.1.40), 04:54:02/00:02:28, RP 0.0.0.0, flags: DCL
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    Ethernet1/0, Forward/Dense, 04:53:59/stopped
    Ethernet0/0, Forward/Dense, 04:54:02/stopped

R3#

Note: From entry of (10.1.1.10, 239.1.1.1), the packet comes in from Ethernet0/0, 
forward to Ethernet2/0, which is connected to Multicast Receiver, which requests 
to join multicast group 239.1.1.1.

Dense mode works in a flood and prune mode, which can cause a lot traffic in the network. Next, let check sparse mode of PIM.

Configuration of sparse mode

PIM sparse mode works through a Rendezvous Point (RP), which is a router in a multicast network domain that acts as a shared root for a multicast shared tree. In sparse mode only, RP needs to be configured in each muticast router manually. In our case, Router 2 is used as RP, using its loopback 0 IP address 2.2.2.2.

R2#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
R2(config)#interface loopback 0
R2(config-if)#ip address 2.2.2.2 255.255.255.255
R2(config-if)#exit
R2(config)#ip pim rp-address 2.2.2.2
R2(config)#interface Ethernet0/0
R2(config-if)#ip pim sparse-mode
R2(config-if)#interface Ethernet1/0
R2(config-if)#ip pim sparse-mode
R2(config-if)#interface loopback 0
R2(config-if)#ip pim sparse-mode
R2(config-if)#end
R2#

R1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
R1(config)#ip route 2.2.2.2 255.255.255.255 10.1.2.2
R1(config)#ip pim rp-address 2.2.2.2
R1(config)#
R1(config)#interface Ethernet 0/0
R1(config-if)#ip pim sparse-mode
R1(config-if)#interface Ethernet 1/0
R1(config-if)#ip pim sparse-mode
R1(config-if)#interface Ethernet 2/0
R1(config-if)#ip pim sparse-mode
R1(config-if)#end
R1#

R3#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
R3(config)#ip route 2.2.2.2 255.255.255.255 10.1.4.2
R3(config)#interface Ethernet 0/0
R3(config-if)#ip pim sparse-mode 
R3(config-if)#interface Ethernet 1/0
R3(config-if)#ip pim sparse-mode    
R3(config-if)#interface Ethernet 2/0
R3(config-if)#ip pim sparse-mode    
R3(config-if)#end
R3#

Configuration of sparse-dense mode

When the number of multicast router is large, it is not easy to configue RP node for every router. There is easier way to do so, which is let router auto discovery RP by running sparse-dense mode. This essentially means that use dense mode to discover RP, but return to sparse mode to establish distribution tree.

R1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
R1(config)#no ip pim rp-address 2.2.2.2
R1(config)#interface Ethernet 0/0
R1(config-if)#ip pim sparse-dense-mode 
R1(config-if)#interface Ethernet 1/0   
R1(config-if)#ip pim sparse-dense-mode 
R1(config-if)#interface Ethernet 2/0   
R1(config-if)#ip pim sparse-dense-mode 
R1(config-if)#end
R1#

R3#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
R3(config)#no ip pim rp-address 2.2.2.2
R3(config)#interface Ethernet 0/0
R3(config-if)#ip pim sparse-dense-mode 
R3(config-if)#interface Ethernet 1/0      
R3(config-if)#ip pim sparse-dense-mode 
R3(config-if)#interface Ethernet 2/0   
R3(config-if)#ip pim sparse-dense-mode 
R3(config-if)#end
R3#

In Router #2, we will configure it as RP by announce and discover.
R2#conf t
R2(config)#no ip pim rp-address 2.2.2.2
R2(config)#interface Ethernet 0/0
R2(config-if)#ip pim sparse-dense-mode 
R2(config-if)#interface Ethernet 1/0   
R2(config-if)#ip pim sparse-dense-mode 
R2(config-if)#interface loopback 0
R2(config-if)#ip pim sparse-dense-mode 
R2(config-if)#exit
R2(config)#ip pim send-rp-announce lo 0 scope 16 
R2(config)#ip pim send-rp-discovery scope 16

With above configuration, we can check each router’s multicast routing tabl

R1#show ip mroute 
IP Multicast Routing Table
Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected,
       L - Local, P - Pruned, R - RP-bit set, F - Register flag,
       T - SPT-bit set, J - Join SPT, M - MSDP created entry, E - Extranet,
       X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement,
       U - URD, I - Received Source Specific Host Report, 
       Z - Multicast Tunnel, z - MDT-data group sender, 
       Y - Joined MDT-data group, y - Sending to MDT-data group, 
       G - Received BGP C-Mroute, g - Sent BGP C-Mroute, 
       Q - Received BGP S-A Route, q - Sent BGP S-A Route, 
       V - RD & Vector, v - Vector
Outgoing interface flags: H - Hardware switched, A - Assert winner
 Timers: Uptime/Expires
 Interface state: Interface, Next-Hop or VCD, State/Mode

(*, 239.1.1.1), 00:02:52/stopped, RP 2.2.2.2, flags: SPF
  Incoming interface: Ethernet1/0, RPF nbr 10.1.2.2
  Outgoing interface list: Null

(10.1.1.10, 239.1.1.1), 00:02:52/00:00:07, flags: FT
  Incoming interface: Ethernet0/0, RPF nbr 0.0.0.0, Registering
  Outgoing interface list:
    Ethernet2/0, Forward/Sparse-Dense, 00:02:52/00:02:36
    Ethernet1/0, Forward/Sparse-Dense, 00:02:52/00:02:36

(*, 224.0.1.39), 00:06:48/stopped, RP 0.0.0.0, flags: DC
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    Ethernet2/0, Forward/Sparse-Dense, 00:06:48/stopped
    Ethernet1/0, Forward/Sparse-Dense, 00:06:48/stopped

(2.2.2.2, 224.0.1.39), 00:06:48/00:02:00, flags: PT
  Incoming interface: Ethernet1/0, RPF nbr 10.1.2.2
  Outgoing interface list:
    Ethernet2/0, Prune/Sparse-Dense, 00:02:48/00:00:13

(*, 224.0.1.40), 00:11:54/stopped, RP 0.0.0.0, flags: DCL
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    Ethernet1/0, Forward/Sparse-Dense, 00:11:04/stopped
    Ethernet2/0, Forward/Sparse-Dense, 00:11:05/stopped
    Ethernet0/0, Forward/Sparse-Dense, 00:11:54/stopped

(10.1.4.2, 224.0.1.40), 00:05:48/00:02:09, flags: LT
  Incoming interface: Ethernet2/0, RPF nbr 10.1.3.3
  Outgoing interface list:
    Ethernet0/0, Forward/Sparse-Dense, 00:05:48/stopped
    Ethernet1/0, Prune/Sparse-Dense, 00:01:50/00:01:09

(10.1.2.2, 224.0.1.40), 00:05:48/00:02:09, flags: LT
  Incoming interface: Ethernet1/0, RPF nbr 10.1.2.2
  Outgoing interface list:
    Ethernet0/0, Forward/Sparse-Dense, 00:05:48/stopped
    Ethernet2/0, Forward/Sparse-Dense, 00:05:48/stopped

R1#
R2#show ip mroute 
IP Multicast Routing Table
Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected,
       L - Local, P - Pruned, R - RP-bit set, F - Register flag,
       T - SPT-bit set, J - Join SPT, M - MSDP created entry, E - Extranet,
       X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement,
       U - URD, I - Received Source Specific Host Report, 
       Z - Multicast Tunnel, z - MDT-data group sender, 
       Y - Joined MDT-data group, y - Sending to MDT-data group, 
       G - Received BGP C-Mroute, g - Sent BGP C-Mroute, 
       Q - Received BGP S-A Route, q - Sent BGP S-A Route, 
       V - RD & Vector, v - Vector
Outgoing interface flags: H - Hardware switched, A - Assert winner
 Timers: Uptime/Expires
 Interface state: Interface, Next-Hop or VCD, State/Mode

(*, 239.1.1.1), 00:05:05/00:03:20, RP 2.2.2.2, flags: S
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    Ethernet1/0, Forward/Sparse-Dense, 00:05:05/00:03:20

(10.1.1.10, 239.1.1.1), 00:02:09/00:00:50, flags: 
  Incoming interface: Ethernet0/0, RPF nbr 10.1.2.1
  Outgoing interface list:
    Ethernet1/0, Forward/Sparse-Dense, 00:02:09/00:03:20

(*, 224.0.1.39), 00:06:05/stopped, RP 0.0.0.0, flags: DCL
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    Loopback0, Forward/Sparse-Dense, 00:05:42/stopped
    Ethernet1/0, Forward/Sparse-Dense, 00:06:05/stopped
    Ethernet0/0, Forward/Sparse-Dense, 00:06:05/stopped

(2.2.2.2, 224.0.1.39), 00:06:05/00:02:54, flags: LT
  Incoming interface: Loopback0, RPF nbr 0.0.0.0
  Outgoing interface list:
    Ethernet0/0, Forward/Sparse-Dense, 00:05:42/stopped
    Ethernet1/0, Forward/Sparse-Dense, 00:05:42/stopped

(*, 224.0.1.40), 00:08:46/stopped, RP 0.0.0.0, flags: DCL
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    Ethernet0/0, Forward/Sparse-Dense, 00:08:46/stopped

(10.1.4.2, 224.0.1.40), 00:01:07/00:01:52, flags: LT
  Incoming interface: Ethernet1/0, RPF nbr 0.0.0.0
  Outgoing interface list:
    Ethernet0/0, Forward/Sparse-Dense, 00:01:07/stopped, A

(10.1.2.2, 224.0.1.40), 00:05:05/00:01:48, flags: PLT
  Incoming interface: Ethernet0/0, RPF nbr 0.0.0.0
  Outgoing interface list: Null

R2#
R3#show ip mroute 
IP Multicast Routing Table
Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected,
       L - Local, P - Pruned, R - RP-bit set, F - Register flag,
       T - SPT-bit set, J - Join SPT, M - MSDP created entry, E - Extranet,
       X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement,
       U - URD, I - Received Source Specific Host Report, 
       Z - Multicast Tunnel, z - MDT-data group sender, 
       Y - Joined MDT-data group, y - Sending to MDT-data group, 
       G - Received BGP C-Mroute, g - Sent BGP C-Mroute, 
       Q - Received BGP S-A Route, q - Sent BGP S-A Route, 
       V - RD & Vector, v - Vector
Outgoing interface flags: H - Hardware switched, A - Assert winner
 Timers: Uptime/Expires
 Interface state: Interface, Next-Hop or VCD, State/Mode

(*, 239.1.1.1), 00:08:41/stopped, RP 2.2.2.2, flags: SJC
  Incoming interface: Ethernet1/0, RPF nbr 10.1.4.2
  Outgoing interface list:
    Ethernet2/0, Forward/Sparse-Dense, 00:08:41/00:02:21

(10.1.1.10, 239.1.1.1), 00:01:21/00:01:38, flags: J
  Incoming interface: Ethernet0/0, RPF nbr 10.1.3.1
  Outgoing interface list:
    Ethernet2/0, Forward/Sparse-Dense, 00:01:21/00:02:21

(*, 224.0.1.39), 00:05:17/stopped, RP 0.0.0.0, flags: DC
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    Ethernet1/0, Forward/Sparse-Dense, 00:05:17/stopped
    Ethernet0/0, Forward/Sparse-Dense, 00:05:17/stopped

(2.2.2.2, 224.0.1.39), 00:05:17/00:01:47, flags: PTX
  Incoming interface: Ethernet1/0, RPF nbr 10.1.4.2
  Outgoing interface list:
    Ethernet0/0, Prune/Sparse-Dense, 00:01:17/00:01:44, A

(*, 224.0.1.40), 05:58:01/stopped, RP 0.0.0.0, flags: DCL
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    Ethernet1/0, Forward/Sparse-Dense, 05:57:57/stopped
    Ethernet0/0, Forward/Sparse-Dense, 05:58:01/stopped

(10.1.2.2, 224.0.1.40), 00:04:17/00:02:40, flags: LT
  Incoming interface: Ethernet0/0, RPF nbr 10.1.3.1
  Outgoing interface list:
    Ethernet1/0, Forward/Sparse-Dense, 00:04:17/stopped
          
(10.1.4.2, 224.0.1.40), 00:04:17/00:02:40, flags: LT
  Incoming interface: Ethernet1/0, RPF nbr 10.1.4.2
  Outgoing interface list:
    Ethernet0/0, Forward/Sparse-Dense, 00:04:17/stopped

R3#

Mcast-Snd#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.5.100, 28 ms
Mcast-Snd#ping 239.1.1.1 repeat 10
Type escape sequence to abort.
Sending 10, 100-byte ICMP Echos to 239.1.1.1, timeout is 2 seconds:

Reply to request 0 from 10.1.5.100, 28 ms
Reply to request 1 from 10.1.5.100, 1 ms

The above lab is based on below excellent youtube video: Multicast from Kevin Wallace