Multicast PIM Assert Explained

Multicast PIM Assert is one of those important multicast topics that most people don’t really think about. Let’s take a look at the following topology:

multicast assert

Above you see 4 routers that are configured to use multicast. R1 is the source and R4 is our receiver. As you can see R2, R3 and R4 are connected to the same switch.

Now when R1 starts streaming multicast traffic towards R2 and R3 they will both forward multicast packets to R4 resulting in duplicate traffic. To stop this PIM will elect one PIM forwarder for this segment. PIM doesn’t have any routing information itself but relies on other routing protocols that are configured, it will use this information to select the best forwarding path with the PIM assert mechanism.

Don’t confuse the PIM forwarder with the PIM DR (Designated Router). those are two different things!

When R2 and R3 both forward multicast packets to the 192.168.234.0 /24 segment they will see each others multicast traffic, this will trigger the PIM assert mechanism. We will elect a PIM forwarder based on the following rules:

  1. The router with the lowest administrative distance to the source of the multicast stream will be the elected PIM forwarder. This only happens if you are using two routing protocols or if you used a static route pointing to the source.
  2. If the AD is equal we will compare the unicast routing metric towards the source.
  3. If the AD and metric are both the same we will elect the PIM forwarded based on the highest IP address.

The elected PIM forwarder will keep forwarding traffic to the receiver while the loser will prune its interface.

Now let’s take a look at this in action! First i’ll configure a basic PIM Dense mode setup:

R1(config)#ip multicast-routing 

R1(config)#interface loopback 0
R1(config-if)#ip address 1.1.1.1 255.255.255.255
R1(config-if)#ip pim dense-mode 

R1(config)#interface fastEthernet 0/0
R1(config-if)#ip pim dense-mode         

R1(config)#interface fastEthernet 0/1
R1(config-if)#ip pim dense-mode 

I will use a loopback interface on R1 as the source for our multicast stream.

R2(config)#ip multicast-routing 

R2(config)#interface fastEthernet 0/0
R2(config-if)#ip pim dense-mode 

R2(config)#interface fastEthernet 0/1
R2(config-if)#ip pim dense-mode
R3(config)#ip multicast-routing 

R3(config)#interface fastEthernet 0/0
R3(config-if)#ip pim dense-mode 

R3(config)#interface fastEthernet 0/1
R3(config-if)#ip pim dense-mode

R2 and R3 are simple, just enable multicast routing and PIM Dense mode on the interfaces. Only R4 left:

R4(config)#ip multicast-routing 

R4(config)#interface fastEthernet 0/0
R4(config-if)#ip pim dense-mode 
R4(config-if)#ip igmp join-group 239.1.1.1

On R4 we will also enable PIM dense mode and we make it listen to the 239.1.1.1 multicast group address.

I applied OSPF to all routers, using the quick “shotgun approach” to advertise everything:

router ospf 1
 network 0.0.0.0 255.255.255.255 area 0

Now let’s start a multicast stream from R1:

R1#ping 239.1.1.1 source loopback 0 repeat 9999

Type escape sequence to abort.
Sending 9999, 100-byte ICMP Echos to 239.1.1.1, timeout is 2 seconds:
Packet sent with a source address of 1.1.1.1 

Reply to request 0 from 192.168.234.4, 12 ms

You will see replies from R4. Now let’s check who is forwarding this traffic:

R2#show ip mroute 1.1.1.1 239.1.1.1
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,
       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
Outgoing interface flags: H - Hardware switched, A - Assert winner
 Timers: Uptime/Expires
 Interface state: Interface, Next-Hop or VCD, State/Mode

(1.1.1.1, 239.1.1.1), 00:02:56/00:00:07, flags: PT
  Incoming interface: FastEthernet0/0, RPF nbr 192.168.12.1
  Outgoing interface list:
    FastEthernet0/1, Prune/Dense, 00:02:56/00:00:03
R3#show ip mroute 1.1.1.1 239.1.1.1  
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,
       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
