Description

This article explains the behavior observed in the VPLS/EVPN instance forwarding table.

Symptoms

In the topology below, R1, R2, R3 and R4 are the core-routers. R5 and R6 are the Customer end devices. In R1 and R4, there is one VPLS instance called VPLS_TEST and one EVPN instance called EVPN_TEST.

R1-R2=10.1.1.0/30
R2-R3=10.1.1.4/30
R3-R4=10.1.1.8/30
R4-R1=10.1.1.12/30

Two LSPs are created in the core:
  • LSP_1 = Strict hop to R4
  • LSP_2 = Strict hop to R4 via R2 and R3.


Instances configured on R1:

VPLS:
set routing-instances VPLS_TEST instance-type vpls
set routing-instances VPLS_TEST interface ge-0/0/4.707
set routing-instances VPLS_TEST vrf-target target:65000:1
set routing-instances VPLS_TEST protocols vpls no-tunnel-services
set routing-instances VPLS_TEST protocols vpls site SITEA site-identifier 1
set routing-instances VPLS_TEST protocols vpls site SITEA interface ge-0/0/4.707​
EVPN:
set routing-instances EVPN_TEST description "To-R4"
set routing-instances EVPN_TEST instance-type evpn
set routing-instances EVPN_TEST vlan-id 3057
set routing-instances EVPN_TEST interface ge-0/0/3.3057
set routing-instances EVPN_TEST vrf-target target:4787:3057
set routing-instances EVPN_TEST protocols evpn interface ge-0/0/3.3057​


VPLS/EVPN instances are configured the same way on R4. When checking the routing table of each instance, both the active and best path LSPs are seen as below:

user@MX# run show route table VPLS_TEST.l2vpn.0 

VPLS_TEST.l2vpn.0: 2 destinations, 2 routes (2 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

121.100.5.97:11:2:1/96                
                   *[BGP/170] 00:05:13, localpref 100, from 121.100.5.97
                      AS path: I, validation-state: unverified
                      to 10.1.1.2 via ae3.0, label-switched-path LSP_2
                    > to 10.1.1.13 via ge-0/0/2.181, label-switched-path LSP_1
121.100.5.112:11:1:1/96                
                   *[L2VPN/170/-101] 00:05:25, metric2 1
                      Indirect

user@MX# run show route table EVPN_TEST.evpn.0    

EVPN_TEST.evpn.0: 4 destinations, 6 routes (4 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

2:121.100.5.97:9::3057::56:68:a5:d1:05:c4/304 MAC/IP        
                   *[BGP/170] 00:00:03, localpref 100, from 121.100.5.97
                      AS path: I, validation-state: unverified
                    > to 10.1.1.2 via ae3.0, label-switched-path LSP_2
                      to 10.1.1.13 via ge-0/0/2.181, label-switched-path LSP_1
2:121.100.5.112:9::3057::56:68:a5:d1:06:fa/304 MAC/IP        
                   *[EVPN/170] 00:00:04​


However, when checking the forwarding table for each instance, we see load balancing i.e ECMP without per packet load balancing configured:

user@MX# run show route forwarding-table family vpls destination 56:68:a5:d1:05:c5    
Routing table: VPLS_TEST.vpls
VPLS:
Enabled protocols: ACKed by all peers, 
Destination        Type RtRef Next hop           Type Index    NhRef Netif
56:68:a5:d1:05:c5/48 user     0                  indr  1048577     5
                                                 ulst  1048574     2
                              10.1.1.2      Push 262145, Push 299840(top)      631     2 ae3.0
                              10.1.1.13     Push 262145      634     2 ge-0/0/2.181​

user@MX# run show route forwarding-table vpn EVPN_TEST 
Routing table: EVPN_TEST.evpn
EVPN:
Enabled protocols: Single VLAN, ACKed by all peers, EVPN, ARP/NDP suppression, 
Destination        Type RtRef Next hop           Type Index    NhRef Netif
default            perm     0                    dscd      591     1
56:68:a5:d1:05:c4/48 user     0                 chain 15695870     2
56:68:a5:d1:06:fa/48 user     0                  ucst      596     4 ge-0/0/3.3057
0x30006/51         user     0                    comp      645     2
ge-0/0/3.3057      intf     0                    ucst      596     4 ge-0/0/3.3057
0x30004/51         user     0                    comp      618     2
0x30002/51         user     0                    comp      615     2
                   intf     0                    indr  1048581     3
                                                 ulst  1048580     2
                              10.1.1.2      Push 299808, Push 299840(top)      609     2 ae3.0
                              10.1.1.13     Push 299808      630     2 ge-0/0/2.181

Solution

This is the expected behavior for the VPLS/EVPN (L2 services). Whereas for the L3VPN, this is not the behavior. The active path chosen will be show in the forwarding-table.

L3VPN_TEST.inet.0: 2 destinations, 3 routes (2 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

10.10.10.10/32     *[Static/5] 00:00:18
                      Receive
172.16.1.1/32      *[BGP/170] 00:00:18, localpref 100, from 121.100.5.97
                      AS path: I, validation-state: unverified
                      to 10.1.1.2 via ae3.0, label-switched-path LSP_2
                    > to 10.1.1.13 via ge-0/0/2.181, label-switched-path LSP_1
                    
user@MX# run show route forwarding-table destination 172.16.1.1 table L3VPN_TEST           
Routing table: L3VPN_TEST.inet
Internet:
Enabled protocols: Bridging, All VLANs, 
Destination        Type RtRef Next hop           Type Index    NhRef Netif
172.16.1.1/32      user     0                    indr  1048579     2
                              10.1.1.13     Push 314800      678     2 ge-0/0/2.181