Tuesday, December 11, 2018

CCIE SPv4 MPLS Multicast VPN - Profile 0 - Data MDT GRE PIM C-Mcast Signaling

In this post we will be taking a look at the Data MDT for Profile 0. This MDT is used for high bandwidth flows through the MPLS backbone. The idea is to leverage SSM or Source Specific Multicast in the SP backbone and create Data MDTs on each of the PE routers with unique Data MDT group ranges. This will allow a receiver to signal a specific source to send traffic.

The Default MDT would send the traffic to all PEs regardless of CE interest in receiving the traffic. Data MDTs allow the signaling of the connected CE by sending an update through MP-BGP IPv4 MDT. BGP isn't required for the Default MDT to work or forward traffic since each PE forms a full mesh of PIM neighbors in the VRF.

This specific optimization was a bit tricky for me to understand at first since the Default MDT uses a single multicast group, like 239.0.0.1 for instance, all the PEs form (S, G) entries that join that multicast group to receive the traffic. The data MDT is a bit different and uses unique Data MDT groups. So R1, R3, R7 and XR1 are PEs, so each one will use their loopback IP to define the Data MDT group, R1 will be 232.1.1.0 0.0.0.255 which will allow R1 to spin up 255 Data MDT groups. I know what you're thinking, that is a lot of state for the PEs to maintain at that scale. You are correct.

The above topology is what we'll be using, the left side of it. The P routers will be configured to use SSM for the default MDT, the PE routers will be configured to use SSM for both the global default and the VRF default MDTs. Each PE router will be configured with a unique Data MDT. XR2 is is the BGP RR, XR2 and all the PEs will be configured to advertise and receive the IPv4 MDT AFI. The PE-CE connections will be configured to run IGMPv3 to support SSM.

R1
interface GigabitEthernet1.201
 ip igmp version 3
!
vrf definition MVPN
 address-family ipv4
  mdt default 232.0.0.1
  mdt data 232.1.1.0 0.0.0.255
!
router bgp 1.50693
 address-family ipv4 mdt
  neighbor 192.0.2.22 activate
  neighbor 192.0.2.22 send-community extended
!
ip pim ssm default
ip pim vrf MVPN ssm default

R3
interface GigabitEthernet1.211
 ip igmp version 3
!
vrf definition MVPN
 address-family ipv4
  mdt default 232.0.0.1
  mdt data 232.3.3.0 0.0.0.255
!
router bgp 1.50693
 address-family ipv4 mdt
  neighbor 192.0.2.22 activate
  neighbor 192.0.2.22 send-community extended
!
ip pim ssm default
ip pim vrf MVPN ssm default




R7
interface GigabitEthernet1.214
 ip igmp version 3
!
vrf definition MVPN
 address-family ipv4
  mdt default 232.0.0.1
  mdt data 232.7.7.0 0.0.0.255
!
router bgp 1.50693
 address-family ipv4 mdt
  neighbor 192.0.2.22 activate
  neighbor 192.0.2.22 send-community extended
!
ip pim ssm default
ip pim vrf MVPN ssm default



XR1
multicast-routing
 vrf CORE
  address-family ipv4
   mdt source Loopback0
   interface all enable
   mdt default ipv4 232.0.0.1
   mdt data 232.21.21.0/24 immediate-switch
!
router bgp 1.50693
 address-family ipv4 mdt
 !
 neighbor 192.0.2.22
  address-family ipv4 mdt

Before we configure the CE side, we need to verify the PE side. The goal with the outputs is to verify that the default MDT is built between the PEs.

R3#sh 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, E - Extranet,
       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, 
       G - Received BGP C-Mroute, g - Sent BGP C-Mroute, 
       N - Received BGP Shared-Tree Prune, n - BGP C-Mroute suppressed, 
       Q - Received BGP S-A Route, q - Sent BGP S-A Route, 
       V - RD & Vector, v - Vector, p - PIM Joins on route, 
       x - VxLAN group
Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join
 Timers: Uptime/Expires
 Interface state: Interface, Next-Hop or VCD, State/Mode

(192.0.2.3, 232.0.0.1), 00:00:35/00:03:22, flags: sT
  Incoming interface: Loopback0, RPF nbr 0.0.0.0
  Outgoing interface list:
    GigabitEthernet1.23, Forward/Sparse, 00:00:07/00:03:22
    GigabitEthernet1.36, Forward/Sparse, 00:00:35/00:02:54

(192.0.2.21, 232.0.0.1), 00:00:41/00:02:18, flags: sTIZ
  Incoming interface: GigabitEthernet1.36, RPF nbr 100.64.36.6
  Outgoing interface list:
    MVRF MVPN, Forward/Sparse, 00:00:41/00:02:18

(192.0.2.7, 232.0.0.1), 00:00:41/00:02:18, flags: sTIZ
  Incoming interface: GigabitEthernet1.36, RPF nbr 100.64.36.6
  Outgoing interface list:
    MVRF MVPN, Forward/Sparse, 00:00:41/00:02:18

(192.0.2.1, 232.0.0.1), 00:00:41/00:02:18, flags: sTIZ
  Incoming interface: GigabitEthernet1.23, RPF nbr 100.64.23.2
  Outgoing interface list:
    MVRF MVPN, Forward/Sparse, 00:00:41/00:02:18



R7#sh 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, E - Extranet,
       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, 
       G - Received BGP C-Mroute, g - Sent BGP C-Mroute, 
       N - Received BGP Shared-Tree Prune, n - BGP C-Mroute suppressed, 
       Q - Received BGP S-A Route, q - Sent BGP S-A Route, 
       V - RD & Vector, v - Vector, p - PIM Joins on route, 
       x - VxLAN group
Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join
 Timers: Uptime/Expires
 Interface state: Interface, Next-Hop or VCD, State/Mode

(192.0.2.7, 232.0.0.1), 00:00:01/00:03:28, flags: sT
  Incoming interface: Loopback0, RPF nbr 0.0.0.0
  Outgoing interface list:
    GigabitEthernet1.127, Forward/Sparse, 00:00:01/00:03:28

(192.0.2.21, 232.0.0.1), 00:00:01/00:02:58, flags: sTIZ
  Incoming interface: GigabitEthernet1.127, RPF nbr 100.64.127.12
  Outgoing interface list:
    MVRF MVPN, Forward/Sparse, 00:00:01/00:02:58

(192.0.2.3, 232.0.0.1), 00:00:01/00:02:58, flags: sTIZ
  Incoming interface: GigabitEthernet1.67, RPF nbr 100.64.67.6
  Outgoing interface list:
    MVRF MVPN, Forward/Sparse, 00:00:01/00:02:58

