PIM SM using Static RP

PIM SM using Static RP

Homburg router:

ip multicast-routing

!

interface fastethernet 0/0

ip address 10.1.1.1 255.255.255.0

ip pim sparse-mode

ip ospf 1 area 0

!

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

!

ip pim rp-address 10.224.1.1

Fedora router:

ip multicast-routing

!

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

!

ip pim rp-address 10.224.1.1

!

!

Porkpie router:

ip multicast-routing

!

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 rp-address 10.224.1.1

Bowler router:

ip multicast-routing

!

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

!

ip pim rp-address 10.224.1.1

!

!

Stetson router:

ip multicast-routing

!

interface Loopback 0

ip address 10.224.1.1 255.255.255.255

ip ospf 1 area 0

!

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

!

ip pim rp-address 10.224.1.1

!

When a host desires to join a multicast group, it sends an IGMP Membership Report message to all routers on the subnet. The DR of the multi-access network creates a (*, G) entry in its multicast-routing table. In this case, the DR is the Bowler router because its IP address is higher. Bowler router creates a (*, 239.10.1.1) entry in its multicast-routing table.

Porkpie# show ip pim interface

Address Interface Ver/ Nbr Query DR DR

Mode Count Intvl Prior

10.2.4.2 Serial0/0 v2/S 1 30 1 0.0.0.0

10.2.3.2 Serial0/1 v2/S 1 30 1 0.0.0.0

172.16.1.2 FastEthernet0/0 v2/S 1 30 1 172.16.1.3

Once the (*, 239.10.1.1) entry is created, the Bowler router creates a Join/Prune message with WC-bit and RPT-bit set and join-list containing RP-address towards its upstream (RPF neighbor) router i.e Porkpie router.

Bowler# show ip route 10.224.1.1

Routing entry for 10.224.1.1/32

Known via "ospf 1", distance 110, metric 75, type intra area

Last update from 172.16.1.2 on FastEthernet0/0, 00:18:08 ago

Routing Descriptor Blocks:

* 172.16.1.2, from 10.2.2.2, 00:18:08 ago, via FastEthernet0/0

Route metric is 75, traffic share count is 1

Bowler# debug ip pim

*Mar 1 00:21:14.891: PIM(0): Check RP 10.224.1.1 into the (*, 239.10.1.1) entry

*Mar 1 00:21:14.895: PIM(0): Building Triggered (*,G) Join / (S,G,RP-bit) Prune message for 239.10.1.1

*Mar 1 00:21:14.895: PIM(0): Insert (*,239.10.1.1) join in nbr 172.16.1.2's queue

*Mar 1 00:21:14.899: PIM(0): Building Join/Prune packet for nbr 172.16.1.2

*Mar 1 00:21:14.899: PIM(0): Adding v2 (10.224.1.1/32, 239.10.1.1), WC-bit, RPT-bit, S-bit Join

*Mar 1 00:21:14.899: PIM(0): Send v2 join/prune to 172.16.1.2 (FastEthernet0/0)

*Mar 1 00:21:17.399: PIM(0): Received RP-Reachable on FastEthernet0/0 from 10.224.1.1

*Mar 1 00:21:17.399: PIM(0): Received RP-Reachable on FastEthernet0/0 from 10.224.1.1

*Mar 1 00:21:17.399: for group 224.0.1.40

Since Porkpie router receives a Join/Prune message with WC-bit and RPT-bit set to 1 from Bowler router on Fastethernet 0/0 interface, Porkpie router puts that interface in Forwarding state.

Since Bowler is the end-point of the RPT branch, its (*, 239.10.1.1) entry has outgoing interface list empty and Prune flag set.

Bowler# show ip mroute 239.10.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

(*, 239.10.1.1), 00:02:16/00:02:25, RP 10.224.1.1, flags: SJPC

Incoming interface: FastEthernet0/0, RPF nbr 172.16.1.2

Outgoing interface list: Null

