Cisco Nexus and NX-OS

Cisco Nexus, from first boot to the next upgrade

Cisco Nexus switches sit at the core of many of the data centres I have worked in. NX-OS (Nexus Operating System) is built to keep forwarding: each feature runs as its own process, changes can be checked and rolled back, and software can be upgraded while traffic flows. This page shows how NX-OS works, how I build vPC (virtual port channel) pairs that fail safely, and how I upgrade, automate and troubleshoot Nexus.

  • NX-OS architecture
  • Nexus families
  • vPC in depth
  • Checkpoints and rollback
  • ISSU and GIR
  • POAP and NX-API
  • Ethanalyzer and SPAN
  • CoPP and AAA
A vPC pair of Nexus leaves under two spines A server is bundled to two Nexus leaves, A and B, joined by a peer link. Both leaves forward the server's traffic up to two spines, and replies come back down both links. Spine 1Nexus 9500 Spine 2Nexus 9500 Leaf ANX-OS, primary Leaf BNX-OS, secondary Serverone LACP bundle peer link
Live view · two switches, one logical partner for the server
NX-OS architecture

A switch operating system built to keep forwarding

NX-OS (Nexus Operating System) grew out of Cisco SAN-OS, the software for its storage switches, and runs on a Linux kernel. Its design goal differs from classic IOS (Internetwork Operating System): a fault in one part should not stop the switch forwarding. Choose a state to see how it handles a crash, a patch, a disabled feature and a supervisor fault.

How NX-OS keeps running when a part fails NX-OS in layers. Six feature processes sit on top: BGP, OSPF, the vPC manager, LACP, HSRP and spanning tree. Below them are the system manager, MTS for messages and PSS for saved state, then the Linux kernel, then the supervisors and the forwarding ASICs. Traffic keeps flowing through the ASICs while a process crashes and restarts, is patched, is disabled, or while a standby supervisor takes over. Feature processes, each in its own memory Hardware BGPbgp OSPFospf vPC managervpcm LACPlacp HSRPhsrp Spanning treestp System managersysmgr: start, watch, restart MTSmessages between processes PSSstate kept across restarts Linux kernel Active supervisorCPU, memory, mgmt0 Standby supervisormodular chassis only Forwarding ASICstables in hardware traffic keeps flowing in hardware Every feature process running OSPF crashed: restarted with its saved state Hot SMU: BGP patched, about 10 ms no feature hsrp: the process is gone Kernel fault: the standby takes over

Swipe sideways to see the whole diagram.

Each feature runs as its own process with protected memory, and starts only when I enable it. Processes talk through MTS (message and transaction service). The system manager starts and watches them. The kernel watches the system manager, and hardware watches the kernel.

OSPF (Open Shortest Path First) crashes. The system manager restarts it, and it reloads its state from PSS (persistent storage service), so it resumes instead of starting cold. Other processes and the forwarding ASICs (application specific integrated circuits) carry on. show processes log and show cores show what happened.

A hot SMU (software maintenance update) fixes one process without a reload. The process saves its state, stops, is replaced and restarts. Cisco quotes about 10 ms of recovery for a hot SMU, with no effect on traffic.

With no feature hsrp the HSRP (Hot Standby Router Protocol) process is not running at all. Nothing listens, nothing uses memory, and there is less to attack. NX-OS takes a system checkpoint when a feature is disabled, so the change can be rolled back.

A fault in the kernel is beyond a process restart. On a chassis with two supervisors, the standby takes over in a stateful switchover, because its state is already in sync. A fixed switch has one supervisor, so it reloads.

Animation

Habits that change when I move from IOS

Features start switched off

Nothing runs until I enable it: feature ospf, feature lacp, feature vpc, feature interface-vlan. show feature lists what is on. Fewer processes means less to patch and less to attack.

Management has its own routing table

mgmt0 sits in its own VRF (virtual routing and forwarding instance), called management, so I write ping 10.0.0.1 vrf management and point AAA (authentication, authorisation and accounting), syslog and NTP (Network Time Protocol) at it. Forgetting it is the most common first day fault.

Show commands work anywhere

I can run show commands inside configuration mode without do. Every interface is called Ethernet, whatever its speed, such as Ethernet1/49.

Saving and comparing

show running-config diff shows changes not yet saved, and copy running-config startup-config saves them. Checkpoints and rollback are built in.

Linux underneath

With feature bash-shell and the right role I can open a Bash shell on the switch. Access is controlled by RBAC (role based access control). Python runs on the switch too.

One image across families

The same NX-OS image runs on Nexus 9000 and Nexus 3000 switches. ACI (Application Centric Infrastructure) mode is a different image on the same Nexus 9000 hardware.

Features I enable most

CommandWhat it turns onWhere I use it
feature lacp, feature vpcLACP (Link Aggregation Control Protocol) and virtual port channelsEvery leaf pair
feature interface-vlan, feature hsrpSVIs (switched virtual interfaces), one per VLAN (virtual LAN), and the HSRP gatewayClassic Layer 3 at the aggregation layer
feature ospf, feature bgp, feature pimRouting and multicast processesUnderlay and border routing
feature nv overlay, nv overlay evpnVXLAN (Virtual Extensible LAN) with an EVPN (Ethernet VPN) control planeFabrics, covered on the VXLAN EVPN page
feature tacacs+Device logins and command authorisation through TACACS+ (Terminal Access Controller Access Control System Plus)Every switch
feature nxapi, feature telemetryThe NX-API and streaming telemetryAutomation and monitoring
feature ptpPTP (Precision Time Protocol)Trading and media networks

NX-OS 10 reports licence use through Smart Licensing Using Policy, with Essentials and Advantage tiers. Before a design is signed off, I check which tier each feature in it needs, so the order includes the right licences.

Nexus families

Which Nexus, for which job

Nexus has changed a lot since the first switches shipped in 2008. The Nexus 9000 family now carries almost every new design, while estates I inherit often still run 7000, 5000 and 2000 hardware. This table is how I place each family, then how the same hardware can run in three different ways.

