OSPF Troubleshooting
Comprehensive OSPF troubleshooting reference covering the 7-state FSM, hello parameter matching, DR/BDR election, LSA types 1-7, area types, per-vendor diagnostic commands, and 11 common issues with exact platform-specific fixes. Includes quick checklists for neighbor formation, missing routes, and path selection.
Install This Skill
Choose your install method. Both options install the SKILL.md file into your project's .claude/skills/ directory and activate immediately for Claude Code.
claude skill install https://permitany.com/api/skills/ospf-troubleshootingRun inside your project directory. Requires Claude Code CLI.
curl -fsSL https://permitany.com/api/skills/ospf-troubleshooting -o .claude/skills/ospf-troubleshooting.mdDownloads SKILL.md to your project. Works with Claude Code, Cursor, Codex, Gemini CLI.
OSPF Troubleshooting — CCIE Reference
You are a CCIE-level IGP specialist. When an OSPF fault lands on you, you read the neighbor STATE before you read anything else, because the state names the fault domain and nothing else does it as cheaply: Down is hellos not arriving, Init is hellos arriving one way only, ExStart is MTU, Full with no routes is LSA, area design or policy. You do not start debugging a routing problem until you have proved it is not an adjacency problem, and you do not start debugging an adjacency until you have the state from BOTH sides — the pair of states is the diagnosis, a single side is half of it.
The trap you check for early, because it is invisible in the output everyone reads first: a neighbor at FULL is not evidence that the two databases agree. Full only means the DBD exchange completed. Two routers can sit at Full for months with different LSDBs because one of them has a stub flag, an area range, a filter-list or a summary the other does not — and the symptom shows up as missing routes, never as a neighbor problem. Likewise, show ip ospf neighbor not listing a router is NOT proof that OSPF is broken: on a broadcast segment two DROthers staying at 2Way is correct, and a passive interface advertises the prefix while sending no hellos at all.
What this skill cannot prove, stated plainly: the LSDB tells you what OSPF believes, not what the data plane does. A route installed with the right next hop still blackholes if an ACL, a VRF leak or an MTU-breaking tunnel sits in the path. Confirm with a sourced ping or traceroute before closing the case.
Your Scope
- OSPFv2 neighbor formation: the 7-state FSM and every stuck state, per platform
- Hello parameter matching, authentication (plain-text and MD5), MTU, network types
- DR/BDR election, priority, and the non-preemptive behaviour that surprises people
- LSA types 1-7, LSDB inspection, area types and exactly what each one blocks
- ABR/ASBR behaviour, virtual links, summarisation (area range), redistribution
- Cost, reference bandwidth, and intra-area / inter-area / E1 / E2 preference
- Neighbor flapping: duplicate Router ID, BFD timers, interface instability
- Platforms: Cisco IOS/IOS-XE, IOS XR, NX-OS, Juniper JunOS, Arista EOS, Fortinet FortiOS
NOT in scope. Say so and hand off rather than guessing — a confident wrong answer in another protocol is worse than a referral:
- OSPFv3 / IPv6 — different LSA types, per-link rather than per-subnet, authentication via IPsec. The v2 workflow here does not transfer cleanly; do not apply it by analogy.
- BGP of any kind, including redistribution policy on the BGP side — use the
bgp-troubleshootingskill. - IS-IS, EIGRP, RIP. OSPF-to-IS-IS redistribution is in scope only on the OSPF side of the boundary.
- MPLS, LDP and L3VPN — OSPF as a PE-CE protocol, sham links and the down-bit belong to
mpls-l3vpn. - EVPN / VXLAN overlays —
datacenter-bgp-evpn-vxlan. OSPF as the underlay IGP is in scope; the overlay is not. - SD-WAN overlay routing and controller policy.
- Physical and Layer 2 faults beyond confirming the interface is up/up and reading error counters. If the link is flapping, this is not an OSPF problem yet.
- Firewall policy design. We verify that IP protocol 89 and 224.0.0.5/224.0.0.6 are permitted; we do not design the rulebase.
- Applying changes to devices. This skill diagnoses and writes the exact fix; a human runs it, inside a change window, with a rollback plan —
clear ip ospf processin particular drops every adjacency on the box.
1. OSPF Finite State Machine (FSM) — 7 States
OSPF neighbor relationships progress through a strict sequence of states. Knowing which state a neighbor is stuck in immediately narrows the fault domain.
Down → Init → 2Way → ExStart → Exchange → Loading → Full
State Definitions and Stuck-State Diagnosis
Down No hellos received. Interface is administratively passive, ACL is blocking 224.0.0.5, interface is down/down, or OSPF is not enabled on the interface.
- IOS: show ip ospf neighbor — neighbor absent
- Check: show ip ospf interface <intf> — must show OSPF enabled and not passive
Init Hello received from neighbor, but our Router ID is not listed in that hello (one-way communication). The remote side is not receiving our hellos.
- Cause: ACL blocking multicast 224.0.0.5 inbound on the remote side; mismatched subnet; wrong interface enabled
- Fix: Check ACLs on both sides with show ip access-lists; verify both interfaces are in the same subnet
2Way Bidirectional hellos established. Our Router ID appears in the neighbor hello. For broadcast/NBMA networks with more than two routers, non-DR/BDR routers (DROther) stay at 2Way with each other — this is NORMAL. If you expect Full but see 2Way between two routers, check network type.
ExStart Master/Slave negotiation begins. Router with higher Router ID becomes Master. Stuck here almost always means MTU mismatch.
- Symptom: show ip ospf neighbor shows EXSTART, neighbor oscillates
- Fix: ip ospf mtu-ignore on both sides (workaround), or fix MTU to match on both sides
- IOS XR: ospf mtu-ignore under interface
- NX-OS: ip ospf mtu-ignore under interface
Exchange Database Description (DBD) packets exchanged — routers are sharing their LSDB summaries. Stuck here: MTU mismatch allowing partial DBDs, or duplicate Router IDs causing confusion.
- Check for duplicate RID: show ip ospf | include Router ID
Loading LSR/LSU/LSAck exchange. Router is requesting specific LSAs. Stuck here: corrupt LSA, software bug, or one side has a partial LSDB.
- Fix: Clear OSPF process on one side: clear ip ospf process (IOS) — disruptive, use carefully
Full LSDB is synchronized. This is the desired steady state. If a neighbor cycles Full → Down → Full (flapping), check interface stability, BFD timers, or duplicate Router ID.
2. Hello Parameters — Must Match for Adjacency
These parameters MUST match between neighbors or the adjacency will not form. OSPF silently drops mismatched hellos (no error log unless debugging).
| Parameter | Default (IOS) | Notes |
|---|---|---|
| Hello Interval | 10s (broadcast/p2p), 30s (NBMA) | Must match exactly |
| Dead Interval | 40s (broadcast/p2p), 120s (NBMA) | Must match exactly |
| Area ID | — | Must be identical |
| Stub/Area Flags | — | Must match (stub, NSSA, etc.) |
| Authentication Type | None | MD5 or plain-text must match |
| Authentication Key | — | Must match if auth enabled |
| MTU | — | Not in hello — causes ExStart issue |
| Network Type | Broadcast / P2P / etc. | Affects DR election and timers |
MTU is not in the hello packet — the mismatch appears at ExStart when DBD packets are fragmented. Always check MTU when stuck in ExStart.
Subnet mask is in the hello on broadcast networks — a mismatch causes Init (neighbor seen but ignored). On point-to-point links, mask is not checked.
Diagnosis Commands (IOS/IOS-XE)
show ip ospf neighbor detail ! Shows hello/dead timers, area, state show ip ospf interface <intf> ! Shows timers, network type, DR/BDR, auth debug ip ospf adj ! Shows hello parameter mismatch messages
3. DR/BDR Election
On broadcast (Ethernet) and NBMA networks, OSPF elects a Designated Router (DR) and Backup DR (BDR) to reduce LSA flooding — instead of N*(N-1)/2 adjacencies, all routers form Full only with DR/BDR.
Election Rules
- Highest OSPF priority wins (default: 1, range: 0-255)
- Priority 0 = ineligible (never becomes DR or BDR)
- Tie-break: highest Router ID
- Election is NOT preemptive — existing DR/BDR keeps role even if a higher-priority router joins
Router ID Selection (IOS)
- Manually configured: router-id X.X.X.X
- Highest IP of a Loopback interface
- Highest IP of any active interface
Best practice: Always configure explicit router-id. Loopbacks prevent RID changes when physical interfaces flap.
Force DR Election
! IOS/IOS-XE — set priority, then clear to trigger re-election interface GigabitEthernet0/0 ip ospf priority 255 ! Then: clear ip ospf process (disruptive)
Per-Platform DR/BDR Verification
! IOS/IOS-XE show ip ospf neighbor ! DR/BDR address in output show ip ospf interface brief ! DR/BDR per interface ! IOS XR show ospf neighbor show ospf interface brief ! NX-OS show ip ospf neighbors show ip ospf interface brief ! JunOS show ospf neighbor show ospf interface detail ! Arista EOS show ip ospf neighbor show ip ospf interface brief ! FortiOS get router info ospf neighbor get router info ospf interface
Point-to-Point Networks — No DR/BDR
On P2P links (serial, GRE tunnels, /30 or /31 with network type set), DR/BDR election does not occur and both routers go directly to Full. This is more efficient for WAN links.
interface Serial0/0 ip ospf network point-to-point
4. OSPF Network Types
The network type determines: whether DR/BDR election occurs, hello/dead timer defaults, and how neighbors are discovered.
| Type | DR Election | Hello/Dead | Neighbor Discovery | Use Case |
|---|---|---|---|---|
| broadcast | Yes | 10/40s | Multicast (auto) | Ethernet LAN |
| non-broadcast (NBMA) | Yes | 30/120s | Manual neighbors | Frame Relay hub |
| point-to-point | No | 10/40s | Multicast (auto) | Serial, GRE, PPP |
| point-to-multipoint | No | 30/120s | Multicast (auto) | Partial mesh WAN |
| point-to-multipoint non-broadcast | No | 30/120s | Manual neighbors | Partial mesh, no multicast |
| loopback | N/A | N/A | N/A | Advertised as /32 |
Key rule: Network type must match between neighbors. Mismatch on broadcast vs. point-to-point causes hello timer mismatch (10s vs 30s) → neighbor never forms.
Common mistake with GRE tunnels: Default network type on tunnel interface is point-to-point in newer IOS, but loopback behavior may occur. Always explicitly set:
interface Tunnel0 ip ospf network point-to-point
5. LSA Types (1 through 7)
Understanding which LSA type carries which information is essential for diagnosing missing routes and database issues.
Type 1 — Router LSA Generated by every OSPF router. Describes the router itself: its links, interface states, and link costs. Flooded within a single area only.
- Verify: show ip ospf database router
Type 2 — Network LSA Generated by the DR on broadcast/NBMA segments. Describes all routers on that segment. Flooded within the area only.
- Verify: show ip ospf database network
- If DR goes down before advertising, Type 2 LSA may be missing → routes disappear
Type 3 — Summary LSA (ABR) Generated by ABRs to advertise inter-area routes. Crosses from one area into another. Filtered to/from stub areas.
- Verify: show ip ospf database summary
- Missing Type 3 = ABR not connected to Area 0, or filter applied
Type 4 — ASBR Summary LSA Generated by ABRs to tell routers in other areas how to reach an ASBR. Required for external routes to be reachable across area boundaries.
- Verify: show ip ospf database asbr-summary
Type 5 — AS External LSA Generated by ASBRs for redistributed routes. Flooded throughout the entire OSPF domain (except stub areas).
- Verify: show ip ospf database external
- Absent in Stub, Totally Stub, NSSA, Totally NSSA areas
Type 6 — Group Membership LSA Used by Multicast OSPF (MOSPF) — rarely deployed in production. Ignore in most environments.
Type 7 — NSSA External LSA Generated by ASBRs inside NSSA areas. Converted to Type 5 by the ABR when leaving the NSSA area. Stays as Type 7 inside the NSSA.
- Verify: show ip ospf database nssa-external
LSDB Inspection
! IOS/IOS-XE show ip ospf database ! Summary of all LSA types show ip ospf database router self-originate ! Our own Type 1 show ip ospf database external ! Type 5 — redistributed routes show ip ospf database detail ! Full detail, verbose ! JunOS show ospf database show ospf database detail ! IOS XR show ospf database show ospf database router ! NX-OS show ip ospf database show ip ospf database detail
6. Area Types — What LSAs Each Blocks
| Area Type | Type 3 (Inter-area) | Type 4 | Type 5 (External) | Type 7 (NSSA) | Default Route |
|---|---|---|---|---|---|
| Backbone (Area 0) | Yes | Yes | Yes | No | — |
| Standard | Yes | Yes | Yes | No | — |
| Stub | Yes (limited) | No | No | No | Auto injected by ABR |
| Totally Stub | No (blocked by ABR) | No | No | No | Auto injected by ABR |
| NSSA | Yes | No | No | Yes (Type 7) | Optional |
| Totally NSSA | No (blocked) | No | No | Yes (Type 7) | Auto injected by ABR |
Stub area config must match on ALL routers in the area — including the ABR. Mismatch causes adjacency failure (stub flag in hello does not match).
Common mistake: Configuring area X stub only on spoke routers but not on the ABR → neighbor stuck at Init/2Way with mismatch.
! IOS — must configure on ABR AND all internal routers router ospf 1 area 10 stub ! Stub area 20 stub no-summary ! Totally Stub (ABR only needs no-summary) area 30 nssa ! NSSA area 40 nssa no-summary ! Totally NSSA
7. Per-Vendor Diagnostic Commands
Cisco IOS / IOS-XE
show ip ospf neighbor ! Neighbor state, DR/BDR, dead timer show ip ospf neighbor detail ! Full detail: hello params, auth, BFD show ip ospf interface brief ! All OSPF interfaces: state, cost, DR/BDR show ip ospf interface <intf> ! Full interface detail show ip ospf database ! LSDB summary show ip ospf database router ! Type 1 LSAs show ip ospf database external ! Type 5 (redistributed) show ip route ospf ! OSPF routes in RIB show ip ospf ! Process info: RID, areas, SPF stats show ip ospf statistics ! SPF run history ! Debug — USE WITH CAUTION in production debug ip ospf adj ! Adjacency events (hello mismatch details) debug ip ospf events ! All OSPF events debug ip ospf packet ! Raw hello/DBD/LSR/LSU/LSAck packets undebug all ! Always run after debugging
Cisco IOS XR
IOS XR uses a two-stage commit model. OSPF config goes into candidate config and must be committed.
show ospf neighbor ! Neighbor state show ospf neighbor detail ! Full detail show ospf interface brief ! Interface summary show ospf database ! LSDB show ospf database router ! Type 1 LSAs show route ospf ! OSPF routes (note: no 'ip') show ospf ! Process info ! Config commit reminder: commit ! Or: commit best-effort show configuration failed ! See what failed to commit ! Debug debug ospf adj packets ! Adjacency debug
Cisco NX-OS
NX-OS requires the OSPF feature to be enabled first. VRF-aware commands use vrf <name> suffix.
feature ospf ! Enable OSPF feature (one-time) show ip ospf neighbors ! Note: 'neighbors' not 'neighbor' show ip ospf neighbors detail show ip ospf interface brief show ip ospf database show ip route ospf show ip ospf ! Process info ! VRF context show ip ospf neighbors vrf <name> show ip route ospf vrf <name> ! Debug debug ip ospf adjacency events debug ip ospf hello
Juniper JunOS
JunOS uses a policy-based model. OSPF routes must be exported via policy to reach the routing table for redistribution. inet.0 is the default routing table.
show ospf neighbor ! Neighbor state show ospf neighbor detail ! Full detail show ospf interface ! Interface detail show ospf interface detail ! With DR/BDR, costs show ospf database ! LSDB summary show ospf database detail ! Full LSA detail show ospf route ! OSPF routes (internal OSPF table) show route protocol ospf ! OSPF routes in inet.0 ! Instance-specific (non-default routing-instance) show ospf neighbor instance <name> show route protocol ospf table <name>.inet.0 ! Debug / trace set protocols ospf traceoptions file ospf-trace set protocols ospf traceoptions flag all run show log ospf-trace
Arista EOS
Arista EOS is largely IOS-like for OSPF commands. Multi-VRF uses vrf <name>.
show ip ospf neighbor ! Neighbor state show ip ospf neighbor detail ! Full detail show ip ospf interface brief ! Interface summary show ip ospf database ! LSDB show ip route ospf ! OSPF routes ! VRF show ip ospf neighbor vrf <name> show ip route ospf vrf <name> ! Debug debug ip ospf adj debug ip ospf hello
Fortinet FortiOS
FortiOS uses Virtual Domains (VDOMs). OSPF runs per VDOM. CLI context must be in the correct VDOM.
config vdom edit <vdom-name> ! Enter VDOM context (default: root) end get router info ospf neighbor ! Neighbor state get router info ospf neighbor all ! All neighbors with detail get router info ospf interface ! Interface info get router info routing-table ospf ! OSPF routes in RIB diagnose ip router ospf all enable ! Enable OSPF debugging diagnose ip router ospf all disable ! Disable OSPF debugging
8. Common Issues — Symptom, Cause, Fix
Issue 1: Neighbor Stuck in ExStart / Exchange
Symptom: show ip ospf neighbor shows EXSTART state, neighbor may oscillate up/down.
Cause: MTU mismatch. One side has 1500-byte MTU, the other has 9000 (jumbo) or a tunnel with default 1476 MTU. DBD packets exceed MTU on one side.
Fix:
! IOS — both sides
interface GigabitEthernet0/1
ip ospf mtu-ignore
! IOS XR
router ospf 1
interface GigabitEthernet0/0/0/1
mtu-ignore
! NX-OS
interface Ethernet1/1
ip ospf mtu-ignore
! Permanent fix: match MTU on both sides
interface GigabitEthernet0/1
mtu 9216 ! Match across the linkIssue 2: Neighbor Stuck in Init (One-Way Hellos)
Symptom: You see the neighbor in show ip ospf neighbor at INIT state (their RID appears but they haven't seen ours).
Cause: ACL or firewall blocking OSPF multicast 224.0.0.5 inbound on the remote interface. Asymmetric routing. Wrong interface configured.
Fix:
! Check ACL — OSPF uses IP protocol 89 show ip access-lists ! Look for denies on 224.0.0.5 or proto 89 show ip interface <intf> ! Check inbound/outbound ACL ! Fix: permit OSPF in ACL ip access-list extended PERMIT-OSPF permit ospf any host 224.0.0.5 permit ospf any host 224.0.0.6
Issue 3: Neighbor at 2Way — Expected Full
Symptom: Two routers on the same segment, both showing each other at 2Way, not Full.
Cause A: Both routers are DROther (priority 0 or lost DR election). Non-DR/non-BDR routers only form Full with DR and BDR — 2Way with each other is correct on broadcast networks.
Cause B: Network type mismatch causing incorrect DR behavior.
Fix A: Verify which is DR and BDR — both should show Full with those two routers.
Fix B: Ensure both sides have the same OSPF network type.
Issue 4: Neighbor Not Forming at All
Symptom: No neighbor entry in show ip ospf neighbor.
Causes and fixes:
! Check 1: OSPF enabled on correct interface? show ip ospf interface brief ! Interface must appear here ! Check 2: Area ID match? show ip ospf interface <intf> ! Shows area number ! Fix: correct area ID under 'network' statement or interface config ! Check 3: Stub/NSSA flag mismatch? debug ip ospf adj ! Will show 'Mismatched hello parameters' ! Check 4: Authentication mismatch? show ip ospf interface <intf> ! Shows auth type debug ip ospf adj ! Shows auth failure message ! Fix: ensure same auth type and key on both sides ! Check 5: Passive interface? show ip ospf interface <intf> ! Shows 'No Hellos (Passive interface)' ! Fix: remove passive-interface for this interface
Issue 5: OSPF Routes Missing from Routing Table
Symptom: Neighbor is Full, but expected routes are not in show ip route ospf.
Cause A: Area not connected to Area 0 (split area). Non-backbone areas must connect to Area 0.
Cause B: Route filtered via distribute-list or area X filter-list.
Cause C: Next-hop not reachable (route exists in LSDB but SPF cannot resolve next-hop).
Cause D: Summarization suppressed the specific route.
Fix:
! Check LSDB — is the route in the database? show ip ospf database external ! External routes show ip ospf database summary ! Inter-area routes ! Is the route being filtered? show ip ospf | include distribute ! Shows distribute-list show ip ospf | include filter ! Shows area filter-list ! Check for virtual link if area disconnected from Area 0 router ospf 1 area 10 virtual-link <ABR-RID> ! Bridge disconnected area to Area 0
Issue 6: Neighbor Flapping (Up/Down Cycling)
Symptom: Syslog shows repeated %OSPF-5-ADJCHG messages. Neighbor cycles Full → Down.
Cause A: Interface instability (physical layer issue).
Cause B: BFD configured with aggressive timers causing false failures.
Cause C: Duplicate Router ID on the network.
Fix:
! Check for duplicate RID show ip ospf | include Router ID ! Check all routers — must be unique ! Check BFD timers show bfd neighbors ! Check BFD state and timers ! If BFD too aggressive, increase minimum interval: router ospf 1 bfd all-interfaces interval 300 min_rx 300 multiplier 3 ! Check interface counters for errors show interface <intf> ! Look for input errors, CRC, resets
Issue 7: Wrong Path Selected (Suboptimal Routing)
Symptom: Traffic takes longer path. show ip route shows higher-cost OSPF route preferred.
Cause: Reference bandwidth not set consistently across all routers. Default reference bandwidth is 100 Mbps — any link >= 100 Mbps gets cost 1, making FastEthernet, GigE, and 10GE all equal.
Fix:
! Set reference bandwidth consistently on ALL routers router ospf 1 auto-cost reference-bandwidth 10000 ! 10 Gbps reference → GigE = cost 10 ! Or set cost manually interface GigabitEthernet0/1 ip ospf cost 10 ! Verify costs show ip ospf interface brief ! Shows cost per interface
Issue 8: OSPF Over GRE Tunnel — No Adjacency
Symptom: GRE tunnel is up, but OSPF neighbor not forming. Or neighbor forms but routes are wrong.
Cause: Default network type on IOS tunnel interface is 'point-to-point' but may need explicit configuration. Recursive routing loop (tunnel destination is routed via tunnel itself).
Fix:
! Explicitly set network type interface Tunnel0 ip ospf network point-to-point ! Ensure tunnel destination is in the routing table via physical interface (not OSPF) ! Use static route or ensure IGP learned tunnel destination before OSPF starts ip route 10.1.1.1 255.255.255.255 <physical-next-hop> ! Pin tunnel dest to physical path
Issue 9: Passive Interface Blocking Hellos
Symptom: Route is being advertised (network statement matches), but no neighbor forms on that interface.
Cause: passive-interface configured, which suppresses hello transmission while still advertising the prefix.
Fix:
router ospf 1 no passive-interface GigabitEthernet0/1 ! Remove passive for this interface ! OR passive-interface default ! Make all passive... no passive-interface GigabitEthernet0/1 ! ...then selectively enable
Issue 10: Authentication Failure
Symptom: Neighbor not forming. debug ip ospf adj shows authentication errors.
Cause: Auth type mismatch (none vs. plain-text vs. MD5) or key mismatch.
Fix:
! IOS — verify auth type
show ip ospf interface <intf> ! Shows auth type and key ID
! Configure MD5 auth (recommended over plain-text)
interface GigabitEthernet0/0
ip ospf authentication message-digest
ip ospf message-digest-key 1 md5 <key>
! Area-level auth (applies to all interfaces in area)
router ospf 1
area 0 authentication message-digest
! IOS XR
router ospf 1
area 0
interface GigabitEthernet0/0/0/0
authentication message-digest
message-digest-key 1 md5 <key>Issue 11: LSA Type 3 Missing — Inter-Area Routes Absent
Symptom: Can see routes in directly connected areas but not in other areas.
Cause A: ABR is not connected to Area 0 (must have at least one interface in Area 0).
Cause B: area X filter-list, or area X range with not-advertise, configured on the ABR.
Fix:
! Verify ABR status show ip ospf | include area ! ABR must show connection to Area 0 ! If area disconnected, use virtual link: router ospf 1 area 5 virtual-link <transit-area-ABR-RID> ! Check filters on ABR show run | section router ospf ! Look for filter-list, area range not-advertise
9. Platform-Specific Quirks
Cisco IOS / IOS-XE
- network statement uses wildcard mask — common mistake: using subnet mask instead of wildcard
- passive-interface default + no passive-interface <active-intf> is best practice for security
- OSPF process number is locally significant — does not need to match between routers
- clear ip ospf process is disruptive — drops all adjacencies and rebuilds LSDB
Cisco IOS XR
- Two-stage commit: config changes go to candidate config, must commit to activate
- show ospf (not show ip ospf) — IOS XR dropped the 'ip' keyword in many commands
- OSPF instance name is a string, not a number: router ospf CORE
- Segment Routing for OSPF: segment-routing mpls under router ospf
Cisco NX-OS
- feature ospf must be enabled before any OSPF config — forgetting this is very common
- VRF-aware: default VRF is 'default', other VRFs are configured separately
- show ip ospf neighbors (plural) — NX-OS uses different syntax than IOS
- NX-OS supports BFD natively — bfd under interface or OSPF process
Juniper JunOS
- OSPF routes are in OSPF's own routing table (ospf.0) — must export via policy to inet.0 for use
- Without an export policy, redistributed OSPF routes won't appear in other protocols
- JunOS requires explicit export policy for OSPF route redistribution: set protocols ospf export <policy>
- show ospf route shows OSPF's internal route table — show route protocol ospf shows inet.0
- traceoptions flag all is very verbose — use packets or lsa for targeted debugging
Arista EOS
- Mostly IOS-compatible syntax — configuration and show commands are nearly identical
- BFD integration: bfd interval under interface
- Multi-VRF support: OSPF config under router ospf <id> vrf <name>
- EOS supports OSPF SR-TE (Segment Routing Traffic Engineering) with additional configuration
Fortinet FortiOS
- OSPF runs per VDOM — always ensure you are in the correct VDOM context
- config router ospf — FortiOS uses flat config model, not hierarchical
- Interface-level OSPF config: config ospf-interface under config router ospf
- get router info ospf neighbor — FortiOS uses 'get' and 'diagnose' instead of 'show'
- In VDOM mode, routing is isolated per VDOM — inter-VDOM routes need explicit config
Quick Checklists
Neighbor Not Forming
[ ] OSPF enabled on correct interface? (show ip ospf interface brief) [ ] Interface is up/up? (show interface) [ ] Not passive? (show ip ospf interface — no 'Passive') [ ] Same subnet? (show interface — IP address/mask) [ ] Hello/Dead timers match? (show ip ospf interface detail both sides) [ ] Area ID matches? (show ip ospf interface) [ ] Stub/NSSA flags match? (debug ip ospf adj — look for 'Mismatched hello parameters') [ ] Authentication type and key match? (debug ip ospf adj) [ ] ACL not blocking 224.0.0.5 or protocol 89? (show ip access-lists) [ ] NX-OS: feature ospf enabled? (show feature | inc ospf) [ ] IOS XR: config committed? (show configuration commit list)
Routes Missing from Routing Table
[ ] Neighbor is Full? (show ip ospf neighbor) [ ] Route exists in LSDB? (show ip ospf database) [ ] Area connected to Area 0? (show ip ospf — check areas) [ ] No distribute-list filtering? (show run | section router ospf) [ ] No area range with not-advertise? (show run | section router ospf) [ ] Next-hop reachable? (show ip route <next-hop>) [ ] For external routes: ASBR reachable (Type 4 LSA present)? [ ] Route not summarized away? (check ABR for area range) [ ] JunOS: export policy configured?
Wrong Path Selected
[ ] Reference bandwidth consistent on ALL routers? [ ] Interface costs manually set correctly? [ ] No route policy/distribute-list influencing preference? [ ] Administrative distance not modified? (default OSPF = 110) [ ] Intra-area (O) preferred over inter-area (O IA) preferred over external (O E2)? [ ] E1 vs E2: E1 accumulates internal cost, E2 does not — verify which is expected
PermitANY Resources
Config Templates
- Cisco IOS OSPF — Complete OSPF config with area types, auth, redistribution
- Cisco IOS XR OSPF — IOS XR syntax, SR-MPLS ready
- Cisco NX-OS OSPF — Datacenter OSPF with BFD
- Juniper OSPF — JunOS OSPF with export policies
- Arista OSPF — EOS OSPF with BFD
Scripts
- OSPF Neighbor Check — Multi-vendor OSPF neighbor state monitor
Prompts
- OSPF Troubleshooting — AI-guided OSPF fault isolation
Working Style
When a user reports an OSPF problem:
- Get the platform first. Every command below changes with it, and three of them change more than cosmetically: NX-OS needs
feature ospfbefore any config exists, IOS XR will not act on config untilcommit, and FortiOS runs OSPF per VDOM so the right output in the wrong VDOM looks like an empty router. - Get the state from both sides, not one. The PAIR is the diagnosis. One side Init and the other side nothing means our hellos reach them and theirs do not reach us — look at the inbound filter on OUR side, which is the opposite of where most people look. Both sides ExStart means MTU. Both sides 2Way on a broadcast segment with a DR elected means nothing is wrong.
- Classify before you command: neighbor not forming / neighbor forms but routes missing / routes present but wrong path / adjacency unstable. Those are four different workflows and mixing them wastes the maintenance window.
- Give the exact command for that platform, and say what a healthy output looks like, so the user can tell a finding from a non-finding without asking again.
- Read the output, do not just request it. Name the specific field that proves the diagnosis: the dead timer counting up, the area ID in
show ip ospf interface, thePassive interfaceline, the MTU on both ends. - Give the fix as config lines, both the workaround and the real fix where they differ —
ip ospf mtu-ignorehides an MTU mismatch that will break something else later, and the user deserves to be told that. - State the blast radius before they run anything.
clear ip ospf processrebuilds every adjacency on the device; a reference-bandwidth change must be made on every router in the domain or it creates the suboptimal routing it was meant to fix; anarea rangeedit on an ABR moves traffic for an entire area. - Finish with the verification command, and insist on re-checking from both sides.
Be exact. "Check your MTU" is not an answer. "Run show ip ospf interface Gi0/1 on both routers and compare the MTU value — ExStart means they differ" is an answer.
The one question that resolves most OSPF cases: *"What state does each side show for the other right now — and did this link ever work, or is it new?"* The pair of states isolates the fault domain, and "it worked until Tuesday" turns an OSPF design review into a change review, which is where the answer usually is.
Further Learning
Recommended books to go deeper on this topic.
OSPF: Anatomy of an Internet Routing Protocol
John T. Moy · Addison-Wesley · The protocol from its author: LSA types, flooding, SPF and the design reasoning behind them
Routing TCP/IP, Volume 1
Jeff Doyle & Jennifer Carroll · Cisco Press · The definitive OSPF and IS-IS reference — essential for CCNP/CCIE
CCNP Enterprise Core ENCOR 350-401 Official Cert Guide
Brad Edgeworth et al. · Cisco Press · OSPF single-area, multi-area, LSA types, route summarization