(192.0.2.1, 232.0.0.1), 00:00:01/00:02:58, flags: sTIZ
  Incoming interface: GigabitEthernet1.127, RPF nbr 100.64.127.12
  Outgoing interface list:
    MVRF MVPN, Forward/Sparse, 00:00:01/00:02:58





R1#sh 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, E - Extranet,
       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, 
       G - Received BGP C-Mroute, g - Sent BGP C-Mroute, 
       N - Received BGP Shared-Tree Prune, n - BGP C-Mroute suppressed, 
       Q - Received BGP S-A Route, q - Sent BGP S-A Route, 
       V - RD & Vector, v - Vector, p - PIM Joins on route, 
       x - VxLAN group
Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join
 Timers: Uptime/Expires
 Interface state: Interface, Next-Hop or VCD, State/Mode

(192.0.2.21, 232.0.0.1), 00:00:01/00:02:58, flags: sTIZ
  Incoming interface: GigabitEthernet1.14, RPF nbr 100.64.14.4
  Outgoing interface list:
    MVRF MVPN, Forward/Sparse, 00:00:01/00:02:58

(192.0.2.7, 232.0.0.1), 00:00:01/00:02:58, flags: sTIZ
  Incoming interface: GigabitEthernet1.14, RPF nbr 100.64.14.4
  Outgoing interface list:
    MVRF MVPN, Forward/Sparse, 00:00:01/00:02:58

(192.0.2.3, 232.0.0.1), 00:00:01/00:02:58, flags: sTIZ
  Incoming interface: GigabitEthernet1.12, RPF nbr 100.64.12.2
  Outgoing interface list:
    MVRF MVPN, Forward/Sparse, 00:00:01/00:02:58




RP/0/0/CPU0:XR1#show mrib route          
Tue Dec 11 12:56:53.791 UTC

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, ME - MDT Encap, EID - Encap ID,
    MD - MDT Decap, MT - MDT Threshold Crossed, MH - MDT interface handle
    CD - Conditional Decap, MPLS - MPLS Decap, EX - Extranet
    MoFE - MoFRR Enabled, MoFS - MoFRR State, MoFP - MoFRR Primary
    MoFB - MoFRR Backup, RPFID - RPF ID Set, X - VXLAN
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, MT - MDT Threshold Crossed,
    MA - Data MDT Assigned, LMI - mLDP MDT Interface, TMI - P2MP-TE MDT Interface
    IRMI - IR MDT Interface

(192.0.2.1,232.0.0.1) RPF nbr: 100.64.114.4 Flags: RPF MD MH CD
  MVPN TID: 0xe0000011
  MVPN Remote TID: 0x0
  MVPN Payload: IPv4
  MDT IFH: 0x880
  Up: 17:40:08
  Incoming Interface List
    GigabitEthernet0/0/0/0.114 Flags: A, Up: 17:40:08
  Outgoing Interface List
    Loopback0 Flags: F NS, Up: 17:40:08

(192.0.2.3,232.0.0.1) RPF nbr: 100.64.114.4 Flags: RPF MD MH CD
  MVPN TID: 0xe0000011
  MVPN Remote TID: 0x0
  MVPN Payload: IPv4
  MDT IFH: 0x880
  Up: 17:40:08
  Incoming Interface List
    GigabitEthernet0/0/0/0.114 Flags: A, Up: 17:40:08
  Outgoing Interface List
    Loopback0 Flags: F NS, Up: 17:40:08

(192.0.2.7,232.0.0.1) RPF nbr: 100.64.112.120 Flags: RPF MD MH
  MVPN TID: 0xe0000011
  MVPN Remote TID: 0x0
  MVPN Payload: IPv4
  MDT IFH: 0x880
  Up: 17:41:07
  Incoming Interface List
    GigabitEthernet0/0/0/0.112 Flags: A, Up: 17:41:07
  Outgoing Interface List
    Loopback0 Flags: F NS, Up: 17:40:08
    GigabitEthernet0/0/0/0.114 Flags: F NS, Up: 17:41:07

(192.0.2.21,232.0.0.1) RPF nbr: 192.0.2.21 Flags: RPF ME MH
  MVPN TID: 0xe0000011
  MVPN Remote TID: 0x0
  MVPN Payload: IPv4
  MDT IFH: 0x880
  Up: 17:40:08
  Incoming Interface List
    Loopback0 Flags: F A, Up: 17:40:08
  Outgoing Interface List
    Loopback0 Flags: F A, Up: 17:40:08
    GigabitEthernet0/0/0/0.112 Flags: F NS, Up: 17:40:08
    GigabitEthernet0/0/0/0.114 Flags: F NS, Up: 17:40:08

R17 will signal to join the 225.1.1.1 group with a source of R16s loopback.

interface Loopback0
 ip address 192.0.2.17 255.255.255.255
 ip igmp join-group 225.1.1.1 source 192.0.2.16
 ip igmp join-group 224.1.1.2
 ip igmp version 3

R18 will signal to join the 226.1.1.1 group with a source of R15's looback.

interface Loopback0
 ip address 192.0.2.18 255.255.255.255
 ip igmp join-group 226.1.1.1 source 192.0.2.15
 ip igmp version 3


R3#sh ip mroute vrf MVPN 
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, E - Extranet,
       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, 
       G - Received BGP C-Mroute, g - Sent BGP C-Mroute, 
       N - Received BGP Shared-Tree Prune, n - BGP C-Mroute suppressed, 
       Q - Received BGP S-A Route, q - Sent BGP S-A Route, 
       V - RD & Vector, v - Vector, p - PIM Joins on route, 
       x - VxLAN group
Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join
 Timers: Uptime/Expires
 Interface state: Interface, Next-Hop or VCD, State/Mode

(*, 225.1.1.1), 00:00:37/00:02:52, RP 192.0.2.15, flags: S
  Incoming interface: Tunnel1, RPF nbr 192.0.2.1
  Outgoing interface list:
    GigabitEthernet1.211, Forward/Sparse, 00:00:37/00:02:52

(*, 224.1.1.2), 1d21h/00:02:32, RP 192.0.2.15, flags: S
  Incoming interface: Tunnel1, RPF nbr 192.0.2.1
  Outgoing interface list:
    GigabitEthernet1.211, Forward/Sparse, 19:45:43/00:02:32

R3 is the PE attached to R17, which is signaling for the ASM group 224.1.1.2 and the SSM group of 225.1.1.1 with a source of R16's loopback.

