PIM Dense Mode Multicast Flooding and Pruning Introduction

« 2022 Dec 9 »

What is PIM Dense Mode?

PIM Dense Mode floods a multicast stream to all PIM-enabled routers unconditionally. The RPF-check verifies incoming multicast packets on each PIM-enabled interface to avoid a routing loop. However, until a PIM Prune message is received, a router will continue to forward multicast traffic downstream on a Source-Based Distribution Tree (S,G).

PIM Dense Mode multicast flooding described

The image shows the multicast stream originating from the Source in Site 1 and flooded through the network until it reaches the Host in Site 2. The Last Hop Router (LHR) chooses a single incoming interface (IIF) to accept the multicast stream. On its other interface the LHR sends a Prune message and thus removes itself from the Source Tree.

Notice in the above image there are also Assert messages exchanged between two routers. An Assert message is automatically generated when a multicast stream arrives on an Outgoing Interface (OIL) assigned for that same (S,G) stream. Above, the LHR receives a duplicate copy of the multicast stream on its OIL Gi0/2. Since it received the multicast packet on its outgoing interface (OIL), the LHR replies with a PIM Assert.

The PIM Assert mechanism is useful for shared network segments with multiple PIM-enabled routers duplicating a single multicast stream towards a common destination. However in the above image, the PIM Assert mechanism occurs on a point-to-point link and does not have an impact on multicast forwarding since the link is pruned. This illustrates the inefficiency of PIM Dense Mode and multicast flooding.

How to configure PIM Dense Mode?

The configuration of PIM Dense Mode requires enabling multicast routing with the global configuration command ip multicast-routing, issued on each router. Thereafter, each interface on each router receives the command ip pim dense-mode to enable PIM Dense Mode.

In this particular scenario, an EIGRP Offset List is configured on R3 to make the path R4 - R3 - R1 less preferred, and by extension the path R4 - R2 - R1 is more preferred. This affects multicast routing and as a result the multicast stream takes the path R1 - R2 - R4. On R4 the interface Gi0/1 (towards R2) becomes the IIF, in other words R4 Gi0/1 is the RPF interface. Configuring PIM Dense Mode multicast network

Configuration:

R1
    R1#show run | sec ^ip multi
    ip multicast-routing
    
    R1#show run int Gi0/0 | sec int
    interface GigabitEthernet0/0
     description ** to Source **
     ip address 192.168.1.2 255.255.255.0
     ip pim dense-mode
     duplex auto
     speed auto
     media-type rj45
    
    R1#show run int Gi0/1 | sec int
    interface GigabitEthernet0/1
     description ** to R2 **
     ip address 10.0.1.1 255.255.255.252
     ip pim dense-mode
     duplex auto
     speed auto
     media-type rj45
    
    R1#show run int Gi0/2 | sec int
    interface GigabitEthernet0/2
     description ** to R3 **
     ip address 10.0.2.1 255.255.255.252
     ip pim dense-mode
     duplex auto
     speed auto
     media-type rj45
    
    R1#show run | sec ^router
    router eigrp EXAMPLE-EIGRP
     !
     address-family ipv4 unicast autonomous-system 10
      !
      af-interface GigabitEthernet0/0
       passive-interface
      exit-af-interface
      !
      topology base
      exit-af-topology
      network 10.0.1.0 0.0.0.3
      network 10.0.2.0 0.0.0.3
      network 192.168.1.0
      eigrp router-id 1.1.1.1
     exit-address-family
    
R2
    R2#show run | sec ^ip multi
    ip multicast-routing
    
    R2#show run int Gi0/0 | sec int
    interface GigabitEthernet0/0
     description ** to R1 **
     ip address 10.0.1.2 255.255.255.252
     ip pim dense-mode
     duplex auto
     speed auto
     media-type rj45
    
    R2#show run int Gi0/1 | sec int
    interface GigabitEthernet0/1
     description ** to R4 **
     ip address 10.0.3.1 255.255.255.252
     ip pim dense-mode
     duplex auto
     speed auto
     media-type rj45
    
    R2#show run | sec ^router
    router eigrp EXAMPLE-EIGRP
     !
     address-family ipv4 unicast autonomous-system 10
      !
      topology base
      exit-af-topology
      network 10.0.1.0 0.0.0.3
      network 10.0.3.0 0.0.0.3
      eigrp router-id 2.2.2.2
     exit-address-family
    
