PermitANY
networkingSKILL.md

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.

35 installs
Cisco IOS/IOS-XECisco IOS XRCisco NX-OSJuniperArista EOSFortinet
terminal

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.

Option AClaude Code native install
claude skill install https://permitany.com/api/skills/ospf-troubleshooting

Run inside your project directory. Requires Claude Code CLI.

Option BUniversal (curl) — works with any AI assistant
curl -fsSL https://permitany.com/api/skills/ospf-troubleshooting -o .claude/skills/ospf-troubleshooting.md

Downloads SKILL.md to your project. Works with Claude Code, Cursor, Codex, Gemini CLI.

SKILL.md— the full context file

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-troubleshooting skill.
  • 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 process in 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).

ParameterDefault (IOS)Notes
Hello Interval10s (broadcast/p2p), 30s (NBMA)Must match exactly
Dead Interval40s (broadcast/p2p), 120s (NBMA)Must match exactly
Area ID—Must be identical
Stub/Area Flags—Must match (stub, NSSA, etc.)
Authentication TypeNoneMD5 or plain-text must match
Authentication Key—Must match if auth enabled
MTU—Not in hello — causes ExStart issue
Network TypeBroadcast / 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

  1. Highest OSPF priority wins (default: 1, range: 0-255)
  2. Priority 0 = ineligible (never becomes DR or BDR)
  3. Tie-break: highest Router ID
  4. Election is NOT preemptive — existing DR/BDR keeps role even if a higher-priority router joins

Router ID Selection (IOS)

  1. Manually configured: router-id X.X.X.X
  2. Highest IP of a Loopback interface
  3. 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.

TypeDR ElectionHello/DeadNeighbor DiscoveryUse Case
broadcastYes10/40sMulticast (auto)Ethernet LAN
non-broadcast (NBMA)Yes30/120sManual neighborsFrame Relay hub
point-to-pointNo10/40sMulticast (auto)Serial, GRE, PPP
point-to-multipointNo30/120sMulticast (auto)Partial mesh WAN
point-to-multipoint non-broadcastNo30/120sManual neighborsPartial mesh, no multicast
loopbackN/AN/AN/AAdvertised 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 TypeType 3 (Inter-area)Type 4Type 5 (External)Type 7 (NSSA)Default Route
Backbone (Area 0)YesYesYesNo—
StandardYesYesYesNo—
StubYes (limited)NoNoNoAuto injected by ABR
Totally StubNo (blocked by ABR)NoNoNoAuto injected by ABR
NSSAYesNoNoYes (Type 7)Optional
Totally NSSANo (blocked)NoNoYes (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 link

Issue 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

Scripts

Prompts


Working Style

When a user reports an OSPF problem:

  1. Get the platform first. Every command below changes with it, and three of them change more than cosmetically: NX-OS needs feature ospf before any config exists, IOS XR will not act on config until commit, and FortiOS runs OSPF per VDOM so the right output in the wrong VDOM looks like an empty router.
  2. 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.
  3. 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.
  4. 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.
  5. 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, the Passive interface line, the MTU on both ends.
  6. Give the fix as config lines, both the workaround and the real fix where they differ — ip ospf mtu-ignore hides an MTU mismatch that will break something else later, and the user deserves to be told that.
  7. State the blast radius before they run anything. clear ip ospf process rebuilds 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; an area range edit on an ABR moves traffic for an entire area.
  8. 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

Tags

ospfroutingtroubleshootingigpciscojuniperaristafortinetccielsadr-bdrfsm