Skip to content

VXLAN EVPN eBGP

Diagram
NameTypeConstraintMandatoryDefault Value
ebgpClass[ebgp]No

NameTypeConstraintMandatoryDefault Value
spine_bgp_asnStringRegex: ^(?:\d{1,10}|\d{1,5}\.\d{1,5})$Yes
super_spine_bgp_asnStringRegex: ^(?:\d{1,10}|\d{1,5}\.\d{1,5})$No
bgp_asn_modeChoiceMulti-AS, Same-Tier-ASNoMulti-AS
leaf_bgp_asnStringRegex: ^(?:\d{1,10}|\d{1,5}\.\d{1,5})$No
border_bgp_asnStringRegex: ^(?:\d{1,10}|\d{1,5}\.\d{1,5})$No
leaf_same_bgp_asnBooleantrue, falseNofalse
bgp_asn_auto_allocationBooleantrue, falseNotrue
anycast_gateway_macAnyString[Regex: ^[a-f0-9]{1}\.[a-f0-9]{1}\.[a-f0-9]{1}$] or String[Regex: ^[a-f0-9]{4}\.[a-f0-9]{4}\.[a-f0-9]{4}$] or String[Regex: ^[a-f0-9]{2}:[a-f0-9]{2}:[a-f0-9]{2}:[a-f0-9]{2}:[a-f0-9]{2}:[a-f0-9]{2}$] or String[Regex: ^[a-f0-9]{2}-[a-f0-9]{2}-[a-f0-9]{2}-[a-f0-9]{2}-[a-f0-9]{2}-[a-f0-9]{2}$]No20:20:00:00:00:aa
overlay_modeChoicecli, config-profileNocli
greenfield_cleanupChoiceEnable, DisableNoDisable
layer2_vni_rangeClass[layer2_vni_range]No
layer3_vni_rangeClass[layer3_vni_range]No
layer2_vlan_rangeClass[layer2_vlan_range]No
layer3_vlan_rangeClass[layer3_vlan_range]No
enable_l3_vni_no_vlanBooleantrue, falseNofalse
multisite_site_idIntegermin: 1, max: 281474976710655No
vpcClass[vpc]No
ptpClass[ptp]No
snmp_server_host_trapBooleantrue, falseNotrue
enable_nxapi_httpBooleantrue, falseNofalse
nxapi_http_portIntegerNo80
enable_nxapi_httpsBooleantrue, falseNotrue
nxapi_https_portIntegerNo443
auth_protoChoiceMD5, SHA, MD5_DES, MD5_AES, SHA_DES, SHA_AESNoMD5
dns_serversList[dns_servers]No
ntp_serversList[ntp_servers]No
syslog_serversList[syslog_servers]No
netflowClass[netflow]No
bootstrapClass[bootstrap]No
aaa_freeformStringNo
banner_freeformStringNo
leaf_pre_interface_freeformStringNo
leaf_post_interface_freeformStringNo
spine_pre_interface_freeformStringNo
spine_post_interface_freeformStringNo
tor_pre_interface_freeformStringNo
tor_post_interface_freeformStringNo
intra_fabric_link_freeformStringNo

NameTypeConstraintMandatoryDefault Value
fromIntegermin: 1, max: 16777214Yes30000
toIntegermin: 1, max: 16777214No49000

NameTypeConstraintMandatoryDefault Value
fromIntegermin: 1, max: 16777214Yes50000
toIntegermin: 1, max: 16777214No59000

NameTypeConstraintMandatoryDefault Value
fromIntegermin: 2, max: 4094Yes2300
toIntegermin: 2, max: 4094No2999

NameTypeConstraintMandatoryDefault Value
fromIntegermin: 2, max: 4094Yes2000
toIntegermin: 2, max: 4094No2299

NameTypeConstraintMandatoryDefault Value
peer_link_vlanIntegermin: 2, max: 3967No3600
peer_keep_aliveChoiceloopback, managementNomanagement
auto_recovery_timeIntegermin: 240, max: 3600No360
delay_restore_timeIntegermin: 1, max: 3600No150
peer_link_port_channel_idIntegermin: 1, max: 4096No500
ipv6_nd_syncBooleantrue, falseNotrue
advertise_pipBooleantrue, falseNofalse
advertise_pip_border_onlyBooleantrue, falseNotrue
advertise_pip_border_gatewayBooleantrue, falseNofalse
domain_id_rangeStringNo1-1000
fabric_vpc_qosBooleantrue, falseNofalse
fabric_vpc_qos_policy_nameStringNospine_qos_for_fabric_vpc_peering

NameTypeConstraintMandatoryDefault Value
enableBooleantrue, falseNofalse
domain_idIntegermin: 0, max: 127No0
lb_idIntegermin: 0, max: 1023No0

NameTypeConstraintMandatoryDefault Value
ip_addressIPYes
vrfStringYes

NameTypeConstraintMandatoryDefault Value
ip_addressIPYes
vrfStringYes

NameTypeConstraintMandatoryDefault Value
ip_addressIPYes
vrfStringYes
severityIntegermin: 0, max: 7Yes

NameTypeConstraintMandatoryDefault Value
enableBooleantrue, falseNofalse
exporterList[exporter]No
recordList[record]No
monitorList[monitor]No