R3
    R3#show run | sec ^ip multi
    ip multicast-routing
    
    R3#show run int Gi0/0 | sec int
    interface GigabitEthernet0/0
     description ** to R1 **
     ip address 10.0.2.2 255.255.255.252
     ip pim dense-mode
     duplex auto
     speed auto
     media-type rj45
    
    R3#show run int Gi0/1 | sec int
    interface GigabitEthernet0/1
     description ** to R4 **
     ip address 10.0.4.1 255.255.255.252
     ip pim dense-mode
     duplex auto
     speed auto
     media-type rj45
    
    R3#show run | sec ^router
    router eigrp EXAMPLE-EIGRP
     !
     address-family ipv4 unicast autonomous-system 10
      !
      topology base
       offset-list ACL-OFFSET-LIST out 1000 GigabitEthernet0/1 
      exit-af-topology
      network 10.0.2.0 0.0.0.3
      network 10.0.4.0 0.0.0.3
      eigrp router-id 3.3.3.3
     exit-address-family
    
    R3#show run | sec ^ip access
    ip access-list standard ACL-OFFSET-LIST
     permit 192.168.1.0 0.0.0.255
    
R4
    R4#show run | sec ^ip multi
    ip multicast-routing
    
    R4#show run int Gi0/0 | sec int
    interface GigabitEthernet0/0
     description ** to Receiver (Host) **
     ip address 192.168.2.2 255.255.255.0
     ip pim dense-mode
     duplex auto
     speed auto
     media-type rj45
    
    R4#show run int Gi0/1 | sec int
    interface GigabitEthernet0/1
     description ** to R2 **
     ip address 10.0.3.2 255.255.255.252
     ip pim dense-mode
     duplex auto
     speed auto
     media-type rj45
    
    R4#show run int Gi0/2 | sec int
    interface GigabitEthernet0/2
     description ** to R3 **
     ip address 10.0.4.2 255.255.255.252
     ip pim dense-mode
     duplex auto
     speed auto
     media-type rj45
    
    R4#show run | sec ^router
    router eigrp EXAMPLE-EIGRP
     !
     address-family ipv4 unicast autonomous-system 10
      !
      af-interface GigabitEthernet0/0
       passive-interface
      exit-af-interface
      !
      topology base
      exit-af-topology
      network 10.0.3.0 0.0.0.3
      network 10.0.4.0 0.0.0.3
      network 192.168.2.0
      eigrp router-id 4.4.4.4
     exit-address-family
    
Source
    Source#show run int Gi0/0 | sec int
    interface GigabitEthernet0/0
     description ** to R1 **
     ip address 192.168.1.1 255.255.255.0
     duplex auto
     speed auto
     media-type rj45
    
    Source#show run | sec ^ip route
    ip route 0.0.0.0 0.0.0.0 GigabitEthernet0/0 192.168.1.2
    
Host
    Host#show run int Gi0/0 | sec int
    interface GigabitEthernet0/0
     description ** to R4 **
     ip address 192.168.2.1 255.255.255.0
     ip igmp join-group 239.0.0.1
     duplex auto
     speed auto
     media-type rj45
    
    Host#show run | sec ^ip route
    ip route 0.0.0.0 0.0.0.0 GigabitEthernet0/0 192.168.2.2
    
R4#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, 
       N - Received BGP Shared-Tree Prune, n - BGP C-Mroute suppressed, 
       Q - Received BGP S-A Route, q - Sent BGP S-A Route, 
       V - RD & Vector, v - Vector, p - PIM Joins on route, 
       x - VxLAN group
Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join
 Timers: Uptime/Expires
 Interface state: Interface, Next-Hop or VCD, State/Mode

