Bi-dir PIM Configuration
Bidir PIM using Cisco Auto-RP for RP election
Homburg router:
ip multicast-routing
ip pim bidir-enable
!
interface fastethernet 0/0
ip address 10.1.1.1 255.255.255.0
ip ospf 1 area 0
ip igmp join-group 239.11.1.1
!
interface serial 0/0
ip address 10.2.1.1 255.255.255.0
ip ospf 1 area 0
ip pim sparse-mode
!
interface serial 0/1
ip address 10.2.2.1 255.255.255.0
ip ospf 1 area 0
ip pim sparse-mode
Fedora router:
ip multicast-routing
ip pim bidir-enable
!
interface Loopback 0
ip address 10.224.1.2 255.255.255.255
ip ospf 1 area 0
ip pim sparse-mode
!
interface serial 0/0
ip address 10.2.1.2 255.255.255.252
ip ospf 1 area 0
ip pim sparse-mode
!
interface serial 0/1
ip address 10.2.4.1 255.255.255.0
ip ospf 1 area 0
ip pim sparse-mode
!
interface serial 0/2
ip address 10.2.5.1 255.255.255.0
ip ospf 1 area 0
ip pim sparse-mode
!
access-list 1 permit 239.0.0.0 0.255.255.255
!
ip pim send-rp-announce Loopback 0 scope 10 group-list 1 bidir
!
!
Porkpie router:
ip multicast-routing
ip pim bidir-enable
!
interface Loopback 0
ip address 10.224.1.3 255.255.255.255
ip ospf 1 area 0
ip pim sparse-mode
!
interface serial 0/0
ip address 10.2.3.2 255.255.255.0
ip ospf 1 area 0
ip pim sparse-mode
!
interface serial 0/1
ip address 10.2.4.2 255.255.255.0
ip ospf 1 area 0
ip pim sparse-mode
!
interface fastethernet 0/0
ip address 172.16.1.2 255.255.255.0
ip ospf 1 area 0
ip pim sparse-mode
standby 1 ip 172.16.1.1
standby 1 preempt
!
ip pim send-rp-discovery Loopback 0 scope 10
Bowler router:
ip multicast-routing
ip pim bidir-enable
!
interface serial 0/0
ip address 10.2.5.2 255.255.255.252
ip ospf 1 area 0
ip pim sparse-mode
!
interface fastethernet 0/0
ip address 172.16.1.3 255.255.255.0
ip ospf 1 area 0
ip pim sparse-mode
standby 1 ip 172.16.1.1
standby 1 preempt
standby 1 priority 105
standby 1 track serial 0/0 10
!
!
Stetson router:
ip multicast-routing
ip pim bidir-enable
!
interface Loopback 0
ip address 10.224.1.1 255.255.255.255
ip ospf 1 area 0
ip pim sparse-mode
!
interface serial 0/0
ip address 10.2.2.2 255.255.255.0
ip ospf 1 area 0
ip pim sparse-mode
!
interface serial 0/1
ip address 10.2.3.1 255.255.255.0
ip ospf 1 area 0
ip pim sparse-mode
!
access-list 1 permit 239.0.0.0 0.255.255.255
!
ip pim send-rp-announce Loopback 0 scope 10 group-list 1 bidir
!
All PIM routers of the domain are enabled for Bidir PIM using ip pim bidir-enable command.
Bidir PIM still requires a mechanism to configure/ elect an RP for the PIM domain. This mechanism could be statically configuring RP (highly un-scalable in case of RP failure), BSR mechanism or Cisco’s Auto-RP. Here, we use Auto-RP.
Porkpie is configured to serve as the RP Mapping Agent. While Stetson and Fedora are configured as C-RPs. For every link (point-to-point or multi-access), a DF is elected. DF is the router closest to the RP address. If the metric is same, the router with the higher IP address becomes the Winner DF.
Every router on the link advertises its metric to reach RP in an Offer message on the link. Porkpie and Bowler are connected via a common Ethernet medium. Porkpie is sending Offer messages on Ethernet. It is also receiving Winner messages from Bowler (172.16.1.3) on its non-DF interface. Although the metric (metric 65 from the routing table) to reach RP is same for Porkpie and Bowler, since Bowler has higher IP address, it advertises itself as the Winner DF when it compares the metric advertised by Porkpie (Cisco routers still mention as Metric below).
Porkpie# debug ip pim df
*Mar 1 00:16:31.175: PIM(0): Send v2 Offer on FastEthernet0/0 (Non-DF) for RP 10.224.1.2
*Mar 1 00:16:31.179: PIM(0): Sender 172.16.1.2, pref 110, metric 65
*Mar 1 00:16:31.199: PIM(0): Receive DF Winner message from 172.16.1.3 on FastEthernet0/0 (Non-DF)
*Mar 1 00:16:31.203: PIM(0): RP 10.224.1.2, pref 110, metric 65
*Mar 1 00:16:31.203: PIM(0): Metric is better
Bowler# debug ip pim df
*Mar 1 00:15:45.131: PIM(0): Receive DF Offer message from 172.16.1.2 on FastEthernet0/0 (DF)
*Mar 1 00:15:45.135: PIM(0): RP 10.224.1.2, pref 110, metric 65
*Mar 1 00:15:45.139: PIM(0): Metric is equal or worse
*Mar 1 00:15:45.139: PIM(0): Send v2 Winner on FastEthernet0/0 (DF) for RP 10.224.1.2
*Mar 1 00:15:45.143: PIM(0): Sender 172.16.1.3, pref 110, metric 65
Bowler# show ip route 10.224.1.2
Routing entry for 10.224.1.2/32
Known via "ospf 1", distance 110, metric 65, type intra area
Last update from 10.2.5.1 on Serial0/0, 00:37:06 ago
Routing Descriptor Blocks:
* 10.2.5.1, from 10.224.1.2, 00:37:06 ago, via Serial0/0
Route metric is 65, traffic share count is 1
Porkpie# show ip route 10.224.1.2
Routing entry for 10.224.1.2/32
Known via "ospf 1", distance 110, metric 65, type intra area
Last update from 10.2.4.1 on Serial0/0, 00:37:42 ago
Routing Descriptor Blocks:
* 10.2.4.1, from 10.224.1.2, 00:37:42 ago, via Serial0/0
Route metric is 65, traffic share count is 1
The show ip pim interface df command displays the DFs elected on the router.
Bowler# show ip pim interface df
* implies this system is the DF
Interface RP DF Winner Metric Uptime
FastEthernet0/0 10.224.1.2 *172.16.1.3 65 00:00:50
Serial0/0 10.224.1.2 10.2.5.1 0 00:45:20
When Bowler goes down (or its metric changes to higher value), Porkpie (172.16.1.2) becomes the DF.
When Bowler is available again, it receives Winner messages containing winner metric and IP address from Porkpie. Bowler compares the metric with its own metric to the RP. Here, since its metric is better (equal metric or higher IP address), it starts to advertise itself as the Winner DF using Winner messages. When Porkpie receives these Winner messages, it compares the winner metric with its current metric to reach RP. If the winner metric is better, Porkpie sends Backoff message to allow the routing protocol to stabilize and allow other routers on the link to participate in DF election. If no changes occur within 1 second, Porkpie router sends Pass message on the link with old DF, new DF and new metric declaring new DF and relinquishing the role of DF on the link.
Porkpie# debug ip pim df
*Mar 1 01:05:50.271: PIM(0): Send v2 Winner on FastEthernet0/0 (DF) for RP 10.224.1.2
*Mar 1 01:05:50.275: PIM(0): Sender 172.16.1.2, pref 110, metric 65
*Mar 1 01:05:50.591: PIM(0): Receive DF Offer message from 172.16.1.3 on FastEthernet0/0 (DF)
*Mar 1 01:05:50.591: PIM(0): RP 10.224.1.2, pref 110, metric 65
*Mar 1 01:05:50.591: PIM(0): Metric is better
*Mar 1 01:05:50.595: PIM(0): Send v2 Backoff on FastEthernet0/0 (172.16.1.2, DF) for RP 10.224.1.2
*Mar 1 01:05:50.599: PIM(0): Current pref 110, metric 65
*Mar 1 01:05:50.599: PIM(0): Offer pref 110, metric 65, interval 1, by 172.16.1.3
Porkpie# debug ip pim df
*Mar 1 01:05:51.603: PIM(0): Send v2 Pass on FastEthernet0/0 (172.16.1.2, DF) for RP 10.224.1.2
*Mar 1 01:05:51.607: PIM(0): Old winner is 172.16.1.2, New winner is 172.16.1.3, pref 110, metric 65
*Mar 1 01:05:57.623: PIM(0): Receive DF Winner message from 172.16.1.3 on FastEthernet0/0 (Non-DF)
*Mar 1 01:05:57.627: PIM(0): RP 10.224.1.2, pref 110, metric 65
*Mar 1 01:05:57.627: PIM(0): Metric is better
The show ip mroute output on Porkpie shows that for (*, 239.10.1.1) entry, Serial 0/0 is present in both incoming and outgoing interface list as Bidir-upstream. This is not possible in PIM-SM. The same reason goes for (*, 239.11.1.1) state entry. All other entries are related to Auto-RP.
Porkpie# 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,
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
(*, 239.11.1.1), 00:03:19/00:01:21, RP 10.224.1.2, flags: BP
Bidir-Upstream: Serial0/0, RPF nbr 10.2.4.1
Outgoing interface list:
Serial0/0, Bidir-Upstream/Sparse, 00:03:19/00:00:00
(*, 239.10.1.1), 00:08:28/00:02:02, RP 10.224.1.2, flags: BC
Bidir-Upstream: Serial0/0, RPF nbr 10.2.4.1
Outgoing interface list:
FastEthernet0/0, Forward/Sparse, 00:08:12/00:02:02
Serial0/0, Bidir-Upstream/Sparse, 00:08:12/00:00:00
(*, 224.0.1.39), 00:08:34/stopped, RP 0.0.0.0, flags: DCL
Incoming interface: Null, RPF nbr 0.0.0.0
Outgoing interface list:
Serial0/1, Forward/Sparse, 00:08:34/00:00:47
Serial0/0, Forward/Sparse, 00:08:34/00:00:47
Loopback0, Forward/Sparse, 00:08:34/00:02:57
(10.224.1.1, 224.0.1.39), 00:08:15/00:02:45, flags: LT
Incoming interface: Serial0/1, RPF nbr 10.2.3.1
Outgoing interface list:
Loopback0, Forward/Sparse, 00:08:15/00:02:12
Serial0/0, Forward/Sparse, 00:08:15/00:00:44
(10.224.1.2, 224.0.1.39), 00:08:18/00:02:45, flags: LT
Incoming interface: Serial0/0, RPF nbr 10.2.4.1
Outgoing interface list:
Loopback0, Forward/Sparse, 00:08:18/00:02:12
Serial0/1, Forward/Sparse, 00:08:18/00:00:42
(*, 224.0.1.40), 00:09:25/stopped, RP 0.0.0.0, flags: DCL
Incoming interface: Null, RPF nbr 0.0.0.0
Outgoing interface list:
Loopback0, Forward/Sparse, 00:09:25/00:02:19
(10.224.1.3, 224.0.1.40), 00:09:13/00:02:43, flags: PLT
Incoming interface: Loopback0, RPF nbr 0.0.0.0
Outgoing interface list: Null