NameTypeConstraintMandatoryDefault Value
enable_bootstrapBooleantrue, falseNofalse
enable_local_dhcp_serverBooleantrue, falseNofalse
dhcp_versionChoiceDHCPv4, DHCPv6No
dhcp_v4Class[dhcp_v4]No
dhcp_v6Class[dhcp_v6]No
enable_cdp_mgmtBooleantrue, falseNofalse
bootstrap_freeformStringNo

NameTypeConstraintMandatoryDefault Value
nameStringYes
ip_addressIPYes
vrfStringNo
source_interfaceStringRegex: (?i)^(?:e|eth(?:ernet)?)\d(?:\/\d+){1,2}(\.\d{1,4})?$Yes
udp_portIntegermin: 1, max: 65535Yes

NameTypeConstraintMandatoryDefault Value
nameStringYes
templateChoicenetflow_ipv4_record, netflow_l2_recordYes
layer2Booleantrue, falseNo

NameTypeConstraintMandatoryDefault Value
nameStringYes
recordStringYes
exporter1StringYes
exporter2StringNo

NameTypeConstraintMandatoryDefault Value
scope_start_addressIPYes
scope_end_addressIPYes
switch_mgmt_default_gwIPYes
mgmt_prefixIntegermin: 8, max: 30Yes
multi_subnet_scopeStringNo
domain_nameStringNo

NameTypeConstraintMandatoryDefault Value
scope_start_addressIPYes
scope_end_addressIPYes
switch_mgmt_default_gwIPYes
mgmt_prefixIntegermin: 64, max: 126Yes
multi_subnet_scopeStringNo
domain_nameStringNo

For detailed information about eBGP fabric creation and deployment with Nexus Dashboard 4.1 or earlier releases, refer to the Cisco NDFC BGP Fabric Documentation.

global.nac.yaml
vxlan:
fabric:
name: ebgp-fabric
type: eBGP_VXLAN
global:
ebgp:
spine_bgp_asn: "65000.3"
super_spine_bgp_asn: "65000.1"
bgp_asn_mode: Multi-AS
leaf_same_bgp_asn: true
anycast_gateway_mac: 20:20:00:00:00:aa
layer2_vni_range:
from: 30000
to: 49000
layer3_vni_range:
from: 50000
to: 59000
layer2_vlan_range:
from: 2300
to: 2999
layer3_vlan_range:
from: 2000
to: 2299
vpc:
peer_link_vlan: 3600
peer_keep_alive: management
auto_recovery_time: 360
delay_restore_time: 150
peer_link_port_channel_id: 500
ipv6_nd_sync: false
advertise_pip: true
advertise_pip_border_only: false
domain_id_range: 1-100
advertise_pip_border_gateway: true
snmp_server_host_trap: true
auth_proto: MD5
dns_servers:
- ip_address: 10.200.253.13
vrf: management
ntp_servers:
- ip_address: 10.200.253.13
vrf: management
syslog_servers:
- ip_address: 10.200.253.19
vrf: management
severity: 4
ptp:
enable: true
domain_id: 10
lb_id: 0
intra_fabric_link_freeform: |
service-policy type qos input my_fabric_policy

With Nexus Dashboard 4.1 or earlier releases, eBGP underlay deployment requires specific policies to be configured for proper underlay and overlay operation.

Each leaf switch must have a leaf_bgp_asn policy to specify its BGP AS number:

policy.nac.yaml
---
vxlan:
policy:
policies:
- name: bgp_as_policy_leaf
template_name: leaf_bgp_asn
template_vars:
BGP_AS: "65000.4"
- name: bgp_as_policy_BL
template_name: leaf_bgp_asn
template_vars:
BGP_AS: "65000.5"
- name: bgp_as_policy_BGW
template_name: leaf_bgp_asn
template_vars:
BGP_AS: "65000.22"

For spine switches, use the custom ebgp_overlay_spine_all_neighbor_custom policy:

NDFC overrides description fields during deployment for the standard ebgp_overlay_spine_all_neighbor as these overlay policies are part of core system overlay policies, which interferes with VXLAN as Code tracking using the policy description. Therefore, a custom version with a different template name is required.

Important: You must manually duplicate the following templates in NDFC:

  • ebgp_overlay_spine_all_neighborebgp_overlay_spine_all_neighbor_custom
  • ebgp_overlay_leaf_all_neighborebgp_overlay_leaf_all_neighbor_custom

This step is required before using these templates. For template management instructions, refer to the Cisco NDFC Templates Documentation.

The LEAF_IP_LIST has the loopback0 addresses of leaf switches, and LEAF_ASNS has their ASN numbers. For instance, the leaf with loopback0 IP 10.12.0.249 has the ASN number “65000.22.”

policy.nac.yaml
policies:
- name: ebgp_overlay_spine_all_neighbor_custom
template_name: ebgp_overlay_spine_all_neighbor_custom
template_vars:
LEAF_IP_LIST: "10.12.0.249,10.12.0.199,10.12.0.198,10.12.0.254,10.12.0.253"
INTF_NAME: "Loopback0"
LEAF_ASNS: "65000.22,65000.4,65000.4,65000.5,65000.5"

For leaf switches, use the custom ebgp_overlay_leaf_all_neighbor_custom policy:

policy.nac.yaml
policies:
- name: ebgp_overlay_leaf_all_neighbor_custom
template_name: ebgp_overlay_leaf_all_neighbor_custom
template_vars:
SPINE_IP_LIST: "10.12.0.229,10.12.0.239"
INTF_NAME: "Loopback0"

Here’s a complete example showing all required policies with proper priority settings:

policy.nac.yaml
---
vxlan:
policy:
policies:
# Leaf BGP AS Policies
- name: bgp_as_policy_leaf
template_name: leaf_bgp_asn
template_vars:
BGP_AS: "65000.4"
- name: bgp_as_policy_BL
template_name: leaf_bgp_asn
template_vars:
BGP_AS: "65000.5"
- name: bgp_as_policy_BGW
template_name: leaf_bgp_asn
template_vars:
BGP_AS: "65000.22"
# Spine Overlay Policy
- name: ebgp_overlay_spine_all_neighbor_custom
template_name: ebgp_overlay_spine_all_neighbor_custom
template_vars:
LEAF_IP_LIST: "10.12.0.249,10.12.0.199,10.12.0.198,10.12.0.254,10.12.0.253"
INTF_NAME: "Loopback0"
LEAF_ASNS: "65000.22,65000.4,65000.4,65000.5,65000.5"
# Leaf Overlay Policy
- name: ebgp_overlay_leaf_all_neighbor_custom
template_name: ebgp_overlay_leaf_all_neighbor_custom
template_vars:
SPINE_IP_LIST: "10.12.0.229,10.12.0.239"
INTF_NAME: "Loopback0"
groups:
- name: leaf_group
policies:
- name: bgp_as_policy_leaf
- name: ebgp_overlay_leaf_all_neighbor_custom
- name: leaf_border_group
policies:
- name: bgp_as_policy_BGW
- name: ebgp_overlay_leaf_all_neighbor_custom
- name: leaf_border_leaf
policies:
- name: bgp_as_policy_BL
- name: ebgp_overlay_leaf_all_neighbor_custom
- name: spine_group
policies:
- name: ebgp_overlay_spine_all_neighbor_custom
switches:
- name: S1-S1
groups:
- spine_group
- name: S1-S2
groups:
- spine_group
- name: S1-L1
groups:
- leaf_group
- name: S1-L2
groups:
- leaf_group
- name: S1-BL1
groups:
- leaf_border_leaf
- name: S1-BL2
groups:
- leaf_border_leaf
- name: S1-BGW1
groups:
- leaf_border_group

For detailed information about eBGP fabric creation and deployment with Nexus Dashboard 4.2, refer to the Cisco ND Fabric Management Documentation.

Starting with release 4.2, Nexus Dashboard supports two new features for fabrics with eBGP overlay routing protocol:

  • BGP ASN Auto Allocation - Enables automated BGP ASN allocation for leaf switches, border devices, and border gateways in Multi-AS mode. Nexus Dashboard assigns unique ASNs from a pool. It cannot be enabled when ‘Allow same ASN on leafs’ is enabled. BGP ASN Auto Allocation is enabled by default.
  • Auto Config EVPN Overlay Peering - Automatically configures the eBGP EVPN overlay peerings. You do not need to manually configure the leaf and spine switch overlay policies anymore. Auto Config EVPN Overlay Peering is enabled by default. NaC VXLAN currently does not support to disable it.

With release 0.8.1, NaC VXLAN supports the following eBGP fabric scenarios with Nexus Dashboard 4.2 or later releases:

  • Multi-AS Mode with ASN Auto Allocation
  • Multi-AS Mode with Allow Same ASN On Leafs
  • Same-Tier-AS Mode

The following sections provide configuration examples for each of these scenarios.

In a Multi-AS fabric, a unique AS number per leaf/border is used. BGP ASN Auto Allocation is enabled by default. Nexus Dashboard will automatically generate the BGP ASN range. The ‘Allow Same ASN On Leafs’ option must be set to false.

global.nac.yaml
vxlan:
fabric:
name: eBGP-MultiAS-Fabric
type: eBGP_VXLAN
global:
ebgp:
spine_bgp_asn: "65000.3"
super_spine_bgp_asn: "65000.1"
bgp_asn_mode: Multi-AS
bgp_asn_auto_allocation: true
leaf_same_bgp_asn: false
anycast_gateway_mac: 20:20:00:00:00:aa

Multi-AS Mode with Allow Same ASN On Leafs

Section titled “Multi-AS Mode with Allow Same ASN On Leafs”

The ‘Allow Same ASN On Leafs’ option allows to use the same ASN on all leaf nodes even when you have configured Multi-AS mode. BGP ASN Auto Allocation must be disabled as ‘Allow Same ASN On Leafs’ and BGP ASN Auto Allocation are mutually exclusive.

global.nac.yaml
vxlan:
fabric:
name: eBGP-MultiAS-Fabric
type: eBGP_VXLAN
global:
ebgp:
spine_bgp_asn: "65000.3"
super_spine_bgp_asn: "65000.1"
bgp_asn_mode: Multi-AS
bgp_asn_auto_allocation: false
leaf_same_bgp_asn: true
anycast_gateway_mac: 20:20:00:00:00:aa

