Profile 27
Load top1.vpnv4v6.srv6.configured.cfg
#IOS-XR
configure
load top1.tree-sid.init.cfg
commit replace
y
#IOS-XE
config replace flash:top1.tree-sid.init.cfg
Y
The CUSTOMER L3VPN is already fully setup. PIM is already enabled on the PE-CE links. CSR3 and CSR4 have joined SSM group (1.1.1.1, 232.1.1.1).
Configure XR9 as PCE for XR5-XR8. Use static Tree-SID to achieve mVPN forwarding for the CUSTOMER VRF.
Answer
#XR1-10
router isis 1
add ipv4 uni
router-id lo0
#XR9
pce
address ipv4 10.0.0.9
!
router isis 1
distribute link-state
#XR1-8
segment-routing traffic-eng
pcc
pce address ipv4 10.0.0.9
#XR7-8 (Leafs)
route-policy USE_SR_TREESID
set core-tree sr-p2mp
end-policy
!
multicast-routing
address-family ipv4
interface Loopback0
enable
!
vrf CUSTOMER
address-family ipv4
mdt source Loopback0
static sr-policy Tree-SID-Pol1
mdt static segment-routing
!
router pim
vrf CUSTOMER
address-family ipv4
rpf topology route-policy USE_SR_TREESID
#XR5 (Root)
route-policy USE_SR_TREESID
set core-tree sr-p2mp
end-policy
!
multicast-routing
address-family ipv4
interface Loopback0
enable
!
vrf CUSTOMER
address-family ipv4
mdt source Loopback0
mdt static segment-routing
!
router pim
vrf CUSTOMER
address-family ipv4
rpf topology route-policy USE_SR_TREESID
sr-p2mp-policy Tree-SID-Pol1 static-group 232.1.1.1 1.1.1.1
#XR9
pce
segment-routing
traffic-eng
p2mp
endpoint-set R7-R8
ipv4 10.0.0.7
ipv4 10.0.0.8
!
policy Tree-SID-Pol1
source ipv4 10.0.0.5
color 100 endpoint-set R7-R8
treesid mpls 17001
candidate-paths pref 100 dynamic metric type igp
Explanation
Tree-SID is a new option for building the multicast distribution tree in the SP core. Previously, you would run SR in the core but need to also use mLDP, RSVP-TE, or P-PIM to achieve mVPN tree building. Now with Tree-SID, you can eliminate these protocols and use SR for the mVPN tree as well.
Tree-SID requires the use of an SR-PCE, because the PCE needs to program the LFIB replication entries on all nodes in the tree. In RSVP-TE you do hop-by-hop signaling. In mLDP, you also do a form of hop-by-hop signaling by advertising the mLDP FEC and an associated upstream/downstream label. In SR, we do not have any mechanism like this. Also, a simple stack of labels is not suitable as you cannot signal replication that way. So a PCE needs to be used to install the state on all nodes.
Keep in mind that when using SR-PCE for Tree-SID, all nodes in the network that will be part of the mVPN tree must have a session with the PCE. Not just the PEs. This is because the PCE needs to program the state on P routers involved in the mVPN tree as well.
First we configure SR-PCE as normal. The PCE needs to receive the IGP feed somehow (distribute link-state or BGP-LS), and all routers must configure a PCEP session with the PCE. Additionally, this init file is missing the router ID necessary for the SR-TED, so that is added to all routers as well.
#XR1-10
router isis 1
add ipv4 uni
router-id lo0
#XR9
pce
address ipv4 10.0.0.9
!
router isis 1
distribute link-state
#XR1-8
segment-routing traffic-eng
pcc
pce address ipv4 10.0.0.9
In profile 27, we use a static Tree-SID. This is configured manually, so this typically would not be used much in the real world. Also keep in mind that this only allows for one PCE to be used. (You cannot have PCE redundancy).
To start, we enable mVPN on the leaf PEs. Remember that we are not running BGP ipv4/mvpn. Instead, we enable mVPN using static sr-p2mp. The name of the static SR policy must match exactly on all PEs and the PCE. In this lab, we use the name “Tree-SID-Pol1.”
#XR7-8 (Leafs)
route-policy USE_SR_TREESID
set core-tree sr-p2mp
end-policy
!
multicast-routing
address-family ipv4
interface Loopback0
enable
!
vrf CUSTOMER
address-family ipv4
mdt source Loopback0
static sr-policy Tree-SID-Pol1
mdt static segment-routing
!
router pim
vrf CUSTOMER
address-family ipv4
rpf topology route-policy USE_SR_TREESID
The root has a slightly different configuration. This is the ingress PE, which will forward the traffic down the tree. It does not set the static sr-policy under the multicast VRF config. Instead, it sets the sr-p2mp-policy under router pim. We configure the static group (1.1.1.1, 232.1.1.1) to use this SR-P2MP static policy. This means that customer traffic sourced from 1.1.1.1, destined to group 232.1.1.1, will be forwarded down the Tree-SID-Pol1 SR-P2MP tree.
#XR5 (Root)
route-policy USE_SR_TREESID
set core-tree sr-p2mp
end-policy
!
multicast-routing
address-family ipv4
interface Loopback0
enable
!
vrf CUSTOMER
address-family ipv4
mdt source Loopback0
mdt static segment-routing
!
router pim
vrf CUSTOMER
address-family ipv4
rpf topology route-policy USE_SR_TREESID
sr-p2mp-policy Tree-SID-Pol1 static-group 232.1.1.1 1.1.1.1
Finally, the PCE defines the static SR Tree-SID. This contains a list of the endpoints (R7 and R8) and defines a policy that uses a particular Tree-SID label value. The policy can use different metric types and link affinities just like normal SR policies.
#XR9
pce
segment-routing
traffic-eng
p2mp
endpoint-set R7-R8
ipv4 10.0.0.7
ipv4 10.0.0.8
!
policy Tree-SID-Pol1
source ipv4 10.0.0.5
color 100 endpoint-set R7-R8
treesid mpls 17001
candidate-paths pref 100 dynamic metric type igp
Note that at this point, you will likely see ROUTING-FIB-3-PD_FAIL messages. This seems to be an issue with both mLDP and SR Tree-SID on XRv9K. I decided to silence logging to the console.
#XR1-10
logging console disable
On the PCE we can verify the p2mp policy as follows:

Above, the output seems to be ordered as transit nodes first (R3 and R1), followed by ingress (R5), followed by egress (R7 and R8). Notice that R3 accepts incoming label 17001 and replicates the traffic to both R7 and R8.
A transit node also has this policy. This is why it is important that all routers have a PCEP session with the PCE.

Using the following command, we can see the SR-P2MP state on the PEs:


Tree-SID appears to use underlying mLDP internal functionality, which might explain why both mLDP and Tree-SID give an error on XRv9K. (It also does not work on XRd). Notice that the LFIB entry refers to “mLDP” even though this is SR Tree-SID.

Another way to see this is to use the show mrib mpls forwarding command:

Unfortunately the data plane does not actually work. XR5 shows that it will forward received traffic out the mdt interface, but the counters are not incrementing despite generating the traffic on CSR1.

A note on label allocation
The documentation says that the global Tree-SID label is specified from the SRLB range. So in our lab, it would probably be more proper to use a label in the 15XXX range.
Interestingly, there is a command to limit the range of labels that can be used for Tree-SID policies on the PCE. This is used for dynamically created p2mp policies via BGP mVPN, not for static policies. If you try to set the dynamic label range for a range that already contains a label used by an existing static policy, you will get the below error.
#XR9
pce
segment-routing
traffic-eng
p2mp
label-range min 15000 max 15999
!!% Invalid argument: A Static/REST treesid is already configured in the range
Last updated