Blog Viewer

EVPN MAC-VRF Validation on ACX7000

By Suneesh Babu posted 10-29-2022 09:33

  

JUNOS unified way of bringing up EVPN E-LAN using mac-vrf instance type supporting 6,000 instances on ACX7000 with 642,000 MAC scale.                  

Introduction

This article is the first in a series on ACX7k Metro Validation. We are covering the following features and their scale.

Layer-2 VPN Technologies provide multipoint services over IP/MPLS networks. The latest addition to this is Ethernet VPN (EVPN) where MAC learning is done via control plane compared to its predecessor Virtual Private LAN Service (VPLS) where MAC got learned via data plane.

RFC-7432 describes BGP MPLS Based Ethernet VPNs with three service types, namely VLAN-Based, VLAN-Bundle, and VLAN-Aware-Bundle. In VLAN-Based MAC-VRF, only one broadcast domain or VLAN is present. In VLAN-Bundle MAC-VRF multiple broadcast domains or VLANs are present, all of them bundled into a single bridge table. In VLAN-Aware Bundle MAC-VRF multiple broadcast domains are present, each having its own bridge table.

JUNOS supports EVPN with MPLS and VxLAN encapsulations. Its E-LAN configuration constructs differ across the platforms. The instance type “mac-vrf” is a unified way to configure EVPN E-LAN across entire Juniper platforms.

ACX7100-32C supports EVPN-MPLS E-LAN functionality with instance-type “mac-vrf”. In this test scenario, VLAN-Based and VLAN-Bundle service types of MAC VRF are covered for their scale with 22.2R1 Junos-EVO build. VLAN-Aware Bundle Support is on the roadmap.

6,000 EVPN MAC-VRF Instances were tested on ACX7100-32C with 3,000 VLAN-Based Service Types and 3,000 VLAN-Bundle Service Types. 642,000 MACs across 6,000 MAC-VRF Instances. The same scale is tested on ACX7100-48L as well as on ACX7509.

But the ACX7024 Scale is not covered in this article (same features but different scale are expected on this platform).

Please note that despite sharing the same ACX moniker, the ACX7000 products are different products than ACX500/710/1000/1100/2100/2200/4000/5000/5400/6000. They are powered by different Packet Forwarding Engines (PFE), and support different feature sets and scales.

The Key Performance Indicator (KPI) tested are:

EVPN MAC-VRF KPI Scale
Number of MAC-VRF instances 6,000
Number of VLAN-Based Service Types 3,000
Number of VLAN-Bundle Service Types 3,000
Number of VLANs 9,000
Number of Interfaces 9,000
Number of MACs 642,000
 

Metro EVPN Topology

Test topology consists of three routers:

  • PE1: ACX7100-32C
  • PE2: ACX7100-48L
  • P1: PTX10008.

CEs are simulated using a traffic generator and are connected to PEs using 5x 100G links. PEs are connected to the core using 8x 100G links, bundled in 2x LAGs of four links each.

The ACX7100-32C is the Device Under Test (DUT). The underlay transport used for testing is SR-MPLS with both OSPF and ISIS protocols individually. We also covered LDP as the underlay transport. The CE-bound interface configurations are of SP-Style (see glossary).

Figure 1: Test Topology

For this test, we configured 6,000 MAC-VRF instances:

  • 3,000 with VLAN-Based and the remaining VLAN-Bundle.
  • VLAN-Based instances have one VLAN and VLAN-Bundle have two VLANs.
  • 43 Local and 43 Remote hosts are learned per VLAN-Based MAC-VRF Instances
  • 64 Local and 64 Remote hosts are learned per VLAN-Bundle MAC-VRF Instances
  • Total: 642,000 hosts.

Bidirectional traffic in iMIX mode at 99.9% offer-load flows for all the EVPN services. A total of ~1Tbps traffic transits through the DUT.

Base Configuration

The IGP and BGP configurations require to bring up EVPN:

regress@PE1> show configuration protocols |display inheritance no-comments
bgp {
    group IBGP {
        type internal;
        local-address 12.1.1.1;
        family inet {
            unicast;
        }
        family evpn {
            signaling;
        }
        neighbor 12.1.1.3 {
            export nhself;
        }
    }
}
mpls {
    interface ae0.0;
    interface ae1.0;
}
ospf {
    source-packet-routing {
        node-segment ipv4-index 101;
        srgb start-label 45000 index-range 2000;
    }
    area 0.0.0.0 {
        interface lo0.0 {
            passive;
        }
        interface ae0.0 {
            interface-type p2p;
        }                               
        interface ae1.0 {
            interface-type p2p;
        }
    }
}

regress@PE1>

 

MAC-VRF Routing Instance Configuration

MAC-VRF with VLAN-Based service type is as follows:

regress@PE1> show configuration
interfaces {
    et-0/0/0 {
        flexible-vlan-tagging;
        encapsulation flexible-ethernet-services;
        unit 1 {
            encapsulation vlan-bridge;
            vlan-id 1;
        }
    }
}
routing-instances {
    METRO_MAC_VRF_1 {
        instance-type mac-vrf;
        protocols {
            evpn {
                encapsulation mpls;
                normalization;
                no-control-word;
            }
        }
        service-type vlan-based;
        interface et-0/0/0.1;
        route-distinguisher 12.1.1.1:1;
        vrf-target target:65000:1;
        vlans {
            MVRF_VBASED_VLAN_1 {
                vlan-id 1;
                interface et-0/0/0.1;
            }
        }
    }
}

 

MAC-VRF with VLAN-Bundle service type is as follows:

regress@PE1> show configuration
interfaces {
    et-0/0/2 {
        flexible-vlan-tagging;
        encapsulation flexible-ethernet-services;
        unit 1 {
            encapsulation vlan-bridge;
            vlan-id-list 1;
        }
    }
    et-0/0/3 {
        flexible-vlan-tagging;
        encapsulation flexible-ethernet-services;
        unit 1001 {
            encapsulation vlan-bridge;
            vlan-id-list 1001;
        }
    }
}
routing-instances {
    METRO_MAC_VRF_3001 {
        instance-type mac-vrf;
        protocols {
            evpn {
                encapsulation mpls;
                no-control-word;
            }
        }
        service-type vlan-bundle;
        interface et-0/0/2.1;
        interface et-0/0/3.1001;
        route-distinguisher 12.1.1.1:3001;
        vrf-target target:65000:3001;
        vlans {
            MVRF_VBUNDLE_VLAN_3001 {
                interface et-0/0/2.1;
                interface et-0/0/3.1001;
            }                        
        }
    }
}

 

MAC-VRF CE Bound Interface Schema

The five CE-bound 100G interfaces are logically split across the routing-instances as follows:

PE1 PE2 Port Service Type MAC-VRF VLAN Association Traffic Load
et-0/0/0 et-0/0/48:0 P1 VLAN-Based 1-1500 P1-1-1500 99.9%
et-0/0/1 et-0/0/48:1 P2 VLAN-Based 1501-3000 P2-1-1500 99.9%
et-0/0/2 et-0/0/48:2 P3 VLAN-Bundle 3001-4000 P3-1-1000,P4-1001-2000 99.9%
et-0/0/3 et-0/0/48:3 P4 VLAN-Bundle 4001-5000 P4-1-1000,P5-1001-2000 99.9%
et-0/0/4 et-0/0/49 P5 VLAN-Bundle 5001-6000 P5-1-1000,P3-1001-2000 99.9%

 

MAC-VRF Verification

The first step to verify the EVPN service is to make sure the PE devices are having BGP established with evpn-signalling. As shown below from PE1, BGP is in Established state for the Peer PE2(12.1.1.3) and bgp.evpn.0 table got populated with Type-2 MAC routes.