FamilyRoleWhat to knowStatus in October 2026
Nexus 9300Leaf, top of rack, small spineFixed switches from 1G to 400G and beyond, in generations named by suffix: EX, FX, FX2, FX3, GX and GX2. Run NX-OS or ACI. The newest models support enhanced ISSU (in service software upgrade) out of the box.Current, with the EX models near their end of support
Nexus 9500Spine, end of rowModular chassis with 4, 8 or 16 slots and redundant supervisors. NX-OS or ACI. No non disruptive ISSU, so I drain it with maintenance mode before an upgrade.Current
Nexus 9800High density spineModular chassis built on Cisco Silicon One for dense 400G. Both supervisors must run the same BIOS (basic input output system) before an upgrade.Current
Nexus 3000 and 3500Top of rack, low latencyRun the same NX-OS image as the 9000 family. The 3500 models were built for low latency.Older models end of sale
Nexus 3550Ultra low latencyA separate line from Cisco's purchase of Exablaze, for trading networks. See the low latency trading page.Specialist range
Nexus 7000 and 7700Core and aggregationModular chassis with VDCs (virtual device contexts), OTV (Overlay Transport Virtualisation) and FabricPath. Covered on the data centre page.End of sale: migrate
Nexus 5000, 5500, 5600 and 6000Access and aggregationUnified ports for Ethernet and Fibre Channel, FCoE (Fibre Channel over Ethernet), and parents for fabric extenders.End of sale: migrate
Nexus 2000Fabric extenderA FEX (fabric extender) is a remote line card with no local switching, managed from its parent. Port names such as Ethernet101/1/1 give it away.Legacy: replace with leaf switches

Model ranges and status are a summary. Before any design or refresh, I check the exact model against Cisco's end of life notices and the release notes for the train I plan to run.

Three ways to run the same Nexus 9000 hardware Three ways to run Nexus 9000 switches. In standalone NX-OS an engineer or Ansible configures each of three leaves. With Nexus Dashboard the controller sends generated configuration to each leaf and reads back drift. In ACI mode the leaves run a different image and take policy only from an APIC cluster. Engineer or AnsibleCLI, NX-API, playbooks Nexus Dashboardintent, generated config APIC clustertenants and contracts Who holds the configuration Leaf 1NX-OS image Leaf 1ACI image Leaf 2NX-OS image Leaf 2ACI image Leaf 3NX-OS image Leaf 3ACI image What each switch runs Each switch keeps its own configuration Out of sync configuration is shown, then fixed The switches take policy only from the APIC

Swipe sideways to see the whole diagram.

Standalone NX-OS. Each switch holds its own configuration, which I write from templates with Ansible or by hand through change control. Every protocol is mine to design: an OSPF or BGP (Border Gateway Protocol) underlay, VXLAN EVPN, vPC. It is the most flexible model, and drift is my problem to find.

Still standalone NX-OS, but Nexus Dashboard holds the intent and generates each switch's configuration. It compares that with what is running and flags any drift (the red packet). The controller side is on the VXLAN EVPN page.

ACI mode is a different image on the same Nexus 9000 hardware. The APIC (Application Policy Infrastructure Controller) cluster owns the policy, and the switches take no CLI (command line interface) configuration. Moving a switch between modes means a new image and a wipe.

Animation

How I choose

Leaf pairs

Nexus 9300 in vPC pairs, sized for server port speed and count, with uplinks at four times the server speed or more.

Spines

Nexus 9300 for small fabrics, and 9500 or 9800 where I need port density or chassis redundancy.

Old estates

An inventory of every 7000, 5000 and 2000 first, with the features each uses, so nothing is lost in the move.

vPC in depth

Building a vPC pair that fails safely

A vPC (virtual port channel) lets a server or switch bundle links to two Nexus switches as if they were one. The data centre page covers its parts, the loop prevention rule and what each failure does. Here I go a level deeper: the order I build a pair in, the settings I always add, and the timers that decide how it recovers.

Bringing up a vPC pair in the right order Two Nexus switches, A and B, joined by a peer link, with a keepalive through the management network above them and a server below with one link to each. The steps enable the features and bring up the keepalive, then the peer link and roles. Next they check consistency, bundle the server links with LACP and forward on both links. Finally B holds its ports after a reload while A carries the traffic. Management network Nexus Arole not yet set Nexus Aprimary, priority 100 Nexus Brole not yet set Nexus Bsecondary, 32667 Nexus Breloaded, holding vPCs ServerLACP, two links keepalive, UDP 3200, every second peer link, port channel 1 vPC 20: one bundle to the server feature vpc, feature lacp Keepalive up first Roles elected Type 1 settings match One LACP partner Both peers forward B holds vPCs 30 s, SVIs 10 s

Swipe sideways to see the whole diagram.

Step 1
  1. On both peers I enable feature vpc and feature lacp, and create the same vpc domain 10. Domain IDs must differ between pairs that connect to each other, because the ID is part of the LACP system ID.

  2. The peer keepalive comes up first, over mgmt0 in the management VRF. It sends a heartbeat on UDP (User Datagram Protocol) port 3200 every second, with a five second timeout. It never carries data. It only answers one question: is my peer alive?

  3. The peer link comes up and the peers start syncing over CFS (Cisco Fabric Services). They elect roles: lower role priority wins, the default is 32667, then the lower system MAC (media access control) address. I set priority 100 on the switch I want as primary. Roles do not preempt.

  4. The peers compare their settings. Type 1 settings, such as the spanning tree mode, must match or vPCs are suspended. Type 2 settings only raise a warning. The checker below shows which is which.

  5. Port channel 20 gets vpc 20 on both peers. Both send LACP with the same vPC system MAC, so the server sees a single partner and bundles both links. It runs plain LACP and knows nothing about vPC.

  6. Both peers forward for the server, and spanning tree blocks nothing. Each peer sends traffic upstream on its own uplinks. The peer link carries almost nothing in normal running.

  7. When Nexus B reloads, its vPC ports wait 30 seconds (delay restore) and its SVIs 10 seconds (delay restore interface-vlan), the defaults. That gives routing and ARP (Address Resolution Protocol) time to fill before traffic arrives. Meanwhile Nexus A carries everything.

Nexus A. Nexus B is the same, with its own keepalive addresses and the default role priority. Addresses and numbers are examples.

feature lacp
feature vpc
feature interface-vlan

vpc domain 10
  role priority 100
  peer-keepalive destination 192.168.0.12 source 192.168.0.11 vrf management
  peer-switch
  peer-gateway
  layer3 peer-router
  auto-recovery
  delay restore 150
  ip arp synchronize
  ipv6 nd synchronize

