Hi Iwase

Looks like you have submitted the MPLS range allocation from FRRouting as a 
pull request (https://github.com/osrg/gobgp/pull/1587). That's great. Let's 
hope it gets accepted.

As I'd promised here's a description of routes I expect in Linux kernel 
forwarding table with BGP/MPLS VPNs:

I'll focus on one PE which receives two routes from its adjacent CE which are 
installed in "blue" VRF:

[ashaikh@vsp-vpe-west ~]$ gobgp vrf blue rib
   Network              Next Hop             AS_PATH              Age        
Attrs
   ....<snip>....
   172.16.0.2/32        10.200.0.2           65001                00:49:37   
[{Origin: i} {Med: 0}]
   192.168.0.0/24       10.200.0.2           65001                00:49:37   
[{Origin: i} {Med: 0}]
   ...<snip>...

Routes 172.16.0.2/32 and 192.168.0.0/24 are received from the CE (next-hop 
10.200.0.2 is the interface address of the CE).
These two routes are installed in the Linux kernel's forwarding table for blue 
VRF:
[ashaikh@vsp-vpe-west ~]$ ip route show vrf blue unreachable default metric 
4278198272
10.200.0.0/16 dev ens6 proto kernel scope link src 10.200.0.3
172.16.0.2 via 10.200.0.2 dev ens6 proto zebra metric 20
192.168.0.0/24 via 10.200.0.2 dev ens6 proto zebra metric 20

These two routes are assigned MPLS label (for blue VRF) from the range obtained 
from FRR/Zebra (thanks to your patch), before they're sent to the 
route-reflector.

[ashaikh@vsp-vpe-west ~]$ gobgp global rib -a vpnv4
   Network              Labels     Next Hop             AS_PATH              
Age        Attrs
...<snip>...
*> 100:1:172.16.0.2/32  [80]       10.200.0.2           65001                
01:10:47   [{Origin: i} {Med: 0} {Extcomms: [100:1]}]
*> 100:1:192.168.0.0/24 [80]       10.200.0.2           65001                
01:10:47   [{Origin: i} {Med: 0} {Extcomms: [100:1]}]
...<snip>...

However, no route is installed in the default routing table for data-traffic 
coming in with label 80. I'd expect a route of the following form in the Linux 
forwarding table:
[ashaikh@vsp-vpe-west ~]$ ip -f mpls route show ...<snip>
80 dev blue

This route will allow vsp-vpe-west to accept any packets with MPLS label 80 
coming from the service provider backbone, pop the label and transfer the 
packet to the blue VRF forwarding table on the PE for subsequent forwarding to 
the CE.

Next, let us focus on routes received from another PE (via the backbone).

[ashaikh@vsp-vpe-west ~]$ gobgp global rib -a vpnv4
   Network              Labels     Next Hop             AS_PATH              
Age        Attrs
*> 100:1:172.16.0.1/32  [80]       192.168.10.3         65001                
01:11:33   [{Origin: i} {Med: 0} {LocalPref: 100} {Originator: 10.203.0.6} 
{ClusterList: [192.168.0.1]} {Extcomms: [100:1]}]
*> 100:1:172.16.0.2/32  [80]       10.200.0.2           65001                
01:15:30   [{Origin: i} {Med: 0} {Extcomms: [100:1]}]
*> 100:1:192.168.0.0/24 [80]       10.200.0.2           65001                
01:15:30   [{Origin: i} {Med: 0} {Extcomms: [100:1]}]
*> 100:1:192.168.1.0/24 [80]       192.168.10.3         65001                
01:11:33   [{Origin: i} {Med: 0} {LocalPref: 100} {Originator: 10.203.0.6} 
{ClusterList: [192.168.0.1]} {Extcomms: [100:1]}]

The first and fourth routes above are received from another PE. The next-hop 
(192.168.10.3) is the loopback of the remote PE which can be reached via an 
MPLS LSP as shown below. (Note that the remote PE (running GoBGP) has also 
assigned a label of 80 to both its routes.)

[ashaikh@vsp-vpe-west ~]$ ip route show
...<snip>...
192.168.10.3  encap mpls  19 via 10.202.0.8 dev ens8 proto zebra metric 20

These two routes are also imported into the blue VRF RIB by GoBGP:

[ashaikh@vsp-vpe-west ~]$ gobgp vrf blue rib
   Network              Next Hop             AS_PATH              Age        
Attrs
   172.16.0.1/32        192.168.10.3         65001                01:14:37   
[{Origin: i} {Med: 0} {LocalPref: 100} {Originator: 10.203.0.6} {ClusterList: 
[192.168.0.1]}]
   172.16.0.2/32        10.200.0.2           65001                01:18:34   
[{Origin: i} {Med: 0}]
   192.168.0.0/24       10.200.0.2           65001                01:18:34   
[{Origin: i} {Med: 0}]
   192.168.1.0/24       192.168.10.3         65001                01:14:37   
[{Origin: i} {Med: 0} {LocalPref: 100} {Originator: 10.203.0.6} {ClusterList: 
[192.168.0.1]}]

However, I don't see any routes in the Linux forwarding table of the blue VRF:

[ashaikh@vsp-vpe-west ~]$ ip route show vrf blue unreachable default metric 
4278198272
10.200.0.0/16 dev ens6 proto kernel scope link src 10.200.0.3
172.16.0.2 via 10.200.0.2 dev ens6 proto zebra metric 20
192.168.0.0/24 via 10.200.0.2 dev ens6 proto zebra metric 20

What I'd expect is something along these lines:

172.16.0.1 encap mpls  19/80 via 10.202.0.8 dev ens8
192.168.1.0/24 encap mpls  19/80 via 10.202.0.8 dev ens8

In other words, packets arriving from CE which are destined to one of these 
prefixes will be encapsulated with two MPLS labels: 80 (inner label derived 
from the VPNv4 route) and 19 (outer label derived from route for the next-hop 
192.168.10.3 in the default table). The IP next-hop of 10.202.0.8 is also 
derived from the route for the next-hop 192.168.10.3.

This is perhaps a complicated transaction with FRR/Zebra. GoBGP will have to do 
this transaction when it imports a VPNv4 route into a VRF. It will have to 
instruct FRR/Zebra with two things:
- Encapsulate the route with label associated with it.
- Resolve the BGP next-hop in the default forwarding table even though the 
route is installed in the blue VRF.

Let me know what your thoughts are.

thx
aman 
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
gobgp-devel mailing list
gobgp-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gobgp-devel

Reply via email to