regress@PE1> show bgp summary |no-more
Threading mode: BGP I/O
Default eBGP mode: advertise - accept, receive - accept
Groups: 1 Peers: 1 Down peers: 0
Table          Tot Paths  Act Paths Suppressed    History Damp State    Pending
inet.0               
                      10          1          0          0          0          0
inet6.0              
                       0          0          0          0          0          0
bgp.evpn.0
                  327000     327000          0          0          0          0
inet6.3              
                       0          0          0          0          0          0
Peer                     AS      InPkt     OutPkt    OutQ   Flaps Last Up/Dwn State|#Active/Received/Accepted/Damped...
12.1.1.3              65000      38691     158803       0       1  1d 0:24:43 Establ
  inet.0: 1/10/10/0
  bgp.evpn.0: 327000/327000/327000/0
  METRO_MAC_VRF_1.evpn.0: 44/44/44/0
  METRO_MAC_VRF_2.evpn.0: 44/44/44/0
  METRO_MAC_VRF_3.evpn.0: 44/44/44/0
  ...
  METRO_MAC_VRF_2998.evpn.0: 44/44/44/0
  METRO_MAC_VRF_2999.evpn.0: 44/44/44/0
  METRO_MAC_VRF_3000.evpn.0: 44/44/44/0
  METRO_MAC_VRF_3001.evpn.0: 65/65/65/0
  METRO_MAC_VRF_3002.evpn.0: 65/65/65/0
  METRO_MAC_VRF_3003.evpn.0: 65/65/65/0
  ...
  METRO_MAC_VRF_5998.evpn.0: 65/65/65/0
  METRO_MAC_VRF_5999.evpn.0: 65/65/65/0
  METRO_MAC_VRF_6000.evpn.0: 65/65/65/0
  __default_evpn__.evpn.0: 0/0/0/0

regress@PE1>

 

The MAC-Table Summary shows the DUT learned the 642,000 host MAC addresses.

regress@PE1> show mac-vrf forwarding mac-table summary
Jun 29 05:14:19
Total dynamic and static MAC addresses learned globally : 642000
Configured static MAC addresses learned globally       : 0

 

VLAN Based MAC VRF Verification

As shown below, the interface et-0/0/0.1 is bound to MAC-VRF Instance METRO_MAC_VRF_1 with a single vlan (vlan-id 1). The interface is in Forwarding state:

regress@PE1> show mac-vrf forwarding interface et-0/0/0.1
Routing Instance Name : METRO_MAC_VRF_1
Logical Interface flags (DL - disable learning, AD - packet action drop,
                         LH - MAC limit hit, DN - interface down,
                         MMAS - Mac-move action shutdown,  AS - Autostate-exclude enabled,
                         SCTL - shutdown by Storm-control, MI - MAC+IP limit hit)

Logical         Vlan                   TAG   MAC    MAC+IP STP         Logical          Tagging
interface       members                      limit  limit  state       interface flags
et-0/0/0.1                                   0      0                                   tagged
                MVRF_VBASED_VLAN_1     1     1000001 0     Forwarding                   tagged

 

The VLAN Association of the METRO_MAC_VRF_1 instance is shown below.

regress@PE1> show vlans MVRF_VBASED_VLAN_1

Routing instance        VLAN name             Tag          Interfaces
METRO_MAC_VRF_1         MVRF_VBASED_VLAN_1    1
                                                           .local.202922*
                                                           et-0/0/0.1*

 

The extensive output of the METRO_MAC_VRF_1 instance captures the total number of MAC learned. The VLAN bound to instance can be found too.

