Inter-AS MPLS MVPN - Part 2 - Option C With Three Labels and Recursive FEC
Inter-AS MPLS MVPN - Part 2 - Option C With Three Labels and Recursive FEC
In the previous post I described MPLS MVPN using inter-AS Option C, however I purposely
redistributed the loopbacks of the PE routers from BGP into the IGP in both AS’s so core P
routers were able perform a unicast route lookup on the root node for multipoint LSPs; because
of this, mLDP signaling was successful through both provider networks and a core tree could be
built. This is referred to as a non-segmented MVPN.
Another option for implementing option C is to use labelled IPv4 unicast sessions between the
PEs and the ASBRs (or most likely through a route reflector). In a BGP-free core, the P routers
have no knowledge of the PE routers in the other AS and so a three-label stack is used to forward
traffic across the Ingress PE’s AS based on the top label identifying the Egress ASBR.
This enables unicast VPNs but it does not overcome the problem of a P router performing a
unicast RIB lookup on a multipoint LSP root node address.
In this post I will show a feature known as recursive FEC as described in RFC 6512.
I will use the network shown in the previous post. I have also replaced R8 which was an IOS
router to XR8 running IOS-XR because IOS does not support recursive FECs. We create BGP
IPv4 labelled unicast sessions between the ASBRs an the PE routers within AS200 to enable
sending of labels with BGP routes.
In IOS-XR, the allocate-label command is used to control which BGP routes are assigned labels.
This can be controlled with an route policy or we can take the easy way and allocate labels to all
routes.
Once this is established, we confirm that we are receiving BGP IPv4 routes with labels.
Once we have the multihop EBGP VPNv4 sessions between the PE routers established and an
end-to-end LSP, we should see that a three-label stack is used for VPN traffic across the
providers.
1. The bottom of stack label identifies the VPN route at the Egress PE router. It is assigned
(in this case) by R1 over the EBGP VPNv4 session
2. The middle of stack label identifies the Egress PE router R1. It is assigned by R9 over the
labelled IPv4 unicast sessision
3. The top of stack label identifies the Egress ASBR router in AS200. It is assigned by LDP
using using label bindings for the unicast MP2P FEC.
Our MDT and BGP MVPN configurations have not changed from the previous posts, so lets
make sure that we are still receiving MVPN autodiscovery routes from R1.
As we did not configure R8/XR8 MVPN autodiscovery in the last post, we will configure XR8
to originate an Type 1 BGP autodiscovery for the MVPN that does not have the NO_EXPORT
community as follows.
We can see that R8 is originating a Type 1 MVPN autodiscovery route and that is received by R1
and imported into the VRF
To reiterate, make sure you configure “inter-as” under the BGP autodiscovery features otherwise
the Type 1 will not be sent to R1 because of the NO_EXPORT community.
Going back to XR8 now, we see that mLDP state has been created in the LIB for the P2MP core
tree rooted at R1.
The upstream neighbor here is R12, so the mLDP label bindings for this P2MP FEC will be sent
to R12, which we can see as follows.
Now this is where the problem is because R12 has no unicast route to the root node for this LSP.
We can see that because there is no entries in the upstream clients section of the LIB entry. If
there is no unicast route to the root node, then the mLDP signaling will not go any further
upstream.
The solution to this is outlined in RFC 6512 and referred to in IOS and IOS-XR as recursive
FEC. With recursive FEC, one FEC is encoded within the opaque value of another FEC. The
outer FEC contains the IP address of the ASBR as the root node so that the mLDP signaling
works even when the P router has no unicast route to the Ingress PE router. In the opaque value
of the outer FEC encoded is the inner FEC which contains the the Ingress PE router as the root
node. We enable recursive FEC under the mLDP process as follows. This configuration only
required on the Egress PE router; the ASBRs interpreting the recursive FECs do not need to have
this configuration.
RP/0/0/CPU0:XR8(config)#mpls ldp
RP/0/0/CPU0:XR8(config-ldp)#mldp
RP/0/0/CPU0:XR8(config-ldp-mldp)#address-family ipv4
RP/0/0/CPU0:XR8(config-ldp-mldp-af)#recursive-fec
Once this is enabled, XR8 will encode the recursive FEC such that the outer FEC has the root
address of XR11, the BGP next hop to the Ingress PE router 1.1.1.1. We can see the recursive
FEC as follows. Note that to ensure that traffic leaves AS200 through XR11 (which supports
recursive FEC), I have configured XR11 to set the LOCAL_PREF of all routes received from
AS100 to 500.
The first entry in the mLDP LIB is the inner FEC which contains R1 as the root node for the
P2MP LSP. In the inner FEC is where the outer FEC recurses to because the outer FEC must be
used for mLDP signaling in the core towards the ASBR(s) in the local AS. In the outer FEC the
ASBR is listed as the root node, who must interpret the recursive FEC and keep it moving
towards the actual LSP root.
The mLDP signaling now travels towards XR11 through AS200 to R13. We can see the mLDP
LIB for R13 as follows.
Note that the opaque value cant be decoded on an IOS router because it doesn’t support recursive
FEC and the RFC states that P routers must not attempt to interpret recursive FECs. This is fine
as long as the root node listed in the outer FEC supports the recursive FEC feature and can
intepret the opaque value. Because R13 can perform a unicast route lookup on the root node
address in the outer FEC, the mLDP signaling can continue and the mLDP LIB entry can be
populated with the correct upstream and downstream interface and labels.
Now moving to XR11 who is the preferred AS200 ASBR for traffic going to AS100, we can see
the mLDP bindings for this recursive FEC.
XR11 interprets the outer FEC (the one in the LIB with the FEC root set to the 11.11.11.11) as
recursive for the root node R1. It installs downstream state for the LSP going down to R13, and
then performs a unicast route lookup on R1 (1.1.1.1) to identify the BGP next hop, which is R6
(6.11.0.6). It creates another recursive FEC with the outer FEC listing XR6 as the temporary root
node and encodes the inner FEC within opaque value (which has 1.1.1.1 set as the root address).
No additional configuration was required here to enable recursive FEC; the LDP configuration
on XR11 looks like this.
XR11 signals to XR6 the label mapping now. The outer FEC lists XR6 as the root node, so it
must interpret the recursive FEC to identify the root node address in the inner FEC, which is
1.1.1.1. XR6 performs a unicast route lookup on 1.1.1.1 and can see that the address is known
via IGP so no recursion is necessary (as the assumption here is that the P routers have a unicast
route to R1). We can see that in the mLDP LIB as follows.
The bottom LSP (LSM-ID 0x00007) is the recursive one, listing XR6 as the root node in the
outer FEC and R1 in the inner FEC. This LSP also lists the interprovider link in the downstream
clients so that multicast traffic for this LSP will flow down this link. XR6 also creates a normal
FEC (i.e. non-recursive) which lists R1 as the root node, and has the recursive FEC listed in the
downstream clients because that is where the downstream replication information is contained.
Now on R1 we can see the that we are the root of the P2MP LSP so there are no upstream
clients; only replication clients.
The mLDP signaling has gone from XR8 to R1 as follows.
Now that the signaling has completed and label switching can occur from the P2MP LSP root to
the Egress PE routers, we should be able to multicast traffic over it.
R40(config)#interface GigabitEthernet1.1240
R40(config-subif)#ip igmp join-group 232.10.10.10 source 100.10.10.10
This creates state on MRIB state XR8 and and because we are using a BGP overlay, XR8
originates a Type 7 route to signal the join (see my previous posts for C-multicast signaling)
R1 will receive the MVPN route, import it into the MVPN VRF, and then creates MRIB state for
the (S,G), listing the PE-CE interface (going towards the source) as the incoming interface and
the MDT virtual interface in the OIL
Now we should be able to send traffic from the source to the receivers.
1. Recursive FEC is only required when the core routers do not have unicast route to the
root node, which is true in our case because we did not redistribute the BGP routes into
IGP in AS200.
2. Classis IOS does not support recursive FECs, so the Egress PE router and the ASBRs
must be IOS-XR to interpret them
3. The “recursive-fec” command only needs to be configured on the Egress PE route