(*, 239.0.0.1), 00:41:11/stopped, RP 0.0.0.0, flags: DC
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    GigabitEthernet0/2, Forward/Dense, 00:41:11/stopped
    GigabitEthernet0/1, Forward/Dense, 00:41:11/stopped
    GigabitEthernet0/0, Forward/Dense, 00:41:11/stopped
          
(192.168.1.1, 239.0.0.1), 00:00:07/00:02:52, flags: T              « PIM Dense Mode creates Source Tree
  Incoming interface: GigabitEthernet0/1, RPF nbr 10.0.3.1         « Interface Gi0/1 is the IIF on R4
  Outgoing interface list:
    GigabitEthernet0/0, Forward/Dense, 00:00:07/stopped
    GigabitEthernet0/2, Prune/Dense, 00:00:07/00:02:52             « Interface towards R3 is pruned

(*, 224.0.1.40), 00:42:12/00:02:56, RP 0.0.0.0, flags: DCL
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    GigabitEthernet0/2, Forward/Dense, 00:41:59/stopped
    GigabitEthernet0/1, Forward/Dense, 00:42:07/stopped
    GigabitEthernet0/0, Forward/Dense, 00:42:12/stopped





Source#ping 239.0.0.1 re 5
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 239.0.0.1, timeout is 2 seconds:

Reply to request 0 from 192.168.2.1, 58 ms             « Multicast stream received on Host in Site 2
Reply to request 1 from 192.168.2.1, 4 ms
Reply to request 2 from 192.168.2.1, 4 ms
Reply to request 3 from 192.168.2.1, 4 ms
Reply to request 4 from 192.168.2.1, 3 ms





R4#show ip pim interface Gi0/1 count 

For switching state use "show ip mfib interface"
Address          Interface                Mpackets In/Out
10.0.3.2         GigabitEthernet0/1       5/0          « Multicast traffic visible on R4 IIF





R4#show ip pim interface Gi0/1 detail
GigabitEthernet0/1 is up, line protocol is up
  Internet address is 10.0.3.2/30
  Multicast switching: fast
  Multicast packets in/out: 0/0
  Multicast TTL threshold: 0
  PIM: enabled                                         « PIM enabled
    PIM version: 2, mode: dense                        « PIM Dense Mode used
    PIM DR: 10.0.3.2 (this system)
    PIM neighbor count: 1
    PIM Hello/Query interval: 30 seconds
    PIM Hello packets in/out: 112/112
    PIM J/P interval: 60 seconds
    PIM State-Refresh processing: enabled
    PIM State-Refresh origination: disabled
    PIM NBMA mode: disabled
    PIM ATM multipoint signalling: disabled
    PIM domain border: disabled
    PIM neighbors rpf proxy capable: TRUE
    PIM BFD: disabled
    PIM Non-DR-Join: FALSE
  Multicast Tagswitching: disabled

What is the PIM Graft message?

The PIM Graft message signals to an RPF neighbor to start forwarding a multicast stream on a previously pruned link. In other words, a PIM Dense Mode router sends a Graft message to join again on a multicast tree that it previously removed itself from. Multiple scenarios can trigger a PIM Graft message which is shown in the following image.

Wireshark packet capture of Graft message in order to re-join a previously pruned tree in PIM Dense Mode multicast

In order for a Graft message to be sent, there has to already be a (S,G) entry in the mroute table of a sending router. This is shown in the following output. In PIM Dense Mode, if there is no (S,G) entry it means a multicast stream has not yet been received. Initially, each PIM Dense Mode router receives the flooded multicast stream, and then decides to prune itself from the multicast tree, or to join back (Graft) at a later time.

R4#show ip mroute | beg Int
 Interface state: Interface, Next-Hop or VCD, State/Mode