Since BGP ASN Auto Allocation is disabled in this scenario, each leaf/border switch must have a leaf_bgp_asn policy to specify its BGP AS number:

policy.nac.yaml
---
vxlan:
policy:
policies:
- name: bgp_as_policy_leaf
template_name: leaf_bgp_asn
template_vars:
BGP_AS: "65000.4"
- name: bgp_as_policy_BL
template_name: leaf_bgp_asn
template_vars:
BGP_AS: "65000.5"
- name: bgp_as_policy_BGW
template_name: leaf_bgp_asn
template_vars:
BGP_AS: "65000.22"

In a Same-Tier-AS fabric, all leaf nodes share one unique AS and all border nodes share another unique AS. BGP ASN Auto Allocation does not apply in this scenario.

global.nac.yaml
---
vxlan:
fabric:
name: eBGP-SameTierAS-Fabric
type: eBGP_VXLAN
global:
ebgp:
spine_bgp_asn: "65000.3"
super_spine_bgp_asn: "65000.1"
bgp_asn_mode: Same-Tier-AS
leaf_bgp_asn: "65000.4"
border_bgp_asn: "65000.22"
anycast_gateway_mac: 20:20:00:00:00:aa
Diagram
NameTypeConstraintMandatoryDefault Value
ebgpClass[ebgp]No

NameTypeConstraintMandatoryDefault Value
spine_bgp_asnStringRegex: ^(?:\d{1,10}|\d{1,5}\.\d{1,5})$Yes
super_spine_bgp_asnStringRegex: ^(?:\d{1,10}|\d{1,5}\.\d{1,5})$No
bgp_asn_modeChoiceMulti-AS, Same-Tier-ASNoMulti-AS
leaf_bgp_asnStringRegex: ^(?:\d{1,10}|\d{1,5}\.\d{1,5})$No
border_bgp_asnStringRegex: ^(?:\d{1,10}|\d{1,5}\.\d{1,5})$No
leaf_same_bgp_asnBooleantrue, falseNofalse
anycast_gateway_macAnyString[Regex: ^[a-f0-9]{1}\.[a-f0-9]{1}\.[a-f0-9]{1}$] or String[Regex: ^[a-f0-9]{4}\.[a-f0-9]{4}\.[a-f0-9]{4}$] or String[Regex: ^[a-f0-9]{2}:[a-f0-9]{2}:[a-f0-9]{2}:[a-f0-9]{2}:[a-f0-9]{2}:[a-f0-9]{2}$] or String[Regex: ^[a-f0-9]{2}-[a-f0-9]{2}-[a-f0-9]{2}-[a-f0-9]{2}-[a-f0-9]{2}-[a-f0-9]{2}$]No20:20:00:00:00:aa
overlay_modeChoicecli, config-profileNocli
layer2_vni_rangeClass[layer2_vni_range]No
layer3_vni_rangeClass[layer3_vni_range]No
layer2_vlan_rangeClass[layer2_vlan_range]No
layer3_vlan_rangeClass[layer3_vlan_range]No
enable_l3_vni_no_vlanBooleantrue, falseNofalse
multisite_site_idIntegermin: 1, max: 281474976710655No
vpcClass[vpc]No
ptpClass[ptp]No
snmp_server_host_trapBooleantrue, falseNotrue
enable_nxapi_httpBooleantrue, falseNofalse
nxapi_http_portIntegerNo80
enable_nxapi_httpsBooleantrue, falseNotrue
nxapi_https_portIntegerNo443
auth_protoChoiceMD5, SHA, MD5_DES, MD5_AES, SHA_DES, SHA_AESNoMD5
dns_serversList[dns_servers]No
ntp_serversList[ntp_servers]No
syslog_serversList[syslog_servers]No
netflowClass[netflow]No
bootstrapClass[bootstrap]No
aaa_freeformStringNo
banner_freeformStringNo
leaf_pre_interface_freeformStringNo
leaf_post_interface_freeformStringNo
spine_pre_interface_freeformStringNo
spine_post_interface_freeformStringNo
tor_pre_interface_freeformStringNo
tor_post_interface_freeformStringNo
intra_fabric_link_freeformStringNo

NameTypeConstraintMandatoryDefault Value
fromIntegermin: 1, max: 16777214Yes30000
toIntegermin: 1, max: 16777214No49000

NameTypeConstraintMandatoryDefault Value
fromIntegermin: 1, max: 16777214Yes50000
toIntegermin: 1, max: 16777214No59000

NameTypeConstraintMandatoryDefault Value
fromIntegermin: 2, max: 4094Yes2300
toIntegermin: 2, max: 4094No2999

NameTypeConstraintMandatoryDefault Value
fromIntegermin: 2, max: 4094Yes2000
toIntegermin: 2, max: 4094No2299

NameTypeConstraintMandatoryDefault Value
peer_link_vlanIntegermin: 2, max: 3967No3600
peer_keep_aliveChoiceloopback, managementNomanagement
auto_recovery_timeIntegermin: 240, max: 3600No360
delay_restore_timeIntegermin: 1, max: 3600No150
peer_link_port_channel_idIntegermin: 1, max: 4096No500
ipv6_nd_syncBooleantrue, falseNotrue
advertise_pipBooleantrue, falseNofalse
advertise_pip_border_onlyBooleantrue, falseNotrue
advertise_pip_border_gatewayBooleantrue, falseNofalse
domain_id_rangeStringNo1-1000
fabric_vpc_qosBooleantrue, falseNofalse
fabric_vpc_qos_policy_nameStringNospine_qos_for_fabric_vpc_peering