When the multicast-source starts to send packets for group 239.10.1.1, the DR (Homburg router) of the source first sends multicast packet encapsulated in Register message to the RP. Due to inefficiency, the RP (Stetson router) decides to switch over to SPT-tree rooted to the source. So the RP creates an (S, G) i.e. (10.1.1.1, 239.10.1.1) entry, switches over to SPT-tree and sends Register-Stop message to Homburg router. Then Stetson (RP) router sends periodic Join/Prune messages to upstream routers towards source to join the SPT-tree.

Homburg# debug ip pim

*Mar 1 01:54:35.639: PIM(0): Check RP 10.224.1.1 into the (*, 239.10.1.1) entry

*Mar 1 01:54:35.643: PIM(0): Send v2 Register to 10.224.1.1 for 10.1.1.1, group 239.10.1.1

*Mar 1 01:54:36.139: PIM(0): Received v2 Register-Stop on Serial0/1 from 10.224.1.1

*Mar 1 01:54:36.139: PIM(0): for source 10.1.1.1, group 239.10.1.1

*Mar 1 01:54:36.139: PIM(0): Clear Registering flag to 10.224.1.1 for (10.1.1.1/32, 239.10.1.1)

*Mar 1 01:54:36.139: PIM(0): Received v2 Join/Prune on Serial0/1 from 10.2.2.2, to us

*Mar 1 01:54:36.139: PIM(0): Join-list: (10.1.1.1/32, 239.10.1.1), S-bit set

Reply to request 0 from

*Mar 1 01:54:36.139: PIM(0): Add Serial0/1/10.2.2.2 to (10.1.1.1, 239.10.1.1), Forward state, by PIM SG Join

*Mar 1 01:54:36.559: PIM(0): Received v2 Join/Prune on Serial0/0 from 10.2.1.2, to us

*Mar 1 01:54:36.559: PIM(0): Join-list: (10.1.1.1/32, 239.10.1.1), S-bit set

*Mar 1 01:54:36.559: PIM(0): Add Serial0/0/10.2.1.2 to (10.1.1.1, 239.10.1.1), Forward state, by PIM SG Join

Homburg router receives a Join/Prune message from the RP and so it joins the SPT-tree. All PIM routers between the source and the RP creates an (10.1.1.1, 239.10.1.1) state entry since they receive a Join/Prune message from RP. Bowler router also receives Join/Prune messages from its upstream routers and hence it too creates an entry (10.1.1.1, 239.10.1.1) with its RFP neighbor as Fedora router since that is the shortest-path to the source 10.1.1.1 according to the IP routing table.

Fedora# show ip mroute 239.10.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

(*, 239.10.1.1), 00:15:29/stopped, RP 10.224.1.1, flags: SP

Incoming interface: Serial0/1, RPF nbr 10.2.4.2

Outgoing interface list: Null

(10.1.1.1, 239.10.1.1), 00:04:09/00:00:29, flags: T

Incoming interface: Serial0/0, RPF nbr 10.2.1.1

Outgoing interface list:

Serial0/2, Forward/Sparse, 00:04:09/00:03:16

Bowler# show ip route 10.1.1.0

Routing entry for 10.1.1.0/24

Known via "ospf 1", distance 110, metric 138, type intra area

Last update from 10.2.5.1 on Serial0/0, 00:18:19 ago

Routing Descriptor Blocks:

* 10.2.5.1, from 10.2.1.1, 00:18:19 ago, via Serial0/0

Route metric is 138, traffic share count is 1

Bowler# show ip mroute 239.10.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

(*, 239.10.1.1), 00:06:27/stopped, RP 10.224.1.1, flags: SJPC

Incoming interface: FastEthernet0/0, RPF nbr 172.16.1.2

Outgoing interface list: Null

(10.1.1.1, 239.10.1.1), 00:00:50/00:02:09, flags: J

Incoming interface: Serial0/0, RPF nbr 10.2.5.1

Outgoing interface list:

FastEthernet0/0, Forward/Sparse, 00:00:50/00:02:19