(*, 239.0.0.1), 00:13:12/stopped, RP 0.0.0.0, flags: DC
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    GigabitEthernet0/0, Forward/Dense, 00:00:24/stopped
    GigabitEthernet0/2, Forward/Dense, 00:13:12/stopped
    GigabitEthernet0/1, Forward/Dense, 00:13:12/stopped

(192.168.1.1, 239.0.0.1), 00:00:50/00:02:09, flags: T              « (S;G) entry
  Incoming interface: GigabitEthernet0/1, RPF nbr 10.0.3.1
  Outgoing interface list:
    GigabitEthernet0/0, Forward/Dense, 00:00:24/stopped            « Router receives IGMP Join message (sent from Host) on interface Gi0/0
    GigabitEthernet0/2, Prune/Dense, 00:00:50/00:02:09             « Unicast protocol chooses Gi0/1 (instead of Gi0/2) as preferred egress RPF interface

(*, 224.0.1.40), 00:13:26/00:02:58, RP 0.0.0.0, flags: DCL
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    GigabitEthernet0/2, Forward/Dense, 00:13:26/stopped
    GigabitEthernet0/1, Forward/Dense, 00:13:26/stopped
    GigabitEthernet0/0, Forward/Dense, 00:13:26/stopped

Once the multicast stream is received and a (S,G) entry is created, a router can choose to remove (prune) itself on that link. One of the reasons to prune a link from a multicast group address is there are no interested receivers connected. Or there were receivers, but they decided to leave the group and no longer request the multicast stream.

Another reason for pruning a link is if a router has two unicast routes to the multicast source. The unicast routing protocol will choose the best path and egress interface to reach the multicast source. This will become the RPF interface. However, the other interface will be pruned. In both scenarios (no interested receivers, different RPF interface) a router uses the Graft message to re-join a pruned multicast tree.

R4#show log | beg Log Buffer
Log Buffer (8192 bytes):

PIM(0): Building Graft message for 239.0.0.1, GigabitEthernet0/0: no entries
PIM(0): Building Graft message for 239.0.0.1, GigabitEthernet0/2: no entries
PIM(0): Building Graft message for 239.0.0.1, GigabitEthernet0/1:
     192.168.1.1/32 count 1
PIM(0): Send v2 Graft to 10.0.3.1 (GigabitEthernet0/1)
PIM(0): Received v2 Graft-Ack on GigabitEthernet0/1 from 10.0.3.1
     Group 239.0.0.1:
     192.168.1.1/32

What is the PIM Assert mechanism and PIM Forwarder?

The PIM Assert mechanism ensures that multicast streams are not duplicated. This is achieved with an election process between two routers to decide which one should become the PIM Forwarder. The Assert mechanism is used in PIM Dense Mode and also in PIM Sparse Mode.

In the following example scenario, R2 and R3 receive the multicast stream from the source in Site 1. Both R2 and R3 forward the multicast stream towards R4 on the shared network segment 10.0.3.0/29. As a result, the PIM Assert election process takes place between R2 and R3.

An EIGRP Offset list configured on R1 ensures that R3 has a worse metric to reach the source than R2. Thus, R2 wins the PIM Assert election, and becomes the PIM Forwarder for the 10.0.3.0/29 segment. As part of the PIM Assert mechanism, R3 proceeds to send a prune message out its interface Gi0/1. This is illustrated in following debug outputs from R2 (Assert winner) and R3 (Assert loser).

R2#show log |  beg Log Buffer
Log Buffer (8192 bytes):

PIM(0): Send v2 Assert on GigabitEthernet0/1 for 239.0.0.1, source 192.168.1.1, metric [90/15360] 
PIM(0): Assert metric to source 192.168.1.1 is [90/15360]
PIM(0): We win, our metric [90/15360]

---------------------------------------------------------------------------

R3#show log | beg Log Buffer
Log Buffer (8192 bytes):