NameTypeConstraintMandatoryDefault Value
enableBooleantrue, falseNofalse
domain_idIntegermin: 0, max: 127No0
lb_idIntegermin: 0, max: 1023No0
vlan_idIntegermin: 2, max: 3967No

NameTypeConstraintMandatoryDefault Value
ip_addressIPYes
vrfStringYes

NameTypeConstraintMandatoryDefault Value
ip_addressIPYes
vrfStringYes

NameTypeConstraintMandatoryDefault Value
ip_addressIPYes
vrfStringYes
severityIntegermin: 0, max: 7Yes

NameTypeConstraintMandatoryDefault Value
enableBooleantrue, falseNofalse
exporterList[exporter]No
recordList[record]No
monitorList[monitor]No

NameTypeConstraintMandatoryDefault Value
enable_bootstrapBooleantrue, falseNofalse
enable_local_dhcp_serverBooleantrue, falseNofalse
dhcp_versionChoiceDHCPv4, DHCPv6No
dhcp_v4Class[dhcp_v4]No
dhcp_v6Class[dhcp_v6]No
enable_cdp_mgmtBooleantrue, falseNofalse
bootstrap_freeformStringNo

NameTypeConstraintMandatoryDefault Value
nameStringYes
ip_addressIPYes
vrfStringNo
source_interfaceStringRegex: (?i)^(?:e|eth(?:ernet)?)\d(?:\/\d+){1,2}(\.\d{1,4})?$Yes
udp_portIntegermin: 1, max: 65535Yes

NameTypeConstraintMandatoryDefault Value
nameStringYes
templateChoicenetflow_ipv4_record, netflow_l2_recordYes
layer2Booleantrue, falseNo

NameTypeConstraintMandatoryDefault Value
nameStringYes
recordStringYes
exporter1StringYes
exporter2StringNo

NameTypeConstraintMandatoryDefault Value
scope_start_addressIPYes
scope_end_addressIPYes
switch_mgmt_default_gwIPYes
mgmt_prefixIntegermin: 8, max: 30Yes
multi_subnet_scopeStringNo
domain_nameStringNo

NameTypeConstraintMandatoryDefault Value
scope_start_addressIPYes
scope_end_addressIPYes
switch_mgmt_default_gwIPYes
mgmt_prefixIntegermin: 64, max: 126Yes
multi_subnet_scopeStringNo
domain_nameStringNo

For detailed information about eBGP fabric creation and deployment, refer to the Cisco NDFC BGP Fabric Documentation.

global.nac.yaml
vxlan:
fabric:
name: ebgp-fabric
type: eBGP_VXLAN
global:
ebgp:
spine_bgp_asn: "65000.3"
super_spine_bgp_asn: "65000.1"
bgp_asn_mode: Multi-AS
leaf_same_bgp_asn: true
anycast_gateway_mac: 20:20:00:00:00:aa
layer2_vni_range:
from: 30000
to: 49000
layer3_vni_range:
from: 50000
to: 59000
layer2_vlan_range:
from: 2300
to: 2999
layer3_vlan_range:
from: 2000
to: 2299
vpc:
peer_link_vlan: 3600
peer_keep_alive: management
auto_recovery_time: 360
delay_restore_time: 150
peer_link_port_channel_id: 500
ipv6_nd_sync: false
advertise_pip: true
advertise_pip_border_only: false
domain_id_range: 1-100
advertise_pip_border_gateway: true
snmp_server_host_trap: true
auth_proto: MD5
dns_servers:
- ip_address: 10.200.253.13
vrf: management
ntp_servers:
- ip_address: 10.200.253.13
vrf: management
syslog_servers:
- ip_address: 10.200.253.19
vrf: management
severity: 4
intra_fabric_link_freeform: |
service-policy type qos input my_fabric_policy

eBGP underlay deployment requires specific policies to be configured for proper underlay and overlay operation.

Each leaf switch must have a leaf_bgp_asn policy to specify its BGP AS number:

policy.nac.yaml
---
vxlan:
policy:
policies:
- name: bgp_as_policy_leaf
template_name: leaf_bgp_asn
template_vars:
BGP_AS: "65000.4"
- name: bgp_as_policy_BL
template_name: leaf_bgp_asn
template_vars:
BGP_AS: "65000.5"
- name: bgp_as_policy_BGW
template_name: leaf_bgp_asn
template_vars:
BGP_AS: "65000.22"

For spine switches, use the custom ebgp_overlay_spine_all_neighbor_custom policy:

NDFC overrides description fields during deployment for the standard ebgp_overlay_spine_all_neighbor as these overlay policies are part of core system overlay policies, which interferes with VXLAN as Code tracking using the policy description. Therefore, a custom version with a different template name is required.

Important: You must manually duplicate the following templates in NDFC:

  • ebgp_overlay_spine_all_neighborebgp_overlay_spine_all_neighbor_custom
  • ebgp_overlay_leaf_all_neighborebgp_overlay_leaf_all_neighbor_custom