The following output shows how Bowler router is forwarding multicast traffic for group 239.10.1.1.

Bowler# show access-list

Extended IP access list 100

10 permit ip any host 239.10.1.1 (6 matches)

Bowler# debug ip mpacket list 100

IP(0): s=10.1.1.1 (Serial0/0) d=239.10.1.1 (FastEthernet0/0) id=2, ttl=253, prot=1, len=100(100), mforward

Since Bowler router is responsible for forwarding traffic for group 239.10.1.1 on its multi-access network, the (10.1.1.1, 239.10.1.1) entry from Porkpie router is pruned off the SPT-tree.

Porkpie# show ip mroute 239.10.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

(*, 239.10.1.1), 00:25:13/00:02:54, RP 10.224.1.1, flags: SJC

Incoming interface: Serial0/1, RPF nbr 10.2.3.1

Outgoing interface list:

FastEthernet0/0, Forward/Sparse, 00:25:13/00:02:54

(10.1.1.1, 239.10.1.1), 00:01:08/00:02:04, flags: PJT

Incoming interface: Serial0/0, RPF nbr 10.2.4.1

Outgoing interface list: Null

Now, we configure Bowler router to NOT switchover to SPT-tree at any time.

Bowler(config)# ip pim spt-threshold infinity

This change causes Bowler router to not create a (S, G) i.e. (10.1.1.1, 239.10.1.1) state entry. Since its Fastethernet 0/0 is its RPF interface to reach to the RP, it cannot forward multicast traffic over that interface now as it is split-horizon in multicasting and hence its (*, 239.10.1.1) entry is set with Prune flag. Hence Porkpie router takes the responsibility of forwarding traffic to member and puts its Fastethernet 0/0 interface in Forwarding state. Porkpie has also joined the SPT-tree since it is under no constraints of not joining the SPT-tree.

Porkpie# show ip mroute 239.10.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

(*, 239.10.1.1), 03:03:52/00:02:47, RP 10.224.1.1, flags: SJC

Incoming interface: Serial0/1, RPF nbr 10.2.3.1

Outgoing interface list:

FastEthernet0/0, Forward/Sparse, 03:03:52/00:02:47

(10.1.1.1, 239.10.1.1), 00:01:12/00:03:11, flags: JT

Incoming interface: Serial0/0, RPF nbr 10.2.4.1

Outgoing interface list:

FastEthernet0/0, Forward/Sparse, 00:01:12/00:02:47

Porkpie# debug ip mpacket

*Mar 1 03:03:12.715: IP(0): s=10.1.1.1 (Serial0/1) d=239.10.1.1 (FastEthernet0/0) id=20, ttl=253, prot=1, len=100(100), mforward

*Mar 1 03:03:23.411: IP(0): s=10.1.1.1 (Serial0/1) d=239.10.1.1 (FastEthernet0/0) id=21, ttl=253, prot=1, len=100(100), mforward

*Mar 1 03:03:23.423: IP(0): s=10.1.1.1 (Serial0/0) d=239.10.1.1 (FastEthernet0/0) id=21, ttl=253, prot=1, len=100(100), mforward

Bowler# show ip mroute 239.10.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

(*, 239.10.1.1), 03:03:26/00:02:53, RP 10.224.1.1, flags: SPC

Incoming interface: FastEthernet0/0, RPF nbr 172.16.1.2

Outgoing interface list: Null

The following output from Fedora router shows that now it has Serial 0/1 interface in Forwarding state as compared to Serial 0/2 before the change.

Fedora# show ip mroute 239.10.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

(*, 239.10.1.1), 00:02:31/stopped, RP 10.224.1.1, flags: SP

Incoming interface: Serial0/1, RPF nbr 10.2.4.2

Outgoing interface list: Null

(10.1.1.1, 239.10.1.1), 00:02:30/00:01:56, flags: T

Incoming interface: Serial0/0, RPF nbr 10.2.1.1

Outgoing interface list:

Serial0/1, Forward/Sparse, 00:02:30/00:02:57