regress@PE1> show evpn instance METRO_MAC_VRF_1 extensive
Instance: METRO_MAC_VRF_1
  Route Distinguisher: 12.1.1.1:1
  VLAN ID: 1
  Per-instance MAC route label: 16
  Duplicate MAC detection threshold: 5
  Duplicate MAC detection window: 180
  MAC database status                     Local  Remote
    MAC advertisements:                      43      43
    MAC+IP advertisements:                    0       0
    Default gateway MAC advertisements:       0       0
  Number of local interfaces: 2 (2 up)
    Interface name  ESI                            Mode             Status     AC-Role
    .local..51      00:00:00:00:00:00:00:00:00:00  single-homed     Up         Root
    et-0/0/0.1      00:00:00:00:00:00:00:00:00:00  single-homed     Up         Root
  Number of IRB interfaces: 0 (0 up)
  Number of protect interfaces: 0
  Number of bridge domains: 1
    VLAN  Domain-ID Intfs/up   IRB-intf  Mode            MAC-sync v4-SG-sync v6-SG-sync
    1                  1  1              Extended        Enabled  Disabled   Disabled
  Number of neighbors: 1
    Address               MAC    MAC+IP        AD        IM        ES Leaf-label Remote-DCI-Peer
    12.1.1.3               43         0         0         1         0
  Number of ethernet segments: 0
  SMET Forwarding: Disabled

 

The MAC-VRF Forwarding Table of METRO_MAC_VRF_1 instance captures both local and remote MAC addresses.

regress@PE1> show mac-vrf forwarding mac-table instance METRO_MAC_VRF_1

MAC flags (S - static MAC, D - dynamic MAC, L - locally learned, P - Persistent static, C - Control MAC
           SE - statistics enabled, NM - non configured MAC, R - remote PE MAC, O - ovsdb MAC)


Ethernet switching table : 86 entries, 86 learned
Routing instance : METRO_MAC_VRF_1
    Vlan                MAC                 MAC         Age    Logical                NH        RTR
    name                address             flags              interface              Index     ID
    MVRF_VBASED_VLAN_1  00:11:01:00:00:01   D             -   et-0/0/0.1             0         0
    MVRF_VBASED_VLAN_1  00:11:01:00:00:02   D             -   et-0/0/0.1             0         0
    MVRF_VBASED_VLAN_1  00:11:01:00:00:03   D             -   et-0/0/0.1             0         0
    ...
    MVRF_VBASED_VLAN_1  00:13:01:00:00:01   DC            -                          202922    202922
    MVRF_VBASED_VLAN_1  00:13:01:00:00:02   DC            -                          202922    202922
    MVRF_VBASED_VLAN_1  00:13:01:00:00:03   DC            -                          202922    202922
    ...

regress@PE1>

 

The labels associated with one of the remote MAC learned are displayed with:

regress@PE1> show route forwarding-table table METRO_MAC_VRF_1 | find 00:13:01:00:00:01/48
00:13:01:00:00:01/48 user     0                  indr   228870     1
                                                 ulst   228867     1
                                                sftw Push 17, Push 45103(top)   228865     1 ae0.0
                              15.1.1.2           ucst    17001     1 ae0.0
                                                sftw Push 17, Push 45103(top)   228866     1 ae1.0
                              15.1.2.2           ucst    17000     1 ae1.0
...
regress@PE1> 
regress@PE1> show route table mpls.0 label 45103