This step is required before using these templates. For template management instructions, refer to the Cisco NDFC Templates Documentation.

The LEAF_IP_LIST has the loopback0 addresses of leaf switches, and LEAF_ASNS has their ASN numbers. For instance, the leaf with loopback0 IP 10.12.0.249 has the ASN number “65000.22.”

policy.nac.yaml
policies:
- name: ebgp_overlay_spine_all_neighbor_custom
template_name: ebgp_overlay_spine_all_neighbor_custom
template_vars:
LEAF_IP_LIST: "10.12.0.249,10.12.0.199,10.12.0.198,10.12.0.254,10.12.0.253"
INTF_NAME: "Loopback0"
LEAF_ASNS: "65000.22,65000.4,65000.4,65000.5,65000.5"

For leaf switches, use the custom ebgp_overlay_leaf_all_neighbor_custom policy:

policy.nac.yaml
policies:
- name: ebgp_overlay_leaf_all_neighbor_custom
template_name: ebgp_overlay_leaf_all_neighbor_custom
template_vars:
SPINE_IP_LIST: "10.12.0.229,10.12.0.239"
INTF_NAME: "Loopback0"

Here’s a complete example showing all required policies with proper priority settings:

policy.nac.yaml
---
vxlan:
policy:
policies:
# Leaf BGP AS Policies
- name: bgp_as_policy_leaf
template_name: leaf_bgp_asn
template_vars:
BGP_AS: "65000.4"
- name: bgp_as_policy_BL
template_name: leaf_bgp_asn
template_vars:
BGP_AS: "65000.5"
- name: bgp_as_policy_BGW
template_name: leaf_bgp_asn
template_vars:
BGP_AS: "65000.22"
# Spine Overlay Policy
- name: ebgp_overlay_spine_all_neighbor_custom
template_name: ebgp_overlay_spine_all_neighbor_custom
template_vars:
LEAF_IP_LIST: "10.12.0.249,10.12.0.199,10.12.0.198,10.12.0.254,10.12.0.253"
INTF_NAME: "Loopback0"
LEAF_ASNS: "65000.22,65000.4,65000.4,65000.5,65000.5"
# Leaf Overlay Policy
- name: ebgp_overlay_leaf_all_neighbor_custom
template_name: ebgp_overlay_leaf_all_neighbor_custom
template_vars:
SPINE_IP_LIST: "10.12.0.229,10.12.0.239"
INTF_NAME: "Loopback0"
groups:
- name: leaf_group
policies:
- name: bgp_as_policy_leaf
- name: ebgp_overlay_leaf_all_neighbor_custom
- name: leaf_border_group
policies:
- name: bgp_as_policy_BGW
- name: ebgp_overlay_leaf_all_neighbor_custom
- name: leaf_border_leaf
policies:
- name: bgp_as_policy_BL
- name: ebgp_overlay_leaf_all_neighbor_custom
- name: spine_group
policies:
- name: ebgp_overlay_spine_all_neighbor_custom
switches:
- name: S1-S1
groups:
- spine_group
- name: S1-S2
groups:
- spine_group
- name: S1-L1
groups:
- leaf_group
- name: S1-L2
groups:
- leaf_group
- name: S1-BL1
groups:
- leaf_border_leaf
- name: S1-BL2
groups:
- leaf_border_leaf
- name: S1-BGW1
groups:
- leaf_border_group
Diagram
NameTypeConstraintMandatoryDefault Value
ebgpClass[ebgp]No

NameTypeConstraintMandatoryDefault Value
spine_bgp_asnStringRegex: ^(?:\d{1,10}|\d{1,5}\.\d{1,5})$Yes
super_spine_bgp_asnStringRegex: ^(?:\d{1,10}|\d{1,5}\.\d{1,5})$No
bgp_asn_modeChoiceMulti-AS, Same-Tier-ASNoMulti-AS
leaf_bgp_asnStringRegex: ^(?:\d{1,10}|\d{1,5}\.\d{1,5})$No
border_bgp_asnStringRegex: ^(?:\d{1,10}|\d{1,5}\.\d{1,5})$No
leaf_same_bgp_asnBooleantrue, falseNofalse
anycast_gateway_macAnyString[Regex: ^[a-f0-9]{1}\.[a-f0-9]{1}\.[a-f0-9]{1}$] or String[Regex: ^[a-f0-9]{4}\.[a-f0-9]{4}\.[a-f0-9]{4}$] or String[Regex: ^[a-f0-9]{2}:[a-f0-9]{2}:[a-f0-9]{2}:[a-f0-9]{2}:[a-f0-9]{2}:[a-f0-9]{2}$] or String[Regex: ^[a-f0-9]{2}-[a-f0-9]{2}-[a-f0-9]{2}-[a-f0-9]{2}-[a-f0-9]{2}-[a-f0-9]{2}$]No20:20:00:00:00:aa
overlay_modeChoicecli, config-profileNocli
layer2_vni_rangeClass[layer2_vni_range]No
layer3_vni_rangeClass[layer3_vni_range]No
layer2_vlan_rangeClass[layer2_vlan_range]No
layer3_vlan_rangeClass[layer3_vlan_range]No
enable_mvpn_vri_id_rangeBooleantrue, falseNotrue
enable_l3_vni_no_vlanBooleantrue, falseNofalse
multisite_site_idIntegermin: 1, max: 281474976710655No
vpcClass[vpc]No
ptpClass[ptp]No
snmp_server_host_trapBooleantrue, falseNotrue
enable_nxapi_httpBooleantrue, falseNofalse
nxapi_http_portIntegerNo80
enable_nxapi_httpsBooleantrue, falseNotrue
nxapi_https_portIntegerNo443
auth_protoChoiceMD5, SHA, MD5_DES, MD5_AES, SHA_DES, SHA_AESNoMD5
dns_serversList[dns_servers]No
ntp_serversList[ntp_servers]No
syslog_serversList[syslog_servers]No
netflowClass[netflow]No
bootstrapClass[bootstrap]No

