Hi Aman, Great! Thanks a lot! Hmmm... more things seem to be required than I guessed...
> 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. Let me clear my head, first. You mean the current GoBGP "additionally" need to install two route; 1. forwarding MPLS labeled traffic to VRF; $ ip -f mpls route show ...<snip> 80 dev blue 2. pushing traffic from ECs to MPLS backbone; $ ip route show vrf blue ...<snip> 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 For the "1." route, I guess we can install it when creating VRF, but not yet implemented. For the "2." route, related to the latter point you mentioned, can we specify them like the following? $ ip route show vrf blue ...<snip> 172.16.0.1 encap mpls 80 via 192.168.10.3 dev ens8 192.168.1.0/24 encap mpls 80 via 192.168.10.3 dev ens8 In other words, I want to avoid resolving the outer label and MPLS's next-hop from the BGP's next-hop (if we can). I guess it helps the implementation simple. I took a (little) look at FRRouting implementation, bgpd does not seem to resolve the outer label and MPLS's next-hop from the BGP's next-hop, because it does not call "*_NEXTHOP_LOOKUP" messages. Thanks, Iwase On 2018年02月13日 06:11, SHAIKH, AMAN (AMAN) wrote:
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
------------------------------------------------------------------------------ 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