interface port-channel1
  description vPC peer link
  switchport
  switchport mode trunk
  spanning-tree port type network
  vpc peer-link

interface port-channel20
  description server01
  switchport
  switchport mode trunk
  switchport trunk allowed vlan 110,120
  vpc 20

interface Ethernet1/20
  switchport
  switchport mode trunk
  switchport trunk allowed vlan 110,120
  channel-group 20 mode active

Timers and the values I choose

SettingDefaultWhat I do
Keepalive interval and timeout1 second, 5 secondsLeave them. I alert the moment the keepalive drops, because the pair can no longer tell a dead peer from a broken link.
Keepalive hold timeout3 secondsLeave it. After the peer link fails, keepalives are ignored for this long, so a peer that is rebooting is not mistaken for a live one.
Role priority32667, lower winsSet 100 on the switch I want as primary, so I know which side suspends on a peer link failure.
Delay restore30 seconds for vPC portsRaise it on switches with large routing tables, so routes are in place before the ports come up.
Delay restore for SVIs10 secondsRaise it with many SVIs, and bring them up in batches.
Auto recovery reload delay240 secondsConfigure auto-recovery on every pair, so one switch can bring up its vPCs alone after both lost power and only one came back.
Role preemptionOffUse vpc role preempt in a change window if I need the primary role back on the preferred switch.

Defaults are from Cisco NX-OS documentation for the Nexus 9000. I check them against the release notes for the train in use.

Arista MLAG (multi chassis link aggregation) works the same way, and its failure cases are on the Arista and Juniper page.

vPC options and checks

The settings that make a vPC pair behave like one switch

A vPC pair has two control planes that have to agree. Five options close the gaps that catch people out, and the consistency checks decide what happens when the two peers disagree. Choose a state to see each option at work, then try the checker.

Five vPC options I add to every pair Nexus A and B joined by a peer link, with a storage array or access switch on the left and a server or router on the right, each attached to both peers by a vPC. The states show a frame dropped without peer gateway, and the same frame routed by A with peer gateway. Then both peers send one bridge ID with peer switch, a router forms OSPF with both peers, and ARP entries are copied across the peer link. Nexus Arouter MAC A Nexus Brouter MAC B peer link Storage arrayvPC 10 Access switchvPC 10 ServerVLAN 20, vPC 20 RouterOSPF over vPC 20 Sent to B's MAC, hashed to A A routes it for B Both send the same bridge ID OSPF full with A and with B ARP entries copied to the peer Dropped: it crossed the peer link Peer gateway on Peer switch on Peer gateway and Layer 3 peer router on ARP synchronisation on

Swipe sideways to see the whole diagram.

Some storage arrays and load balancers reply to the real MAC address of the router that sent them a packet, not to the HSRP virtual MAC. The port channel hashes a frame for Nexus B's MAC onto the link to Nexus A, which bridges it across the peer link. B routes it towards the server, but a frame that came over the peer link may not leave on a vPC port. It is dropped.

With peer-gateway, each peer routes frames sent to its partner's router MAC as if they were its own. Nexus A forwards straight to the server and nothing crosses the peer link. I configure it on every pair.

With peer-switch, both peers send BPDUs (bridge protocol data units) with the same bridge ID, so downstream switches see one root bridge. If the primary fails, spanning tree has nothing to reconverge. Both peers need the same spanning tree priority for the VLANs.

A router attached by vPC forms OSPF neighbours with both peers. Some of its hellos hash to the wrong peer and cross the peer link, where peer gateway would decrement their TTL (time to live) to zero. layer3 peer-router fixes that. It needs peer gateway, and I still prefer separate routed links where I can.

With ip arp synchronize and ipv6 nd synchronize, each peer copies its ARP and IPv6 neighbour entries to the other. After a reload or a peer link failure, the returning switch already knows the hosts, so it forwards straight away.

Animation

vPC consistency checker

Pick a setting that differs between the two peers. The checker shows how NX-OS treats it, what I see, and the fix. Without scripts, the table below lists every case.

Check type
Type 1, global
What I see
show vpc brief reports the consistency status as failed. show vpc consistency-parameters global shows the mismatch.
Fix
Set the same mode on both peers in one change. I generate both configurations from one template so this cannot drift.

With graceful consistency check, which I always leave on, the secondary suspends every one of its vPC member ports. The primary keeps forwarding, so servers run on half their links.

Every case in one table
What differsCheck typeWhat happens
Spanning tree mode, such as Rapid PVST+ (per VLAN spanning tree) on one peer and MST (Multiple Spanning Tree) on the otherType 1, globalWith graceful consistency check, which I always leave on, the secondary suspends every one of its vPC member ports. The primary keeps forwarding, so servers run on half their links.
MST region name, revision or VLAN to instance mappingType 1, globalThe same as a spanning tree mode mismatch: the secondary suspends all its vPC member ports.
Spanning tree disabled for one VLAN on one peerType 1, per VLANOnly that VLAN is suspended on the vPCs. Every other VLAN carries on, so the fault looks like one broken subnet.
LACP mode on the port channel, such as active on one peer and on (static) on the otherType 1, interfaceThe secondary suspends its member of that vPC. The primary keeps its member up, so the server runs on one link and has no resilience.
Port speed or duplex on the member linksType 1, interfaceThe secondary suspends its member of that vPC. Often this follows a new optic or a server NIC (network interface card) that negotiated differently.
Switchport mode: trunk on one peer, access on the otherType 1, interfaceThe secondary suspends its member of that vPC.
Native VLAN on the trunkType 1, interfaceThe secondary suspends its member of that vPC.
MTU (maximum transmission unit) on the port channelType 1, interfaceThe secondary suspends its member of that vPC.
Spanning tree port type or guard on the port channelType 1, interfaceThe secondary suspends its member of that vPC.
Allowed VLAN list on the trunkVLAN levelThe vPC stays up, but only VLANs allowed on both peers come up on it. The rest are suspended on that vPC, so one or two subnets fail.
An SVI shut on one peer, or missing from itType 2Nothing is suspended, but a host that sends to that peer loses its gateway for that VLAN. It shows up as intermittent loss for some hosts only.
HSRP settings for a VLAN, such as a different group or virtual addressType 2Nothing is suspended, but the gateway can split or flap between the peers.
An ACL (access control list) or QoS policy on the port channelType 2Nothing is suspended, but traffic is filtered or queued differently depending on which link the server's hash picks. These are the hardest faults to find.
Safe changes