mpls.0: 24013 destinations, 24013 routes (24013 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

45103              *[L-OSPF/10/5] 2d 22:01:11, metric 2
                       to 15.1.1.2 via ae0.0, Swap 45103
                    >  to 15.1.2.2 via ae1.0, Swap 45103
regress@PE2> show route table mpls.0 label 17

mpls.0: 24013 destinations, 24013 routes (24013 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

17                 *[EVPN/7] 23:52:42, routing-instance METRO_MAC_VRF_1, route-type Ingress-MAC, vlan-id 1
                       to table METRO_MAC_VRF_1.evpn-mac.0

regress@PE2>

 

VLAN Bundle MAC-VRF Verification

The interface and its vlan-association for a vlan-bundle service type mac-vrf instance METRO_MAC_VRF_3001 are as follows:

regress@PE1> show mac-vrf forwarding interface et-0/0/2.1
Routing Instance Name : METRO_MAC_VRF_3001
Logical Interface flags (DL - disable learning, AD - packet action drop,
                         LH - MAC limit hit, DN - interface down,
                         MMAS - Mac-move action shutdown,  AS - Autostate-exclude enabled,
                         SCTL - shutdown by Storm-control, MI - MAC+IP limit hit)

Logical         Vlan                   TAG   MAC    MAC+IP STP         Logical          Tagging
interface       members                      limit  limit  state       interface flags
et-0/0/2.1                                   0      0                                   tagged
                MVRF_VBUNDLE_VLAN_3001 NA    1000001 0     Forwarding                   tagged

regress@PE1> show mac-vrf forwarding interface et-0/0/3.1001
Routing Instance Name : METRO_MAC_VRF_3001
Logical Interface flags (DL - disable learning, AD - packet action drop,
                         LH - MAC limit hit, DN - interface down,
                         MMAS - Mac-move action shutdown,  AS - Autostate-exclude enabled,
                         SCTL - shutdown by Storm-control, MI - MAC+IP limit hit)

Logical         Vlan                   TAG   MAC    MAC+IP STP         Logical          Tagging
interface       members                      limit  limit  state       interface flags
et-0/0/3.1001                                0      0                                   tagged
                MVRF_VBUNDLE_VLAN_3001 NA    1000001 0     Forwarding                   tagged

 

Vlan-1 and Vlan-1000 are associated with METRO_MAC_VRF_3001 mac-vrf instance and its interface association is shown below.

regress@PE1> show vlans MVRF_VBUNDLE_VLAN_3001

Routing instance        VLAN name             Tag          Interfaces
METRO_MAC_VRF_3001      MVRF_VBUNDLE_VLAN_3001 NA       
                                                           .local.202905*
                                                           et-0/0/2.1*
                                                           et-0/0/3.1001*

and also

regress@PE1> show evpn instance METRO_MAC_VRF_3001 extensive
Instance: METRO_MAC_VRF_3001
  Route Distinguisher: 12.1.1.1:3001
  Service interface type: VLAN-bundle service interface
  Per-instance MAC route label: 6016
  Duplicate MAC detection threshold: 5
  Duplicate MAC detection window: 180
  MAC database status                     Local  Remote
    MAC advertisements:                      64      64
    MAC+IP advertisements:                    0       0
    Default gateway MAC advertisements:       0       0
  Number of local interfaces: 3 (3 up)
    Interface name  ESI                            Mode             Status     AC-Role
    .local..2279    00:00:00:00:00:00:00:00:00:00  single-homed     Up         Root
    et-0/0/2.1      00:00:00:00:00:00:00:00:00:00  single-homed     Up         Root
    et-0/0/3.1001   00:00:00:00:00:00:00:00:00:00  single-homed     Up         Root
  Number of IRB interfaces: 0 (0 up)
  Number of protect interfaces: 0
  Number of bridge domains: 1
    VLAN  Domain-ID Intfs/up   IRB-intf  Mode            MAC-sync v4-SG-sync v6-SG-sync
    None               2  2              Extended        Enabled  Disabled   Disabled
  Number of neighbors: 1
    Address               MAC    MAC+IP        AD        IM        ES Leaf-label Remote-DCI-Peer
    12.1.1.3               64         0         0         1         0
  Number of ethernet segments: 0
  SMET Forwarding: Disabled

regress@PE1>

 

The DUT learns MAC addresses from both the vlans as well as from remote peer over the evpn-signalling.

regress@PE1> show mac-vrf forwarding mac-table instance METRO_MAC_VRF_3001

MAC flags (S - static MAC, D - dynamic MAC, L - locally learned, P - Persistent static, C - Control MAC
           SE - statistics enabled, NM - non configured MAC, R - remote PE MAC, O - ovsdb MAC)


Ethernet switching table : 128 entries, 128 learned
Routing instance : METRO_MAC_VRF_3001
    Vlan                MAC                 MAC         Age    Logical                NH        RTR 
    name                address             flags              interface              Index     ID
    MVRF_VBUNDLE_VLAN_3001 00:15:01:00:00:01 D            -   et-0/0/2.1             0         0     
    MVRF_VBUNDLE_VLAN_3001 00:15:01:00:00:02 D            -   et-0/0/2.1             0         0
    MVRF_VBUNDLE_VLAN_3001 00:15:01:00:00:03 D            -   et-0/0/2.1             0         0
    ...
    MVRF_VBUNDLE_VLAN_3001 00:19:01:00:00:01 D            -   et-0/0/3.1001          0         0
    MVRF_VBUNDLE_VLAN_3001 00:19:01:00:00:02 D            -   et-0/0/3.1001          0         0       
    MVRF_VBUNDLE_VLAN_3001 00:19:01:00:00:03 D            -   et-0/0/3.1001          0         0
    ...
    MVRF_VBUNDLE_VLAN_3001 00:1b:01:00:00:01 DC           -                          202905    202905
    MVRF_VBUNDLE_VLAN_3001 00:1b:01:00:00:02 DC           -                          202905    202905  
    MVRF_VBUNDLE_VLAN_3001 00:1b:01:00:00:03 DC           -                          202905    202905
    ...
    MVRF_VBUNDLE_VLAN_3001 00:1f:01:00:00:01 DC           -                          202905    202905
    MVRF_VBUNDLE_VLAN_3001 00:1f:01:00:00:02 DC           -                          202905    202905  
    MVRF_VBUNDLE_VLAN_3001 00:1f:01:00:00:03 DC           -                          202905    202905
    ...
regress@PE1>

 

The following output captures the number of instances and total MAC learned in the DUT

regress@PE1> show bgp summary |match evpn.0 | count
Count: 6003 lines

regress@PE1> show ethernet-switching table summary 
Total dynamic and static MAC addresses learned globally : 642000
Configured static MAC addresses learned globally       : 0

regress@PE1> show mac-vrf forwarding mac-table summary
Total dynamic and static MAC addresses learned globally : 642000
Configured static MAC addresses learned globally       : 0

regress@PE1>

 

Traffic flows are load-balanced across the LAG bundles and the LAG member interfaces as shown below

PE1                               Seconds: 8                   Time: 23:53:57
 
Interface    Link  Input packets        (pps)     Output packets        (pps)
 
 ae0           Up      430732227   (39467484)        426607625   (39090991)
 ae1           Up      422504760   (38716208)        426628049   (39092631)
 esi           Up              0          (0)                0          (0)
 et-0/0/0      Up      170633946   (15628905)        170633785   (15628463)
 et-0/0/1      Up      170633695   (15629036)        170633820   (15629066)
 et-0/0/2      Up      170656791   (15641087)        170656766   (15641091)
 et-0/0/3      Up      170657143   (15641388)        170657268   (15641460)
 et-0/0/4      Up      170656970   (15641588)        170657031   (15641683)
 et-0/0/5    Down              0          (0)                0          (0)
 et-0/0/6      Up      114219791   (10466300)        106662528    (9773701)
 et-0/0/7      Up      108553610    (9946350)        106641383    (9771845)
 et-0/0/8      Up      107267131    (9828675)        106646624    (9772262)
 et-0/0/9      Up      100691695    (9226159)        106657090    (9773183)
 et-0/0/10     Up      110934212   (10165928)        106662332    (9773648)
 et-0/0/11     Up      104545101    (9579897)        106651718    (9772709)
 et-0/0/12     Up      106957607    (9800959)        106662274    (9773644)
 et-0/0/13     Up      100067840    (9169424)        106651725    (9772630)

Generating Scale Configuration

The Python Script is having three components:

  • a Jinja File capturing the various configuration templates,
  • a Params File capturing the various user variables
  • the script uses both these input files and generates the required configurations and commit that in the router.

Note: The configs are generated as per the CE-bound interface schema.

Jinja Configuration Template

The template contains configurations for both interfaces which are part of the routing instances and routing instance configurations.

# EVPN Mac-VRF Routing Instance Configuration
# File Name: evpn_jinja.j2
# Version: 1.0
groups {{group_name}} {
    interfaces {
        {{ifd_name}} {
            flexible-vlan-tagging;
            encapsulation flexible-ethernet-services;
            {%- for unit_id, vlan_id in ifl_variables %}
            unit {{unit_id}} {
                {%- if vlan_based_service %}
                vlan-id {{vlan_id}};
                {%- endif %}
                {%- if vlan_bundle_service %}
                vlan-id-list {{vlan_id}};
                {%- endif %}
                encapsulation vlan-bridge;
            }
            {%- endfor %}
        }
    }
    routing-instances {
        {%- for vrf_id, ifl_name, vlan_id in evpn_variables %}
        METRO_MAC_VRF_{{vrf_id}} {
            instance-type mac-vrf;
            {%- if lo0_enabled %}
            interface lo0.{{vrf_id}};
            {%- endif %}
            route-distinguisher {{router_id}}:{{vrf_id}};
            vrf-target target:{{local_as_no}}:{{vrf_id}};
            protocols {
                evpn {
                    encapsulation mpls;
                    no-control-word;
                    {%- if vlan_based_service %}
                    normalization;
                    {%- endif %}
                }
            }
            interface {{ifl_name}};
            {%- if vlan_based_service %}
            service-type vlan-based;
            vlans {
                MVRF_VBASED_VLAN_{{vrf_id}} {
                    vlan-id {{vlan_id}};
                    interface {{ifl_name}};
                }
            }
            {%- endif %}
            {%- if vlan_bundle_service %}
            service-type vlan-bundle;
            vlans {
                MVRF_VBUNDLE_VLAN_{{vrf_id}} {
                    interface {{ifl_name}};
                }
            }
            {%- endif %}
        }
        {%- endfor %}
    }
}

Configuration Parameters

---
# This file contains the parameters for evpn configuration building
# File Name: evpn_params.yml
# Version: 1.0
 
#Host Name
host: 'PE1.englab.juniper.net'
 
#UserName
username: 'regress'
#Password
password: 'xxxxx'
 
#Config Group Name
group_name: 'METRO_EVPN'
 
#vrfname creation
vrf_id: 1

#maximum evpn instances
vrf_max: 10
 
#interface name
ifd_name: 'et-0/0/0'
 
#ifl_start unit
ifl_start_unit: 1
 
#vlan_id start
vlan_id_start: 1
 
#My AS no
local_as_no: 65000
 
#My Router ID
router_id: '12.1.1.1'
 
#Loopback Interface
lo0_enabled: False
 
#EVPN Service Type:
vlan_based_service: False
vlan_bundle_service: True
vlan_aware_service: False

Configuration Script

#! /usr/bin/python
"""
    FileName: create_evpn_vrf.py
    Version: 1.0
    Description: This script will create evpn vrf instances and configure it on the router
    Author: Suneesh Babu
"""
import yaml
from glob import glob
from jinja2 import Template
import ipaddress
from jnpr.junos.utils.config import Config
from jnpr.junos import Device
from jnpr.junos.factory import loadyaml
from jnpr.junos.op import *
 
def iflrange(ifd_name, start_unit, max):
    """
    This subroutine yields the specified number of l3 ifls for the ifd
    """
    while(max):
        iflname = ifd_name + '.' + str(start_unit)
        yield iflname
        start_unit += 1
        max -= 1
 
def router_operation(config_filename, data, mode):
    """
        This sub-routine connects to the router and does the necessary commit operations
    """
    router = Device(host=data['host'], user=data['username'], password=data['password'], port=22)
    router.open()
 
    cfg = Config(router)
    if mode == 'jinja':
        cfg.load(template_path=config_filename, template_vars=data, format='text', merge=True)
    elif mode == 'setfile':
        cfg.load(path=config_filename, format='set')
    cfg.pdiff()
    cfg.commit()
    router.close()
 
def jinja_template_input(data):
    """
        This sub-routine yields the variables required for the jinja template
    """
    ifl_unit_list = range(int(data['ifl_start_unit']), int(data['ifl_start_unit']) + int(data['vrf_max']))
    vlan_list = range(int(data['vlan_id_start']), int(data['vlan_id_start']) + int(data['vrf_max']))
 
    vrf_id_list = range(int(data['vrf_id']), int(data['vrf_id']) + int(data['vrf_max']))
    ifl_name_list = iflrange(data['ifd_name'], data['ifl_start_unit'], int(data['vrf_max']))
 
    return zip(ifl_unit_list, vlan_list), zip(vrf_id_list, list(ifl_name_list), vlan_list)
 
def main():
    """
       To Build the desired number of mac-vrf instances
    """
    print("Step-1: Read the Variables from the Params File")
    with open(glob('evpn_params.yaml')[0]) as fh:
        data = yaml.safe_load(fh.read())
 
    print("Step-2: Build the Data Feed for the Jinja Template Input")
    ifl_attributes, evpn_attributes = jinja_template_input(data)
    data['ifl_variables'] = ifl_attributes
    data['evpn_variables'] = evpn_attributes
 
    print("Step-3: Build the configuration file from Jinja Template")
    with open(glob('evpn_jinja.j2')[0]) as t_fh:
        t_format = t_fh.read()
    evpn_snippet = Template(t_format)
    # print (evpn_snippet.render(data))
    print("Step-4: Load the config into router and commit it")
    router_operation('evpn_jinja.j2', data, 'jinja')

if __name__ == '__main__':
    main()

Traffic Generator Configuration

Hosts are simulated as follows:

Figure 2: Host Simulation on TGEN

CPU Usage during traffic flow

The 12-Core CPU of the DUT (ACX7100-32C) remains idle at 95% during the traffic flow.

Figure 3: Grafana Dashboard on CPU/Core Usage

Data Plane Traffic Verification

As shown below traffic flows at 99.9% of 100G links over 5 CE bound interfaces and no packet drops are seen for a duration of 24 hours.

Figure 4: Traffic Generation for 24+ hours, no packet loss

Conclusion

ACX7000 Family platforms (ACX7100-32C, ACX7100-48L, ACX7509) with this tested scale are ready for the Metro deployments. This article demonstrate the MAC VRF scale reachable in architecture based on these routers. The EVPN services capabilities are paramount for the next generation Metro Solution requirements. Next TechPost article will be dedicated to the EVPN VPWS scale validation.

References

Glossary

  • BGP – Border Gateway Protocol
  • CE – Customer Edge Node
  • DUT – Device Under Test
  • E-LAN – Ethernet LAN
  • EVPN – Ethernet Virtual Private Network
  • KPI – Key Performance Indicators
  • LAN – Local Area Network
  • MAC-VRF – Media Access Control VRF
  • MPLS – Multi Protocol Label Switching
  • OSPF – Open Shortest Path First
  • P/PE – Provider/Provider Edge Node
  • SP Style – Service Provider Style
  • SR-MPLS – Segment Routing - MPLS
  • VLAN – Virtual LAN
  • VRF – Virtual Routing and Forwarding
  • VxLAN – Virtual Extensible LAN

Acknowledgement

Many thanks to Chethana Jayanna, Ramdas Machat, Vasily Mukhin and Nicolas Fevrier for reviewing the article and providing the feedback

Feedback

Revision History

Version Author(s) Date Comments
1 Suneesh Babu November 2022 Initial publication


#Validation


#ACXSeries

Permalink