%SYS-5-CONFIG_I: Configured from console by console
PIM(0): Received v2 Assert on GigabitEthernet0/1 from 10.0.3.1
PIM(0): Assert metric to source 192.168.1.1 is [90/15360]
PIM(0): We lose, our metric [90/15367]
PIM(0): Insert (192.168.1.1,239.0.0.1) prune in nbr 10.0.3.1's queue
PIM(0): Send (192.168.1.1, 239.0.0.1) PIM-DM prune to oif GigabitEthernet0/1 in Prune state
PIM(0): (192.168.1.1/32, 239.0.0.1) oif GigabitEthernet0/1 in Prune state
PIM(0): Building Join/Prune packet for nbr 10.0.3.1
PIM(0):  Adding v2 (192.168.1.1/32, 239.0.0.1) Prune
PIM(0): Send v2 join/prune to 10.0.3.1 (GigabitEthernet0/1)
PIM Assert mechanism explained in multicast

Configuration:

R1
    R1#show run | sec ^ip multicast
    ip multicast-routing
    
    R1#show run int Gi0/0 | sec int
    interface GigabitEthernet0/0
     description ** to Source **
     ip address 192.168.1.2 255.255.255.0
     ip pim dense-mode
     duplex auto
     speed auto
     media-type rj45
    
    R1#show run int Gi0/1 | sec int
    interface GigabitEthernet0/1
     description ** to R2 **
     ip address 10.0.1.1 255.255.255.252
     ip pim dense-mode
     duplex auto
     speed auto
     media-type rj45
    
    R1#show run | sec ^router
    router eigrp EXAMPLE-EIGRP
     !
     address-family ipv4 unicast autonomous-system 10
      !
      af-interface GigabitEthernet0/0
       passive-interface
      exit-af-interface
      !
      topology base
       offset-list ACL-OFFSET-LIST out 1000 GigabitEthernet0/2 
      exit-af-topology
      network 10.0.1.0 0.0.0.3
      network 10.0.2.0 0.0.0.3
      network 192.168.1.0
      eigrp router-id 1.1.1.1
     exit-address-family
    
    R1#show run | sec ^ip access
    ip access-list standard ACL-OFFSET-LIST
     permit 192.168.1.0 0.0.0.255
    
R2
    R2#show run | sec ^ip multi
    ip multicast-routing
    
    R2#show run int Gi0/0 | sec int
    interface GigabitEthernet0/0
     description ** to R1 **
     ip address 10.0.1.2 255.255.255.252
     ip pim dense-mode
     duplex auto
     speed auto
     media-type rj45
    
    R2#show run int Gi0/1 | sec int
    interface GigabitEthernet0/1
     description ** to R4 **
     ip address 10.0.3.1 255.255.255.248
     ip pim dense-mode
     duplex auto
     speed auto
     media-type rj45
    
    R2#show run | sec ^router
    router eigrp EXAMPLE-EIGRP
     !
     address-family ipv4 unicast autonomous-system 10
      !
      topology base
      exit-af-topology
      network 10.0.1.0 0.0.0.3
      network 10.0.3.0 0.0.0.7
      eigrp router-id 2.2.2.2
     exit-address-family
    
R3
    R3#show run | sec ^ip multi
    ip multicast-routing
    
    R3#show run int Gi0/0 | sec int
    interface GigabitEthernet0/0
     description ** to R1 **
     ip address 10.0.2.2 255.255.255.252
     ip pim dense-mode
     duplex auto
     speed auto
     media-type rj45
    
    R3#show run int Gi0/1 | sec int
    interface GigabitEthernet0/1
     description ** to R4 **
     ip address 10.0.3.2 255.255.255.248
     ip pim dense-mode
     duplex auto
     speed auto
     media-type rj45
    
    R3#show run | sec ^router
    router eigrp EXAMPLE-EIGRP
     !
     address-family ipv4 unicast autonomous-system 10
      !
      topology base
      exit-af-topology
      network 10.0.2.0 0.0.0.3
      network 10.0.3.0 0.0.0.7
      eigrp router-id 3.3.3.3
     exit-address-family
    
