VLAN, VRF, VXLAN, and EVPN Transformations

The VLAN, VRF, VXLAN, and EVPN configuration modules are tightly coupled and use shared vlans and vrfs data structures. This document describes the chain of events taking place in these modules during the netlab data transformation and how they populate the shared data structures.

The transform_after settings cause the hooks to be called in the VLAN -> VRF -> VXLAN -> EVPN order.



  • Set default vxlan.flooding mode to evpn




  • Create global VLANs based on group VLAN data

  • Collect static VLAN IDs

  • Validate VLAN attributes: forwarding mode, VLAN ID, link attributes, module-specific VLAN/link attributes

  • Auto-assign VLAN IDs to VLANs without a valid ID

  • Create VLAN access links in the lab topology from vlans.name.links list

  • Allocate IP prefixes to VLANs


  • Merge global VLAN data with node VLAN data

  • Validate VLAN attributes (see above)

  • Allocate IP prefixes to node-only VLANs


  • Validate link-level VLAN attribute: valid combinations of access/trunk/native VLANs, valid VLAN names in vlan.* link- and interface attributes

For trunk links: create VLAN member links out of a VLAN trunk

  • For every VLAN in the trunk, create a vlan_member link

  • Process vlan_member link like it would be an access link

For access links:

  • Set the VLAN forwarding mode (_vlan_mode) for every interface attached to the link (see VLAN module documentation for precedence details)

  • Add VLAN data to link data

  • For routed VLAN links, set link VLAN mode to route

  • For non-routed links, set link prefix based on VLAN prefix

  • Disable interface addresses on bridge-only VLANs or on bridge-only interfaces



  • Create global VRFs based on group VRF data

  • Normalize VRF IDs and collect static ID/RD settings

  • Auto-assign VRF ID/RD and import/export RT


  • Pull global VRFs that are needed by node VLANs into nodes

  • Normalize VRF IDs and collect static ID/RD settings

  • Auto-assign VRF ID/RD and import/export RT (based on some global AS)



  • Check/set flooding value



  • Register static VRF evpn.transit_vni




  • Create default vxlan.vlans list (all global or node VLANs) when vxlan.vlans is missing

  • Validate vxlan.vlans list in topology and nodes

  • Assign VNIs to VLANs in vxlan.vlans list


  • Create default evpn.vrfs list when missing

  • Create default evpn.vlans list when missing

  • Assign VNIs to VRFs with evpn.transit_vni set to True or string (another VRF) value

  • Make sure evpn.transport is set for EVPN VLANs and (bundle) VRFs

Create VLAN- and VRF services:

  • Assign EVPN RD/RT to EVPN-enabled VLANs and -bundles (with RT based on some global AS, not per node AS)

  • Assign evpn.evi to EVPN-enabled VRFs




  • Copy final topology VLAN data into nodes

  • Create SVI interfaces

  • Map trunk VLAN names into VLAN IDs

  • Rename VLAN subinterfaces (routers and routed interfaces on L3 switches)

  • Remove routed native VLAN from trunk list

  • Check for mixed (bridged+routed) trunks

  • Set neighbors for SVI interfaces

  • Remove VLAN member links from topology links

  • Cleanup temporary VLAN attributes in links and nodes – remove vlan_name from links and interfaces, _global_merge from VLANs and interfaces, neighbors from node VLANs, and _vlan_mode from interfaces. Also: copy interface _vlan_mode into interface vlan.mode.

  • Fix VLAN-wide default gateways



  • Create node VRFs based on interface vrf attributes

  • Merge global VRFs with node VRFs




  • Check RD values for VRFs used in the node

  • Set af.vpnv4 and af.vpnv6 and VRF af dictionary

  • Check device features (inter-VRF route leaking)

  • Set vrf.vrfidx (used to set OSPF process ID)

  • Create VRF loopbacks



  • Build final node vxlan.vlans list

  • Set node VXLAN flooding domain

  • Build (per-node/per-VLAN) ingress replication lists



  • Enable EVPN address family

  • Check VRF IRB setup against device features

  • Copy global EVPN lists into node data (if needed)

  • Trim evpn.vlans and evpn.vrfs to refer only to VLANs and VRFs present on this node

  • Set bgp.router_id:evpn.evi RD on EVPN-enabled VLANs and VRFs