Protocol Independent Multicast - Sparse Mode (PIM-SM) HowTo
About
This document aims to provide some example use cases and example scenarios how Protocol Independent Multicast - Sparse Mode (PIM-SM) could be utilised to simplify multicast routing.
Introduction
Multicast routing can be tricky and difficult to configure and scale, when using only static multicast routing. PIM simplifies the configuration of multicast routing in a network by allowing it to be configured in a dynamic manner.
PIM relies on the underlying unicast routing in order to operate. So it is still necessary to ensure that the network have a solid unicast routing setup. However, this is in many cases easier to configure and understand for most users. How the unicast routing is set up is not important, as long as it is correct. As the name suggests, PIM functions independently in regards to the underlying unicast protocol. Therefore, it functions really well together with a dynamic unicast routing protocol like OSPF or RIP.
PIM is a family consisting of a few different variants. This document focus solely on the set up and usage of the Sparse Mode (SM) variant. PIM-SM is best used for setups where the potential receivers of multicast are sparsely scattered throughout the intended network topology. In this scenario it also scales pretty well in somewhat larger topologies as well.
The examples in this document are somewhat simplified in order to try and convey the basics and to provide an understanding of how PIM is configured using the system.
Case 1: PIM-SM With Any Source Multicast
This example covers how PIM-SM with the so called Any Source Multicast (ASM) mode can be configured. In the ASM mode the source of any given multicast stream does not need to be known by any of the potential receivers in the network. The receivers only need to know what multicast that they may want to receive.
The central aspect when using the ASM mode is the Rendezvous Point (RP). Since the receivers may be unaware of where the source of any requested multicast is located, the RP serves as a sort of meeting point for receivers and senders. For a more detailed explanation of this refer to the PIM-SM Configuration Guide.
.----. (Receiver) .----. (Receiver)
| H1 | | H2 |
'-+--' '--+-'
.99| |.99
| |
192.168.10.0/24 | | 192.168.20.0/24
| |
.1| vlan3 vlan3 |.2
(LHR) .---+----. .----+---. (LHR)
(DR) | |.1 10.0.1.0/24 .2| | (DR)
| R1 +---------------------+ R2 |
| | vlan1 vlan2 | |
'---+----' '----+---'
.1| vlan2 vlan1 |.2
| |
10.0.4.0/24 | | 10.0.2.0/24
| |
.3| vlan1 vlan2 |.4
(FHR) .---+----. .----+---. (RP)
| | vlan2 vlan1 | |
| R3 +---------------------+ R4 |
| |.3 10.0.3.0/24 .4| |
'---+----' '--------'
.3| vlan3
|
192.168.30.0/24 |
|
.99|
.-+--. (Sender)
| S1 |
'----'
Figure 1: An example of a PIM-SM ASM setup in simple network topology.
In the example topology presented in Figure 1 four routers are used to form the PIM domain. All these routers need to first be configured with a unicast routing protocol.
When the unicast routing have been set up, the main focus will be the
configuration of PIM on all of the routers. The main configuration aspect is to
ensure that the router R4 will be the configured as the RP, located at the
address 10.0.2.4.
When everything has been configured the receivers H1 and H2 should be able
to receive any multicast stream produced by the sender S1.
Configuration
There are a few different things that needs to be configured before we will be able to route multicast from the sender to the receivers:
- Configuration of the underlying unicast routing.
- Ensuring that multicast forwarding is enabled on all of the routers.
- Making sure that IGMP is enabled on the relevant interfaces, the ones facing the receivers.
- Configuration of PIM-SM specific settings.
- Selection of PIM interfaces.
- Location of the RP.
For this example it is assumed that the interfaces and their IP addresses have already been configured.
Underlying Unicast Routing
In this example we will use OSPF as our underlying routing protocol. It needs to
be configured on each of the individual routers. All of the internal networks
10.0.1.0/24, 10.0.2.0/24, 10.0.3.0/24 and 10.0.4.0/24 will be
added as OSPF networks. The connections to the sender and the receivers will be
configured to be redistributed into the OSPF network with redistribute connected.
Configuration of router R1:
R1:/#> configure
R1:/config/#> router
R1:/config/router/#> ospf
R1:/config/router/ospf/#> network 10.0.1.0/24
R1:/config/router/ospf/#> network 10.0.4.0/24
R1:/config/router/ospf/#> redistribute connected
R1:/config/router/ospf/#> leave
R1:/#>
Configuration of router R2:
R2:/#> configure
R2:/config/#> router
R2:/config/router/#> ospf
R2:/config/router/ospf/#> network 10.0.1.0/24
R2:/config/router/ospf/#> network 10.0.2.0/24
R2:/config/router/ospf/#> redistribute connected
R2:/config/router/ospf/#> leave
R2:/#>
Configuration of router R3:
R3:/#> configure
R3:/config/#> router
R3:/config/router/#> ospf
R3:/config/router/ospf/#> network 10.0.3.0/24
R3:/config/router/ospf/#> network 10.0.4.0/24
R3:/config/router/ospf/#> redistribute connected
R3:/config/router/ospf/#> leave
R3:/#>
Configuration of router R4:
R4:/#> configure
R4:/config/#> router
R4:/config/router/#> ospf
R4:/config/router/ospf/#> network 10.0.2.0/24
R4:/config/router/ospf/#> network 10.0.3.0/24
R4:/config/router/ospf/#> leave
R4:/#>
This configuration should be enough to ensure that the underlying unicast routing, required for PIM to function, is in place.
IGMP
For PIM to function IGMP must be enabled on the interfaces that face any potential receiver. Therefore, ensure that IGMP is enabled on the receiver interfaces on router R1 and R2.
R1:/#> configure
R1:/config/#> vlan 3
R1:/config/vlan-3/#> multicast-snooping
R1:/config/vlan-3/#> leave
R1:/#>
R2:/#> configure
R2:/config/#> vlan 3
R2:/config/vlan-3/#> multicast-snooping
R2:/config/vlan-3/#> leave
R2:/#>
Multicast Forwarding
Multicast forwarding is not enabled by default on the system. In order for PIM
to be configurable on the system it must be enabled on every router that is to
operate as a multicast router. We can enable it under the ip configuration
context using the multicast-forwarding.
R1:/#> configure
R1:/config/#> ip
R1:/config/ip/#> multicast-forwarding
R1:/config/ip/#> leave
R1:/#>
R2:/#> configure
R2:/config/#> ip
R2:/config/ip/#> multicast-forwarding
R2:/config/ip/#> leave
R2:/#>
R3:/#> configure
R3:/config/#> ip
R3:/config/ip/#> multicast-forwarding
R3:/config/ip/#> leave
R3:/#>
R4:/#> configure
R4:/config/#> ip
R4:/config/ip/#> multicast-forwarding
R4:/config/ip/#> leave
R4:/#>
PIM-SM
At this point PIM-SM itself is the last thing to be configured. The minimum
required is to specify the location of the RP at 10.0.2.4 router R3. This
must be configured exactly the same on each of the PIM routers in the network.
Lastly the interfaces that PIM is to operate on also must be provided in the configuration. Any interface facing another PIM router, a multicast source or a multicast receiver must be specified.
Configuration of router R1:
R1:/#> configure
R1:/config/#> router
R1:/config/router/#> pim
R1:/config/router/pim/#> interface vlan1 vlan2 vlan3
R1:/config/router/pim/#> rendezvous-point 10.0.2.4
R1:/config/router/pim/#> leave
R1:/#>
Configuration of router R2:
R2:/#> configure
R2:/config/#> router
R2:/config/router/#> pim
R2:/config/router/pim/#> interface vlan1 vlan2 vlan3
R2:/config/router/pim/#> rendezvous-point 10.0.2.4
R2:/config/router/pim/#> leave
R2:/#>
Configuration of router R3:
R3:/#> configure
R3:/config/#> router
R3:/config/router/#> pim
R3:/config/router/pim/#> interface vlan1 vlan2 vlan3
R3:/config/router/pim/#> rendezvous-point 10.0.2.4
R3:/config/router/pim/#> leave
R3:/#>
Configuration of router R4:
R4:/#> configure
R4:/config/#> router
R4:/config/router/#> pim
R4:/config/router/pim/#> interface vlan1 vlan2
R4:/config/router/pim/#> rendezvous-point 10.0.2.4
R4:/config/router/pim/#> leave
R4:/#>
If everything has been configured correctly, it should now be possible to route
a multicast stream thorough the network from S1 to any of the receivers H1 or
H2.
Status
Before any multicast groups are requested by any of the receivers, or any
streams transmitted by any source, we could take a quick look if everything
initially seems to be correctly configured and running. The show ip pim
command can be used to display a collection of a number of different pim status
outputs, for more status see the following.
Initial PIM Status on router R1 should look something like this:
R1:/#> show ip pim
PIM Rendezvous Point Info
RP-ADDRESS GROUP/PREFIX-LIST OIF I-AM-RP SOURCE GROUP-TYPE
10.0.2.4 224.0.0.0/4 Unknown no Static ASM
PIM Interfaces
INTERFACE STATE ADDRESS PIM-NBRS PIM-DR FHR IF-CHANNELS
pimreg up 0.0.0.0 0 local 0 0
vlan1 up 10.0.1.1 1 10.0.1.2 0 0
vlan2 up 10.0.4.1 1 10.0.4.3 0 0
vlan3 up 192.168.10.1 0 local 0 0
PIM Neighbours
INTERFACE NEIGHBOR UPTIME HOLDTIME DR-PRIO
vlan1 10.0.1.2 00:00:03 00:01:42 1
vlan2 10.0.4.3 00:00:02 00:01:43 1
PIM Join
INTERFACE ADDRESS SOURCE GROUP STATE UPTIME EXPIRE PRUNE
PIM Upstream
IIF SOURCE GROUP STATE UPTIME JOINTIMER RSTIMER KATIMER REFCNT
R1:/#>
For each of the PIM routers we should be able to see that the Interfaces are configured correctly. It is also good to see that the neighbours are detected correctly. Verifying that the RP is configured and reported correctly on each of the routers is also good, since if this is incorrect PIM may not function.
If everything looks okay so far we could now verify that we can route a multicast stream from the sender to any of the receivers.
To access the system shell, you must connect to the device via the console using an administrative account with the appropriate permissions. While it is possible to access the shell via SSH, this feature must first be enabled through a console session.
For testing purposes the OS has access to the too mcjoin that can be
used to both join a specific multicast group and transmit a stream towards
that group.
As an example we use it to join group 225.1.2.3 acting as device H1:
H1:/#> shell
Domain shell started.
root@H1:/home/admin # mcjoin -i vlan1 -j 225.1.2.3Next, this is how we could create a stream using the same tool on S1:
S1:/#> shell
Domain shell started.
root@S1:/home/admin # mcjoin -i vlan1 -s -t 5 225.1.2.3If we have requested traffic for group 225.1.2.3 on H1 and we are transmitting
it from S1 we should be able to check the installed multicast routes, and it
should look something like this for each of the routers:
R1:/#> show ip pim mroute
IP Multicast Routing Table
Flags: S - Sparse, C - Connected, P - Pruned
R - SGRpt Pruned, F - Register flag, T - SPT-bit set
SOURCE GROUP FLAGS PROTO INPUT OUTPUT TTL UPTIME
* 225.1.2.3 SC IGMP vlan1 pimreg 1 00:05:50
IGMP vlan3 1
192.168.30.99 225.1.2.3 ST STAR vlan2 vlan3 1 00:05:35
R2:/#> show ip pim mroute
IP Multicast Routing Table
Flags: S - Sparse, C - Connected, P - Pruned
R - SGRpt Pruned, F - Register flag, T - SPT-bit set
SOURCE GROUP FLAGS PROTO INPUT OUTPUT TTL UPTIME
* 225.1.2.3 S PIM vlan1 vlan2 1 00:07:34
192.168.30.99 225.1.2.3 SRP none vlan1 none 0 --:--:--
R3:/#> show ip pim mroute
IP Multicast Routing Table
Flags: S - Sparse, C - Connected, P - Pruned
R - SGRpt Pruned, F - Register flag, T - SPT-bit set
SOURCE GROUP FLAGS PROTO INPUT OUTPUT TTL UPTIME
192.168.30.99 225.1.2.3 SFT PIM vlan3 vlan1 1 00:07:26
R4:/#> show ip pim mroute
IP Multicast Routing Table
Flags: S - Sparse, C - Connected, P - Pruned
R - SGRpt Pruned, F - Register flag, T - SPT-bit set
SOURCE GROUP FLAGS PROTO INPUT OUTPUT TTL UPTIME
* 225.1.2.3 S none vlan2 none 0 --:--:--
192.168.30.99 225.1.2.3 SRP none vlan1 none 0 --:--:--
By checking the routes we should see that the flow of traffic should be S1 --> R3 --> R1 --> H1, by using the (192.168.30.99,225.1.2.3) mroutes.