NameTypeConstraintMandatoryDefault Value
fromIntegermin: 1, max: 16777214Yes30000
toIntegermin: 1, max: 16777214No49000

NameTypeConstraintMandatoryDefault Value
fromIntegermin: 1, max: 16777214Yes50000
toIntegermin: 1, max: 16777214No59000

NameTypeConstraintMandatoryDefault Value
fromIntegermin: 2, max: 4094Yes2300
toIntegermin: 2, max: 4094No2999

NameTypeConstraintMandatoryDefault Value
fromIntegermin: 2, max: 4094Yes2000
toIntegermin: 2, max: 4094No2299

NameTypeConstraintMandatoryDefault Value
peer_link_vlanIntegermin: 2, max: 3967No3600
peer_keep_aliveChoiceloopback, managementNomanagement
auto_recovery_timeIntegermin: 240, max: 3600No360
delay_restore_timeIntegermin: 1, max: 3600No150
peer_link_port_channel_idIntegermin: 1, max: 4096No500
ipv6_nd_syncBooleantrue, falseNotrue
advertise_pipBooleantrue, falseNofalse
advertise_pip_border_onlyBooleantrue, falseNotrue
advertise_pip_border_gatewayBooleantrue, falseNofalse
domain_id_rangeStringNo1-1000
fabric_vpc_qosBooleantrue, falseNofalse
fabric_vpc_qos_policy_nameStringNospine_qos_for_fabric_vpc_peering

NameTypeConstraintMandatoryDefault Value
enableBooleantrue, falseNofalse
domain_idIntegermin: 0, max: 127No0
lb_idIntegermin: 0, max: 1023No0
vlan_idIntegermin: 2, max: 3967No

NameTypeConstraintMandatoryDefault Value
ip_addressIPYes
vrfStringYes

NameTypeConstraintMandatoryDefault Value
ip_addressIPYes
vrfStringYes

NameTypeConstraintMandatoryDefault Value
ip_addressIPYes
vrfStringYes
severityIntegermin: 0, max: 7Yes

NameTypeConstraintMandatoryDefault Value
enableBooleantrue, falseNofalse
exporterList[exporter]No
recordList[record]No
monitorList[monitor]No

NameTypeConstraintMandatoryDefault Value
enable_bootstrapBooleantrue, falseNofalse
enable_local_dhcp_serverBooleantrue, falseNofalse
dhcp_versionChoiceDHCPv4, DHCPv6No
dhcp_v4Class[dhcp_v4]No
dhcp_v6Class[dhcp_v6]No
enable_cdp_mgmtBooleantrue, falseNofalse

NameTypeConstraintMandatoryDefault Value
nameStringYes
ip_addressIPYes
vrfStringNo
source_interfaceStringRegex: (?i)^(?:e|eth(?:ernet)?)\d(?:\/\d+){1,2}(\.\d{1,4})?$Yes
udp_portIntegermin: 1, max: 65535Yes

NameTypeConstraintMandatoryDefault Value
nameStringYes
templateChoicenetflow_ipv4_record, netflow_l2_recordYes
layer2Booleantrue, falseNo

NameTypeConstraintMandatoryDefault Value
nameStringYes
recordStringYes
exporter1StringYes
exporter2StringNo

NameTypeConstraintMandatoryDefault Value
scope_start_addressIPYes
scope_end_addressIPYes
switch_mgmt_default_gwIPYes
mgmt_prefixIntegermin: 8, max: 30Yes
multi_subnet_scopeStringNo
domain_nameStringNo

NameTypeConstraintMandatoryDefault Value
scope_start_addressIPYes
scope_end_addressIPYes
switch_mgmt_default_gwIPYes
mgmt_prefixIntegermin: 64, max: 126Yes
multi_subnet_scopeStringNo
domain_nameStringNo

For detailed information about eBGP fabric creation and deployment, refer to the Cisco NDFC BGP Fabric Documentation.