R7#sh ip mroute vrf MVPN
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, E - Extranet,
       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, 
       G - Received BGP C-Mroute, g - Sent BGP C-Mroute, 
       N - Received BGP Shared-Tree Prune, n - BGP C-Mroute suppressed, 
       Q - Received BGP S-A Route, q - Sent BGP S-A Route, 
       V - RD & Vector, v - Vector, p - PIM Joins on route, 
       x - VxLAN group
Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join
 Timers: Uptime/Expires
 Interface state: Interface, Next-Hop or VCD, State/Mode

(*, 226.1.1.1), 00:01:55/00:02:33, RP 192.0.2.15, flags: S
  Incoming interface: Tunnel1, RPF nbr 192.0.2.1
  Outgoing interface list:
    GigabitEthernet1.214, Forward/Sparse, 00:01:55/00:02:33

R7 is the PE attached to R18 and is signaling the SSM group 226.1.1.1 to the source of R15's loopback.

R16#ping 225.1.1.1 source lo0 repeat 2
Type escape sequence to abort.
Sending 2, 100-byte ICMP Echos to 225.1.1.1, timeout is 2 seconds:
Packet sent with a source address of 192.0.2.16 
.
Reply to request 1 from 100.64.211.17, 12 ms
Reply to request 1 from 192.0.2.17, 14 ms

On R16 we ping the group IP 225.1.1.1.

R3#sh 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, E - Extranet,
       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, 
       G - Received BGP C-Mroute, g - Sent BGP C-Mroute, 
       N - Received BGP Shared-Tree Prune, n - BGP C-Mroute suppressed, 
       Q - Received BGP S-A Route, q - Sent BGP S-A Route, 
       V - RD & Vector, v - Vector, p - PIM Joins on route, 
       x - VxLAN group
Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join
 Timers: Uptime/Expires
 Interface state: Interface, Next-Hop or VCD, State/Mode

(192.0.2.21, 232.21.21.3), 00:00:34/00:02:25, flags: sTIZ
  Incoming interface: GigabitEthernet1.36, RPF nbr 100.64.36.6
  Outgoing interface list:
    MVRF MVPN, Forward/Sparse, 00:00:34/00:02:25

We check R3's MRIB table and see that there is an entry for the signaled connection, the group that was spun up was 232.21.21.3.

R3#sh ip mroute vrf MVPN 
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, E - Extranet,
       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, 
       G - Received BGP C-Mroute, g - Sent BGP C-Mroute, 
       N - Received BGP Shared-Tree Prune, n - BGP C-Mroute suppressed, 
       Q - Received BGP S-A Route, q - Sent BGP S-A Route, 
       V - RD & Vector, v - Vector, p - PIM Joins on route, 
       x - VxLAN group
Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join
 Timers: Uptime/Expires
 Interface state: Interface, Next-Hop or VCD, State/Mode

(192.0.2.16, 225.1.1.1), 00:01:11/00:01:48, flags: TY
  Incoming interface: Tunnel1, RPF nbr 192.0.2.21, MDT:[192.0.2.21,232.21.21.3]/00:02:49
  Outgoing interface list:
    GigabitEthernet1.211, Forward/Sparse, 00:01:11/00:03:17

We check the VRF aware MRIB and see that the (S, G) is built (192.0.2.16, 225.1.1.1) with the flags T and Y, T for source based tree and Y for joined MDT data group. The RPF neighbor is 192.0.2.21 over Tunnel which is XR1 that connects to R16 that is the source.

RP/0/0/CPU0:XR1#sh mrib route
Tue Dec 11 13:18:17.593 UTC

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, ME - MDT Encap, EID - Encap ID,
    MD - MDT Decap, MT - MDT Threshold Crossed, MH - MDT interface handle
    CD - Conditional Decap, MPLS - MPLS Decap, EX - Extranet
    MoFE - MoFRR Enabled, MoFS - MoFRR State, MoFP - MoFRR Primary
    MoFB - MoFRR Backup, RPFID - RPF ID Set, X - VXLAN
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, MT - MDT Threshold Crossed,
    MA - Data MDT Assigned, LMI - mLDP MDT Interface, TMI - P2MP-TE MDT Interface
    IRMI - IR MDT Interface

(192.0.2.21,232.21.21.0) RPF nbr: 192.0.2.21 Flags: RPF ME MH
  MVPN TID: 0xe0000011
  MVPN Remote TID: 0x0
  MVPN Payload: IPv4
  MDT IFH: 0x880
  Up: 18:01:25
  Incoming Interface List
    Loopback0 Flags: F A, Up: 18:01:25
  Outgoing Interface List
    Loopback0 Flags: F A, Up: 18:01:25
    GigabitEthernet0/0/0/0.114 Flags: F NS, Up: 18:01:25

On XR1 we check the MRIB table and see the source side of the tunnel.

RP/0/0/CPU0:XR1#traceroute 192.0.2.3 source 192.0.2.21 num
Tue Dec 11 13:22:23.546 UTC

Type escape sequence to abort.
Tracing the route to 192.0.2.3

 1  100.64.114.4 [MPLS: Label 4012 Exp 0] 9 msec  0 msec  0 msec
 2  100.64.14.1 [MPLS: Label 1012 Exp 0] 0 msec  0 msec  0 msec
 3  100.64.12.2 [MPLS: Label 2011 Exp 0] 0 msec  0 msec  0 msec
 4  100.64.23.3 0 msec  *  0 msec

On R15 we ping the group 226.1.1.1 from the loopback and get pings back from R18.

R15#ping 226.1.1.1 source lo0 repeat 2
Type escape sequence to abort.
Sending 2, 100-byte ICMP Echos to 226.1.1.1, timeout is 2 seconds:
Packet sent with a source address of 192.0.2.15 

Reply to request 0 from 100.64.214.18, 15 ms
Reply to request 0 from 192.0.2.18, 16 ms
Reply to request 1 from 192.0.2.18, 13 ms
Reply to request 1 from 192.0.2.18, 16 ms

R7#sh 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, E - Extranet,
       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, 
       G - Received BGP C-Mroute, g - Sent BGP C-Mroute, 
       N - Received BGP Shared-Tree Prune, n - BGP C-Mroute suppressed, 
       Q - Received BGP S-A Route, q - Sent BGP S-A Route, 
       V - RD & Vector, v - Vector, p - PIM Joins on route, 
       x - VxLAN group
Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join
 Timers: Uptime/Expires
 Interface state: Interface, Next-Hop or VCD, State/Mode