Every change with a tested way back

NX-OS has two tools that make changes safer than on classic IOS: checkpoints with rollback, and configuration sessions that apply as one. I use both on every production change. Step through a change that fails its checks and comes back out cleanly.

Checkpoint, change, roll back An engineer, the running configuration, a named checkpoint and a rollback patch. The checkpoint copies the configuration, the engineer changes it, NX-OS works out the commands to undo the change, checks fail, the patch is applied atomically and the configuration matches the checkpoint again. Engineerchange CHG123 Running config Running config Running config Running config as before VLAN 300 added being restored same as the checkpoint Checkpointpre_chg123 Rollback patchno vlan 300interface Ethernet1/5 shutdown Checkpoint taken before the change The change is applied NX-OS works out the undo Post change checks fail Atomic rollback: all or nothing No differences left

Swipe sideways to see the whole diagram.

Step 1
  1. Before the change I run checkpoint pre_chg123. It saves the running configuration under that name. I also keep a copy on flash with checkpoint file bootflash:pre_chg123.cfg.

  2. The change goes in: a new VLAN 300 and a port brought up for it. show running-config diff shows what is not yet saved to the startup configuration.

  3. show diff rollback-patch checkpoint pre_chg123 running-config shows the exact commands a rollback would run. I paste this into the change record as the back out plan, so it is reviewed with the change.

  4. My post change checks find a fault. Maybe the new VLAN clashes with one at a remote site. The change window allows for a rollback, so I do not try to fix forward.

  5. rollback running-config checkpoint pre_chg123 runs the patch. The default is atomic: if any command fails, nothing is applied. best-effort and stop-at-first-failure exist, but I avoid them on production switches.

  6. I compare again and expect no differences, then repeat the checks. show checkpoint summary lists the checkpoints, including any system checkpoints NX-OS took when a feature was disabled.

Configuration sessions

CommandWhat it does
configure session CHG123Opens a named session. Commands are held in the session, not applied.
show configuration session CHG123Lists the commands waiting in the session, for review.
verifyChecks the session against the current configuration and the hardware, without applying it.
commitApplies the whole session. If a command fails, the session is rolled back, so the switch is never left half changed.
abortThrows the session away.

Rules I keep

  1. One checkpoint per change. Named after the change ticket, taken in the same window, and kept on flash until the change is closed.
  2. The rollback patch is the back out plan. I attach show diff rollback-patch output to the change, so the reviewer sees the undo as well as the do.
  3. Sessions for anything that must land together. An ACL (access control list) and the interface that uses it, or a VLAN and its SVI, go in one session so they apply as one.
  4. Both vPC peers in one change. Type 1 settings change on both peers in the same window, with checks between, so the pair never runs mismatched for long.
  5. Templates beat memory. Configuration comes from templates and a source of truth, as on the network automation page, so manual changes are the exception.
Upgrades and releases

Choosing a release, then upgrading without an outage

Upgrades are where many avoidable data centre outages start. The cause is rarely the software itself. It is a release chosen without reading its lifecycle, or an upgrade nobody checked would be disruptive. First the release model and a decoder, then what each kind of upgrade costs.

How NX-OS releases are numbered

A.B(C)x

NX-OS numbers each release as major train A.B, release C within the train, then a letter: F for a feature release, M for a maintenance release.

Feature phase

About the first 12 months of a train, typically three F releases with new features and new hardware.

Maintenance phase

The next 18 months, with M releases that fix bugs and security issues only. This is where I standardise.

Extended support

From 30 months after first shipment, security fixes only. Last date of support comes at 54 months.

TrainEnd of software maintenanceLast date of supportPhase in October 2026
10.230 November 20232025Past support
10.330 November 202428 February 2027, extended for EX platformsSecurity fixes only
10.428 February 202629 February 2028Security fixes only
10.528 February 202728 February 2029Maintenance releases
10.629 February 202828 February 2030Maintenance releases

From Cisco's NX-OS software release guide, checked in October 2026. A new major train starts in the third quarter of each year.

NX-OS release decoder

Type a release, such as 10.6(4)M, or an image name such as nxos64-cs.10.4.8.M.bin. The decoder reads the train and the release type, and where the train is in Cisco's lifecycle today.

Train
10.4
Release in the train
8
Type
M: maintenance, bug and security fixes only
Train milestones
Software maintenance ended 28 February 2026. Last date of support 29 February 2028.

In October 2026 the 10.4 train gets security fixes only, until 29 February 2028. I would plan the move to 10.6.

What each kind of upgrade costs A timeline of five minutes with three rows: control plane, data plane and service to hosts. Standard ISSU loses the control plane for 90 to 120 seconds and nothing else. Enhanced ISSU loses the control plane for 3 to 6 seconds. A disruptive reload loses the control and data planes for about five minutes while hosts on vPCs move to the peer. A modular chassis drained with maintenance mode reloads for about five minutes with no loss to hosts. Control plane Data plane Service to hosts 90 to 120 s 3 to 6 s about 5 minutes about 5 minutes vPC hosts move to the peer after a blip no loss no loss 0 1 min 2 min 3 min 4 min 5 min Standard ISSU on a fixed Cloud Scale switch Enhanced ISSU: a second supervisor in a container Disruptive upgrade: the switch reloads Modular chassis: drained first, then reloaded

Swipe sideways to see the whole diagram.

On Cloud Scale fixed switches, a non disruptive ISSU keeps the forwarding ASICs running while the supervisor software restarts on the new release. Cisco quotes 90 to 120 seconds without a control plane and no data plane loss. Routing neighbours hold my routes through graceful restart meanwhile.

Enhanced ISSU starts the new release as a second supervisor in a container, then switches to it, so the control plane is away for only 3 to 6 seconds. It is on by default on the GX2A and GX2B models, and on GX and FX3 models from 10.3(3)F. FX and FX2 models need boot mode lxc and a reload first. If the upgrade includes a kernel patch, it falls back to a standard ISSU.

A disruptive upgrade reloads the switch: about five minutes, depending on scale, with no control or data plane. In a vPC pair, hosts on vPCs carry on through the peer after a short blip. Single attached hosts lose service for the whole reload, one more reason I avoid orphan ports.