R4
    R4#show run | sec ^ip multi
    ip multicast-routing
    
    R4#show run int Gi0/0 | sec int
    interface GigabitEthernet0/0
     description ** to Receiver (Host) **
     ip address 192.168.2.2 255.255.255.0
     ip pim dense-mode
     duplex auto
     speed auto
     media-type rj45
    
    R4#show run int Gi0/1 | sec int
    interface GigabitEthernet0/1
     description ** to R2 and R3 **
     ip address 10.0.3.3 255.255.255.248
     ip pim dense-mode
     duplex auto
     speed auto
     media-type rj45
    
    R4#show run | sec ^router
    router eigrp EXAMPLE-EIGRP
     !
     address-family ipv4 unicast autonomous-system 10
      !
      af-interface GigabitEthernet0/0
       passive-interface
      exit-af-interface
      !
      topology base
      exit-af-topology
      network 10.0.3.0 0.0.0.7
      network 192.168.2.0
      eigrp router-id 4.4.4.4
     exit-address-family
    
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, 
       N - Received BGP Shared-Tree Prune, n - BGP C-Mroute suppressed, 
       Q - Received BGP S-A Route, q - Sent BGP S-A Route, 
       V - RD & Vector, v - Vector, p - PIM Joins on route, 
       x - VxLAN group
Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join
 Timers: Uptime/Expires
 Interface state: Interface, Next-Hop or VCD, State/Mode

(*, 239.0.0.1), 00:00:19/stopped, RP 0.0.0.0, flags: D
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    GigabitEthernet0/1, Forward/Dense, 00:00:19/stopped
    GigabitEthernet0/0, Forward/Dense, 00:00:19/stopped

(192.168.1.1, 239.0.0.1), 00:00:19/00:02:40, flags: T
  Incoming interface: GigabitEthernet0/0, RPF nbr 10.0.1.1
  Outgoing interface list:
    GigabitEthernet0/1, Forward/Dense, 00:00:19/stopped, A    « Interface forwarding because it is PIM Assert winner

(*, 224.0.1.40), 03:25:08/00:02:38, RP 0.0.0.0, flags: DCL
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    GigabitEthernet0/1, Forward/Dense, 03:25:08/stopped
    GigabitEthernet0/0, Forward/Dense, 03:25:08/stopped




R2#show ip route 192.168.1.0
Routing entry for 192.168.1.0/24
  Known via "eigrp 10", distance 90, metric 15360, type internal
  Redistributing via eigrp 10
  Last update from 10.0.1.1 on GigabitEthernet0/0, 01:50:53 ago
  Routing Descriptor Blocks:
  * 10.0.1.1, from 10.0.1.1, 01:50:53 ago, via GigabitEthernet0/0
      Route metric is 15360, traffic share count is 1                    « R2 has better EIGRP metric to the Source so it wins Assert election
      Total delay is 20 microseconds, minimum bandwidth is 1000000 Kbit
      Reliability 255/255, minimum MTU 1500 bytes
      Loading 1/255, Hops 1
Packet capture PIM Assert

What is the Prune Override mechanism?

A Prune message is sent to the All PIM Routers multicast address 224.0.0.13. On a shared network segment, if there are multiple donwstream routers forwarding the multicast stream, a single Prune message may inadvertently prune an upstream router's OIL interface. To avoid such a scenario, a Prune Override message can be sent.

The following scenario shows R2 forwarding the multicast stream to R3 and R4 on a shared network segment. When Host1 no longer requests the multicast stream, R3 sends a Prune message. However, R4 still needs the stream because Host2 is requesting it. Thus, as soon as R4 receives the Prune message (sent to the All PIM routers address), R4 replies with a Prune Override message which is essentially a PIM Join.

The following debug output from R2 shows this scenario.

R2#show log | beg Log Buffer
Log Buffer (8192 bytes):

