Skip to content
LinkState
Go back

EVPN leaf canaries without MAC churn storms

Staging EVPN and VXLAN Policy Changes Across Leaf Pairs Without Triggering MAC Mobility Noise, Duplicated Advertisements, or Broad Host Churn

Author: Nadia Kareem – Routing Architect & Control‑Plane Specialist


Introduction to EVPN and VXLAN

Ethernet VPN (EVPN) is a BGP‑based control plane (RFC 7432) that distributes MAC/IP reachability, Ethernet Segment Identifiers (ESI), and VXLAN Network Identifiers (VNI). VXLAN (RFC 7348) encapsulates Ethernet frames over UDP 4789, providing a 24‑bit VNI for up to 16 million overlay segments.

In a leaf‑spine fabric:

Benefits

BenefitDescription
Multi‑tenant scalability24‑bit VNI > 16 M segments; RT import/export isolates tenants.
Workload mobilityMAC/IP routes advertised globally; host moves trigger a MAC‑move update instead of flooding.
Optimized bandwidthInclusive multicast Ethernet Tag (IMET) routes enable head‑end replication only when needed.
Centralized policyBGP policies (route‑maps, communities) enforce import/export, VNI‑to‑VLAN mapping, MAC‑move limits.

Challenges

ChallengeDescription
MAC mobility noiseFrequent MAC moves trigger the MAC‑move timer, causing temporary blackholing or excessive BGP updates.
Duplicated advertisementsMis‑configured RTs or ESI lead to the same MAC/IP advertised from multiple leaves, creating duplicate routes.
Broad host churnARP/ND storms or flapping hosts surge Type‑2 updates, impacting BGP convergence.
Operational complexityCoordinating control‑plane (BGP) and data‑plane (VNI/VLAN) changes across many leaf pairs requires precise staging.

Understanding MAC Mobility and Host Churn

MAC Mobility Noise

MAC mobility occurs when the same MAC address is learned from two different VTEPs within a short interval. The EVPN control plane treats this as a MAC‑move event: the newer advertisement withdraws the previous one and installs the new VTEP‑MAC binding.

Causes

The MAC‑mobility timer (default 180 s per RFC 7432) suppresses further moves for the same MAC after a move is detected, preventing endless churn but potentially blackholing traffic until the timer expires.

Effects of Duplicated Advertisements and Broad Host Churn

Importance of Minimizing Disruptions During Policy Changes

Policy changes (e.g., altering route‑targets, adjusting MAC‑move limits, modifying VNI‑to‑VLAN maps) directly affect the EVPN NLRI set exchanged by leaves. Indiscriminate changes can:

Staging changes leaf‑pair by leaf‑pair, verifying stability after each step, confines the blast radius and allows rollback before fabric‑wide churn occurs.


Stage EVPN Policy Changes

Pre‑Change Checklist and Preparation

ItemVerification Command (Cisco NX‑OS)Purpose
BGP EVPN session stateshow bgp l2vpn evpn summaryEnsure Established, no flapping.
Current route‑target import/exportshow bgp l2vpn evpn route-targetBaseline RT set.
MAC‑move timer & thresholdshow evpn mac-mobilityConfirm default (180 s) and move‑limit (default 5).
ESI status (if dual‑homed)show evpn esiVerify ESI consistency across leaf pair.
VNI‑to‑VLAN mapshow nve vniConfirm current VNI bindings.
BGP update rate`show bgp processinclude update`
MAC move countersshow evpn mac-mobility statisticsBaseline move count per interval.
Log level`show logging levelinclude bgp`

Preparation steps

  1. Create a change‑control snapshotshow running-config > pre_change.cfg.
  2. Enable MAC‑move dampening (if not already)evpn mac-mobility detection threshold <value> interval <seconds> (optional, to tighten detection).
  3. Schedule a maintenance window – notify stakeholders, verify NTP sync, confirm orchestration tool access (Ansible, Terraform, etc.).
  4. Define rollback trigger – abort and rollback if any of the following exceeds thresholds during the change:
    • MAC‑move count > 10 per 30 s on either leaf.
    • BGP update rate > 500 updates/sec.
    • Duplicate MAC/IP routes (same MAC with > 1 next‑hop).

Implementing EVPN Policy Changes on Leaf Pairs

Common EVPN policy changes include:

Example CLI Commands (Cisco NX‑OS)

configure terminal
router bgp 65000
  address-family l2vpn evpn
    neighbor 10.0.0.2 activate
    neighbor 10.0.0.2 send-community both
    # Import RT for VNI 10100
    evpn
      import vni 10100 route-target 65000:200
      export vni 10100 route-target 65000:200
    # Optional: tighten MAC‑mobility detection
    evpn mac-mobility detection threshold 3 interval 20
    # Apply route‑map to set community on outgoing Type‑2 routes
    neighbor 10.0.0.2 route-map SET-EVPN-COMM out
  exit-address-family
exit

Route‑map example

route-map SET-EVPN-COMM permit 10
  set extcommunity additive 65000:999

Automation Examples

Ansible (nxos_bgp module)

- name: Configure EVPN RT import/export on leaf pair
  hosts: leaf_pair
  vars:
    bgp_as: 65000
    evpn_afi: l2vpn evpn
    vni: 10100
    rt_import: "65000:200"
    rt_export: "65000:200"
    mac_move_thresh: 3
    mac_move_int: 20
  tasks:
    - name: Ensure BGP EVPN AF is present
      nxos_bgp:
        as_number: "{{ bgp_as }}"
        address_family: "{{ evpn_afi }}"
        neighbor: "{{ item }}"
        send_community: both
      loop:
        - 10.0.0.2   # spine1
        - 10.0.0.3   # spine2

    - name: Configure VNI import/export RT
      nxos_evpn_vni:
        vni: "{{ vni }}"
        import_rt: "{{ rt_import }}"
        export_rt: "{{ rt_export }}"
        state: present

    - name: Tune MAC‑mobility detection
      nxos_evpn_mac_mobility:
        threshold: "{{ mac_move_thresh }}"
        interval: "{{ mac_move_int }}"
        state: present

    - name: Apply route‑map for community
      nxos_route_map:
        name: SET-EVPN-COMM
        sequence: 10
        action: permit
        set_extcommunity_additive: "65000:999"
        state: present

    - name: Attach route‑map to BGP neighbor
      nxos_bgp:
        as_number: "{{ bgp_as }}"
        address_family: "{{ evpn_afi }}"
        neighbor: 10.0.0.2
        route_map_out: SET-EVPN-COMM

Validation Gates

After each leaf‑pair change, verify the following before proceeding to the next pair:

  1. BGP stabilityshow bgp l2vpn evpn summary shows Established sessions with no flaps.
  2. MAC‑move countersshow evpn mac-mobility statistics remains below the rollback threshold (e.g., < 10 moves/30 s).
  3. Route uniquenessshow bgp l2vpn evpn route-type mac-ip <MAC> returns a single next‑hop.
  4. Update rateshow bgp process | include update stays under the defined limit (e.g., < 500 updates/sec).
  5. Traffic sanity – ping/trace from a known host to a remote VTEP succeeds without loss or excessive latency.

If any gate fails, initiate the rollback plan (restore pre_change.cfg or execute the inverse CLI) and reassess before proceeding.


By following this staged approach—pre‑change validation, incremental leaf‑pair updates, and defined stability gates—you can modify EVPN/VXLAN policies while suppressing MAC mobility noise, avoiding duplicate advertisements, and preventing broad host churn.


Share this post on:

Previous Post
AI workbenches for competing root causes
Next Post
Tool Schemas That Preserve Uncertainty Instead of Flattening It