Modular chassis such as the 9500 and 9800 have no non disruptive ISSU, so I drain the switch with maintenance mode first, upgrade it, and bring it back. The chassis is down for the reload, but traffic has already moved to the other spines, so hosts see nothing.

Animation

The commands in the order I run them. show install all impact says whether the upgrade will be disruptive before anything changes. EPLD (electronic programmable logic device) upgrades reload the module, so they get their own window. File names are examples.

show version
show install all impact nxos bootflash:nxos64-cs.10.4.8.M.bin
show file bootflash:nxos64-cs.10.4.8.M.bin md5sum
install all nxos bootflash:nxos64-cs.10.4.8.M.bin non-disruptive
show install all status
install epld bootflash:n9000-epld.10.4.8.M.img module all
Maintenance mode

Take a switch out of service before anything breaks

GIR (graceful insertion and removal) is the NX-OS maintenance mode. It moves traffic off a switch by isolating it, works on it, then puts it back and proves nothing changed. I use it for upgrades on modular chassis, for hardware work, and on any switch where I want the change to be boring.

Maintenance mode drains a switch before work starts Two spines, a vPC pair of leaves and a server attached to both leaves. Leaf B is put into maintenance mode: a snapshot is taken, routing and the vPC are isolated so traffic moves to Leaf A, B is upgraded, returns to normal mode, and the before and after snapshots are compared. Spine 1 Spine 2 Leaf Anormal mode Leaf Bnormal mode Leaf Bsnapshot taken Leaf Bmaintenance mode Leaf Bupgrading ServervPC to A and B Both leaves carry traffic Snapshot: before_maintenance Routing isolated, vPC shut on B B upgrades while A carries everything B back in normal mode Snapshots compared: no differences

Swipe sideways to see the whole diagram.

Step 1
  1. Both leaves carry traffic. The server is on a vPC, and each leaf has a path to both spines.

  2. system mode maintenance on Leaf B starts GIR (graceful insertion and removal). NX-OS first takes a snapshot called before_maintenance: neighbours, routes, interfaces and vPC state.

  3. The maintenance profile isolates the routing protocols, which steer traffic away while staying up, and shuts the vPC domain. Traffic moves to Leaf A with no loss, because nothing failed. It was drained.

  4. Leaf B is upgraded and reloads, or gets whatever work it needed: an optic, a cable, a line card. Leaf A carries everything. Nothing on B is in the traffic path.

  5. no system mode maintenance brings B back. Its vPCs and routing return, and traffic shares across both leaves again.

  6. NX-OS takes an after_maintenance snapshot, and show snapshots compare before_maintenance after_maintenance shows any difference. Only then do I move to the next switch.