global.nac.yaml
vxlan:
fabric:
name: ebgp-fabric
type: eBGP_VXLAN
global:
ebgp:
spine_bgp_asn: "65000.3"
super_spine_bgp_asn: "65000.1"
bgp_asn_mode: Multi-AS
leaf_same_bgp_asn: true
anycast_gateway_mac: 20:20:00:00:00:aa
layer2_vni_range:
from: 30000
to: 49000
layer3_vni_range:
from: 50000
to: 59000
layer2_vlan_range:
from: 2300
to: 2999
layer3_vlan_range:
from: 2000
to: 2299
vpc:
peer_link_vlan: 3600
peer_keep_alive: management
auto_recovery_time: 360
delay_restore_time: 150
peer_link_port_channel_id: 500
ipv6_nd_sync: false
advertise_pip: true
advertise_pip_border_only: false
domain_id_range: 1-100
advertise_pip_border_gateway: true
snmp_server_host_trap: true
auth_proto: MD5
dns_servers:
- ip_address: 10.200.253.13
vrf: management
ntp_servers:
- ip_address: 10.200.253.13
vrf: management
syslog_servers:
- ip_address: 10.200.253.19
vrf: management
severity: 4

eBGP underlay deployment requires specific policies to be configured for proper underlay and overlay operation.

Each leaf switch must have a leaf_bgp_asn policy to specify its BGP AS number:

policy.nac.yaml
---
vxlan:
policy:
policies:
- name: bgp_as_policy_leaf
template_name: leaf_bgp_asn
template_vars:
BGP_AS: "65000.4"
- name: bgp_as_policy_BL
template_name: leaf_bgp_asn
template_vars:
BGP_AS: "65000.5"
- name: bgp_as_policy_BGW
template_name: leaf_bgp_asn
template_vars:
BGP_AS: "65000.22"

For spine switches, use the custom ebgp_overlay_spine_all_neighbor_custom policy:

NDFC overrides description fields during deployment for the standard ebgp_overlay_spine_all_neighbor as these overlay policies are part of core system overlay policies, which interferes with VXLAN as Code tracking using the policy description. Therefore, a custom version with a different template name is required.

Important: You must manually duplicate the following templates in NDFC:

  • ebgp_overlay_spine_all_neighborebgp_overlay_spine_all_neighbor_custom
  • ebgp_overlay_leaf_all_neighborebgp_overlay_leaf_all_neighbor_custom

This step is required before using these templates. For template management instructions, refer to the Cisco NDFC Templates Documentation.

The LEAF_IP_LIST has the loopback0 addresses of leaf switches, and LEAF_ASNS has their ASN numbers. For instance, the leaf with loopback0 IP 10.12.0.249 has the ASN number “65000.22.”

policy.nac.yaml
policies:
- name: ebgp_overlay_spine_all_neighbor_custom
template_name: ebgp_overlay_spine_all_neighbor_custom
template_vars:
LEAF_IP_LIST: "10.12.0.249,10.12.0.199,10.12.0.198,10.12.0.254,10.12.0.253"
INTF_NAME: "Loopback0"
LEAF_ASNS: "65000.22,65000.4,65000.4,65000.5,65000.5"

For leaf switches, use the custom ebgp_overlay_leaf_all_neighbor_custom policy:

policy.nac.yaml
policies:
- name: ebgp_overlay_leaf_all_neighbor_custom
template_name: ebgp_overlay_leaf_all_neighbor_custom
template_vars:
SPINE_IP_LIST: "10.12.0.229,10.12.0.239"
INTF_NAME: "Loopback0"

Here’s a complete example showing all required policies with proper priority settings:

policy.nac.yaml
---
vxlan:
policy:
policies:
# Leaf BGP AS Policies
- name: bgp_as_policy_leaf
template_name: leaf_bgp_asn
template_vars:
BGP_AS: "65000.4"
- name: bgp_as_policy_BL
template_name: leaf_bgp_asn
template_vars:
BGP_AS: "65000.5"
- name: bgp_as_policy_BGW
template_name: leaf_bgp_asn
template_vars:
BGP_AS: "65000.22"
# Spine Overlay Policy
- name: ebgp_overlay_spine_all_neighbor_custom
template_name: ebgp_overlay_spine_all_neighbor_custom
template_vars:
LEAF_IP_LIST: "10.12.0.249,10.12.0.199,10.12.0.198,10.12.0.254,10.12.0.253"
INTF_NAME: "Loopback0"
LEAF_ASNS: "65000.22,65000.4,65000.4,65000.5,65000.5"
# Leaf Overlay Policy
- name: ebgp_overlay_leaf_all_neighbor_custom
template_name: ebgp_overlay_leaf_all_neighbor_custom
template_vars:
SPINE_IP_LIST: "10.12.0.229,10.12.0.239"
INTF_NAME: "Loopback0"
groups:
- name: leaf_group
policies:
- name: bgp_as_policy_leaf
- name: ebgp_overlay_leaf_all_neighbor_custom
- name: leaf_border_group
policies:
- name: bgp_as_policy_BGW
- name: ebgp_overlay_leaf_all_neighbor_custom
- name: leaf_border_leaf
policies:
- name: bgp_as_policy_BL
- name: ebgp_overlay_leaf_all_neighbor_custom
- name: spine_group
policies:
- name: ebgp_overlay_spine_all_neighbor_custom
switches:
- name: S1-S1
groups:
- spine_group
- name: S1-S2
groups:
- spine_group
- name: S1-L1
groups:
- leaf_group
- name: S1-L2
groups:
- leaf_group
- name: S1-BL1
groups:
- leaf_border_leaf
- name: S1-BL2
groups:
- leaf_border_leaf
- name: S1-BGW1
groups:
- leaf_border_group