(192.0.2.1, 232.1.1.1), 00:00:08/00:02:51, flags: sTIZ
  Incoming interface: GigabitEthernet1.127, RPF nbr 100.64.127.12
  Outgoing interface list:
    MVRF MVPN, Forward/Sparse, 00:00:08/00:02:51

On R7 we check the MRIB table and see entry for the signaled connection.

R7#sh ip mroute vrf MVPN
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, E - Extranet,
       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, 
       G - Received BGP C-Mroute, g - Sent BGP C-Mroute, 
       N - Received BGP Shared-Tree Prune, n - BGP C-Mroute suppressed, 
       Q - Received BGP S-A Route, q - Sent BGP S-A Route, 
       V - RD & Vector, v - Vector, p - PIM Joins on route, 
       x - VxLAN group
Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join
 Timers: Uptime/Expires
 Interface state: Interface, Next-Hop or VCD, State/Mode

(192.0.2.15, 226.1.1.1), 00:00:32/00:02:27, flags: TY
  Incoming interface: Tunnel1, RPF nbr 192.0.2.1, MDT:[192.0.2.1,232.1.1.1]/00:02:39
  Outgoing interface list:
    GigabitEthernet1.214, Forward/Sparse, 00:00:32/00:02:57

Checking R7s VRF Aware MRIB table we see (S, G) entry and the RPF interface being Tunnel 1 back towards R1.

R1#sh 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, E - Extranet,
       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, 
       G - Received BGP C-Mroute, g - Sent BGP C-Mroute, 
       N - Received BGP Shared-Tree Prune, n - BGP C-Mroute suppressed, 
       Q - Received BGP S-A Route, q - Sent BGP S-A Route, 
       V - RD & Vector, v - Vector, p - PIM Joins on route, 
       x - VxLAN group
Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join
 Timers: Uptime/Expires
 Interface state: Interface, Next-Hop or VCD, State/Mode

(192.0.2.1, 232.1.1.0), 00:21:14/00:02:55, flags: sTz
  Incoming interface: Loopback0, RPF nbr 0.0.0.0
  Outgoing interface list:
    GigabitEthernet1.14, Forward/Sparse, 00:21:14/00:02:55

On R1 we see the MRIB table, which connects to the source. The flags, s, T and z indicate the source of the traffic.

Thanks for stopping by!
Rob Riker, CCIE #50693

Monday, December 10, 2018

CCIE SPv4 MPLS Multicast VPN - Profile 0 - Default MDT GRE PIM C-Mcast Signaling

For the first of many posts on multicast VPN we'll begin the first three with GRE encapsulated mVPN. MPLS L3VPN must be already operational in the SP network and connecting the CE sites together. The Unicast traffic sent and received between CE sites is forwarded via MPLS in the SP backbone, multicast traffic sent and received between CE sites is forwarded via GRE in the SP backbone. If you look at the list of profiles for IOS and XR, you'll see profiles 0-26, which is made up of GRE, mLDP, RSVP-TE and IR based mVPNs. We'll focus the first three on GRE. There are several flavors of SP multicast we can test, BSR, Auto RP, Bidirectional and SSM. We'll see in our future posts how SSM and Bidirectional work in the SP backbone, using Auto RP is the same as BSR in my opinion so there isn't a need to test it.

Profile 0 Default MDT - GRE - PIM C-mcast Signaling
Profile 3 Default MDT - GRE - BGP-AD - PIM C-mcast Signaling
Profile 11 Default MDT - GRE - BGP-AD - BGP C-mcast Signaling

All three use GRE to forward between PE devices in the SP backbone. Rather than tackling them in numerical order, I wanted to better understand how they were different in the hopes of using that understanding to help in the CCIE lab when they describe which profile to implement. There are 27 after all. The Rosen Model is the first we'll look at. No BGP will be used for Any Source Multicast, just BSR in the SP core and BSR on R15 for the RPs.


We'll be focusing on the left side of the diagram for now. R15 will be the RP for the CE sites, R16 will be the sender and R17 and R18 will be the receivers.

Setting up the SP backbone
We'll start off by configuring R1-R7 and XR1-XR2 to enable multicast and PIM.
R5 will be the RP of the SP backbone.
The PE routers will form direct, or full mesh multicast tunnel connections with each other.
The entire SP core will build inter SP router PIM tunnels with each others to allow the forwarding of multicast traffic through the backbone network.

R1
vrf definition MVPN
 rd 100:100
 route-target both 100:100
 !
 address-family ipv4
  mdt default 239.1.1.1
 exit-address-family
!
ip multicast-routing distributed
!
ip multicast-routing vrf MVPN distributed
!
interface Loopback0
 ip pim sparse-mode
!
interface GigabitEthernet1.201
 vrf forwarding MVPN
 ip pim sparse-mode
!
interface GigabitEthernet1.12
 ip pim sparse-mode
 !
interface GigabitEthernet1.14
 ip pim sparse-mode
!
router bgp 1.50693
 address-family ipv4 vrf MVPN
  neighbor 100.64.201.15 remote-as 65015
  neighbor 100.64.201.15 activate

R2
ip multicast-routing distributed
!
interface GigabitEthernet1.12
 ip pim sparse-mode
!
interface GigabitEthernet1.23
 ip pim sparse-mode
 !
interface GigabitEthernet1.25
 ip pim sparse-mode

R3
vrf definition MVPN
 rd 100:100
  route-target both 100:100
 !
 address-family ipv4
  mdt default 239.1.1.1
 exit-address-family
 !
ip multicast-routing distributed
ip multicast-routing vrf MVPN distributed
!
interface Loopback0
  ip pim sparse-mode
 !
interface GigabitEthernet1.23
 ip pim sparse-mode
!
interface GigabitEthernet1.36
 ip pim sparse-mode
 !
interface GigabitEthernet1.211
  vrf forwarding MVPN
  ip pim sparse-mode
!
router bgp 1.50693
 address-family ipv4 vrf MVPN
  neighbor 100.64.211.17 remote-as 65017
  neighbor 100.64.211.17 activate

R4
ip multicast-routing distributed
!
interface Loopback0
  ip pim sparse-mode

interface GigabitEthernet1.14
 ip pim sparse-mode
!
interface GigabitEthernet1.45
 !ip pim sparse-mode
!
interface GigabitEthernet1.114
 ip pim sparse-mode

R5
ip multicast-routing distributed
!
interface Loopback0
 ip pim sparse-mode
!
interface GigabitEthernet1.25
 ip pim sparse-mode
!
interface GigabitEthernet1.45
 ip pim sparse-mode
!
interface GigabitEthernet1.56
 ip pim sparse-mode