My upgrade runbook for a vPC pair

  1. Read first. Release notes, open caveats and the upgrade path for the target release. Some jumps need an intermediate release.
  2. Check the impact. show install all impact on each switch, and the image checksum against Cisco's published value.
  3. Back up. A checkpoint, a copy of the configuration off the switch, and show tech-support saved in case I need TAC (Cisco's Technical Assistance Center).
  4. Baseline. Neighbour counts, route counts, MAC and ARP counts, vPC state and interface errors, captured as a snapshot or with pyATS.
  5. One peer at a time. Drain, upgrade and return one switch. Compare the snapshots and wait until the pair is stable before touching its peer.
  6. Then EPLD. If the release note asks for an EPLD upgrade, it goes in its own window, also one peer at a time.
  7. Close out. Record the new release in the source of truth, and update the lifecycle plan with the next milestone.
Programmability

Switches that build themselves and report on themselves

NX-OS has offered APIs, Python and a Linux shell for years, so a Nexus estate can be built and checked by code. The deeper method, with a source of truth, pipelines and testing, is on the network automation page. Here are the NX-OS pieces: zero touch provisioning, the APIs and streaming telemetry.

Zero touch: from a sealed box to a built switch A new switch on the left, and a DHCP server, a script server and an automation system on the right. The switch gets an address and the script location from DHCP, downloads and runs the script, downloads its image and configuration, reloads, and is handed over to automation. New switchno startup config New switchreloading Leaf 7built and in service DHCP serveraddress, script name Script serverscript, image, configs AutomationAnsible or controller POAP starts on an empty switch An address and where the script is The POAP script runs Image and config for this serial Reload on the right release Day two belongs to automation

Swipe sideways to see the whole diagram.

Step 1
  1. A new switch boots with no startup configuration, so POAP (Power On Auto Provisioning) starts by itself. Someone at the console can abort it, which is how I build a switch by hand in the lab.

  2. The switch asks DHCP (Dynamic Host Configuration Protocol) for an address on mgmt0 or a front port. The reply also names the server holding the POAP script and the script's file name, through DHCP options 66 or 150 and 67.

  3. The switch downloads the POAP script, a Python file I control, and runs it. All the logic lives in the script, so I can change how switches are built without touching DHCP.

  4. The script picks this switch's configuration by serial number, MAC address or the neighbour it is cabled to, downloads it with the right NX-OS image, and checks each file's MD5 (Message Digest 5) hash before using it.

  5. The switch reloads on the new release and applies its configuration. It comes up with its hostname, addresses, AAA and management settings in place.

  6. From here the switch is managed like every other: Ansible or Nexus Dashboard pushes the rest of the configuration and checks it. Nobody needs to touch a console cable.

APIs in, telemetry out Ansible, a Python script and Nexus Dashboard send API calls to a Nexus 9000 and get structured data back. The switch streams telemetry to a collector without being polled. Ansiblecisco.nxos Python scriptNX-API, JSON Nexus Dashboardintent, checks Nexus 9000NX-API, NETCONF, gNMI Collectortime series, alerts calls in, JSON back gRPC stream

Swipe sideways to see the whole diagram.

Animation

Requests in orange, structured replies in teal, and streamed telemetry in purple. Nothing here scrapes CLI text.

The interfaces NX-OS offers

InterfaceHow I turn it onWhat I use it for
NX-API CLIfeature nxapiSend ordinary CLI commands over HTTPS (secure HTTP) and get JSON (JavaScript Object Notation) back. Quick wins for scripts.
NX-API RESTfeature nxapiRead and write the switch's object model directly over REST (representational state transfer), the same model the CLI drives.
Model driven telemetryfeature telemetryStream counters and state to a collector over gRPC (gRPC Remote Procedure Calls), instead of polling with SNMP (Simple Network Management Protocol).
NETCONF (Network Configuration Protocol), RESTCONF and gNMIfeature netconf, feature restconf, feature grpcRESTCONF is the web form of NETCONF, and gNMI (gRPC Network Management Interface) runs over gRPC. All three use YANG (Yet Another Next Generation) data models, both Cisco native and OpenConfig (feature openconfig), for tools that speak standards.
On box Pythonpython, then from cli import clidSmall checks and fixes that run on the switch, reading command output as JSON.
Bash and guest shellfeature bash-shell, guestshell enableLinux tools on the switch. The guest shell is a separate container for my own scripts and agents.
AnsibleThe cisco.nxos collectionResource modules such as nxos_vlans and nxos_interfaces, driven from a source of truth.
POAPDHCP and a script serverZero touch first boot, as above.

A small on box check. The field names come from the JSON output of show vpc brief | json on the release in use, so I read that first.

# on the switch: list vPCs that are not up
from cli import clid
import json
vpcs = json.loads(clid("show vpc brief"))
rows = vpcs["TABLE_vpc"]["ROW_vpc"]
rows = rows if isinstance(rows, list) else [rows]
for r in rows:
    if r["vpc-port-state"] != "1":
        print(r["vpc-id"], r["vpc-ifindex"], "is not up")
Visibility tools

Seeing the packets a switch never shows you

A modern Nexus forwards almost everything in hardware, so the CPU (central processing unit) never sees most traffic. Ethanalyzer, SPAN (Switched Port Analyzer), ERSPAN (encapsulated remote SPAN) and ELAM (embedded logic analyser module) each see different traffic, and picking the right one saves an hour of looking in the wrong place. Choose a tool to see what it can and cannot see.

Which capture tool sees which traffic A Nexus 9000 with a supervisor CPU and a forwarding ASIC. A BGP neighbour sends control traffic to the CPU and two servers exchange traffic through the ASIC. Ethanalyzer sees only the CPU traffic, SPAN copies server traffic to a local analyser, ERSPAN sends copies to a remote analyser, SPAN to CPU copies to the supervisor, and ELAM traces a single packet through the ASIC. Nexus 9000 BGP neighbourcontrol traffic Server A Server B Supervisor CPU Forwarding ASIC Remote analyser Local analyser switched in hardware Sees the BGP packets, not the server traffic Copies to a port on this switch Copies wrapped in GRE to anywhere Copies sent up to the CPU One packet, traced through the ASIC

Swipe sideways to see the whole diagram.

Ethanalyzer is a packet capture built into NX-OS. It sees traffic to and from the supervisor CPU, such as routing, ARP and management, through the inband or mgmt0 interface: ethanalyzer local interface inband capture-filter "tcp port 179" write bootflash:bgp.pcap. Server traffic switched in hardware never reaches it.

SPAN copies traffic from ports or VLANs to a port where an analyser is plugged in. On NX-OS a monitor session is shut by default, so it needs no shut. It is the first tool for traffic that never touches the CPU.

ERSPAN wraps the copies in GRE (Generic Routing Encapsulation) and sends them across the IP (Internet Protocol) network to an analyser anywhere. I check the extra load on the path, and the MTU, before I start one.

With no analyser nearby, a SPAN session can use the CPU as its destination (destination interface sup-eth0), then Ethanalyzer captures the copies. It is rate limited to protect the supervisor, so it suits small flows and short captures.

ELAM traces one chosen packet through the forwarding ASIC and shows each lookup and its result. It answers questions such as why this packet went out of that port. I use it with TAC, because its output needs care to read.

Animation

Commands I reach for first

QuestionCommandWhat it tells me
What changed, and when?show logging logfile, show accounting logEvents and every configuration command, with user and time
What did a protocol just do?show ip ospf event-history adjacency, show bgp event-history detailThe internal history each process keeps, even with no debug running
Does hardware match software?show consistency-checker l2 module 1, show consistency-checker forwarding ipv4 vrf defaultWhether MAC and route tables in the ASIC match what the supervisor expects
Is a table full?show hardware access-list resource utilizationTCAM (ternary content addressable memory) use per region, for ACLs and QoS
Are frames being damaged?show interface counters errorsCRC (cyclic redundancy check) and other errors per port, the first sign of a bad optic or cable
Everything for TACshow tech-support details, show tech-support vpcA full snapshot for a support case, taken before anything is reloaded
Security

Protecting the switch as well as the traffic

A data centre switch is a target in its own right. If its CPU is swamped, routing drops and the whole fabric suffers. I protect the control plane with CoPP (control plane policing), keep the management plane apart, and give people only the access they need.

CoPP keeps the CPU free for the traffic that matters Three kinds of traffic head for the supervisor CPU: routing protocol packets, an administrator's SSH session and a flood. CoPP lets the routing and management traffic through, and polices the flood so that only a trickle reaches the CPU, which stays healthy. Routing neighboursBGP, OSPF, BFD Admin sessionSSH from the jump host Flood or scanARP, glean, ICMP CoPPstrict profile Supervisor CPUstays healthy each class policed to its own rate

Swipe sideways to see the whole diagram.

Animation

Routing in teal and management in blue pass through their CoPP classes. The flood in red is policed, so only a trickle reaches the CPU.

How I harden a Nexus switch

ControlHowWhy
CoPPcopp profile strict, checked with show policy-map interface control-planeStrict is the default chosen at setup. Moderate, lenient and dense profiles exist, and I only move off strict with evidence from the drop counters.
Hardware rate limitersshow hardware rate-limiterSeparate limits for exception traffic, such as packets with an expired TTL, that would otherwise reach the CPU.
Fewer featuresshow featureEvery feature I do not enable is a process that is not running. Telnet is off unless someone turns it on with feature telnet.
AAA and rolesfeature tacacs+, command authorisation and accountingEvery login and command is checked and recorded. Built in roles such as network-admin and network-operator, plus my own roles for read only and change teams.
Management planemgmt0 in VRF management, an ACL on the VTY (virtual terminal) linesManagement reachable only from jump hosts, never from production VLANs.
ProtocolsSNMPv3, NTP with authentication, SSH (Secure Shell) onlyNo community strings or clear text logins, and clocks I can trust for logs.
Imagesshow file bootflash:... md5sum against Cisco's published valueOnly images I have checked go on a switch, and only releases still inside their support dates.
RoutingAuthentication on OSPF and BGP sessions, prefix limits and filtersA neighbour cannot inject routes or flap me into an outage. Wider routing security is on the security page.
Troubleshooting

Finding a Nexus fault layer by layer

Most Nexus faults fall into a handful of patterns, and nearly all of them leave a clear trace in one command's output. Choose a symptom to see where it usually sits and what I run first. My general method is on the troubleshooting page.

A Nexus fault finder Five places a Nexus fault can sit: links, vPC, the control plane, the forwarding hardware and the software. For each symptom, test traffic runs as far as the place that fails, and a panel shows what I see and the first command I run. Linksoptics, MTU vPCpeer link, roles Control planeCPU, CoPP HardwareTCAM, ASIC Softwarecrashes, upgrades What I see What I run Symptom: vPCs down on one switch Peer link down, keepalive alive, role secondaryshow vpc brief Symptom: One vPC suspended after a change vPC 20 down, consistency check failedshow vpc consistency-parameters interface port-channel 20 Symptom: A single attached server went dark Server on one peer only, in a vPC VLANshow vpc orphan-ports Symptom: Roles flipped when a switch rejoined Sticky Primary: TRUE on the switch that rejoinedshow system internal vpcm info global | include Sticky Symptom: High CPU and routing flaps CoPP drops rising in one classshow policy-map interface control-plane Symptom: A new ACL or QoS policy will not apply TCAM region full, or not carvedshow hardware access-list resource utilization Symptom: Small packets pass, large ones drop MTU 1500 on one hop of a 9216 pathshow interface ethernet1/49 | include MTU Symptom: Errors on one link CRC errors climbing on one portshow interface counters errors Symptom: A protocol restarted by itself Process exited, restarted by sysmgrshow processes log Symptom: An upgrade turned out disruptive Impact table showed a reset, not a hitless upgradeshow install all impact nxos bootflash:image

Swipe sideways to see the whole diagram.

vPCs down on one switch only. The peer link failed while the keepalive stayed up, so the secondary suspended its vPCs, as designed. Hosts on vPCs carry on through the primary. I check the peer link members with show port-channel summary and their optics, restore the link, and watch the vPCs return after delay restore.

One vPC suspended after a change. A type 1 setting differs between the peers, usually because a change went onto one peer only. The output shows the two values side by side. I make both sides match in one change, and use the consistency checker above to see how each setting behaves.

A single attached server went dark in a failure. It was an orphan port on the secondary, which suspended its vPC VLANs. I dual attach it, or add vpc orphan-port suspend to its port so the server fails over to its other network card.

Roles flipped when a switch rejoined. A switch that had been isolated came back with its sticky primary bit still set and took the primary role, causing about 40 seconds of disruption. Before rejoining an isolated switch, I check the bit is clear and that the live switch has the lower role priority.

High CPU and routing flaps. Something is sending traffic to the CPU: a loop, a scan, glean traffic for hosts that do not exist, or a misbehaving neighbour. show processes cpu sort shows which process is busy, and the CoPP counters show which class is dropping. I find the source rather than loosen CoPP.

A new ACL or QoS policy will not apply. The TCAM region it needs is full, or has no space carved for it. I trim the policy first. If the region really must grow, I change the carving with hardware access-list tcam region in a window, because it takes a reload.

Small packets pass, large ones drop. One interface or SVI on the path still has the default MTU. I test with a full size ping and the do not fragment bit, find the hop that fails, and set 9216 everywhere in the fabric from the template.

Errors on one link. CRC errors point at layer 1: a dirty or failing optic, a damaged cable or a bad port. show interface ethernet1/1 transceiver details shows the optic's light levels. I clean or replace the optic first, then the cable.

A protocol restarted by itself. A process crashed and the system manager restarted it. show cores lists the core files. I save them with show tech-support details, search Cisco's bug database for the release, and open a TAC case before anyone reloads the switch.

An upgrade turned out disruptive. The upgrade path, an EPLD change or the platform did not support a hitless upgrade, and nobody read the impact table first. I run the impact check on every switch before the window, and plan maintenance mode wherever the result says reset.

Animation

The commands I start with

QuestionCommandWhat it tells me
Is the vPC pair healthy?show vpc brief, show vpc peer-keepalivePeer link, keepalive, roles, consistency and every vPC's state
Which ports are exposed?show vpc orphan-portsPorts in vPC VLANs on one peer only
Are the bundles up?show port-channel summary, show lacp neighborMembers in and out of each port channel, and what the far end says
Is the CPU busy, and why?show processes cpu sort, show system resourcesThe busiest processes, and memory and load
Has anything crashed?show processes log, show cores, show system reset-reasonProcess exits, core files and why the switch last reloaded
Where is a MAC or route really going?show mac address-table address 0050.56aa.0001, show ip route 10.1.20.0The port or next hop the switch has chosen
What changed?show accounting log, show diff rollback-patch checkpoint pre_chg123 running-configWho changed what, and the difference from the last good checkpoint

I change one thing at a time and repeat the same check after each change. For faults in VXLAN EVPN fabrics, the checks on the VXLAN EVPN page follow on from these.

Engagement

How I run a Nexus programme, from end of life notice to steady state

Nexus work usually starts with an end of life notice, a capacity limit or a new data hall. I follow the same path each time. I agree why the estate must change, find out exactly what is there and design every role as a template. Then I prove failures in a lab, migrate in waves, and keep releases and hardware inside their support dates.

How an engagement runs, from first conversation to lifecycle Seven stages from left to right: engage (stakeholders), requirements (FR and NFR), discovery (current state), design (HLD and LLD), build and test (lab and waves), support (handover), lifecycle (keep current). For each stage the panel shows who I work with and what comes out of it. After the lifecycle stage the loop returns to the start. Engagestakeholders RequirementsFR and NFR Discoverycurrent state DesignHLD and LLD Buildlab and waves Supporthandover Lifecyclekeep current Step 1 · EngageAgree why the estate must change, and by whenWho I work withWhat comes outData centre ownerApplication ownersSecurity and riskDrivers: end of life, growth, riskRooms, racks and switches in scopeCritical services and windowsDecision log and RACI Step 2 · RequirementsWhat the fabric must do, and how wellWho I work withWhat comes outApplication ownersPlatform and server teamsSecurity and riskPort counts, speeds and growthAvailability and upgrade targetsSegmentation and security rulesMonitoring and support needs Step 3 · DiscoveryInventory, versions, vPCs and real trafficWho I work withWhat comes outNetwork operationsServer and storage teamsCisco account teamInventory with end of life datesReleases against the lifecyclevPC, orphan and FEX auditTraffic, errors and TCAM use Step 4 · DesignRoles, pairs, release and templatesWho I work withWhat comes outDesign authoritySecurity architectsOperations leadsFamily and role for each switchvPC domain and keepalive planTarget release and upgrade pathTemplates for every role Step 5 · Build and testProve it in the lab, then migrate in wavesWho I work withWhat comes outEngineersServer and storage teamsChange advisory boardPOAP and template buildFailure tests on a vPC pairMigration waves and rollbackBefore and after snapshots Step 6 · SupportAlerts, runbooks and a clean handoverWho I work withWhat comes outNetwork operations centreService deskCisco TACvPC, keepalive and CoPP alertsRunbooks for the common faultsUpgrade and GIR proceduresHypercare exit criteria Step 7 · LifecycleReleases, notices and the next refreshWho I work withWhat comes outDesign authorityNetwork operationsCisco account teamAnnual release reviewSecurity advisory checksEnd of life trackingRefresh plan by family

Swipe sideways to see the whole diagram.

Step 1
  1. Nexus work usually starts with an end of life notice, a capacity limit or a new fabric. I agree why the estate must change and by when, which rooms and services are in scope, and when change windows are allowed. A RACI (responsible, accountable, consulted, informed) chart records who decides.

  2. I turn the drivers into requirements: server ports and speeds with growth, uplink oversubscription, availability, upgrade windows, segmentation and monitoring. Each target gets a number and an owner. Hitless upgrades and no outage from a single switch failure are usually the targets that shape the design most.

  3. I collect inventory, releases and configuration from every switch, check each against Cisco's end of life notices and release lifecycle, and audit vPC domains, orphan ports and fabric extenders. Interface counters, flow records and TCAM use show what the traffic really needs. Findings here often change the plan.

  4. The high level design places each Nexus family by role and sets the vPC, routing and segmentation model. The low level design numbers every vPC domain and keepalive, picks the target release from the maintenance phase of a train, sets CoPP, AAA and MTU, and turns each role into a template.

  5. I build the first pair in the lab with POAP and the templates, then fail each part on purpose: the peer link, the keepalive, a member link and a whole switch, and confirm the design behaves as written. Migration runs in waves through change control, with snapshots before and after each wave.

  6. Before handover, monitoring alerts on peer link and keepalive state, consistency failures, interface errors, CoPP drops and TCAM use. Operations teams get runbooks for the faults on this page, the upgrade and maintenance mode procedures, and a route to Cisco TAC. Hypercare ends when the agreed criteria are met.

  7. Each year I review the release plan against Cisco's lifecycle table and move the estate to a maintenance release in a supported train. Security advisories are checked as they appear. End of life notices go into a refresh plan, so no switch reaches its last date of support unnoticed.

Functional requirements

What it must do.

  • Give every server two links to two switches, with nothing blocked by spanning tree.
  • Route between VLANs at the leaf pair, with a gateway that survives either switch failing.
  • Keep every dual attached service up while one switch of a pair is upgraded or replaced.
  • Separate production, storage and management traffic, and keep management on its own network.
  • Build new switches from templates, with no hand configuration.
  • Report state, errors and capacity to the operations teams as it happens.

Non functional requirements

How well it must do it, with a number wherever one can be agreed.

Availability
No outage for dual attached hosts when any one switch, link or optic fails.
Upgrades
Each switch upgraded in its own window with no loss for dual attached hosts, using ISSU or maintenance mode.
Oversubscription
Leaf uplinks no worse than 3 to 1 against server ports at full speed (typical).
Convergence
Traffic moved to the surviving link within a second or two of a failure (typical).
MTU
9216 bytes on every fabric link, port channel and SVI, proved with full size tests at acceptance.
Release
Every switch on a maintenance release, in a train inside its support dates.
Operability
vPC state, keepalive, errors, CoPP drops and TCAM use in monitoring, with thresholds.
Security
TACACS+ logins with command accounting, SSH only, SNMPv3 and CoPP on every switch.

Numbers are typical starting points. Each organisation agrees its own.

Projects

Where I have used it

Nexus has run through my data centre work for more than ten years: managed infrastructure on ACI and Nexus at Manx Telecom, public sector modernisation at Civica, and Nexus estates in my current transformation work at XIDA.

XIDA · 2025 to now

Nexus in a network and security transformation

Led network and security transformation from discovery to provisioning across Cisco Nexus, Catalyst SD-WAN, SD-Access and AWS (Amazon Web Services), Azure and Google Cloud environments.

Manx Telecom · 2016

ACI and Nexus for over 300 customer sites

Tier 3 data centre and managed infrastructure for over 300 customer sites on Cisco ACI and Nexus. The fabric side of that work is on the VXLAN EVPN and ACI page.

Civica (Luton Borough Council) · 2017

Public sector modernisation on Nexus

Public sector network modernisation on Meraki, Nexus, FortiGate and Check Point, leading 7 engineers and third party suppliers.

iSystems Integration · three engagements, 2015 to 2019

Nexus in cloud and disaster recovery designs

Cloud, SDN (software defined networking), disaster recovery and security architecture on Nexus, Viptela, Palo Alto, F5 and Aruba for the firm's enterprise clients.

BNY Mellon · 2018 to 2019

A data centre refresh across Europe, the Middle East and Africa

Audit, high and low level design and implementation of LAN (local area network), WAN (wide area network), SD-WAN and data centre infrastructure, replacing end of life equipment with minimal impact on global operations. The estate was kept compliant with MiFID II throughout.

AVEVA · 2020 to 2021

Data centre transitions at 99.99% uptime

Safeguarded over £200M of transactional services through data centre transitions at 99.99% uptime, leading 7 engineers and architects and coordinating 5 vendors.

Backed by CCNP (Cisco Certified Network Professional) Enterprise, CCDP (Cisco Certified Design Professional), CCNP Routing and Switching, and a pass in the CCIE (Cisco Certified Internetwork Expert) Routing and Switching written exam. See all credentials