%SYS-5-CONFIG_I: Configured from console by console
PIM(0): Join-list: (192.168.1.1/32, 239.0.0.1)
PIM(0): Add GigabitEthernet0/1/0.0.0.0 to (192.168.1.1, 239.0.0.1), Forward state, by PIM Graft
PIM(0): Send v2 Graft-Ack on GigabitEthernet0/1 to 10.0.2.2
PIM(0): Received v2 Join/Prune on GigabitEthernet0/1 from 10.0.2.2, to us
PIM(0): Prune-list: (192.168.1.1/32, 239.0.0.1) 
PIM(0): Schedule to prune GigabitEthernet0/1 for (192.168.1.1/32, 239.0.0.1)
PIM(0): Received v2 Join/Prune on GigabitEthernet0/1 from 10.0.2.3, to us
PIM(0): Join-list: (192.168.1.1/32, 239.0.0.1)
PIM(0): Update GigabitEthernet0/1/10.0.2.3 to (192.168.1.1, 239.0.0.1), Forward state, by PIM SG Join
Prune Override message sent in PIM Dense Mode multicast on shared network segment

Configuration:

R1
    R1#show run | sec ^ip multi
    ip multicast-routing
    
    R1#show run int Gi0/0 | sec int
    interface GigabitEthernet0/0
     description ** to Source **
     ip address 192.168.1.2 255.255.255.0
     ip pim dense-mode
     duplex auto
     speed auto
     media-type rj45
    
    R1#show run int Gi0/1 | sec int
    interface GigabitEthernet0/1
     description ** to R2 **
     ip address 10.0.1.1 255.255.255.252
     ip pim dense-mode
     duplex auto
     speed auto
     media-type rj45
    
    R1#show run | sec ^router
    router eigrp EXAMPLE-EIGRP
     !
     address-family ipv4 unicast autonomous-system 10
      !
      af-interface GigabitEthernet0/0
       passive-interface
      exit-af-interface
      !
      topology base
      exit-af-topology
      network 10.0.1.0 0.0.0.3
      network 192.168.1.0
      eigrp router-id 1.1.1.1
     exit-address-family
    
R2
    R2#show run | sec ^ip multi
    ip multicast-routing
    
    R2#show run int Gi0/0 | sec int
    interface GigabitEthernet0/0
     description ** to R1 **
     ip address 10.0.1.2 255.255.255.252
     ip pim dense-mode
     duplex auto
     speed auto
     media-type rj45
    
    R2#show run int Gi0/1 | sec int
    interface GigabitEthernet0/1
     description ** to R3 and R4 **
     ip address 10.0.2.1 255.255.255.248
     ip pim dense-mode
     duplex auto
     speed auto
     media-type rj45
    
    R2#show run | sec ^router
    router eigrp EXAMPLE-EIGRP
     !
     address-family ipv4 unicast autonomous-system 10
      !
      topology base
      exit-af-topology
      network 10.0.1.0 0.0.0.3
      network 10.0.2.0 0.0.0.7
      eigrp router-id 2.2.2.2
     exit-address-family
    
R3
    R3#show run | sec ^ip multi
    ip multicast-routing
    
    R3#show run int Gi0/0 | sec int
    interface GigabitEthernet0/0
     description ** to Host1 **
     ip address 192.168.2.2 255.255.255.0
     ip pim dense-mode
     duplex auto
     speed auto
     media-type rj45
    
    R3#show run int Gi0/1 | sec int
    interface GigabitEthernet0/1
     description ** to R2 **
     ip address 10.0.2.2 255.255.255.248
     ip pim dense-mode
     duplex auto
     speed auto
     media-type rj45
    
    R3#show run | sec ^router
    router eigrp EXAMPLE-EIGRP
     !
     address-family ipv4 unicast autonomous-system 10
      !
      af-interface GigabitEthernet0/0
       passive-interface
      exit-af-interface
      !
      topology base
      exit-af-topology
      network 10.0.2.0 0.0.0.7
      network 192.168.2.0
      eigrp router-id 3.3.3.3
     exit-address-family
    