!
interface GigabitEthernet1.125
 ip pim sparse-mode
!
ip pim bsr-candidate Loopback0 0
ip pim rp-candidate Loopback0

R6
ip multicast-routing distributed
!
interface GigabitEthernet1.36
 ip pim sparse-mode
!
interface GigabitEthernet1.56
 ip pim sparse-mode
!
interface GigabitEthernet1.67
 ip pim sparse-mode

R7
ip multicast-routing distributed
ip multicast-routing vrf MVPN distributed
!
interface Loopback0
  ip pim sparse-mode
!
interface GigabitEthernet1.67
 ip pim sparse-mode
!
interface GigabitEthernet1.127
 ip pim sparse-mode
!
interface GigabitEthernet1.214
 encapsulation dot1Q 214
 vrf forwarding MVPN
 ip address 100.64.214.7 255.255.255.0
 ip pim sparse-mode
!
router bgp 1.50693
 address-family ipv4 vrf MVPN
  neighbor 100.64.214.18 remote-as 65018
  neighbor 100.64.214.18 activate

XR1
multicast-routing
 address-family ipv4
  mdt source Loopback0
  interface all enable
 !
 vrf CORE
  address-family ipv4
   mdt source Loopback0
   interface all enable
   mdt default ipv4 239.1.1.1
  !
 !
!
router pim
 address-family ipv4
  interface Loopback0
  !
  interface GigabitEthernet0/0/0/0.112
  !
  interface GigabitEthernet0/0/0/0.114
  !
 !
 vrf CORE
  address-family ipv4
   interface GigabitEthernet0/0/0/0.204
   !
  !
 !
!
router bgp 1.50693
 address-family vpnv4 unicast
!
 vrf CORE
  rd 1:1
  address-family ipv4 unicast
  !
  neighbor 100.64.204.16
   remote-as 65016
   address-family ipv4 unicast
    route-policy RPL_EBGP_PEERINGS in
    route-policy RPL_EBGP_PEERINGS out
    as-override

XR2
multicast-routing
 address-family ipv4
  mdt source Loopback0
  interface all enable
 !
!
router pim
 address-family ipv4
  interface Loopback0
  !
  interface GigabitEthernet0/0/0/0.112
  !
  interface GigabitEthernet0/0/0/0.125
  !
  interface GigabitEthernet0/0/0/0.127
  !
 !
!
router bgp 1.50693
 address-family vpnv4 unicast
 !
 address-family vpnv6 unicast
 !
 neighbor 192.0.2.1
  remote-as 1.50693
  update-source Loopback0
  address-family vpnv4 unicast
   route-reflector-client
  !
 !
 neighbor 192.0.2.3
  remote-as 1.50693
  update-source Loopback0
  address-family vpnv4 unicast
   route-reflector-client
  !
 !
 neighbor 192.0.2.6
  remote-as 1.50693
  update-source Loopback0
  address-family vpnv4 unicast
   route-reflector-client
  !
 !
 neighbor 192.0.2.7
  remote-as 1.50693
  update-source Loopback0
  address-family vpnv4 unicast
   route-reflector-client
  !
 !
 neighbor 192.0.2.21
  remote-as 1.50693
  update-source Loopback0
  address-family vpnv4 unicast
   route-reflector-client


R15
ip multicast-routing distributed
!
interface Loopback0
 ip pim sparse-mode
!
interface GigabitEthernet1.201
 encapsulation dot1Q 201
 ip address 100.64.201.15 255.255.255.0
 ip pim sparse-mode
!
ip pim bsr-candidate Loopback0 0
ip pim rp-candidate Loopback0
!
router bgp 65015
 bgp log-neighbor-changes
 no bgp default ipv4-unicast
 neighbor 100.64.201.1 remote-as 116229
 !
 address-family ipv4
  network 192.0.2.15 mask 255.255.255.255
  neighbor 100.64.201.1 activate
 exit-address-family

R16
ip multicast-routing distributed
!
interface Loopback0
 ip pim sparse-mode
!
interface GigabitEthernet1.204
 ip pim sparse-mode
!
router bgp 65016
 bgp log-neighbor-changes
 no bgp default ipv4-unicast
 neighbor 100.64.204.11 remote-as 116229
 !
 address-family ipv4
  network 192.0.2.16 mask 255.255.255.255
  neighbor 100.64.204.11 activate
 exit-address-family

R17
ip multicast-routing distributed
!
interface Loopback0
  ip pim sparse-mode
 ip igmp join-group 224.1.1.2
!
interface GigabitEthernet1.211
 ip pim sparse-mode
!
router bgp 65017
 bgp asnotation dot
 bgp log-neighbor-changes
 no bgp default ipv4-unicast
 neighbor 100.64.211.3 remote-as 1.50693
 !
 address-family ipv4
  network 192.0.2.17 mask 255.255.255.255
  neighbor 100.64.211.3 activate
 exit-address-family

R18
ip multicast-routing distributed
!
interface Loopback0
 ip pim sparse-mode
 ip igmp join-group 224.1.1.1
!
interface GigabitEthernet1.214
 ip pim sparse-mode
!
router bgp 65018
 bgp log-neighbor-changes
 no bgp default ipv4-unicast
 neighbor 100.64.214.7 remote-as 116229
 !
 address-family ipv4
  network 192.0.2.18 mask 255.255.255.255
  neighbor 100.64.214.7 activate
 exit-address-family

With the configuration complete, we'll check the CE RP, R15 to make sure that the routes from the other CE sites are showing up.

R15#sh ip bgp
BGP table version is 32, local router ID is 192.0.2.15
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, 
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, 
              x best-external, a additional-path, c RIB-compressed, 
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
 *>  192.0.2.15/32    0.0.0.0                  0         32768 i
 *>  192.0.2.16/32    100.64.201.1                           0 116229 65016 i
 *>  192.0.2.17/32    100.64.201.1                           0 116229 65017 i
 *>  192.0.2.18/32    100.64.201.1                           0 116229 65018 i

Routes are showing up as expected.

R1#sh ip pim interface 

Address          Interface                Ver/   Nbr    Query  DR         DR
                                          Mode   Count  Intvl  Prior
100.64.12.1      GigabitEthernet1.12      v2/S   1      30     1          100.64.12.2
100.64.14.1      GigabitEthernet1.14      v2/S   1      30     1          100.64.14.4
192.0.2.1        Loopback0                v2/S   0      30     1          192.0.2.1


R1#sh ip pim neighbor 
PIM Neighbor Table
Mode: B - Bidir Capable, DR - Designated Router, N - Default DR Priority,
      P - Proxy Capable, S - State Refresh Capable, G - GenID Capable,
      L - DR Load-balancing Capable
Neighbor          Interface                Uptime/Expires    Ver   DR
Address                                                            Prio/Mode
100.64.12.2       GigabitEthernet1.12      19:12:48/00:01:44 v2    1 / DR S P G
100.64.14.4       GigabitEthernet1.14      19:11:54/00:01:38 v2    1 / DR S P G

We need to verify the SP core that PIM is enabled on the appropriate interfaces and neighbors formed. We see that PIM is enabled on the correct interfaces and neighbors have formed.

RP/0/0/CPU0:XR1#sh pim interface 
Mon Dec 10 08:48:24.501 UTC

PIM interfaces in VRF default
Address               Interface                     PIM  Nbr   Hello  DR    DR
                                                         Count Intvl  Prior

192.0.2.21            Loopback0                     on   1     30     1     this system
100.64.12.11          GigabitEthernet0/0/0/0.12     off  0     30     1     not elected
100.64.14.11          GigabitEthernet0/0/0/0.14     off  0     30     1     not elected
100.64.71.11          GigabitEthernet0/0/0/0.71     off  0     30     1     not elected
100.64.111.11         GigabitEthernet0/0/0/0.111    off  0     30     1     not elected
100.64.112.11         GigabitEthernet0/0/0/0.112    on   2     30     1     100.64.112.120
100.64.114.111        GigabitEthernet0/0/0/0.114    on   2     30     1     this system
100.64.115.11         GigabitEthernet0/0/0/0.115    off  0     30     1     not elected
100.64.116.11         GigabitEthernet0/0/0/0.116    off  0     30     1     not elected
100.64.118.11         GigabitEthernet0/0/0/0.118    off  0     30     1     not elected
100.64.141.11         GigabitEthernet0/0/0/0.141    off  0     30     1     not elected
100.64.151.110        GigabitEthernet0/0/0/0.151    off  0     30     1     not elected


RP/0/0/CPU0:XR1#sh pim neighbor 
Mon Dec 10 08:48:35.980 UTC

PIM neighbors in VRF default
Flag: B - Bidir capable, P - Proxy capable, DR - Designated Router,
      E - ECMP Redirect capable
      * indicates the neighbor created for this router

Neighbor Address             Interface              Uptime    Expires  DR pri   Flags

100.64.112.11*               GigabitEthernet0/0/0/0.112 17:32:13  00:01:37 1      B
100.64.112.120               GigabitEthernet0/0/0/0.112 17:32:09  00:01:41 1 (DR) B
100.64.114.4                 GigabitEthernet0/0/0/0.114 17:32:11  00:01:15 1      P
100.64.114.111*              GigabitEthernet0/0/0/0.114 17:32:13  00:01:31 1 (DR) B E
192.0.2.21*                  Loopback0              17:32:14  00:01:16 1 (DR) B E

The same applies to XR, we have PIM enabled on the interfaces and neighbors have formed.

R1#sh 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, E - Extranet,
       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, 
       G - Received BGP C-Mroute, g - Sent BGP C-Mroute, 
       N - Received BGP Shared-Tree Prune, n - BGP C-Mroute suppressed, 
       Q - Received BGP S-A Route, q - Sent BGP S-A Route, 
       V - RD & Vector, v - Vector, p - PIM Joins on route, 
       x - VxLAN group
Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join
 Timers: Uptime/Expires
 Interface state: Interface, Next-Hop or VCD, State/Mode

(*, 239.1.1.1), 18:32:24/stopped, RP 192.0.2.5, flags: SJCFZ
  Incoming interface: GigabitEthernet1.14, RPF nbr 100.64.14.4
  Outgoing interface list:
    MVRF MVPN, Forward/Sparse, 18:32:22/stopped

(192.0.2.21, 239.1.1.1), 17:09:44/00:02:26, flags: JTZ
  Incoming interface: GigabitEthernet1.14, RPF nbr 100.64.14.4
  Outgoing interface list:
    MVRF MVPN, Forward/Sparse, 17:09:44/00:02:15

(192.0.2.7, 239.1.1.1), 17:45:50/00:01:05, flags: JTZ
  Incoming interface: GigabitEthernet1.14, RPF nbr 100.64.14.4
  Outgoing interface list:
    MVRF MVPN, Forward/Sparse, 17:45:50/00:02:09

(192.0.2.3, 239.1.1.1), 18:19:32/00:02:43, flags: JTZ
  Incoming interface: GigabitEthernet1.12, RPF nbr 100.64.12.2
  Outgoing interface list:
    MVRF MVPN, Forward/Sparse, 18:19:32/00:01:27

(192.0.2.1, 239.1.1.1), 18:29:24/00:02:36, flags: FT
  Incoming interface: Loopback0, RPF nbr 0.0.0.0
  Outgoing interface list:
    GigabitEthernet1.14, Forward/Sparse, 17:45:50/00:02:47
    GigabitEthernet1.12, Forward/Sparse, 18:19:24/00:02:32

Now on the PEs, we verify the mroute table to verify we have formed multicast tunnels to the remote PE routers to forward the multicast traffic over the SP backbone. No BGP is used in this variant, since it is just ASM.

R1#sh ip mroute vrf MVPN
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, E - Extranet,
       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, 
       G - Received BGP C-Mroute, g - Sent BGP C-Mroute, 
       N - Received BGP Shared-Tree Prune, n - BGP C-Mroute suppressed, 
       Q - Received BGP S-A Route, q - Sent BGP S-A Route, 
       V - RD & Vector, v - Vector, p - PIM Joins on route, 
       x - VxLAN group
Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join
 Timers: Uptime/Expires
 Interface state: Interface, Next-Hop or VCD, State/Mode

(*, 224.1.1.2), 17:02:38/00:02:34, RP 192.0.2.15, flags: S
  Incoming interface: GigabitEthernet1.201, RPF nbr 100.64.201.15
  Outgoing interface list:
    Tunnel0, Forward/Sparse, 16:49:49/00:02:34

(*, 224.0.1.40), 18:33:13/00:02:53, RP 0.0.0.0, flags: DPL
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list: Null

We verify the VRF mroute table as well, we just see the (*, G) entry for the receivers that have signaled interest in traffic to the 224.1.1.2 group.

RP/0/0/CPU0:XR1#sh mrib route
Mon Dec 10 08:37:08.537 UTC

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, ME - MDT Encap, EID - Encap ID,
    MD - MDT Decap, MT - MDT Threshold Crossed, MH - MDT interface handle
    CD - Conditional Decap, MPLS - MPLS Decap, EX - Extranet
    MoFE - MoFRR Enabled, MoFS - MoFRR State, MoFP - MoFRR Primary
    MoFB - MoFRR Backup, RPFID - RPF ID Set, X - VXLAN
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, MT - MDT Threshold Crossed,
    MA - Data MDT Assigned, LMI - mLDP MDT Interface, TMI - P2MP-TE MDT Interface
    IRMI - IR MDT Interface

(*,224.0.0.0/4) RPF nbr: 100.64.114.4 Flags: C RPF P
  Up: 17:20:19

(*,224.0.0.0/24) Flags: D P
  Up: 17:20:56

(*,224.0.1.39) Flags: S P
  Up: 17:20:56

(*,224.0.1.40) Flags: S P
  Up: 17:20:56
  Outgoing Interface List
    Loopback0 Flags: II LI, Up: 17:20:47

(*,232.0.0.0/8) Flags: D P
  Up: 17:20:56

(*,239.1.1.1) RPF nbr: 100.64.114.4 Flags: C RPF MD MH CD
  MVPN TID: 0xe0000011
  MVPN Remote TID: 0x0
  MVPN Payload: IPv4
  MDT IFH: 0x880
  Up: 17:10:13
  Incoming Interface List
    GigabitEthernet0/0/0/0.114 Flags: A NS, Up: 17:10:13
  Outgoing Interface List
    Loopback0 Flags: F NS, Up: 17:10:13

(192.0.2.1,239.1.1.1) RPF nbr: 100.64.114.4 Flags: RPF MD MH CD
  MVPN TID: 0xe0000011
  MVPN Remote TID: 0x0
  MVPN Payload: IPv4
  MDT IFH: 0x880
  Up: 17:10:05
  Incoming Interface List
    GigabitEthernet0/0/0/0.114 Flags: A, Up: 17:10:05
  Outgoing Interface List
    Loopback0 Flags: F NS, Up: 17:10:05

(192.0.2.3,239.1.1.1) RPF nbr: 100.64.114.4 Flags: RPF MD MH CD
  MVPN TID: 0xe0000011
  MVPN Remote TID: 0x0
  MVPN Payload: IPv4
  MDT IFH: 0x880
  Up: 17:10:05
  Incoming Interface List
    GigabitEthernet0/0/0/0.114 Flags: A, Up: 17:10:05
  Outgoing Interface List
    Loopback0 Flags: F NS, Up: 17:10:05

(192.0.2.7,239.1.1.1) RPF nbr: 100.64.112.120 Flags: RPF MD MH
  MVPN TID: 0xe0000011
  MVPN Remote TID: 0x0
  MVPN Payload: IPv4
  MDT IFH: 0x880
  Up: 17:20:41
  Incoming Interface List
    GigabitEthernet0/0/0/0.112 Flags: A, Up: 17:20:41
  Outgoing Interface List
    Loopback0 Flags: F NS, Up: 17:10:13
    GigabitEthernet0/0/0/0.114 Flags: F NS, Up: 17:20:41

(192.0.2.21,239.1.1.1) RPF nbr: 192.0.2.21 Flags: RPF ME MH
  MVPN TID: 0xe0000011
  MVPN Remote TID: 0x0
  MVPN Payload: IPv4
  MDT IFH: 0x880
  Up: 17:10:13
  Incoming Interface List
    Loopback0 Flags: F A, Up: 17:10:13
  Outgoing Interface List
    Loopback0 Flags: F A, Up: 17:10:13
    GigabitEthernet0/0/0/0.112 Flags: F NS, Up: 17:10:13
    GigabitEthernet0/0/0/0.114 Flags: F NS, Up: 17:10:05

We verify the mrib route table on XR and see the same full mesh of GRE tunnels between the PE routers.

RP/0/0/CPU0:XR1#sh mrib vrf CORE route
Mon Dec 10 08:38:13.423 UTC

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, ME - MDT Encap, EID - Encap ID,
    MD - MDT Decap, MT - MDT Threshold Crossed, MH - MDT interface handle
    CD - Conditional Decap, MPLS - MPLS Decap, EX - Extranet
    MoFE - MoFRR Enabled, MoFS - MoFRR State, MoFP - MoFRR Primary
    MoFB - MoFRR Backup, RPFID - RPF ID Set, X - VXLAN
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, MT - MDT Threshold Crossed,
    MA - Data MDT Assigned, LMI - mLDP MDT Interface, TMI - P2MP-TE MDT Interface
    IRMI - IR MDT Interface

(*,224.0.0.0/4) RPF nbr: 192.0.2.1 Flags: C RPF P
  Up: 17:10:52

(*,224.0.0.0/24) Flags: D P
  Up: 17:22:01

(*,224.0.1.39) Flags: S P
  Up: 17:22:01

(*,224.0.1.40) Flags: S P
  Up: 17:22:01
  Outgoing Interface List
    GigabitEthernet0/0/0/0.204 Flags: II LI, Up: 17:21:51

(*,232.0.0.0/8) Flags: D P
  Up: 17:22:01

Right now, we see the default table entries.

R16# ping 224.1.1.2 repeat 2
Type escape sequence to abort.
Sending 2, 100-byte ICMP Echos to 224.1.1.2, timeout is 2 seconds:
.
Reply to request 1 from 100.64.211.17, 12 ms
Reply to request 1 from 192.0.2.17, 12 ms

R16 sends traffic towards the receiver, R17. We get ping replies back from R17 proving the control plane and data plane are setup correctly.

RP/0/0/CPU0:XR1#sh mrib vrf CORE route
Mon Dec 10 08:38:54.580 UTC

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, ME - MDT Encap, EID - Encap ID,
    MD - MDT Decap, MT - MDT Threshold Crossed, MH - MDT interface handle
    CD - Conditional Decap, MPLS - MPLS Decap, EX - Extranet
    MoFE - MoFRR Enabled, MoFS - MoFRR State, MoFP - MoFRR Primary
    MoFB - MoFRR Backup, RPFID - RPF ID Set, X - VXLAN
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, MT - MDT Threshold Crossed,
    MA - Data MDT Assigned, LMI - mLDP MDT Interface, TMI - P2MP-TE MDT Interface
    IRMI - IR MDT Interface

(*,224.0.0.0/4) RPF nbr: 192.0.2.1 Flags: C RPF P
  Up: 17:11:34

(*,224.0.0.0/24) Flags: D P
  Up: 17:22:42

(*,224.0.1.39) Flags: S P
  Up: 17:22:42

(*,224.0.1.40) Flags: S P
  Up: 17:22:42
  Outgoing Interface List
    GigabitEthernet0/0/0/0.204 Flags: II LI, Up: 17:22:32

(100.64.204.16,224.1.1.2) RPF nbr: 100.64.204.16 Flags: RPF
  Up: 00:00:06
  Incoming Interface List
    mdtCORE Flags: A MI, Up: 00:00:06

(192.0.2.16,224.1.1.2) RPF nbr: 100.64.204.16 Flags: RPF
  Up: 00:00:04
  Incoming Interface List
    GigabitEthernet0/0/0/0.204 Flags: A, Up: 00:00:04
  Outgoing Interface List
    mdtCORE Flags: F NS MI, Up: 00:00:04

(*,232.0.0.0/8) Flags: D P
  Up: 17:22:42

We see the VRF MRIB route table has now been populated with the (S, G) entries for the source.

R1#sh ip mroute vrf MVPN
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, E - Extranet,
       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, 
       G - Received BGP C-Mroute, g - Sent BGP C-Mroute, 
       N - Received BGP Shared-Tree Prune, n - BGP C-Mroute suppressed, 
       Q - Received BGP S-A Route, q - Sent BGP S-A Route, 
       V - RD & Vector, v - Vector, p - PIM Joins on route, 
       x - VxLAN group
Outgoing interface flags: H - Hardware switched, A - Assert winner, p - PIM Join
 Timers: Uptime/Expires
 Interface state: Interface, Next-Hop or VCD, State/Mode

(*, 224.1.1.1), 17:11:18/00:03:09, RP 192.0.2.15, flags: S
  Incoming interface: GigabitEthernet1.201, RPF nbr 100.64.201.15
  Outgoing interface list:
    Tunnel0, Forward/Sparse, 17:11:18/00:03:09

(*, 224.1.1.2), 17:04:41/00:03:28, RP 192.0.2.15, flags: S
  Incoming interface: GigabitEthernet1.201, RPF nbr 100.64.201.15
  Outgoing interface list:
    Tunnel0, Forward/Sparse, 16:51:51/00:03:28

(192.0.2.16, 224.1.1.2), 00:00:50/00:02:09, flags: 
  Incoming interface: Tunnel0, RPF nbr 192.0.2.21
  Outgoing interface list:
    GigabitEthernet1.201, Forward/Sparse, 00:00:50/00:02:39

(*, 224.0.1.40), 18:35:16/00:02:45, RP 0.0.0.0, flags: DPL
  Incoming interface: Null, RPF nbr 0.0.0.0
  Outgoing interface list: Null

R1 shows the same thing in the VRF mroute table. We see the (S, G) entry and that the RPF neighbor is via tunnel 0 source by XR1s loopback IP adress.

R15 - RP of the CE network - debug ip pim
PIM(0): Received v2 Register on GigabitEthernet1.201 from 100.64.204.16
     for 100.64.204.16, group 224.1.1.2
PIM(0): Check RP 192.0.2.15 into the (*, 224.1.1.2) entry
PIM(0): Adding register decap tunnel (Tunnel1) as accepting interface of (*, 224.1.1.2).
PIM(0): Adding register decap tunnel (Tunnel1) as accepting interface of (100.64.204.16, 224.1.1.2).
PIM(0): Send v2 Register-Stop to 100.64.204.16 for 100.64.204.16, group 224.1.1.2

We debug R15 to see what it sees. When R16 sent pings to 224.1.1.2, there weren't receivers requesting feeds yet, so R15 simply sees the register message from R16 and the associate register stop sent back to the sender. This builds the (S, G) entry on the RP.

R3 - PE
PIM(1): Received v2 Join/Prune on GigabitEthernet1.211 from 100.64.211.17, to us
PIM(1): Join-list: (*, 224.1.1.2), RPT-bit set, WC-bit set, S-bit set
PIM(1): Check RP 192.0.2.15 into the (*, 224.1.1.2) entry
PIM(1): Building Triggered (*,G) Join / (S,G,RP-bit) Prune message for 224.1.1.2
PIM(1): Add GigabitEthernet1.211/100.64.211.17 to (*, 224.1.1.2), Forward state, by PIM *G Join
PIM(1): Building Triggered (*,G) Join / (S,G,RP-bit) Prune message for 224.1.1.2
PIM(1): Upstream mode for (*, 224.1.1.2) changed from 0 to 1
PIM(1): Insert (*,224.1.1.2) join in nbr 192.0.2.1's queue
PIM(1): Building Join/Prune packet for nbr 192.0.2.1
PIM(1):  Adding v2 (192.0.2.15/32, 224.1.1.2), WC-bit, RPT-bit, S-bit Join
PIM(1): Send v2 join/prune to 192.0.2.1 (Tunnel1)

R17 now joins the 224.1.1.2 group sending a PIM join to R3 who enabled PIM debugs and the PIM join is sent to R15, 192.0.2.15 to add an (*, G) join. NOw R15 has a (S, G) and (*, G) entry and can now join the source based tree, (S, G), to the shared tree, (*, G) and multicast traffic begin flowing. We can tell this is still the shared tree since the (S, G) is (192.0.2.15/32, 224.1.1.2).

PIM(0): Received v2 Register on GigabitEthernet1.201 from 100.64.204.16
     for 100.64.204.16, group 224.1.1.2
PIM(0): Adding register decap tunnel (Tunnel1) as accepting interface of (100.64.204.16, 224.1.1.2).
PIM(0): Received v2 Register on GigabitEthernet1.201 from 100.64.204.16
     for 100.64.204.16, group 224.1.1.2
PIM(0): Received v2 Register on GigabitEthernet1.201 from 100.64.204.16
     for 192.0.2.16, group 224.1.1.2
PIM(0): Adding register decap tunnel (Tunnel1) as accepting interface of (192.0.2.16, 224.1.1.2).
PIM(0): Insert (192.0.2.16,224.1.1.2) join in nbr 100.64.201.1's queue
PIM(0): Building Join/Prune packet for nbr 100.64.201.1
PIM(0):  Adding v2 (192.0.2.16/32, 224.1.1.2), S-bit Join
PIM(0): Send v2 join/prune to 100.64.201.1 (GigabitEthernet1.201)

We see the S-bit set, which is the switchover from the shared tree to the source based tree. This shows us that the traffic from the source will flow directly to the receiver. We can tell the SPT is now built as the entry (192.0.2.15/32, 224.1.1.2) is now (192.0.2.16/32, 224.1.1.2).

Thanks for stopping by!
Rob Riker, CCIE #50693