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