R4
    R4#show run | sec ^ip multi
    ip multicast-routing
    
    R4#show run int Gi0/0 | sec int
    interface GigabitEthernet0/0
     description ** to Host2 **
     ip address 192.168.3.2 255.255.255.0
     ip pim dense-mode
     duplex auto
     speed auto
     media-type rj45
    
    R4#show run int Gi0/1 | sec int
    interface GigabitEthernet0/1
     description ** to R2 **
     ip address 10.0.2.3 255.255.255.248
     ip pim dense-mode
     duplex auto
     speed auto
     media-type rj45
    
    R4#show run | sec ^router
    router eigrp EXAMPLE-EIGRP
     !
     address-family ipv4 unicast autonomous-system 10
      !
      af-interface GigabitEthernet0/0
       passive-interface
      exit-af-interface
      !
      topology base
      exit-af-topology
      network 10.0.2.0 0.0.0.7
      network 192.168.3.0
      eigrp router-id 4.4.4.4
     exit-address-family
    
Host1
    Host1#show run int Gi0/0 | sec int
    interface GigabitEthernet0/0
     description ** to R3 **
     ip address 192.168.2.1 255.255.255.0
     ip igmp join-group 239.0.0.1
     duplex auto
     speed auto
     media-type rj45
    
    Host1#show run | sec ^ip route
    ip route 0.0.0.0 0.0.0.0 GigabitEthernet0/0 192.168.2.2
    
Host2
    Host2#show run int Gi0/0 | sec int
    interface GigabitEthernet0/0
     description ** to R4 **
     ip address 192.168.3.1 255.255.255.0
     ip igmp join-group 239.0.0.1
     duplex auto
     speed auto
     media-type rj45
    
    Host2#show run | sec ^ip route    
    ip route 0.0.0.0 0.0.0.0 GigabitEthernet0/0 192.168.3.2
    
Source#ping 239.0.0.1 re 5  
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 239.0.0.1, timeout is 2 seconds:

Reply to request 0 from 192.168.2.1, 4 ms
Reply to request 0 from 192.168.3.1, 5 ms
Reply to request 1 from 192.168.2.1, 3 ms
Reply to request 1 from 192.168.3.1, 3 ms
Reply to request 2 from 192.168.2.1, 5 ms
Reply to request 2 from 192.168.3.1, 5 ms          « At this point R3 has pruned itself and only Host2 receives the multicast stream
Reply to request 3 from 192.168.3.1, 3 ms
Reply to request 4 from 192.168.3.1, 4 ms




R2#show ip mroute | beg Int
 Interface state: Interface, Next-Hop or VCD, State/Mode

(*, 239.0.0.1), 00:00:26/stopped, RP 0.0.0.0, flags: D
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    GigabitEthernet0/1, Forward/Dense, 00:00:26/stopped
    GigabitEthernet0/0, Forward/Dense, 00:00:26/stopped

(192.168.1.1, 239.0.0.1), 00:00:26/00:02:33, flags: T
  Incoming interface: GigabitEthernet0/0, RPF nbr 10.0.1.1
  Outgoing interface list:
    GigabitEthernet0/1, Forward/Dense, 00:00:26/stopped         « R2 OIL Gi0/1 needs to remain in the Forward state even though a Prune was received

(*, 224.0.1.40), 00:42:52/00:02:25, RP 0.0.0.0, flags: DCL
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list:
    GigabitEthernet0/1, Forward/Dense, 00:42:52/stopped
    GigabitEthernet0/0, Forward/Dense, 00:42:52/stopped

An essential part of the Prune Override mechanism is a delay timer or override timer that is started upon receipt of a Prune message. The following quote from the RFC 7899 provides further details about the importance of this timer to enable the override mechanism on a shared network segment.

Indeed, when active, the prune override mechanism consists in having a PIM upstream router introduce a delay ("prune override interval") before taking into account a PIM Prune message sent by a downstream neighbor.

This mechanism has not been designed specifically for the purpose of damping multicast state, but as a means to allow PIM to operate on multi-access networks.

RFC 7899, Multicast VPN State Damping