🧵 Triage Like a Pro: Essential Commands to Troubleshoot NNIs & Trunk Circuits

A practical guide for service provider engineers to quickly triage NNI and trunk circuits using proven CLI commands on Juniper, Cisco IOS, and IOS-XR gear.

🧵 Triage Like a Pro: Essential Commands to Troubleshoot NNIs & Trunk Circuits

When a service provider link goes dark—whether it’s an NNI or a trunk circuit—it becomes a race. One router’s "line protocol down" means someone somewhere lost service. As a network engineer, your job is to isolate, validate, and fix—fast.

This post walks you through the initial triage of NNIs and trunk circuits across Juniper, Cisco IOS-XR, and Cisco IOS, using tried-and-true commands I rely on every day.


💡 What Is an NNI?

An NNI (Network-to-Network Interface) is the interconnect between two networks—often between service providers, or between core and edge systems. It’s the bridge where routing, reachability, and responsibility collide. If a backbone is the heart, NNIs are the arteries.

These interfaces are high-value links, usually involving BGP, VRFs, and strict SLAs. When they go down, it’s not a small problem.


🔌 What’s a Trunk in This Context?

From the provider side, a trunk circuit usually refers to a tagged (dot1q) interface carrying multiple customer services, either via VLANs or virtual circuits. These often backhaul enterprise services, L2VPNs, or L3VPNs. A failure here can impact a whole batch of customer endpoints.


🛠️ What Is Triage?

Triage means identifying the issue’s scope, cause, and responsibility—fast. You’re not solving everything in one go. You’re slicing through layers:

  • Is the interface physically up?
  • Is optical power OK?
  • Is the protocol (OSPF/BGP/ISIS) neighbor up?
  • Are packets flowing?
  • Is it our fault? Or theirs?

Once that’s clear, you escalate, resolve, or close.


🧰 My Standard Triage Commands

Here’s my personal cheat sheet. Whether I’m debugging NNIs or trunks, these get me moving with clarity.


🧵 NNI Triage Commands

🟦 Juniper

# Physical & Interface Overview
show chassis alarms
show interfaces description | match <Circuit_ID>
show interfaces <interface_name> extensive
show log messages | match SNMP | match <circuit ID> | except <circuit ID>.
monitor interface <interface_name>
clear interface statistics <interface_name>

# Optics & Hardware
show interfaces diagnostics optics <interface_name> | match dBm
show interfaces diagnostics optics <interface_name> | except th | match dBm | except th
show chassis fpc

# VRF & BGP Checks
show interfaces terse routing-instance all | match <interface_name>
show bgp summary instance <Instance_ID>

🟩 Cisco IOS-XR

# Physical & Interface Overview
show interfaces description | include <Circuit_ID>
show interfaces <interface_name>
show log | include <interface_name>, | include UPDOWN
monitor interface <interface_name>
clear counters <interface_name>

# Optics
show controllers <interface_name> phy | include dB
show controllers <interface_name> phy

# VRF & BGP Checks
show ip vrf all interface brief | include <interface_name>
show bgp vrf <Instance_ID> summary

🟥 Cisco IOS

# Interface & Log Checks
show interfaces description | include <Circuit_ID>
show interfaces <interface_name>    # Run 2x to validate counters
show log | include <interface_name> | include UPDOWN
clear counters <interface_name>

# Diagnostics
show controllers
show controllers <interface_name>

# VRF & BGP
show vrf brief | include <interface_name>
show ip bgp vpnv4 vrf <Instance_ID> summary

🔧 Trunk Circuit Triage Commands

🟦 Juniper

# Physical & Interface Overview
Show chassis alarms
show interfaces description | match <Circuit_ID>
show interfaces <interface_name> extensive
monitor interface <interface_name>
clear interface statistics <interface_name>

# Interface Config & Metrics
show configuration | display set | match <interface_name>
show configuration | display set | match <interface_name> | match metric

# Logs
show log messages | match OSPF | match Full | match <interface_name>
show log messages | match isis | match <interface_name>
show log messages | match <interface_name

# Trunks
show interfaces description | match TRK

# Neighbor / Protocols
show ospf neighbor detail | find <interface_name>
show ospf neighbor logical-system <logical-system NAME> detail | find <interface_name>
show isis adjacency detail | find <interface_name>
show mpls interface detail | find <interface_name>
show l2circuit connections | find <interface_name>

# Optics & Hardware
show interfaces diagnostics optics <interface_name> | match dBm
show interfaces diagnostics optics <interface_name> | except th | match dBm | except th
show chassis fpc

🟩 Cisco IOS-XR

# Physical & Interface Overview
show interfaces description | include <Circuit_ID>
show interfaces <interface_name>
show log | include <interface_name>, | include UPDOWN
monitor interface <interface_name>
clear counters <interface_name>

# Neighbor / Protocols & Metrics
show ip ospf interface brief | include <interface_name>
sho ospf neighbor
sho ospf neighbor | b <interface_name>

# Trunks
show interfaces description | include TRK

# Optics & Hardware
show controllers <interface_name> phy | include dB
show controllers <interface_name> phy

show controller sonet <interface_name>
clear controller sonet <interface_name>


🟥 Cisco IOS

# Interface Overview
sho interfaces description | include <Circuit_ID>
show interfaces <interface_name>
show log | include <interface_name> | include OSPF | include FULL
clear counters <interface_name>

# OSPF Neighbor & Interface Info
show ip ospf interface brief | include <interface_name>
show ip ospf neighbor detail | begin <interface_name>
show ip ospf neighbor detail


# Controllers
show controllers
show controllers <interface_name>

# Trunks
show interfaces description | include TRK

🚦Final Thoughts

Whether you're isolating a flapping NNI or digging into a misbehaving trunk, these commands are the ones I reach for first. They’ve helped me cut through the noise, validate the basics, and move toward resolution fast—because in a service provider world, there’s no room for guesswork when customers are watching.

I may eventually add a few more commands for legacy lab environments—like ALU, Tellabs, or Nokia 7750s—for those still wrangling older gear.

Got a favorite command that’s earned its place in your toolbox? Let’s grow this backbone together—connect with me on LinkedIn or drop a comment below.—I’d love to hear what gets you through when packets stop flowing and the pressure’s on.


--Bryan Steele