EVPN
Configure Ethernet VPN (EVPN) settings on IOS-XR devices including source interface, EVPN groups, BGP route distinguisher, timers, duplicate detection, SRv6, virtual neighbors, and virtual VFIs. EVPN is a standards-based Layer 2 VPN technology that provides scalable and efficient Layer 2 connectivity across a Layer 3 network infrastructure using BGP for control plane signaling.
Diagram
Section titled “Diagram”Classes
Section titled “Classes”configuration (iosxr.devices)
Section titled “configuration (iosxr.devices)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| evpn | Class | [evpn] | No |
evpn (iosxr.devices.configuration)
Section titled “evpn (iosxr.devices.configuration)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| bgp | Class | [bgp] | No | |
| cost_out | Boolean | true, false | No | |
| duplicate_detection | Class | [duplicate_detection] | No | |
| ethernet_segment | Class | [ethernet_segment] | No | |
| evis | List | [evis] | No | |
| groups | List | [groups] | No | |
| mtu_match | Choice | enforce, ignore | No | |
| interfaces | List | [interfaces] | No | |
| load_balancing | Class | [load_balancing] | No | |
| logging_df_election | Boolean | true, false | No | |
| source_interface | String | No | ||
| srv6 | Class | [srv6] | No | |
| staggered_bringup_timer | Integer | min: 0, max: 300000 | No | |
| startup_cost_in | Integer | min: 30, max: 86400 | No | |
| timers | Class | [timers] | No | |
| transmit_mtu | Choice | layer_2, zero | No | |
| virtual | Class | [virtual] | No |
bgp (iosxr.devices.configuration.evpn)
Section titled “bgp (iosxr.devices.configuration.evpn)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| rd | String | No |
duplicate_detection (iosxr.devices.configuration.evpn)
Section titled “duplicate_detection (iosxr.devices.configuration.evpn)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| ipv4 | Class | [ipv4] | No | |
| ipv6 | Class | [ipv6] | No |
ethernet_segment (iosxr.devices.configuration.evpn)
Section titled “ethernet_segment (iosxr.devices.configuration.evpn)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| type_one_auto_generation_disable | Boolean | true, false | No |
evis (iosxr.devices.configuration.evpn)
Section titled “evis (iosxr.devices.configuration.evpn)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| id | Integer | min: 1, max: 65534 | Yes | |
| advertise_mac | Boolean | true, false | No | |
| bgp | Class | [bgp] | No | |
| control_word_disable | Boolean | true, false | No | |
| description | String | No | ||
| etree | Boolean | No | ||
| load_balancing | Class | [load_balancing] | No | |
| unknown_unicast_suppression | Boolean | true, false | No |
groups (iosxr.devices.configuration.evpn)
Section titled “groups (iosxr.devices.configuration.evpn)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| id | Integer | min: 1, max: 4294967295 | Yes | |
| core_interfaces | List | [core_interfaces] | No |
interfaces (iosxr.devices.configuration.evpn)
Section titled “interfaces (iosxr.devices.configuration.evpn)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| name | String | Yes | ||
| access_signal_bundle_down | Boolean | true, false | No | |
| core_isolation_group | Integer | min: 1, max: 4294967295 | No | |
| ethernet_segment | Class | [ethernet_segment] | No | |
| timers | Class | [timers] | No |
load_balancing (iosxr.devices.configuration.evpn)
Section titled “load_balancing (iosxr.devices.configuration.evpn)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| flow_label_static | Boolean | true, false | No |
srv6 (iosxr.devices.configuration.evpn)
Section titled “srv6 (iosxr.devices.configuration.evpn)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| enabled | Boolean | true, false | No | |
| locators | List | [locators] | No | |
| usid_allocation_wide_local_id_block | Boolean | true, false | No |
timers (iosxr.devices.configuration.evpn)
Section titled “timers (iosxr.devices.configuration.evpn)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| ac_debounce | Integer | min: 0, max: 300000 | No | |
| backup_replacement_delay | Integer | min: 0, max: 300000 | No | |
| carving | Integer | min: 0, max: 300 | No | |
| mac_postpone | Integer | min: 0, max: 300 | No | |
| peering | Integer | min: 0, max: 300 | No | |
| recovery | Integer | min: 0, max: 3600 | No |
virtual (iosxr.devices.configuration.evpn)
Section titled “virtual (iosxr.devices.configuration.evpn)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| access_evi | Class | [access_evi] | No | |
| neighbors | List | [neighbors] | No | |
| vfis | List | [vfis] | No |
ipv4 (iosxr.devices.configuration.evpn.duplicate_detection)
Section titled “ipv4 (iosxr.devices.configuration.evpn.duplicate_detection)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| disable | Boolean | true, false | No | |
| freeze_time | Integer | min: 5, max: 3600 | No | |
| move_count | Integer | min: 1, max: 1000 | No | |
| move_interval | Integer | min: 5, max: 3600 | No | |
| reset_freeze_count_interval | Integer | min: 1, max: 48 | No | |
| retry_count | Any | Integer[min: 0, max: 1000] or Choice[infinity] or String[Regex: ^.*[\$\%]\{.*$] | No |
bgp (iosxr.devices.configuration.evpn.evis)
Section titled “bgp (iosxr.devices.configuration.evpn.evis)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| export_route_policy | String | No | ||
| route_target_exports | List | String | No | |
| import_route_policy | String | No | ||
| route_target_imports | List | String | No | |
| rd | String | No |
load_balancing (iosxr.devices.configuration.evpn.evis)
Section titled “load_balancing (iosxr.devices.configuration.evpn.evis)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| enabled | Boolean | true, false | No | |
| flow_label_static | Boolean | true, false | No |
core_interfaces (iosxr.devices.configuration.evpn.groups)
Section titled “core_interfaces (iosxr.devices.configuration.evpn.groups)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| name | String | Yes |
ethernet_segment (iosxr.devices.configuration.evpn.interfaces)
Section titled “ethernet_segment (iosxr.devices.configuration.evpn.interfaces)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| route_target | String | No | ||
| convergence | Class | [convergence] | No | |
| esi_zero | String | No | ||
| force_single_homed | Boolean | true, false | No | |
| load_balancing_mode | Choice | all-active, port-active, single-active, single-flow-active | No | |
| service_carving_hrw | Boolean | true, false | No | |
| service_carving_manual | Class | [service_carving_manual] | No | |
| service_carving_multicast | Class | [service_carving_multicast] | No | |
| service_carving_preference | Class | [service_carving_preference] | No |
timers (iosxr.devices.configuration.evpn.interfaces)
Section titled “timers (iosxr.devices.configuration.evpn.interfaces)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| ac_debounce | Integer | min: 0, max: 300000 | No | |
| carving | Integer | min: 0, max: 300 | No | |
| peering | Integer | min: 0, max: 300 | No | |
| recovery | Integer | min: 0, max: 3600 | No |
locators (iosxr.devices.configuration.evpn.srv6)
Section titled “locators (iosxr.devices.configuration.evpn.srv6)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| name | String | Yes | ||
| usid_allocation_wide_local_id_block | Boolean | true, false | No |
access_evi (iosxr.devices.configuration.evpn.virtual)
Section titled “access_evi (iosxr.devices.configuration.evpn.virtual)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| ethernet_segment | Class | [ethernet_segment] | No |
neighbors (iosxr.devices.configuration.evpn.virtual)
Section titled “neighbors (iosxr.devices.configuration.evpn.virtual)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| address | String | Yes | ||
| pw_id | Integer | min: 1, max: 4294967295 | Yes | |
| ethernet_segment | Class | [ethernet_segment] | No | |
| timers | Class | [timers] | No |
vfis (iosxr.devices.configuration.evpn.virtual)
Section titled “vfis (iosxr.devices.configuration.evpn.virtual)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| name | String | Yes | ||
| ethernet_segment | Class | [ethernet_segment] | No | |
| timers | Class | [timers] | No |
convergence (iosxr.devices.configuration.evpn.interfaces.ethernet_segment)
Section titled “convergence (iosxr.devices.configuration.evpn.interfaces.ethernet_segment)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| mac_mobility | Boolean | true, false | No | |
| nexthop_tracking | Boolean | true, false | No | |
| reroute | Boolean | true, false | No |
service_carving_manual (iosxr.devices.configuration.evpn.interfaces.ethernet_segment)
Section titled “service_carving_manual (iosxr.devices.configuration.evpn.interfaces.ethernet_segment)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| primary | String | No | ||
| secondary | String | No |
service_carving_multicast (iosxr.devices.configuration.evpn.interfaces.ethernet_segment)
Section titled “service_carving_multicast (iosxr.devices.configuration.evpn.interfaces.ethernet_segment)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| hrw_g | Boolean | true, false | No | |
| hrw_s_g | Boolean | true, false | No |
service_carving_preference (iosxr.devices.configuration.evpn.interfaces.ethernet_segment)
Section titled “service_carving_preference (iosxr.devices.configuration.evpn.interfaces.ethernet_segment)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| access_driven | Boolean | true, false | No | |
| weight | Integer | min: 0, max: 65535 | No |
ethernet_segment (iosxr.devices.configuration.evpn.virtual.access_evi)
Section titled “ethernet_segment (iosxr.devices.configuration.evpn.virtual.access_evi)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| route_target | String | No | ||
| esi_zero | String | No |
ethernet_segment (iosxr.devices.configuration.evpn.virtual.neighbors)
Section titled “ethernet_segment (iosxr.devices.configuration.evpn.virtual.neighbors)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| route_target | String | No | ||
| esi_zero | String | No | ||
| service_carving_hrw | Boolean | true, false | No | |
| service_carving_manual | Class | [service_carving_manual] | No | |
| service_carving_multicast | Class | [service_carving_multicast] | No | |
| service_carving_preference | Class | [service_carving_preference] | No |
ethernet_segment (iosxr.devices.configuration.evpn.virtual.vfis)
Section titled “ethernet_segment (iosxr.devices.configuration.evpn.virtual.vfis)”| Name | Type | Constraint | Mandatory | Default Value |
|---|---|---|---|---|
| route_target | String | No | ||
| esi_zero | String | No | ||
| service_carving_hrw | Boolean | true, false | No | |
| service_carving_manual | Class | [service_carving_manual] | No | |
| service_carving_preference | Class | [service_carving_preference] | No |
EVPN Data Normalization
Section titled “EVPN Data Normalization”BGP RD/RT Formats
EVPN supports three BGP Route Distinguisher (RD/RT) formats using standard X:Y colon notation:
- two-byte AS (e.g.,
"65001:100") - four-byte AS (e.g.,
"65536:100") - IPv4 address (e.g.,
"192.168.1.1:100")
All 3 formats can be used interchangeably. The normalization layer automatically detects the user-specified format and maps to the correct attributes before sending to the device.
BGP RT MAC Address Formats
EVPN BGP route-target fields accept MAC addresses in any of three formats:
- colon-separated (e.g.,
"01:01:01:01:01:01") - dash-separated (e.g.,
"01-01-01-01-01-01") - dotted (e.g.,
"0101.0101.0101")
All 3 formats can be used interchangeably. The normalization layer coverts the user-specified format to colon-separated before sending to the device.
Example YAML Code
Section titled “Example YAML Code”Example-1: EVPN global settings with timers, duplicate detection, and ethernet segment.
iosxr: devices: - name: router-1 host: 10.10.10.1:57400 configuration: evpn: bgp: rd: "65536:100" source_interface: Loopback0 mtu_match: ignore load_balancing: flow_label_static: true logging_df_election: true cost_out: true startup_cost_in: 60 staggered_bringup_timer: 3000 transmit_mtu: zero timers: recovery: 120 peering: 60 carving: 5 ac_debounce: 2000 backup_replacement_delay: 3000 mac_postpone: 240 ethernet_segment: type_one_auto_generation_disable: true duplicate_detection: ipv4: move_count: 10 move_interval: 360 freeze_time: 120 retry_count: 5 reset_freeze_count_interval: 48 ipv6: move_count: 10 move_interval: 360 freeze_time: 120 retry_count: infinity reset_freeze_count_interval: 48Example-2: EVPN with BGP route distinguisher using IPv4 address format.
iosxr: devices: - name: router-1 host: 10.10.10.1:57400 configuration: evpn: bgp: rd: "192.168.1.1:100"Example-3: EVPN with BGP route distinguisher using two-byte AS format.
iosxr: devices: - name: router-1 host: 10.10.10.1:57400 configuration: evpn: bgp: rd: "65001:100"Example-4: EVPN with BGP route distinguisher using four-byte AS format.
iosxr: devices: - name: router-1 host: 10.10.10.1:57400 configuration: evpn: bgp: rd: "65536:100"Example-5: EVPN with SRv6 locator.
iosxr: devices: - name: router-1 host: 10.10.10.1:57400 configuration: evpn: source_interface: Loopback0 srv6: locators: - name: LOC1 usid_allocation_wide_local_id_block: trueExample-6: EVPN with virtual neighbors and VFI’s.
iosxr: devices: - name: router-1 host: 10.10.10.1:57400 configuration: evpn: source_interface: Loopback0 virtual: neighbors: - address: 192.168.1.1 pw_id: 100 timers: peering: 60 recovery: 120 carving: 5 ac_debounce: 2000 ethernet_segment: esi_zero: 01.01.01.01.01.01.01.01.01 route_target: "01:01:01:01:01:01" service_carving_multicast: hrw_s_g: true service_carving_manual: primary: 100-101,103 secondary: 200-201,203 vfis: - name: VFI1 timers: peering: 60 recovery: 120 carving: 5 ac_debounce: 2000 ethernet_segment: esi_zero: 01.01.01.01.02.02.02.02.02 route_target: "01:01:01:01:01:02" service_carving_manual: primary: 100-101,103 secondary: 200-201,203Example-7: Multiple EVPN interfaces with different load balancing modes.
iosxr: devices: - name: router-1 host: 10.10.10.1:57400 configuration: evpn: interfaces: - name: Bundle-Ether13 core_isolation_group: 12 timers: peering: 30 recovery: 90 ethernet_segment: esi_zero: 01.02.02.02.02.02.02.02.05 route_target: "01:02:02:02:02:05" load_balancing_mode: port-active service_carving_preference: weight: 100 access_driven: true service_carving_multicast: hrw_g: true convergence: mac_mobility: true - name: Bundle-Ether14 access_signal_bundle_down: true timers: carving: 10 ethernet_segment: esi_zero: 01.03.03.03.03.03.03.03.06 load_balancing_mode: single-active service_carving_manual: primary: 100,200,300 secondary: 400,500,600Example-8: EVPN EVI with BGP route distinguisher, route targets, and route policies.
iosxr: devices: - name: router-1 host: 10.10.10.1:57400 configuration: evpn: evis: - id: 1001 description: Customer A EVPN Instance load_balancing: enabled: true flow_label_static: true bgp: rd: "65000:1001" route_target_imports: - "65000:1001" - "65001:1002" - "192.168.100.1:1003" - "4200000001:1004" - "65536:1005" route_target_exports: - "65000:1001" - "65001:1002" - "192.168.100.1:1003" - "4200000001:1004" - "65536:1005" import_route_policy: EVPN_CUSTOMER_A_IMPORT_POLICY export_route_policy: EVPN_CUSTOMER_A_EXPORT_POLICY advertise_mac: true unknown_unicast_suppression: true