If you've gone looking for a VRF-level BGP Timer Policy in Nexus Dashboard Orchestrator and come up empty, you're not missing a menu — it genuinely isn't there yet. Here's what we found while troubleshooting this on a live Multi-Site fabric with a mix of stretched and local VRFs, the workaround Cisco TAC confirmed as supported, and exactly how to verify the new timers actually took effect instead of just assuming they did.
- The gap: NDO does not expose a BGP Timer Policy at the VRF level for ACI Multi-Site — only at the L3Out node level (via L3Out Node Routing Policy → BGP Node Settings).
- The workaround: Create and apply the BGP Timer Policy directly on APIC, per site, against the target VRF (local or stretched). Cisco TAC confirmed this is the correct and supported method.
- The catch: BGP timers are negotiated during the initial handshake. Changing the policy alone does nothing to an already-established session — you need a hard reset of the BGP session for the new keepalive/hold values to take effect.
- Don't trust the config alone. "Configured" timers and "negotiated" (active) timers are two different things in
show bgpoutput — always verify the negotiated value after the reset, not just the configuration.
The Problem: No VRF-Level BGP Timer Option in NDO
In a single-site APIC deployment, applying a custom BGP Timer Policy to a VRF is straightforward — it's a native object under Tenant → Networking → VRF → BGP Context Per Address Family. In Multi-Site environments managed through NDO, that granularity isn't there. NDO's L3Out configuration model lets you attach a BGP Node Routing Policy (with its own keepalive/hold timers) to a node group inside an L3Out template — but there's no equivalent construct for applying timers at the VRF level, independent of a specific L3Out's node groups.
For environments running mixed local and stretched VRFs across sites, that's a real gap: you may want consistent BGP timer behavior tied to the VRF itself, not scattered across every L3Out node group that happens to reference it.
What We Asked Cisco TAC
Rather than guess, we opened a case and asked directly. Here's the exchange, included for anyone hitting the same wall:
Our question:
We need to deploy BGP timers on a VRF within our ACI Multi-Site fabric. Our environment contains both stretched and local VRFs. We do not see an option in NDO to apply BGP timers at the VRF level. Therefore, we are planning to use the following approach: 1) Create a BGP Timer Policy on the APIC. 2) Apply the BGP Timer Policy to the target VRF (local or stretched) via APIC only. Could you please confirm whether the above procedure is the correct and supported method for configuring BGP timers in an ACI Multi-Site environment? Additionally, after applying the policy, we do not see the updated timer values reflected on the BGP neighbour sessions. Is a BGP session reset (hard reset) required for the new timer values to take effect, or are there any additional steps that need to be performed?
Cisco's response:
Configuration Method: Your proposed approach is correct. As NDO does not currently support configuring BGP Timer Policies at the VRF level, applying these policies directly via the APIC on each respective site is the standard and supported method.
Session Reset: Yes, a BGP session reset (hard reset) is required for the new timer values to take effect. Because these timers are negotiated during the initial BGP handshake, the existing sessions must be torn down and re-established to renegotiate the new keepalive and hold-down values with the neighbor.
Two things worth underlining from that response: this is a per-site, APIC-side configuration — NDO is not the tool for VRF-level BGP timers today — and a hard reset is mandatory, not optional, for the values to actually apply.
Step-by-Step: Applying the BGP Timer Policy to a VRF via APIC
- Log into the APIC GUI for the site containing the target VRF (do this per site for stretched VRFs — there's no single-pane push for this from NDO).
- Navigate to Tenants → <tenant> → Networking → VRFs → <vrf-name>.
- Under the VRF, go to the BGP Context Per Address Family (create one for each address family in use — IPv4 and/or IPv6).
- Set the BGP Timers field to a custom BGP Timer Policy, or create a new one:
- Go to Tenants → <tenant> → Policies → Protocol → BGP → BGP Timers, right-click and Create BGP Timers Policy.
- Set Keepalive Interval (sec) and Hold Interval (sec) to your target values (keep the standard 1:3 ratio — e.g., 4/12 or 10/30 — most implementations expect hold time to be roughly 3x keepalive).
- Apply the policy to the VRF's BGP Context Per Address Family and submit.
- Repeat per site for any stretched VRF — this is not propagated automatically across the Multi-Site domain since it's an APIC-local object, not an NDO-managed one.
- Confirm the object landed correctly:
GET https://<apic>/api/node/mo/uni/tn-<tenant>/ctx-<vrf>/bgpCtxAfP-ipv4-ucast.jsonCheck for the tnBgpTimersPolName attribute pointing to your new policy.
Why the Timers Won't Show Up Until You Reset the Session
This trips people up every time: BGP keepalive and hold timers are exchanged in the OPEN message during session establishment — they're not a live, continuously-enforced parameter that updates on the fly. Changing the policy updates the configuration, but an already-established session keeps running on whatever timers it originally negotiated until it's torn down and rebuilt.
That means after step 7 above, show bgp will show your configured timers, but the negotiated/active timers on any existing session will still be the old values — until you force a reset.
Verifying the Change Actually Took Effect
Don't just trust the APIC MO or the CLI's "configured" line — verify the negotiated value, which is what's actually governing the session.
1. Check the configured value on the border leaf:
show bgp <afi> unicast neighbors <peer-ip> vrf <tenant>:<vrf-name>Look for: Configured hold time is 12, keepalive interval is 4 seconds
2. Check the negotiated (active) value in the same output:
Look for: Hold time is X, keepalive interval is Y seconds
If X/Y still show the old defaults, the session hasn't renegotiated — move to step 3.
3. Force the hard reset:
clear bgp <afi> unicast <peer-ip> vrf <tenant>:<vrf-name>A soft clear will not renegotiate timers — timers only get exchanged at session establishment, so this has to be a hard clear.
4. Re-check the negotiated value after the reset:
show bgp <afi> unicast neighbors <peer-ip> vrf <tenant>:<vrf-name>The negotiated value will be the lower of what each side offers — if your peer's own BGP timer configuration is set higher (or lower) than yours, that governs the final negotiated result, not your configured value alone.
5. Confirm real-world keepalive cadence:
show bgp <afi> unicast neighbors <peer-ip> vrf <tenant>:<vrf-name> | include "Last read"Run this two or three times a few seconds apart — "Last read" should reset roughly every N seconds, matching your new keepalive interval.
6. Watch for flapping after the change, especially with aggressive timers like 4/12:
show bgp <afi> unicast neighbors <peer-ip> vrf <tenant>:<vrf-name> | include "Last reset"
show logging logfile | include BGPA Word of Caution on Aggressive Timers
Tighter timers (like 4-second keepalive / 12-second hold) improve failure-detection speed, but they raise the risk of false-positive flaps on links with variable latency, high CPU load on the peer device, or congested control-plane paths. Before rolling this out broadly across a Multi-Site fabric, test it on a single non-critical VRF/L3Out first and monitor for a few days.
FAQ
Does NDO support VRF-level BGP timers at all? Not currently. The only BGP timer construct exposed in NDO is at the L3Out node group level (L3Out Node Routing Policy → BGP Node Settings). VRF-level BGP Timer Policies must be applied directly on APIC, per Cisco TAC's confirmation.
Will this survive an NDO template push or resync? Since the VRF-level BGP Timers Policy is applied directly on APIC and not modeled in the NDO template, it should not be overwritten by a standard template redeploy — but any workflow that deletes and recreates the VRF from NDO would remove it. Treat it as an out-of-band configuration and document it clearly for your team.
Do I need to reset the session on both sides of the peering, or just my side? Just your side's session needs a hard clear to force renegotiation — BGP will tear down and rebuild the full session, which inherently re-triggers the handshake and timer exchange on both ends.
What's a safe keepalive/hold ratio to use? Cisco and most vendors expect hold time to be roughly 3x keepalive (e.g., 4/12, 10/30, 20/60). Going below that ratio, or setting a very low hold time on a link with real latency or jitter, increases false-positive flap risk.
Is this the same procedure for a stretched VRF across multiple sites? Yes, but it must be repeated per site — this is an APIC-local object, and NDO doesn't propagate it across the Multi-Site domain automatically. For a stretched VRF, log into each site's APIC and apply the same BGP Timer Policy independently.
Related Reading on Networklearner
- Why BGP Maximum-Paths Wasn't the Problem: Fixing Uneven Port-Channel Traffic on Cisco Nexus and IOS
- Complete Firewalls Port Reference for Cisco ACI, Nexus Dashboard, NDO and NDI
- BGP: Active Open Failed - No Route to Peer
- Weight Attribute - BGP
- BGP Attributes: Well Known vs Optional
- BGP Attribute - AS Prepend
- Cisco ACI Static EPG Configuration – Step-by-Step Deployment Guide
- Complete Steps to Create vPC in Cisco ACI (via APIC GUI)
Author note: I am a network professional with over 18 years of experience in enterprise and data-center networking, CCIE Data Center certified, with hands-on expertise in Cisco Nexus and Cisco ACI design, deployment, troubleshooting, and operations. Available for Cisco ACI and Nexus freelancing/consulting work.
No comments:
Post a Comment