Outgoing interface flags: H - Hardware switched, A - Assert winner
 Timers: Uptime/Expires
 Interface state: Interface, Next-Hop or VCD, State/Mode

(1.1.1.1, 239.1.1.1), 00:02:48/00:02:57, flags: T
  Incoming interface: FastEthernet0/0, RPF nbr 192.168.13.1
  Outgoing interface list:
    FastEthernet0/1, Forward/Dense, 00:02:48/00:00:00, A

As you can see above R2 has pruned its outgoing interface while R3 is forwarding it. Note that you also see the “A” indicating that R3 is the assert winner. R3 has won this PIM assert election because it has the highest IP address. Let’s change the AD on R2 to see if it becomes the new assert winner:

R2(config)#router ospf 1
R2(config-router)#distance 100 0.0.0.0 255.255.255.255 1 
R2(config)#access-list 1 permit host 1.1.1.1

We will change the AD on R2 to 100 for all prefixes matching access-list 1. Access-list 1 matches 1.1.1.1 which is the source of our multicast stream.

Keep in mind that when we work with multicast we are concerned about source IP addresses, not destination IP addresses like with unicast routing.

Let’s verify our work:

R2#show ip route | include 1.1.1.1
O       1.1.1.1 [100/11] via 192.168.12.1, 00:01:32, FastEthernet0/0
R3#show ip route | include 1.1.1.1
O       1.1.1.1 [110/11] via 192.168.13.1, 00:01:20, FastEthernet0/0

R2 now has a better administrative distance so it should win the PIM assert election, let’s see if this is true:

We're Sorry, Full Content Access is for Members Only...

If you like to keep on reading, Become a Member Now! Here is why:

  • Learn any CCNA, CCNP and CCIE R&S Topic. Explained As Simple As Possible.
  • Try for Just $1. The Best Dollar You've Ever Spent on Your Cisco Career!
  • Full Access to our 662 Lessons. More Lessons Added Every Week!
  • Content created by Rene Molenaar (CCIE #41726)

501 Sign Ups in the last 30 days

satisfaction-guaranteed
100% Satisfaction Guaranteed!
You may cancel your monthly membership at any time.
No Questions Asked!

Tags:


Forum Replies

  1. Hello Hussien

    Which router will be chosen depends on what is called the PIM Assert mechanism. You can find detailed information about this at the following lesson:

    ... Continue reading in our forum

  2. Hi Hussein,

    In my example, R4 was only a receiver so it didn’t participate in PIM, which makes R2 or R3 the designated router. When you enable PIM on R4 and it is a DR, it will have two equal unicast routes to 1.1.1.1 so it has to make a choice.

    RPF does not use both routes but uses the PIM neighbor with the highest IP address to go upstream.

    Let’s look at an example. I’ll turn R4 into a PIM router by enabling it on the FastEthernet0/0 interface. I’ll also create a loopback that will have IGMP join on it so that R4 is the DR for the loopback segment:

    R4(config)
    ... Continue reading in our forum

  3. Its seems relatively straightforward when explained. However, may become less so when starting to apply in real world :slight_smile: . One real world example - client is facing redundant pair of routers with HSRP. Will both routers still participate in DR election? How its going to work then if router with lower IP is the active router? Looks like the joins may not be sent as DR (being passive) will not receive client request and active router will receive it but will not send join to RP, since its not a DR. If thats the case does it mean in HSRP case (which is very often)

    ... Continue reading in our forum

  4. Hi Lag,
    Many thanks for the reply. I made the priority of SW1 to 15 so when subscribing for the multicast it was going to through SW1 but when exchange disconnected the link between SW1-MASTER & ESW1 the failover did not occur.
    I think we need to configure the tracking on the SW1-MASTER so that one primary link to ESW1 goes down the traffic automatically goes to SW2 AND PIM dr will automatically be SW2.

26 more replies! Ask a question or join the discussion by visiting our Community Forum