05-14-2012 12:31 PM - edited 08-29-2017 12:41 AM
This document will assume that the reader knows very litle about multicast in general and we will try to explain how Protocol Independent Multicast (PIM) will setup the distribution of multicast traffic from sources to receivers.
The objective is to be able to quickly get up to speed and understand the basic multicast show commands in IOS XR.
This document will have show commands captured from devices running IOS XR but it shoudl help the reader get familiar with PIM in general as there should be similar commands on different platforms since PIM remains the same protocol.
We will not go into the hardware forwarding part as this would vary from platform to platform. We will not cover features like IPv6 mcast, MVPN, mcast MPLS TE, LSM... just the basic PIM multicast. Hopefully they will be covered in different documents.
IOS XR multicast is based on the MFIB architecture which has been introduced recently in IOS too.
IOX XR PIM follows the new PIM RFC 4601.
A mcast stream is defined by 2 things:
The stream is represented as (source, group) or (S,G), for instance (10.10.10.10, 225.1.1.1).
Then we have receivers which want to receive the stream. These hosts would usually send IGMP (version 2 or 3) reports to the PIM routers on their network to let them know of their interest in the stream.
It will then be the responsibility of the PIM routers connected to the receivers (in particular the designated PIM router) to send some PIM Join messages towards the source or a rendez-vous point to make sure that the stream is forwarded towards those receivers.
So first thing to do when starting to work on a a multicast problem is to:
Now we need to understand how mcast moves between the source and the receivers. This is where PIM comes into the picture.
There are multiple flavors of PIM:
In general, customers would decide to use one mode in their network... but multiple modes can be used at the same time in the network. The decision to use one mode or another is based on the group address. The 224.0.0.0/4 range is divided into multiple subranges and each subrange can be assigned to one PIM mode. In IOS XR you need to do a "show pim group-map" to see the different ranges:
RP/0/0/CPU0:bottomright#show pim group-map
Wed Jul 20 08:42:23.674 PDT
IP PIM Group Mapping Table
(* indicates group mappings being used)
(+ indicates BSR group mappings active in MRIB)
Group Range Proto Client Groups RP address Info
224.0.1.39/32* DM perm 1 0.0.0.0
224.0.1.40/32* DM perm 1 0.0.0.0
224.0.0.0/24* NO perm 0 0.0.0.0
232.0.0.0/8* SSM config 0 0.0.0.0
230.0.0.0/24* SM autorp 0 192.168.0.2 RPF: Gi0/0/0/1,192.168.1.13
224.0.0.0/4* SM config 1 192.168.0.3 RPF: Gi0/0/0/0,192.168.1.9
224.0.0.0/4 SM static 0 0.0.0.0 RPF: Null,0.0.0.0
RP/0/0/CPU0:bottomright#
224.0.1.39 and 224.0.1.40 are the only 2 Dense Mode (DM) groups allowed in IOS XR. They are used to propagate the auto-rp messages which is a way to let PIM SM routers in the network know who's the rendez-vous point (RP) for some group ranges.
232.0.0.0/8 is for SSM by default in XR so you don't have to configure anything to have it there. You can change the SSM range with the "multicast-routing ssm range" command. So if the source 10.1.1.1 starts transmitting to 232.1.1.1 which is part of 232.0.0.0/8, then the receivers will have to know (through a mcast stream listing on a web page for instance or manual config) that (S,G) and join (10.1.1.1,232.1.1.1) directly towards the source.
230.0.0.0/24 is a sparse mode (SM) group learned through auto-rp. The auto-rp announcements indicate that 192.168.0.2 is the rendez-vous point (RP) for that range. You could also use BSR for Group range to RP mapping.
224.0.0.0/4 is a Sparse Mode range and the RP 192.168.0.3 is known through config so that means that "pim rp-address 192.168.0.3" is configured on this router. But you could also specify an RP address for smaller ranges by using an ACL.
So now that you know whether your group is SM or SSM or Bidir thanks to "show pim group-map", you can jump to the appropriate section below.
To start with, routers have the SSM range (the default one or another configured one) marked with the Drop flag:
RP/0/0/CPU0:topleft#sh mrib route
Wed Jul 20 12:53:04.947 PDT
IP Multicast Routing Information Base
Entry flags: L - Domain-Local Source, E - External Source to the Domain,
C - Directly-Connected Check, S - Signal, IA - Inherit Accept,
IF - Inherit From, D - Drop, MA - MDT Address, ME - MDT Encap,
MD - MDT Decap, MT - MDT Threshold Crossed, MH - MDT interface handle
CD - Conditional Decap, MPLS - MPLS Decap, MF - MPLS Encap, EX - Extranet
MoFE - MoFRR Enabled, MoFS - MoFRR State
Interface flags: F - Forward, A - Accept, IC - Internal Copy,
NS - Negate Signal, DP - Don't Preserve, SP - Signal Present,
II - Internal Interest, ID - Internal Disinterest, LI - Local Interest,
LD - Local Disinterest, DI - Decapsulation Interface
EI - Encapsulation Interface, MI - MDT Interface, LVIF - MPLS Encap,
EX - Extranet, A2 - Secondary Accept
(*,232.0.0.0/8) Flags: D
Up: 05:34:24
This tells us that if we receive traffic from a source with a destination within 232.0.0.0/8, we should drop it as for SSM to work, we need to have a receiver join one (S,G) in particular first and that will create an (S,G) route which will be more specific than the whole SSM range.
So first we need a receiver to join one (S,G). We can simulate this on an XR router under IGMP:
router igmp
interface GigabitEthernet0/0/0/0
join-group 232.1.1.1 192.168.1.18
This is configured on the bottomrightce router in the topology diagram above and it will act as a receiver host which sends an IGMPv3 report to receive traffic sent by 192.168.1.18 only and to 232.1.1.1 only.
So on the router connected to that receiver, we can see that we have an IGMP receiver directly connected:
RP/0/0/CPU0:bottomright#sh igmp groups gigabitEthernet 0/0/0/2
Wed Jul 20 13:03:03.699 PDT
IGMP Connected Group Membership
Group Address Interface Uptime Expires Last Reporter
224.0.0.2 GigabitEthernet0/0/0/2 05:33:18 never 192.168.1.41
224.0.0.5 GigabitEthernet0/0/0/2 05:32:44 never 192.168.1.41
224.0.0.6 GigabitEthernet0/0/0/2 05:32:44 never 192.168.1.41
224.0.0.13 GigabitEthernet0/0/0/2 05:33:18 never 192.168.1.41
224.0.0.22 GigabitEthernet0/0/0/2 05:33:18 never 192.168.1.41
232.1.1.1 GigabitEthernet0/0/0/2 00:05:17 not used 192.168.1.42
RP/0/0/CPU0:bottomright#
RP/0/0/CPU0:bottomright#sh igmp groups 232.1.1.1 gigabitEthernet 0/0/0/2 detail
Wed Jul 20 13:02:42.100 PDT
Interface: GigabitEthernet0/0/0/2
Group: 232.1.1.1
Uptime: 00:04:55
Router mode: INCLUDE
Host mode: INCLUDE
Last reporter: 192.168.1.42
Group source list:
Source Address Uptime Expires Fwd Flags
192.168.1.18 00:04:55 00:01:28 Yes Remote 4
RP/0/0/CPU0:bottomright#
There is one PIM router on that network connected to the receiver which is elected Designated Router:
RP/0/0/CPU0:bottomright#sh pim neighbor gigabitEthernet 0/0/0/2
Wed Jul 20 13:07:53.844 PDT
PIM neighbors in VRF default
Neighbor Address Interface Uptime Expires DR pri Flags
192.168.1.41* GigabitEthernet0/0/0/2 05:38:09 00:01:41 1 (DR) B P
192.168.1.42 GigabitEthernet0/0/0/2 00:01:46 00:01:37 0 B
RP/0/0/CPU0:bottomright#
Note that in IOS XR , the router lists itself in "show pim neighbors" with a '*'. The system with "(DR)" is now responsible to send some PIM joins "upstream" towards the source. Mcast traffic flows from the source "downstream" towards receivers but the PIM joins have to be sent first in the reverse direction "upstream" towards the source to create a distribution tree and let the routers along the upstream path know that they have to forward the mcast stream downstream on the interface where they received the PIM join. So on a given router for an SSM group, there is one upstream interface and it's the interface towards the source and there is one or more downstream interface towards all the receivers for that group.
The routers will do a Reverse Path Forwarding (RPF) lookup for the source (the transmitter of the stream) of the group. It's called "reverse" because in unicast we do a lookup on the destination but in mcast we have to do a lookup on the source. So in SSM, we do the RPF lookup on the source of the group (this may be different in Sparse Mode).
RP/0/0/CPU0:bottomright#sh pim rpf 192.168.1.18
Wed Jul 20 13:15:32.663 PDT
Table: IPv4-Multicast-default
* 192.168.1.18/32 [110/3]
via GigabitEthernet0/0/0/1 with rpf neighbor 192.168.1.13
RP/0/0/CPU0:bottomright#
One important thing to note about the command above is that it only gives some output if the address that you're doing the RPF lookup on is already in use as the source of an active group in the mrib. You can't use it to figure out what would happen if a new source would start to transmit... for that you may want to use the "sh pim rpf hash" command.
The RPF interface to reach the source is found based on the unicast routing table when the mcast address-family is not configured (bgp, isis...) and there's gonna be a separate Multicast Unicast RIB (MURIB) when you enable the multicast address-family. You can check it with "show route ipv4 multicast". When you enable the mcast address-family under bgp, then there is no fallback to the bgp prefixes learned in the unicast address-family, we only use the prefixes learned in the mcast address-family. So all sources should be learned in the mcast address-family in that case when the mcast AF is configured under BGP.
So... the PIM DR connected to the receiver (bottomright) does an RPF lookup for the source and finds that it points at gig 0/0/0/1 so it will send a PIM join for the (S,G) upstream on gig 0/0/0/1 to the upstream router.
RP/0/0/CPU0:bottomright#show pim topology 232.1.1.1
Wed Jul 20 15:47:12.463 PDT
IP PIM Multicast Topology Table
Entry state: (*/S,G)[RPT/SPT] Protocol Uptime Info
Entry flags: KAT - Keep Alive Timer, AA - Assume Alive, PA - Probe Alive
RA - Really Alive, IA - Inherit Alive, LH - Last Hop
DSS - Don't Signal Sources, RR - Register Received
SR - Sending Registers, E - MSDP External, EX - Extranet
DCC - Don't Check Connected, ME - MDT Encap, MD - MDT Decap
MT - Crossed Data MDT threshold, MA - Data MDT group assigned
Interface state: Name, Uptime, Fwd, Info
Interface flags: LI - Local Interest, LD - Local Dissinterest,
II - Internal Interest, ID - Internal Dissinterest,
LH - Last Hop, AS - Assert, AB - Admin Boundary, EX - Extranet
(192.168.1.18,232.1.1.1)SPT SSM Up: 02:49:27 =====> line 1
JP: Join(00:00:26) RPF: GigabitEthernet0/0/0/1,192.168.1.13 Flags: =====> line 2
GigabitEthernet0/0/0/2 02:49:27 fwd LI LH =====> line 3
RP/0/0/CPU0:bottomright#
Line 1 tells that it's an SSM group up for 2 hours and 45 mins.
Line 2 is the upstream state. This is the state which defines what we have to do upstream to make sure that this router receives the mcast stream. In the example, we send some Joins upstream over the RPF interface Gig 0/0/0/1 to the upstream router 192.168.1.13 which is our next hop towards the source of the group 192.168.1.
Line 3 is the downstream state. This tells us which downstream interfaces have an interest in that group so basically where we have to forward the mcast traffic for that group. In the example, we can see that we should forward the traffic over Gig 0/0/0/2 as there is some "local interest" (LI) for that group and we're the "last hop" (LH) as this is the interface where we have a receiver sending IGMP reports. There can be multiple downstream interfaces as we can have receivers directly connected on multiple interfaces or we can have multiple PIM routers sending us some joins for that group (we would see "Join" instead of "LI LH" when a downstream PIM router sends us some periodic joins for that group). When we have multiple downstream interfaces, this is where mcast becomes useful as we have one packet arriving on the upstream interfaces and it's replicated on multiple downstream interfaces.
Next step is to check the corresponding MRIB entry. The MRIB is the multicast routing table.
RP/0/0/CPU0:bottomright#sh mrib route 232.1.1.1
Wed Jul 20 15:56:52.800 PDT
IP Multicast Routing Information Base
Entry flags: L - Domain-Local Source, E - External Source to the Domain,
C - Directly-Connected Check, S - Signal, IA - Inherit Accept,
IF - Inherit From, D - Drop, MA - MDT Address, ME - MDT Encap,
MD - MDT Decap, MT - MDT Threshold Crossed, MH - MDT interface handle
CD - Conditional Decap, MPLS - MPLS Decap, MF - MPLS Encap, EX - Extranet
MoFE - MoFRR Enabled, MoFS - MoFRR State
Interface flags: F - Forward, A - Accept, IC - Internal Copy,
NS - Negate Signal, DP - Don't Preserve, SP - Signal Present,
II - Internal Interest, ID - Internal Disinterest, LI - Local Interest,
LD - Local Disinterest, DI - Decapsulation Interface
EI - Encapsulation Interface, MI - MDT Interface, LVIF - MPLS Encap,
EX - Extranet, A2 - Secondary Accept
(192.168.1.18,232.1.1.1) RPF nbr: 192.168.1.13 Flags:
Up: 02:59:07
Incoming Interface List
GigabitEthernet0/0/0/1 Flags: A, Up: 02:59:07
Outgoing Interface List
GigabitEthernet0/0/0/2 Flags: F NS LI, Up: 02:59:07
RP/0/0/CPU0:bottomright#
We can see that the router will "Accept" (the 'A' flag) on Gig 0/0/0/1 which is the upstream RPF interface towards the source so this is where the traffic should be coming from and forward ('F' flag) traffic on Gig 0/0/0/2 which is where there's the receiver ('LI' flag). The 'NS' flag means that traffic for that group received on that interface should trigger some control plane activity. In this case this is because we're supposed to be the designated forwarder on that interface so if we start receiving traffic on that interface that means that another router is forwarding the stream too and we should go through the PIM assert procedure to avoid some duplicate packets being forwarded on that network.
Based on the mrib entry, we build the software mfib entry which is used for the lookup for packets being switched in software and we also build the hardware mfib based on this software mfib:
RP/0/0/CPU0:bottomright#sh mfib route 232.1.1.1
Wed Jul 20 16:04:38.043 PDT
IP Multicast Forwarding Information Base
Entry flags: C - Directly-Connected Check, S - Signal, D - Drop,
IA - Inherit Accept, IF - Inherit From, MA - MDT Address,
ME - MDT Encap, MD - MDT Decap, MT - MDT Threshold Crossed,
MH - MDT interface handle, CD - Conditional Decap,
DT - MDT Decap True, EX - Extranet
MoFE - MoFRR Enabled, MoFS - MoFRR State
Interface flags: F - Forward, A - Accept, IC - Internal Copy,
NS - Negate Signal, DP - Don't Preserve, SP - Signal Present,
EG - Egress, EI - Encapsulation Interface, MI - MDT Interface,
EX - Extranet, A2 - Secondary Accept
Forwarding/Replication Counts: Packets in/Packets out/Bytes out
Failure Counts: RPF / TTL / Empty Olist / Encap RL / Other
(192.168.1.18,232.1.1.1), Flags:
Up: 03:06:52
Last Used: 03:04:15
SW Forwarding Counts: 79/79/7900
SW Replication Counts: 79/79/7900
SW Failure Counts: 0/0/0/0/0
GigabitEthernet0/0/0/1 Flags: A, Up:03:06:52
GigabitEthernet0/0/0/2 Flags: NS EG, Up:02:56:51
RP/0/0/CPU0:bottomright#
Accept ('A') on the upstream interface and forward on the interfaces with the Egress ('EG') flag.
Same meaning for NS => signal the routing protocol that a packet for that group was received on that interface.
Next step would be to check the hardware mfib entry (similar "show mfib" command but with the "hardware" keyword) but the output will depend on the platform. On the ingress linecard the entry should accept on the upstream interface towards the source and point to a Fabric Group ID (FGID) which is a mcast group in the fabric which contains all the slots which have receivers for that group. And on the egress linecard the entry should contain all the downstream interfaces towards receivers.
So the designated router connected to the receiver sends the join upstream on Gig 0/0/0/1 to 192.168.1.13 where the pim topology looks like:
RP/0/0/CPU0:topright#
(192.168.1.18,232.1.1.1)SPT SSM Up: 02:45:51
JP: Join(now) RPF: GigabitEthernet0/0/0/0,192.168.1.1 Flags:
GigabitEthernet0/0/0/1 02:45:51 fwd Join(00:02:42)
The Gig 0/0/0/1 is the downstream interface towards bottomright (the DR connected to the receiver) and we can see that we've received the join from bottomright on that interface. And this router topright will send a join upstream towards the source after an RPF lookup on the source of the group (192.168.1.18) and the upstream router is 192.168.1.1 on Gi 0/0/0/0 (topleft).
So the joins will go upstream like this from router to router until we reach the first hop router which is directly connected to the source:
RP/0/0/CPU0:topleft#sh pim topology 232.1.1.1
Wed Jul 20 16:21:36.160 PDT
IP PIM Multicast Topology Table
Entry state: (*/S,G)[RPT/SPT] Protocol Uptime Info
Entry flags: KAT - Keep Alive Timer, AA - Assume Alive, PA - Probe Alive
RA - Really Alive, IA - Inherit Alive, LH - Last Hop
DSS - Don't Signal Sources, RR - Register Received
SR - Sending Registers, E - MSDP External, EX - Extranet
DCC - Don't Check Connected, ME - MDT Encap, MD - MDT Decap
MT - Crossed Data MDT threshold, MA - Data MDT group assigned
Interface state: Name, Uptime, Fwd, Info
Interface flags: LI - Local Interest, LD - Local Dissinterest,
II - Internal Interest, ID - Internal Dissinterest,
LH - Last Hop, AS - Assert, AB - Admin Boundary, EX - Extranet
(192.168.1.18,232.1.1.1)SPT SSM Up: 03:13:49
JP: Join(00:00:01) RPF: GigabitEthernet0/0/0/2,192.168.1.18* Flags:
GigabitEthernet0/0/0/0 03:13:49 fwd Join(00:02:41)
RP/0/0/CPU0:topleft#
And so we're good now as we have built a distribution tree end to end from the source through all the PIM routers in the middle and then to the PIM DR connected to the receiver. In SSM, this is called a Shortest Path Tree (SPT) as routers send join on the shortest path to the source so that multicast traffic will be sent in the reverse direction on the shortest path from the source to the receivers.
Summary of SSM (very simple):
In Sparse Mode, the receivers are interested in all sources sending to one group.
So they send some (*,G) IGMPv2 report to their directly connected router or some IGMPv3 report including all sources.
And the group G has to be in the SM range in "show pim group-map" as seen above.
But then the routers connected to the receivers know that there is an interest in a group but they don't know where all the sources for this group are located as they can be anywhere in the network. So they can't send joins directly towards the source like in SSM. So in SM there is rendez-vous point (RP) where the receivers can meet the senders. Once they become aware of some sources through the rendez-vous point, the routers connected to the receivers know the addresses of the sources and they can join towards them directly like in SSM as this is more efficient than going through the RP which may not be on the shortest path tree.
So first step is to have all PIM SM routers learn the RP for each group range. The whole mcast range can be split into multiple ranges so that an RP only handles a subrange aka a "grange". But all PIM SM routers should agree on the RP-to-range mapping. This mapping can be configured directly on the router ("router pim rp-address" command) or through auto-rp or BSR. And we can see the SM group mappings in "show pim group-map":
230.0.0.0/24* SM autorp 0 192.168.0.2 RPF: Gi0/0/0/1,192.168.1.13
224.0.0.0/4* SM config 0 192.168.0.3 RPF: Gi0/0/0/0,192.168.1.9
2 things must happen to have the receivers meet the senders at the RP (they can happen in any order):
So traffic will be flowing end to end at this point and there will be further optimizations at this point like the RP joining the SPT towards the source and the receiver DR when discovering new sources received on the RPT will join the SPT towards the sources to have an SPT from source to receiver in the end. There's no treshold in XR so we join immediately the SPT.
So let's go over all these steps in greater details...
First, when the receivers sends an IGMP report to bottomright:
RP/0/0/CPU0:bottomright#sh pim topology 225.1.1.1
Thu Jul 21 10:07:46.835 PDT
IP PIM Multicast Topology Table
Entry state: (*/S,G)[RPT/SPT] Protocol Uptime Info
Entry flags: KAT - Keep Alive Timer, AA - Assume Alive, PA - Probe Alive
RA - Really Alive, IA - Inherit Alive, LH - Last Hop
DSS - Don't Signal Sources, RR - Register Received
SR - Sending Registers, E - MSDP External, EX - Extranet
DCC - Don't Check Connected, ME - MDT Encap, MD - MDT Decap
MT - Crossed Data MDT threshold, MA - Data MDT group assigned
Interface state: Name, Uptime, Fwd, Info
Interface flags: LI - Local Interest, LD - Local Dissinterest,
II - Internal Interest, ID - Internal Dissinterest,
LH - Last Hop, AS - Assert, AB - Admin Boundary, EX - Extranet
(*,225.1.1.1) SM Up: 00:00:30 RP: 192.168.0.3 =====> line 1
JP: Join(00:00:18) RPF: GigabitEthernet0/0/0/0,192.168.1.9 Flags: LH =====> line 2
GigabitEthernet0/0/0/2 00:00:30 fwd LI LH =====> line 3
RP/0/0/CPU0:bottomright#
Line 1: We can see that the RP for 225.1.1.1 is 192.168.0.3. Router finds this information in the grange list that we can see in "show pim group-map".
Line 2: Upstream state. Router does an RPF lookup for the RP (not for the source since we don't know it yet) and sends joins towards the RP so that an RP tree is built from the RP to the receivers. This RP tree is ready to forward packets from the RP to the receivers once the RP starts receiving packets from a source for that group.
Line 3: Downstream state. This is where we have the receivers so where packets should be forwarded (based on IGMP reports of PIM joins from downstream routers).
Corresponding mrib route entry:
(*,225.1.1.1) RPF nbr: 192.168.1.9 Flags: C
Up: 5w1d
Incoming Interface List
GigabitEthernet0/0/0/0 Flags: A NS, Up: 5w1d
Outgoing Interface List
GigabitEthernet0/0/0/2 Flags: F NS LI, Up: 5w1d
Notice the NS flag on the accepting interface Gi0/0/0/0. That means that if a packet is received from the RP, PIM will be signaled and this router will join towards the source of the packet since this is the last hop router.
So now let's have a look at the 2nd step when the source starts transmitting. Here are the different steps which will happen:
RP/0/0/CPU0:topleft#
RP/0/0/CPU0:Sep 16 12:23:14.304 : pim[1126]: [-426959984] VRF : default (192.168.1.18,225.1.1.1) Start registering to 192.168.0.3 RP/0/0/CPU0:topleft#sh pim topology Fri Sep 16 12:23:23.940 CEST IP PIM Multicast Topology Table Entry state: (*/S,G)[RPT/SPT] Protocol Uptime Info Entry flags: KAT - Keep Alive Timer, AA - Assume Alive, PA - Probe Alive RA - Really Alive, IA - Inherit Alive, LH - Last Hop DSS - Don't Signal Sources, RR - Register Received SR - Sending Registers, E - MSDP External, EX - Extranet DCC - Don't Check Connected, ME - MDT Encap, MD - MDT Decap MT - Crossed Data MDT threshold, MA - Data MDT group assigned Interface state: Name, Uptime, Fwd, Info Interface flags: LI - Local Interest, LD - Local Dissinterest, II - Internal Interest, ID - Internal Dissinterest, LH - Last Hop, AS - Assert, AB - Admin Boundary, EX - Extranet (*,224.0.1.40) DM Up: 5w2d RP: 0.0.0.0 JP: Null(never) RPF: Null,0.0.0.0 Flags: GigabitEthernet0/0/0/0 5w2d off LI II (192.168.1.18,225.1.1.1)SPT SM Up: 00:00:09 JP: Join(never) RPF: GigabitEthernet0/0/0/2,192.168.1.18* Flags: KAT(00:03:23) RA SR Encapstunnel0 00:00:09 fwd RP/0/0/CPU0:topleft#
RP/0/0/CPU0:bottomleft#sh pim topology 225.1.1.1
Fri Sep 16 12:25:34.027 CEST
IP PIM Multicast Topology Table
Entry state: (*/S,G)[RPT/SPT] Protocol Uptime Info
Entry flags: KAT - Keep Alive Timer, AA - Assume Alive, PA - Probe Alive
RA - Really Alive, IA - Inherit Alive, LH - Last Hop
DSS - Don't Signal Sources, RR - Register Received
SR - Sending Registers, E - MSDP External, EX - Extranet
DCC - Don't Check Connected, ME - MDT Encap, MD - MDT Decap
MT - Crossed Data MDT threshold, MA - Data MDT group assigned
Interface state: Name, Uptime, Fwd, Info
Interface flags: LI - Local Interest, LD - Local Dissinterest,
II - Internal Interest, ID - Internal Dissinterest,
LH - Last Hop, AS - Assert, AB - Admin Boundary, EX - Extranet
(*,225.1.1.1) SM Up: 5w2d RP: 192.168.0.3*
JP: Join(never) RPF: Decapstunnel1,192.168.0.3 Flags:
GigabitEthernet0/0/0/0 5w2d fwd Join(00:03:04)
RP/0/0/CPU0:bottomleft#
We can see that on the RP, the RPF interface is the Decapstunnel1 interface as packets are supposed to be received in PIM registers.
RP (bottomright):
RP/0/0/CPU0:bottomleft#sh pim topology 225.1.1.1
Fri Sep 16 12:26:56.444 CEST
IP PIM Multicast Topology Table
Entry state: (*/S,G)[RPT/SPT] Protocol Uptime Info
Entry flags: KAT - Keep Alive Timer, AA - Assume Alive, PA - Probe Alive
RA - Really Alive, IA - Inherit Alive, LH - Last Hop
DSS - Don't Signal Sources, RR - Register Received
SR - Sending Registers, E - MSDP External, EX - Extranet
DCC - Don't Check Connected, ME - MDT Encap, MD - MDT Decap
MT - Crossed Data MDT threshold, MA - Data MDT group assigned
Interface state: Name, Uptime, Fwd, Info
Interface flags: LI - Local Interest, LD - Local Dissinterest,
II - Internal Interest, ID - Internal Dissinterest,
LH - Last Hop, AS - Assert, AB - Admin Boundary, EX - Extranet
(*,225.1.1.1) SM Up: 5w2d RP: 192.168.0.3*
JP: Join(never) RPF: Decapstunnel1,192.168.0.3 Flags:
GigabitEthernet0/0/0/0 5w2d fwd Join(00:02:42)
(192.168.1.18,225.1.1.1) SM Up: 00:00:12
JP: Join(00:00:37) RPF: GigabitEthernet0/0/0/1,192.168.1.5 Flags: KAT(00:03:19) RA RR (00:04:22)
No interfaces in immediate olist
RP/0/0/CPU0:bottomleft#
We know have an (S,G) entry with the upstream state having its RPF interface towards the source.
No interface in output list at this point (until a DR connected to a receiver decides to join the SPT and if this SPT goes through the RP).
Source DR (topright):
RP/0/0/CPU0:topleft#sh pim topology 225.1.1.1
Fri Sep 16 12:28:02.123 CEST
IP PIM Multicast Topology Table
Entry state: (*/S,G)[RPT/SPT] Protocol Uptime Info
Entry flags: KAT - Keep Alive Timer, AA - Assume Alive, PA - Probe Alive
RA - Really Alive, IA - Inherit Alive, LH - Last Hop
DSS - Don't Signal Sources, RR - Register Received
SR - Sending Registers, E - MSDP External, EX - Extranet
DCC - Don't Check Connected, ME - MDT Encap, MD - MDT Decap
MT - Crossed Data MDT threshold, MA - Data MDT group assigned
Interface state: Name, Uptime, Fwd, Info
Interface flags: LI - Local Interest, LD - Local Dissinterest,
II - Internal Interest, ID - Internal Dissinterest,
LH - Last Hop, AS - Assert, AB - Admin Boundary, EX - Extranet
(192.168.1.18,225.1.1.1)SPT SM Up: 00:04:48
JP: Join(never) RPF: GigabitEthernet0/0/0/2,192.168.1.18* Flags: AA PA
GigabitEthernet0/0/0/1 00:01:18 fwd Join(00:03:13)
RP/0/0/CPU0:topleft#
The downstream interface is the interface towards the RP.
RP/0/0/CPU0:topleft#
Sep 16 12:27:56.212 : pim[1126]: [-426959984] VRF : default (192.168.1.18,225.1.1.1) Stop registering
Note that the RPF interface for the source on bottomright is through topright.... so the SPT won't go through the RP in our lab.
RP/0/0/CPU0:bottomright#sh pim topology 225.1.1.1
Fri Sep 16 12:47:17.447 CEST
IP PIM Multicast Topology Table
Entry state: (*/S,G)[RPT/SPT] Protocol Uptime Info
Entry flags: KAT - Keep Alive Timer, AA - Assume Alive, PA - Probe Alive
RA - Really Alive, IA - Inherit Alive, LH - Last Hop
DSS - Don't Signal Sources, RR - Register Received
SR - Sending Registers, E - MSDP External, EX - Extranet
DCC - Don't Check Connected, ME - MDT Encap, MD - MDT Decap
MT - Crossed Data MDT threshold, MA - Data MDT group assigned
Interface state: Name, Uptime, Fwd, Info
Interface flags: LI - Local Interest, LD - Local Dissinterest,
II - Internal Interest, ID - Internal Dissinterest,
LH - Last Hop, AS - Assert, AB - Admin Boundary, EX - Extranet
(*,225.1.1.1) SM Up: 5w2d RP: 192.168.0.3
JP: Join(00:00:41) RPF: GigabitEthernet0/0/0/0,192.168.1.9 Flags: LH
GigabitEthernet0/0/0/2 5w2d fwd LI LH
(192.168.1.18,225.1.1.1) SM Up: 00:01:36
JP: Join(00:00:11) RPF: GigabitEthernet0/0/0/1,192.168.1.13 Flags: KAT(00:01:54) RA DCC
No interfaces in immediate olist
RP/0/0/CPU0:bottomright#
RP/0/0/CPU0:bottomleft#sh pim topology 225.1.1.1
Fri Sep 16 12:49:18.533 CEST
IP PIM Multicast Topology Table
Entry state: (*/S,G)[RPT/SPT] Protocol Uptime Info
Entry flags: KAT - Keep Alive Timer, AA - Assume Alive, PA - Probe Alive
RA - Really Alive, IA - Inherit Alive, LH - Last Hop
DSS - Don't Signal Sources, RR - Register Received
SR - Sending Registers, E - MSDP External, EX - Extranet
DCC - Don't Check Connected, ME - MDT Encap, MD - MDT Decap
MT - Crossed Data MDT threshold, MA - Data MDT group assigned
Interface state: Name, Uptime, Fwd, Info
Interface flags: LI - Local Interest, LD - Local Dissinterest,
II - Internal Interest, ID - Internal Dissinterest,
LH - Last Hop, AS - Assert, AB - Admin Boundary, EX - Extranet
(*,225.1.1.1) SM Up: 5w2d RP: 192.168.0.3*
JP: Join(never) RPF: Decapstunnel1,192.168.0.3 Flags:
GigabitEthernet0/0/0/0 5w2d fwd Join(00:03:20)
(192.168.1.18,225.1.1.1)RPT SM Up: 00:00:09 RP: 192.168.0.3* <======= (S,G,RPT) entry
JP: Prune(never) RPF: Decapstunnel1,192.168.0.3 Flags: KAT(00:03:21) RA DCC RR (00:04:22)
GigabitEthernet0/0/0/0 00:00:09 off Prune(00:03:20) <======= pruned by bottomright
(192.168.1.18,225.1.1.1) SM Up: 00:07:51
JP: Null(never) RPF: GigabitEthernet0/0/0/1,192.168.1.5 Flags: KAT(00:03:21) RA DCC RR (00:04:22) <====== SPT towards source not joined anymore
No interfaces in immediate olist
RP/0/0/CPU0:bottomleft#
All these steps should happen pretty quickly once the source starts to transmit so in theory you would not see them unless something breaks and we end up being stuck in an intermediate step. Here is how it should look like in the end:
RP/0/0/CPU0:topleft#sh pim topology 225.1.1.1
Thu Sep 15 16:26:08.232 CEST
IP PIM Multicast Topology Table
Entry state: (*/S,G)[RPT/SPT] Protocol Uptime Info
Entry flags: KAT - Keep Alive Timer, AA - Assume Alive, PA - Probe Alive
RA - Really Alive, IA - Inherit Alive, LH - Last Hop
DSS - Don't Signal Sources, RR - Register Received
SR - Sending Registers, E - MSDP External, EX - Extranet
DCC - Don't Check Connected, ME - MDT Encap, MD - MDT Decap
MT - Crossed Data MDT threshold, MA - Data MDT group assigned
Interface state: Name, Uptime, Fwd, Info
Interface flags: LI - Local Interest, LD - Local Dissinterest,
II - Internal Interest, ID - Internal Dissinterest,
LH - Last Hop, AS - Assert, AB - Admin Boundary, EX - Extranet
(192.168.1.18,225.1.1.1)SPT SM Up: 00:05:14
JP: Join(never) RPF: GigabitEthernet0/0/0/2,192.168.1.18* Flags: KAT(00:02:59) RA
GigabitEthernet0/0/0/0 00:05:09 fwd Join(00:03:23)
RP/0/0/CPU0:topleft#
RP/0/0/CPU0:topleft#sh mrib route 225.1.1.1
Thu Sep 15 16:26:50.678 CEST
IP Multicast Routing Information Base
Entry flags: L - Domain-Local Source, E - External Source to the Domain,
C - Directly-Connected Check, S - Signal, IA - Inherit Accept,
IF - Inherit From, D - Drop, MA - MDT Address, ME - MDT Encap,
MD - MDT Decap, MT - MDT Threshold Crossed, MH - MDT interface handle
CD - Conditional Decap, MPLS - MPLS Decap, MF - MPLS Encap, EX - Extranet
MoFE - MoFRR Enabled, MoFS - MoFRR State
Interface flags: F - Forward, A - Accept, IC - Internal Copy,
NS - Negate Signal, DP - Don't Preserve, SP - Signal Present,
II - Internal Interest, ID - Internal Disinterest, LI - Local Interest,
LD - Local Disinterest, DI - Decapsulation Interface
EI - Encapsulation Interface, MI - MDT Interface, LVIF - MPLS Encap,
EX - Extranet, A2 - Secondary Accept
(192.168.1.18,225.1.1.1) RPF nbr: 192.168.1.18 Flags:
Up: 00:05:56
Incoming Interface List
GigabitEthernet0/0/0/2 Flags: A, Up: 00:05:56
Outgoing Interface List
GigabitEthernet0/0/0/0 Flags: F NS, Up: 00:05:52
RP/0/0/CPU0:topleft#
There's just an (S,G) with Incoming interface is the interface connected to source and outgoing interface list contains all egress interface towards receivers which have joined the SPT.
RP/0/0/CPU0:bottomright#sh pim topology 225.1.1.1
Thu Sep 15 16:27:15.628 CEST
IP PIM Multicast Topology Table
Entry state: (*/S,G)[RPT/SPT] Protocol Uptime Info
Entry flags: KAT - Keep Alive Timer, AA - Assume Alive, PA - Probe Alive
RA - Really Alive, IA - Inherit Alive, LH - Last Hop
DSS - Don't Signal Sources, RR - Register Received
SR - Sending Registers, E - MSDP External, EX - Extranet
DCC - Don't Check Connected, ME - MDT Encap, MD - MDT Decap
MT - Crossed Data MDT threshold, MA - Data MDT group assigned
Interface state: Name, Uptime, Fwd, Info
Interface flags: LI - Local Interest, LD - Local Dissinterest,
II - Internal Interest, ID - Internal Dissinterest,
LH - Last Hop, AS - Assert, AB - Admin Boundary, EX - Extranet
(*,225.1.1.1) SM Up: 5w2d RP: 192.168.0.3
JP: Join(00:00:42) RPF: GigabitEthernet0/0/0/0,192.168.1.9 Flags: LH
GigabitEthernet0/0/0/2 5w2d fwd LI LH
(192.168.1.18,225.1.1.1)SPT SM Up: 00:06:17
JP: Join(00:00:32) RPF: GigabitEthernet0/0/0/1,192.168.1.13 Flags: KAT(00:01:56) RA
No interfaces in immediate olist
RP/0/0/CPU0:bottomright#
RP/0/0/CPU0:bottomright#sh mrib route 225.1.1.1
Thu Sep 15 16:27:22.178 CEST
IP Multicast Routing Information Base
Entry flags: L - Domain-Local Source, E - External Source to the Domain,
C - Directly-Connected Check, S - Signal, IA - Inherit Accept,
IF - Inherit From, D - Drop, MA - MDT Address, ME - MDT Encap,
MD - MDT Decap, MT - MDT Threshold Crossed, MH - MDT interface handle
CD - Conditional Decap, MPLS - MPLS Decap, MF - MPLS Encap, EX - Extranet
MoFE - MoFRR Enabled, MoFS - MoFRR State
Interface flags: F - Forward, A - Accept, IC - Internal Copy,
NS - Negate Signal, DP - Don't Preserve, SP - Signal Present,
II - Internal Interest, ID - Internal Disinterest, LI - Local Interest,
LD - Local Disinterest, DI - Decapsulation Interface
EI - Encapsulation Interface, MI - MDT Interface, LVIF - MPLS Encap,
EX - Extranet, A2 - Secondary Accept
(*,225.1.1.1) RPF nbr: 192.168.1.9 Flags: C
Up: 5w2d
Incoming Interface List
GigabitEthernet0/0/0/0 Flags: A NS, Up: 5w1d
Outgoing Interface List
GigabitEthernet0/0/0/2 Flags: F NS LI, Up: 5w2d
(192.168.1.18,225.1.1.1) RPF nbr: 192.168.1.13 Flags:
Up: 00:06:23
Incoming Interface List
GigabitEthernet0/0/0/1 Flags: A, Up: 00:06:23
Outgoing Interface List
GigabitEthernet0/0/0/2 Flags: F NS, Up: 00:06:23
RP/0/0/CPU0:bottomright#
The (*,G) entry has an RPF entry pointing towards the RP (this is where new groups should be coming from).
The (S,G) entry has an RPF entry pointing towards the source.
RP/0/0/CPU0:bottomleft#sh pim topology 225.1.1.1
Thu Sep 15 16:28:31.047 CEST
IP PIM Multicast Topology Table
Entry state: (*/S,G)[RPT/SPT] Protocol Uptime Info
Entry flags: KAT - Keep Alive Timer, AA - Assume Alive, PA - Probe Alive
RA - Really Alive, IA - Inherit Alive, LH - Last Hop
DSS - Don't Signal Sources, RR - Register Received
SR - Sending Registers, E - MSDP External, EX - Extranet
DCC - Don't Check Connected, ME - MDT Encap, MD - MDT Decap
MT - Crossed Data MDT threshold, MA - Data MDT group assigned
Interface state: Name, Uptime, Fwd, Info
Interface flags: LI - Local Interest, LD - Local Dissinterest,
II - Internal Interest, ID - Internal Dissinterest,
LH - Last Hop, AS - Assert, AB - Admin Boundary, EX - Extranet
(*,225.1.1.1) SM Up: 5w1d RP: 192.168.0.3*
JP: Join(never) RPF: Decapstunnel1,192.168.0.3 Flags:
GigabitEthernet0/0/0/0 5w1d fwd Join(00:03:07)
(192.168.1.18,225.1.1.1)RPT SM Up: 00:07:22 RP: 192.168.0.3*
JP: Prune(never) RPF: Decapstunnel1,192.168.0.3 Flags: KAT(00:03:32) RA DCC RR (00:04:34)
GigabitEthernet0/0/0/0 00:07:22 off Prune(00:03:07)
(192.168.1.18,225.1.1.1) SM Up: 00:07:35
JP: Null(never) RPF: GigabitEthernet0/0/0/1,192.168.1.5 Flags: KAT(00:03:32) RA DCC RR (00:04:34)
No interfaces in immediate olist
RP/0/0/CPU0:bottomleft#
RP/0/0/CPU0:bottomleft#sh mrib route 225.1.1.1
Thu Sep 15 16:28:35.359 CEST
IP Multicast Routing Information Base
Entry flags: L - Domain-Local Source, E - External Source to the Domain,
C - Directly-Connected Check, S - Signal, IA - Inherit Accept,
IF - Inherit From, D - Drop, MA - MDT Address, ME - MDT Encap,
MD - MDT Decap, MT - MDT Threshold Crossed, MH - MDT interface handle
CD - Conditional Decap, MPLS - MPLS Decap, MF - MPLS Encap, EX - Extranet
MoFE - MoFRR Enabled, MoFS - MoFRR State
Interface flags: F - Forward, A - Accept, IC - Internal Copy,
NS - Negate Signal, DP - Don't Preserve, SP - Signal Present,
II - Internal Interest, ID - Internal Disinterest, LI - Local Interest,
LD - Local Disinterest, DI - Decapsulation Interface
EI - Encapsulation Interface, MI - MDT Interface, LVIF - MPLS Encap,
EX - Extranet, A2 - Secondary Accept
(*,225.1.1.1) RPF nbr: 192.168.0.3 Flags: C
Up: 5w1d
Incoming Interface List
Decapstunnel1 Flags: A, Up: 5w1d
Outgoing Interface List
GigabitEthernet0/0/0/0 Flags: F NS, Up: 5w1d
(192.168.1.18,225.1.1.1) RPF nbr: 192.168.0.3 Flags: L
Up: 00:07:39
Incoming Interface List
Decapstunnel1 Flags: A, Up: 00:07:26
RP/0/0/CPU0:bottomleft#
The state on the RP will depend on whether the SPT goes through it or not. That will be reflected on the (S,G) entry as it may or may not join upstream depending on whether it has received (S,G) joins on downstream interfaces or not.
Note: all the tests above were done with this very simple mcast config on all routers:
router pim address-family ipv4 rp-address 192.168.0.3 ! ! multicast-routing address-family ipv4 interface all enable ! !
Enabling multicast-routing on an interface will enable PIM and IGMP automatically. No need to configure the PIM mode on interfaces in XR as it's determined by the group range.
Summary of PIM SM:
Anycast RP is an extension of PIM SM to provide RP redundancy and loadbalancing.
The idea is:
Config on the RP:
interface Loopback1 <=== new loopback just used for anycast-RP, same address on both RPs
ipv4 address 192.168.0.255 255.255.255.255
!
router ospf lab
area 0
interface Loopback1
passive enable
!
router msdp
originator-id Loopback0
peer 192.168.0.4
connect-source Loopback0
description bottomright
!
!
router pim
address-family ipv4
rp-address 192.168.0.255
Note: you must configure originator-id in XR while in IOS it was not required.
And the other PIM routers in the network point their RP at 192.168.0.255.
Here are the different steps:
RP/0/0/CPU0:bottomright#sh msdp peer
Mon Sep 19 12:38:45.862 CEST
MSDP Peer 192.168.0.3 (?), AS 0
Description: bottomleft
Connection status:
State: Up, Resets: 0, Connection Source: 192.168.0.4
Uptime(Downtime): 01:31:42, SA messages received: 19
TLV messages sent/received: 184/187
Output messages discarded: 0
Connection and counters cleared 01:31:42 ago
SA Filtering:
Input (S,G) filter: none
Input RP filter: none
Output (S,G) filter: none
Output RP filter: none
SA-Requests:
Input filter: none
Sending SA-Requests to peer: disabled
Password: None
Peer ttl threshold: 0
Input queue size: 0, Output queue size: 0
KeepAlive timer period: 30
Peer Timeout timer period: 75
RP/0/0/CPU0:bottomright#sh msdp sa-cache
Mon Sep 19 12:38:53.670 CEST
No SA entries found
RP/0/0/CPU0:bottomright#
RP/0/0/CPU0:bottomright#sh mrib route 225.1.1.1
Mon Sep 19 12:36:44.319 CEST
IP Multicast Routing Information Base
Entry flags: L - Domain-Local Source, E - External Source to the Domain,
C - Directly-Connected Check, S - Signal, IA - Inherit Accept,
IF - Inherit From, D - Drop, MA - MDT Address, ME - MDT Encap,
MD - MDT Decap, MT - MDT Threshold Crossed, MH - MDT interface handle
CD - Conditional Decap, MPLS - MPLS Decap, MF - MPLS Encap, EX - Extranet
MoFE - MoFRR Enabled, MoFS - MoFRR State
Interface flags: F - Forward, A - Accept, IC - Internal Copy,
NS - Negate Signal, DP - Don't Preserve, SP - Signal Present,
II - Internal Interest, ID - Internal Disinterest, LI - Local Interest,
LD - Local Disinterest, DI - Decapsulation Interface
EI - Encapsulation Interface, MI - MDT Interface, LVIF - MPLS Encap,
EX - Extranet, A2 - Secondary Accept
(*,225.1.1.1) RPF nbr: 192.168.0.255 Flags: C
Up: 00:56:22
Incoming Interface List
Decapstunnel0 Flags: A, Up: 00:56:22
Outgoing Interface List
GigabitEthernet0/0/0/1 Flags: F NS, Up: 00:56:22
RP/0/0/CPU0:bottomright#
RP/0/0/CPU0:bottomright#sh msdp sa-cache
Mon Sep 19 12:42:11.342 CEST
MSDP Flags:
E - set MRIB E flag , L - domain local source is active,
EA - externally active source, PI - PIM is interested in the group,
DE - SAs have been denied. Timers age/expiration,
Cache Entry:
(192.168.1.18, 225.1.1.1), RP 192.168.0.3, MBGP/AS 0, 00:00:29/00:02:00
Learned from peer 192.168.0.3, RPF peer 192.168.0.3
SAs recvd 1, Encapsulated data received: 100
grp flags: PI, src flags: E, EA, PI
RP/0/0/CPU0:bottomright#
That first SA should contain the first encapsulated packet so that it can be forwarded down the RPT towards the receiver.
RP/0/0/CPU0:bottomright#sh pim topology 225.1.1.1
Mon Sep 19 12:43:36.423 CEST
IP PIM Multicast Topology Table
Entry state: (*/S,G)[RPT/SPT] Protocol Uptime Info
Entry flags: KAT - Keep Alive Timer, AA - Assume Alive, PA - Probe Alive
RA - Really Alive, IA - Inherit Alive, LH - Last Hop
DSS - Don't Signal Sources, RR - Register Received
SR - Sending Registers, E - MSDP External, EX - Extranet
DCC - Don't Check Connected, ME - MDT Encap, MD - MDT Decap
MT - Crossed Data MDT threshold, MA - Data MDT group assigned
Interface state: Name, Uptime, Fwd, Info
Interface flags: LI - Local Interest, LD - Local Dissinterest,
II - Internal Interest, ID - Internal Dissinterest,
LH - Last Hop, AS - Assert, AB - Admin Boundary, EX - Extranet
(*,225.1.1.1) SM Up: 01:03:14 RP: 192.168.0.255*
JP: Join(never) RPF: Decapstunnel0,192.168.0.255 Flags:
GigabitEthernet0/0/0/1 01:03:14 fwd Join(00:03:15)
(192.168.1.18,225.1.1.1) SM Up: 00:01:54
JP: Join(now) RPF: GigabitEthernet0/0/0/1,192.168.1.13 Flags: E
No interfaces in immediate olist
RP/0/0/CPU0:bottomright#
RP/0/0/CPU0:topright#sh pim topology 225.1.1.1
Mon Sep 19 12:44:42.443 CEST
IP PIM Multicast Topology Table
Entry state: (*/S,G)[RPT/SPT] Protocol Uptime Info
Entry flags: KAT - Keep Alive Timer, AA - Assume Alive, PA - Probe Alive
RA - Really Alive, IA - Inherit Alive, LH - Last Hop
DSS - Don't Signal Sources, RR - Register Received
SR - Sending Registers, E - MSDP External, EX - Extranet
DCC - Don't Check Connected, ME - MDT Encap, MD - MDT Decap
MT - Crossed Data MDT threshold, MA - Data MDT group assigned
Interface state: Name, Uptime, Fwd, Info
Interface flags: LI - Local Interest, LD - Local Dissinterest,
II - Internal Interest, ID - Internal Dissinterest,
LH - Last Hop, AS - Assert, AB - Admin Boundary, EX - Extranet
(*,225.1.1.1) SM Up: 01:12:19 RP: 192.168.0.255
JP: Join(00:00:29) RPF: GigabitEthernet0/0/0/1,192.168.1.14 Flags: LH
GigabitEthernet0/0/0/2 01:12:19 fwd LI LH
(192.168.1.18,225.1.1.1)SPT SM Up: 00:03:00
JP: Join(00:00:49) RPF: GigabitEthernet0/0/0/0,192.168.1.1 Flags: KAT(00:03:20) RA
No interfaces in immediate olist
RP/0/0/CPU0:topright#
RP/0/0/CPU0:bottomright#sh pim topology 225.1.1.1
Mon Sep 19 12:46:30.384 CEST
IP PIM Multicast Topology Table
Entry state: (*/S,G)[RPT/SPT] Protocol Uptime Info
Entry flags: KAT - Keep Alive Timer, AA - Assume Alive, PA - Probe Alive
RA - Really Alive, IA - Inherit Alive, LH - Last Hop
DSS - Don't Signal Sources, RR - Register Received
SR - Sending Registers, E - MSDP External, EX - Extranet
DCC - Don't Check Connected, ME - MDT Encap, MD - MDT Decap
MT - Crossed Data MDT threshold, MA - Data MDT group assigned
Interface state: Name, Uptime, Fwd, Info
Interface flags: LI - Local Interest, LD - Local Dissinterest,
II - Internal Interest, ID - Internal Dissinterest,
LH - Last Hop, AS - Assert, AB - Admin Boundary, EX - Extranet
(*,225.1.1.1) SM Up: 01:06:08 RP: 192.168.0.255*
JP: Join(never) RPF: Decapstunnel0,192.168.0.255 Flags:
GigabitEthernet0/0/0/1 01:06:08 fwd Join(00:03:21)
(192.168.1.18,225.1.1.1)RPT SM Up: 00:01:59 RP: 192.168.0.255*
JP: Prune(never) RPF: Decapstunnel0,192.168.0.255 Flags:
GigabitEthernet0/0/0/1 00:01:59 off Prune(00:03:21) <====== (S,G,RPT) has been pruned
(192.168.1.18,225.1.1.1) SM Up: 00:01:05
JP: Null(never) RPF: GigabitEthernet0/0/0/1,192.168.1.13 Flags: E
No interfaces in immediate olist <======= The SPT is not through the RP so (S,G) is useless now
RP/0/0/CPU0:bottomright#
Summary of Anycast RP:
Bidir PIM is significantly simpler in operation than Sparse-Mode. Bidir eliminates the maintenance of source states (no (S,G) entries, only (*,G)) and there's no data driven events hence packets never need to be signaled and preserved. So that makes it much more scalable for many-to-many applications.
Bidir PIM uses the Designated Forwarder (DF) election mechanism (based on routing protocol cost to the RP) to elect a single router on each link which becomes responsible for two special tasks:
There's no bidir range by default so we first need to create one on each router and have it point to one RP:
RP/0/0/CPU0:topleft#sh run ipv4 access-list bidir-range
Fri Sep 16 16:54:39.114 CEST
ipv4 access-list bidir-range
10 permit ipv4 226.0.0.0 0.255.255.255 any
!
RP/0/0/CPU0:topleft#sh run router pim
Fri Sep 16 16:54:42.618 CEST
router pim
address-family ipv4
rp-address 192.168.0.3
rp-address 192.168.0.3 bidir-range bidir
!
!
RP/0/0/CPU0:topleft#sh pim group-map
Fri Sep 16 16:54:48.316 CEST
IP PIM Group Mapping Table
(* indicates group mappings being used)
(+ indicates BSR group mappings active in MRIB)
Group Range Proto Client Groups RP address Info
224.0.1.39/32* DM perm 0 0.0.0.0
224.0.1.40/32* DM perm 1 0.0.0.0
224.0.0.0/24* NO perm 0 0.0.0.0
232.0.0.0/8* SSM config 0 0.0.0.0
226.0.0.0/8* BD config 0 192.168.0.3 RPF: Gi0/0/0/1,192.168.1.6 <====== bidir
224.0.0.0/4* SM config 0 192.168.0.3 RPF: Gi0/0/0/1,192.168.1.6
224.0.0.0/4 SM static 0 0.0.0.0 RPF: Null,0.0.0.0
RP/0/0/CPU0:topleft#
So the first thing to check is where the router has been elected as DF:
RP/0/0/CPU0:topleft#sh pim df election-state
Sun Sep 18 23:45:07.620 CEST
RP Interface DF State Timer Metrics
192.168.0.3 GigabitEthernet0/0/0/3 Winner 4s 713ms [110/2]
192.168.0.3 GigabitEthernet0/0/0/2 Winner 0s 713ms [110/2]
192.168.0.3 GigabitEthernet0/0/0/1 Lose 0s 0ms [inf/inf]
192.168.0.3 GigabitEthernet0/0/0/0 Winner 3s 113ms [110/2]
192.168.0.3 Loopback0 Winner 6s 113ms [110/2]
RP/0/0/CPU0:topleft#
RP/0/0/CPU0:topleft#sh mrib route 226.0.0.0/8
Sun Sep 18 23:47:42.605 CEST
IP Multicast Routing Information Base
Entry flags: L - Domain-Local Source, E - External Source to the Domain,
C - Directly-Connected Check, S - Signal, IA - Inherit Accept,
IF - Inherit From, D - Drop, MA - MDT Address, ME - MDT Encap,
MD - MDT Decap, MT - MDT Threshold Crossed, MH - MDT interface handle
CD - Conditional Decap, MPLS - MPLS Decap, MF - MPLS Encap, EX - Extranet
MoFE - MoFRR Enabled, MoFS - MoFRR State
Interface flags: F - Forward, A - Accept, IC - Internal Copy,
NS - Negate Signal, DP - Don't Preserve, SP - Signal Present,
II - Internal Interest, ID - Internal Disinterest, LI - Local Interest,
LD - Local Disinterest, DI - Decapsulation Interface
EI - Encapsulation Interface, MI - MDT Interface, LVIF - MPLS Encap,
EX - Extranet, A2 - Secondary Accept
(*,226.0.0.0/8) RPF nbr: 192.168.1.6 Flags: IF
Up: 2d06h
Incoming Interface List
Loopback0 Flags: A, Up: 2d06h
GigabitEthernet0/0/0/0 Flags: A, Up: 2d06h
GigabitEthernet0/0/0/1 Flags: F A, Up: 2d06h
GigabitEthernet0/0/0/2 Flags: A, Up: 2d06h
GigabitEthernet0/0/0/3 Flags: A, Up: 2d06h
Outgoing Interface List
GigabitEthernet0/0/0/1 Flags: F A, Up: 2d06h
RP/0/0/CPU0:topleft#
So under steady state (no receiver yet), the router has a (*,G/Mask) where:
The accepting interfaces will not change over time. When a receiver joins, we will create a (*,G) for the group being joined but that (*,G) will inherit the accepting interfaces from that (*,G/M) above thanks to the Inherit Accept (IA) flag. The new (*,G) will only have the forwarding info to indicate where there are receivers for that group and forward packets accordingly.
So let's add a receiver on toprightce:
RP/0/0/CPU0:topright#sh igmp groups 226.1.1.1
Mon Sep 19 00:58:28.909 CEST
IGMP Connected Group Membership
Group Address Interface Uptime Expires Last Reporter
226.1.1.1 GigabitEthernet0/0/0/2 00:00:23 00:01:55 192.168.1.34
RP/0/0/CPU0:topright#
RP/0/0/CPU0:topright#sh mrib route
Mon Sep 19 01:02:55.986 CEST
IP Multicast Routing Information Base
Entry flags: L - Domain-Local Source, E - External Source to the Domain,
C - Directly-Connected Check, S - Signal, IA - Inherit Accept,
IF - Inherit From, D - Drop, MA - MDT Address, ME - MDT Encap,
MD - MDT Decap, MT - MDT Threshold Crossed, MH - MDT interface handle
CD - Conditional Decap, MPLS - MPLS Decap, MF - MPLS Encap, EX - Extranet
MoFE - MoFRR Enabled, MoFS - MoFRR State
Interface flags: F - Forward, A - Accept, IC - Internal Copy,
NS - Negate Signal, DP - Don't Preserve, SP - Signal Present,
II - Internal Interest, ID - Internal Disinterest, LI - Local Interest,
LD - Local Disinterest, DI - Decapsulation Interface
EI - Encapsulation Interface, MI - MDT Interface, LVIF - MPLS Encap,
EX - Extranet, A2 - Secondary Accept
<snip>
(*,226.0.0.0/8) RPF nbr: 192.168.1.14 Flags: IF
Up: 01:19:27
Incoming Interface List
Loopback0 Flags: A, Up: 01:19:27
GigabitEthernet0/0/0/1 Flags: F A, Up: 01:19:27
GigabitEthernet0/0/0/2 Flags: A, Up: 01:19:27
GigabitEthernet0/0/0/3 Flags: A, Up: 01:19:27
Outgoing Interface List
GigabitEthernet0/0/0/1 Flags: F A, Up: 01:19:27
(*,226.1.1.1) RPF nbr: 192.168.1.14 Flags: IA Inherit: 226.0.0.0/8 <===== Inherit Accept
Up: 00:04:50
Outgoing Interface List
GigabitEthernet0/0/0/1 Flags: F, Up: 00:04:50
GigabitEthernet0/0/0/2 Flags: F LI, Up: 00:04:50
(*,232.0.0.0/8) Flags: D
Up: 5w5d
RP/0/0/CPU0:topright#
RP/0/0/CPU0:topright#sh pim df election-state
Mon Sep 19 01:04:49.010 CEST
RP Interface DF State Timer Metrics
192.168.0.3 GigabitEthernet0/0/0/3 Winner 7s 733ms [110/3]
192.168.0.3 GigabitEthernet0/0/0/2 Winner 2s 133ms [110/3]
192.168.0.3 GigabitEthernet0/0/0/1 Lose 0s 0ms [inf/inf]
192.168.0.3 GigabitEthernet0/0/0/0 Lose 0s 0ms [110/3]
192.168.0.3 Loopback0 Winner 10s 333ms [110/3]
RP/0/0/CPU0:topright#
So we can see from the (*,G/M) that topright has won the DF election on 0/0/0/2 and 0/0/0/3 so it will accept on these 2 interfaces. It will also accept from the RP (0/0/0/1). And it will forward to the RP.
We can see that the (*,G) inherits the accepting interface from the (*,G/M) through the IA flag and has its forwarding interface set to the upstream interface to the RP (0/0/0/1) and to the interface with the receiver (0/0/0/2).
So what happens when the source (topleftce) starts transmitting ? topleft forwards packet to the RP bottomleft based on the (*,G/M) and there's no (S,G) or (*,G) created for that source and no signaling at all. The forwarding is just based on the (*,G/M) entry which was already there in steady state.
So packets make it to the RP bottomleft where we had these entries:
(*,226.0.0.0/8) RPF nbr: 192.168.0.3 Flags: IF
Up: 01:41:17
Incoming Interface List
Loopback0 Flags: F A, Up: 01:41:17
GigabitEthernet0/0/0/0 Flags: A, Up: 01:41:17
GigabitEthernet0/0/0/1 Flags: A, Up: 01:41:15
GigabitEthernet0/0/0/2 Flags: A, Up: 01:41:17
GigabitEthernet0/0/0/3 Flags: A, Up: 01:41:16
Outgoing Interface List
Loopback0 Flags: F A, Up: 01:41:17
(*,226.1.1.1) RPF nbr: 192.168.0.3 Flags: IA Inherit: 226.0.0.0/8
Up: 00:26:31
Outgoing Interface List
Loopback0 Flags: F, Up: 00:26:31
GigabitEthernet0/0/0/0 Flags: F, Up: 00:26:31
So we were accepting packets from topleft on 0/0/0/1 since we've won the DF election (we're the RP!) and we're forwarding on 0/0/0/0 since we've received a join on this interface due to the receiver joining off topright. So bottomleft will accept the packet thanks to the (*,G/M) and forward it thanks to the (*,G). Downstream routers bottomright and topright will do the same and packets will reach the receiver...
Summary of bidir:
brilliant !
Well written!
Better than any book I have read. Thank you for your time.
How do we enable bidir in XR if not using static RP?
Looking for the command equivalent to ip pim bidir enable in IOS.
thanks
Find answers to your questions by entering keywords or phrases in the Search bar above. New here? Use these resources to familiarize yourself with the community: