Profile 13 w/ Configuration Knobs

Load basic.startup.config.with.cpim.cfg

#IOS-XE
config replace flash:basic.startup.config.with.cpim.cfg
Y

#IOS-XR
configure
load bootflash:basic.startup.config.with.cpim.cfg
commit replace
y

The basic IP addresses, L3VPN, and C-PIM between the PEs and CEs is pre-configured.

  • Configure multicast VPN using mLDP in the core using a MP2MP default tree.

  • You cannot use PIM in the core.

  • CE1 is predefined as the RP in the C-PIM via BSR.

  • PEs cannot form C-PIM adjacencies between each other. Instead use BGP for the overlay.

Set the following configuration knobs:

  • Use S-PMSI P2MP tunnels for C-(S, G) flows, and immediately switchover to them

  • A C-S ingress PE should wait 60 seconds before pruning (S, G) state after the last type 7 route is removed

  • The RP’s ingress PE should wait 45 seconds before sending an RPT-bit (S, G) prune to the RP after receiving a type 5 route

See answer below (scroll down).

Answer

#PE1
router bgp 100
 add ipv4 mvpn
  neighbor 10.10.10.10 activate
!
vrf def CUSTOMER
 vpn id 100:1
 add ipv4
  mdt auto-discovery mldp
  mdt default mpls mldp 20.20.20.20
  mdt data mpls mldp 100 immediate-switch
  mdt overlay use-bgp
  mdt overlay bgp shared-tree-prune-delay 45
  mdt overlay bgp source-tree-prune-delay 60

#PE2
router bgp 100
 add ipv4 mvpn
  neighbor 10.10.10.10 activate
!
vrf def CUSTOMER
 vpn id 100:1
 add ipv4
  mdt auto-discovery mldp
  mdt default mpls mldp 20.20.20.20
  mdt data mpls mldp 100 immediate-switch
  mdt overlay use-bgp
  mdt overlay bgp shared-tree-prune-delay 45
  mdt overlay bgp source-tree-prune-delay 60

#P1
mpls ldp mldp add ipv4
!
router bgp 100
 add ipv4 mvpn
 !
 neighbor-group IBGP
  add ipv4 mvpn
   route-reflector-client

#P2
mpls ldp mldp add ipv4

#PE3
mpls ldp mldp add ipv4
!
router bgp 100
 mvpn
 add ipv4 mvpn
 neighbor 10.10.10.10
  add ipv4 mvpn
 vrf CUSTOMER
  add ipv4 mvpn
!
vrf CUSTOMER
 vpn id 100:1
!
multicast-routing add ipv4 int lo0 en
multicast-routing vrf CUSTOMER add ipv4
 mdt so lo0
 mdt default mldp ipv4 20.20.20.20
 mdt data mldp 100 immediate-switch
 bgp auto-discovery mldp
!
route-policy USE_MLDP
 set core-tree mldp-default
end-policy
!
router pim vrf CUSTOMER add ipv4
 rpf topology route-policy USE_MLDP
 mdt c-multicast-routing bgp
  shared-tree-prune-delay 45
  source-tree-prune-delay 60

Explanation

This lab tests your understanding of a few configuration knobs. By default, the S-PMSI switchover waits a few seconds to allow PEs to join the data MDT. To configure the ingress PE to immediately switchover to the data MDT we can use the following keyword:

#IOS-XE
vrf def CUSTOMER
 add ipv4
  mdt data mpls mldp 100 immediate-switch

#IOS-XR
multicast-routing vrf CUSTOMER add ipv4
 mdt data mldp 100 immediate-switch

We can test this out by joining an SSM group on C3 and pinging this from C2. This removes the PIM register and switchover process with PIM-SM.

#PE2
ip pim vrf CUSTOMER ssm default

#CE2
ip pim ssm default

#CE3
ip pim ssm default
!
int Gi3
 ip igmp ver 3

#C3
int gi0/1
 ip igmp ver 3
 ip igmp join-group 232.3.3.3 source 10.1.2.10

We see no loss of traffic with this. This appears to be because PE2 signals the S-PMSI route simply upon the (S, G) state from PIM-SSM. So when traffic begins, PE2 immediately switches to the P2MP mLDP tree, which PE3 has already joined.

For PIM-SM this process results in several lost packets. This is because the S-PMSI route cannot be pre-signaled ahead of time. The PIM Register process takes place and SPT switchover takes place. C2 doesn’t advertise the type 3 route for several seconds. During this time, packets are flowing on the default MDT. However, PE3, due to the immediate-switch keyword on its own data MDT defintion, appears to reject these packets for arriving on the default MDT instead of a data MDT. I verified that if I remove the data mdt config on PE3, then there is no packet loss.

#C3
int gi0/1
 ip igmp join-group 239.0.0.3

Prune Delays

Next we look at prune delays. By default, the PE connected to the RP will send a RPT-bit (S, G) prune towards the RP upon learning a type 5 SA route. We can delay this using the following command:

#IOS-XE
vrf def CUSTOMER
 add ipv4
  mdt overlay bgp shared-tree-prune-delay 45

#IOS-XR
router pim vrf CUSTOMER add ipv4
 mdt c-multicast-routing bgp
  shared-tree-prune-delay 45

However, this doesn’t appear to work properly on IOS-XE. When a source goes active, PE1 still immediately sends a prune towards the RP. Perhaps this is because the RPT-bit (S, G) prune is happening as a result of (S, G) state being built on the PE, because the RP itself joins a (S, G) tree.

We can also set the source-tree prune delay. This controls how long a PE will wait before sending a (S, G) prune after a type 7 route is withdrawn.

#IOS-XE
vrf def CUSTOMER
 add ipv4
  mdt overlay bgp source-tree-prune-delay 60

#IOS-XR
router pim vrf CUSTOMER add ipv4
 mdt c-multicast-routing bgp
  source-tree-prune-delay 60

We can test this by leaving an SSM group on C3 that is rooted at C2. PE2 should wait 60 seconds before sending a (S, G) Prune to CE2. However, I see that PE2 sends the prune immediately, so this also does not appear to be functional on CSR1000v.

If we do it the other way around, with C2 joining a SSM group rooted at C3, we see that IOS-XR also sends the Prune immediately to CE3.

Last updated