PIM DM
PIM Dense Mode
Homburg router:
ip multicast-routing
!
interface Loopback 0
ip address 1.1.1.1 255.255.255.255
!
interface serial 0/0
ip address 10.1.1.1 255.255.255.0
ip ospf 1 area 0
ip pim dense-mode
!
interface serial 0/1
ip address 10.1.2.1 255.255.255.0
ip ospf 1 area 0
ip pim dense-mode
Fedora router:
ip multicast-routing
!
interface serial 0/0
ip address 10.1.1.2 255.255.255.252
ip ospf 1 area 0
ip pim dense-mode
!
interface serial 0/1
ip address 10.2.1.1 255.255.255.0
ip ospf 1 area 0
ip pim dense-mode
!
interface serial 0/2
ip address 10.3.1.1 255.255.255.0
ip ospf 1 area 0
ip pim dense-mode
!
!
Porkpie router:
ip multicast-routing
!
interface serial 0/0
ip address 10.2.1.2 255.255.255.0
ip ospf 1 area 0
ip pim dense-mode
!
interface serial 0/1
ip address 10.2.4.2 255.255.255.0
ip ospf 1 area 0
ip pim dense-mode
!
interface fastethernet 0/0
ip address 172.16.1.2 255.255.255.0
ip ospf 1 area 0
ip pim dense-mode
standby 1 ip 172.16.1.1
standby 1 preempt
standby 1 priority 105
standby 1 track serial 0/0 10
Bowler router:
ip multicast-routing
!
interface serial 0/0
ip address 10.3.1.2 255.255.255.252
ip ospf 1 area 0
ip pim dense-mode
!
interface fastethernet 0/0
ip address 172.16.1.3 255.255.255.0
ip ospf 1 area 0
ip pim dense-mode
standby 1 ip 172.16.1.1
standby 1 preempt
!
!
Bowler and Porkpie routers are connected via a multi-access Ethernet network. For a multi-access network, a querier and a DR are elected. The multi-access interface with lowest IP address becomes the querier whose responsibility is to send General and Group-specific queries on the multi-access network. Also, the multi-access interface with highest IP address becomes the DR of the network.
The following output from Bowler shows that Porkpie router is the IGMP querier while this router (Bowler) is the DR.
Bowler# show ip igmp interface fastethernet 0/0
FastEthernet0/0 is up, line protocol is up
Internet address is 172.16.1.3/24
IGMP is enabled on interface
Current IGMP host version is 2
Current IGMP router version is 2
IGMP query interval is 60 seconds
IGMP querier timeout is 120 seconds
IGMP max query response time is 10 seconds
Last member query count is 2
Last member query response interval is 1000 ms
Inbound IGMP access group is not set
IGMP activity: 1 joins, 0 leaves
Multicast routing is enabled on interface
Multicast TTL threshold is 0
Multicast designated router (DR) is 172.16.1.3 (this system)
IGMP querying router is 172.16.1.2
No multicast groups joined by this system
To change IGMP query interval, use ip igmp query-interval.
To change the maximum query response time, use ip igmp max-query-response-time.
Bowler# show ip pim interface
Address Interface Ver/ Nbr Query DR DR
Mode Count Intvl Prior
10.3.1.2 Serial0/0 v2/D 1 30 1 0.0.0.0
172.16.1.3 FastEthernet0/0 v2/D 1 30 1 172.16.1.3
Since Porkpie router is the IGMP querier, it sends periodic queries (every 60 seconds by default) on the network to check for the members. Here, the host (172.16.1.4) replies back with a Membership Report message. The output is taken from debug ip igmp command.
Porkpie# debug ip igmp
*Mar 1 00:24:06.447: IGMP(0): Send v2 general Query on FastEthernet0/0
*Mar 1 00:24:12.523: IGMP(0): Received v2 Report on FastEthernet0/0 from 172.16.1.4 for 239.10.10.10
*Mar 1 00:24:12.527: IGMP(0): Received Group record for group 239.10.10.10, mode 2 from 172.16.1.4 for 0 sources
*Mar 1 00:24:12.531: IGMP(0): Updating EXCLUDE group timer for 239.10.10.10
*Mar 1 00:24:12.535: IGMP(0): MRT Add/Update FastEthernet0/0 for (*,239.10.10.10) by 0
Porkpie and Bowler also decides a Forwarder for the network because it would be useless if they both forward traffic to the host. They use Assert messages to decide who becomes the Forwarder. From the below output (taken from debug ip pim command), it seems that Bowler router will become the Forwarder. Hence, it will put the Fastethernet 0/0 interface in Forwarding state. And so, Porkpie router will put its Fastethernet 0/0 in Prune state.
Bowler# debug ip pim
*Mar 1 00:58:13.667: PIM(0): Send v2 Assert on FastEthernet0/0 for 239.10.10.10, source 10.1.1.1, metric [110/128]
*Mar 1 00:58:13.675: PIM(0): Assert metric to source 10.1.1.1 is [110/128]
*Mar 1 00:58:13.679: PIM(0): We win, our metric [110/128]
*Mar 1 00:58:13.679: PIM(0): (10.1.1.1/32, 239.10.10.10) oif FastEthernet0/0 in Forward state
*Mar 1 00:58:14.219: PIM(0): Received v2 Assert on FastEthernet0/0 from 172.16.1.2
*Mar 1 00:58:14.223: PIM(0): Assert metric to source 10.1.1.1 is [110/128]
*Mar 1 00:58:14.223: PIM(0): We win, our metric [110/128]
*Mar 1 00:58:14.227: PIM(0): (10.1.1.1/32, 239.10.10.10) oif FastEthernet0/0 in Forward state
*Mar 1 00:58:14.231: PIM(0): Received v2 Join/Prune on FastEthernet0/0 from 172.16.1.2, to us
*Mar 1 00:58:14.235: PIM(0): Prune-list: (10.1.1.1/32, 239.10.10.10)
The show ip mroute commands shows the multicast routing table on the router. The following output on R0 router shows (*, G) entry and (S, G) entry. Even though the PIM domain is running PIM-DM on all routers, there is a (*, G) entry. This entry is not used for packet forwarding. The Cisco IOS creates this entry as a “parent” data structure for (S, G). All interfaces connected to PIM neighbors, and all interfaces with directly connected group members, are put into outgoing interface list (aka OIL) of (*, G) entry. The incoming interface list is always Null. The incoming and outgoing interfaces in (S, G) entry are then taken from this list.
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.10.10), 00:40:44/stopped, RP 0.0.0.0, flags: DC
Incoming interface: Null, RPF nbr 0.0.0.0
Outgoing interface list:
FastEthernet0/0, Forward/Dense, 00:40:44/00:00:00
Serial0/1, Forward/Dense, 00:40:44/00:00:00
Serial0/0, Forward/Dense, 00:40:44/00:00:00
(10.1.3.1, 239.10.10.10), 00:00:19/00:02:41, flags: T
Incoming interface: Serial0/1, RPF nbr 10.2.4.1
Outgoing interface list:
Serial0/0, Forward/Dense, 00:00:19/00:00:00
FastEthernet0/0, Forward/Dense, 00:00:19/00:00:00
(10.1.1.1, 239.10.10.10), 00:00:25/00:02:35, flags: T
Incoming interface: Serial0/0, RPF nbr 10.2.1.1
Outgoing interface list:
Serial0/1, Forward/Dense, 00:00:25/00:00:00
FastEthernet0/0, Prune/Dense, 00:00:25/00:02:34
Bowler puts its Fastethernet 0/0 interface in Forwarding state. Its upstream neighbor is Fedora router notified by the RPF neighbor- the one closest to the multicast source.
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.10.10), 00:44:14/stopped, RP 0.0.0.0, flags: DC
Incoming interface: Null, RPF nbr 0.0.0.0
Outgoing interface list:
FastEthernet0/0, Forward/Dense, 00:44:14/00:00:00
Serial0/0, Forward/Dense, 00:44:14/00:00:00
(10.1.3.1, 239.10.10.10), 00:00:24/00:02:39, flags: T
Incoming interface: FastEthernet0/0, RPF nbr 172.16.1.2
Outgoing interface list:
Serial0/0, Forward/Dense, 00:00:24/00:00:00
(10.1.1.1, 239.10.10.10), 00:00:24/00:02:39, flags: T
Incoming interface: Serial0/0, RPF nbr 10.3.1.1
Outgoing interface list:
FastEthernet0/0, Forward/Dense, 00:00:24/00:00:00, A
When the member leaves the group, it sends a Leave Group message to “all routers on the subnet” for that group.
Porkpie# debug ip igmp
*Mar 1 01:07:24.391: IGMP(0): Received Leave from 172.16.1.4 (FastEthernet0/0) for 239.10.10.10
*Mar 1 01:07:24.391: IGMP(0): Received Group record for group 239.10.10.10, mode 3 from 172.16.1.4 for 0 sources