Skip to content
LinkState
Go back

Canarying hello timer changes across a fabric

Introduction to Staging OSPF Timer Changes

OSPF hello and dead timers control how quickly routers detect loss of adjacency and how long they wait before declaring a neighbor down. The hello interval sets the frequency of hello packets; the dead interval is usually a multiple of the hello interval (default 4×). Changing these values affects convergence speed and sensitivity to transient link fluctuations. In production networks, indiscriminate timer changes can cause adjacency flaps, LSDB inconsistencies, or split‑brain scenarios if the new timers are not symmetric across all routers on a link.

Before propagating a timer change network‑wide, it is essential to confirm that the new timers still allow:

  1. Adjacency formation – routers exchange hello packets, negotiate parameters, and reach the FULL state.
  2. LSDB synchronization – after adjacency is FULL, each router’s link‑state database converges to the same set of LSAs.

Verifying these properties on a limited failure domain (e.g., a single link or a small area) provides proof that the timer values are compatible with the link characteristics and OSPF implementation. If verification fails, the impact is confined to the test domain, protecting the rest of the network from unnecessary instability.


Understanding OSPF Timer Changes

Hello Timer

The hello timer (ip ospf hello-interval <seconds> on Cisco IOS) dictates the period between OSPF hello packets. Reducing the hello interval speeds adjacency detection but increases hello traffic; increasing it reduces overhead but slows failure detection. The hello interval must be identical on all routers sharing a common link; otherwise, adjacency will not form.

Dead Timer

The dead timer (ip ospf dead-interval <seconds>) defines how long a router waits for hello packets from a neighbor before declaring the neighbor down. The dead interval is usually a multiple of the hello interval (default 4×). As with hello, the dead interval must match across all routers on the link. A dead interval that is too short relative to actual link latency can cause false neighbor loss; too long delays failure detection.

Impact on Adjacency and LSDB

Any timer change must be validated for symmetry and resulting adjacency/LSDB behavior before wider deployment.


Staging Hello and Dead Timer Changes

Configuring Timer Changes on a Small Failure Domain

A small failure domain can be a single point‑to‑point link or a tiny OSPF area with only a few routers. The goal is to apply the new timers only to the interfaces within that domain, leaving the rest of the network unchanged.

Pre‑check (transaction boundary start)

  1. Verify current hello/dead intervals on the target interfaces.
  2. Confirm adjacency state is FULL and LSDB is synchronized (show ip ospf neighbor, show ip ospf database).
  3. Record baseline metrics (hello Rx/Tx rate, CPU, memory) for later comparison.

Change boundary

Apply the new timer values on the selected interfaces only. Example for Cisco IOS XE:

interface GigabitEthernet0/0/1
 ip ospf hello-interval 5
 ip ospf dead-interval 20

If the domain contains more than two routers, repeat the interface‑level configuration on each router’s participating interface.

Verification gate (post‑change)

After committing the configuration, run the verification steps described in the next section. Only if all checks pass should the change be allowed to propagate beyond the failure domain.

Rollback trigger

If any verification check fails (adjacency not FULL, LSDB mismatch, or hello loss observed), revert the interfaces to their original timer values:

interface GigabitEthernet0/0/1
 no ip ospf hello-interval
 no ip ospf dead-interval

The no form restores the default hello/dead values derived from the OSPF process or interface‑level defaults.

Blast radius

Limited to the interfaces inside the failure domain. No other routers experience the timer change, so any instability is contained.

Operator intervention point

After the verification gate succeeds, the operator explicitly approves the next stage (e.g., expand the domain to another link or area). This manual gate prevents a faulty timer set from automatically cascading.


Verifying Adjacency Formation and LSDB Sync

CLI Commands for Verification

Example Verification

Assume timers were changed on interface GigabitEthernet0/0/1 of routers R1 and R2.

# On R1
R1# show ip ospf interface GigabitEthernet0/0/1
 GigabitEthernet0/0/1 is up, line protocol is up
   Internet Address 10.0.12.1/24, Area 0
   Process ID 1, Router ID 1.1.1.1, Network Type BROADCAST, Cost: 1
   Transmit Delay is 1 sec, State DR, Priority 1
   Timer intervals configured, Hello 5, Dead 20, Wait 40, Retransmit 5
     Hello due in 00:00:02
   Index 1/1, flood queue length 0
   Next hello 00:00:02

R1# show ip ospf neighbor
 Neighbor ID     Pri   State           Dead Time   Address         Interface
 2.2.2.2           1   FULL/DR         00:00:15    10.0.12.2       GigabitEthernet0/0/1

R1# show ip ospf database | include 10.0.12.0
    Link ID         ADV Router      Age         Seq#       Checksum
    10.0.12.0       1.1.1.1         0           0x80000001 0x1234
    10.0.12.0       2.2.2.2         0           0x80000001 0x1234

Repeat the same set of commands on R2. If both routers show hello = 5, dead = 20, neighbor state FULL, and identical LSA entries for the link, the verification gate passes.


Troubleshooting Timer Change Issues

Common Issues

SymptomLikely Cause
Neighbor stays in INIT/2‑WAYHello interval mismatch or hello packets blocked (ACL, QoS).
Neighbor flaps between DOWN and ATTEMPTDead interval too short relative to actual link latency or jitter.
LSDB differs (different sequence numbers)Adjacency never reached FULL; LSAs not exchanged.
High CPU on OSPF processHello interval too low, causing excessive hello processing.
No hello packets seen on wireInterface shut down, physical layer issue, or timer not applied (config not committed).

Debugging Techniques

Cisco IOS provides granular debug flags for OSPF hellos and events:

Caution: Debug can be CPU‑intensive; limit to the specific interface or enable for a short window and then disable.

Example Debug Session

Suppose adjacency never reaches FULL after setting hello = 5, dead = 20 on the R1‑R2 link.

R1# debug ip ospf hello
*Mar  1 12:00:01.000: OSPF: Send hello to 224.0.0.5 via Gig0/0/1, my id 1.1.1.1
*Mar  1 12:00:01.000: OSPF: Received hello from 2.2.2.2, area 0, hello interval 5, dead interval 20
*Mar  1 12:00:01.000: OSPF: Neighbor 2.2.2.2 state change INIT -> 2-WAY
*Mar  1 12:00:06.000: OSPF: Send hello to 224.0.0.5 via Gig0/0/1, my id 1.1.1.1
*Mar  1 12:00:06.000: OSPF: Received hello from 2.2.2.2, area 0, hello interval 5, dead interval 20
*Mar  1 12:00:06.000: OSPF: Neighbor 2.2.2.2 state change 2-WAY -> INIT (dead timer expired)

The log shows that although hello intervals match, the dead timer expired before the next hello arrived, indicating that actual link latency plus jitter exceeds the dead interval (20 s). The operator would increase the dead interval (e.g., to 40) and re‑test.

After debugging, disable:

R1# undebug all

or

R1# no debug ip ospf hello

Scaling Limitations and Best Practices

Limitations of Staging Timer Changes on Large Networks

  1. Manual interface‑by‑interface configuration becomes error‑prone as the number of links grows.
  2. Verification overhead – running show ip ospf interface and neighbor checks on hundreds of interfaces consumes operator time.
  3. State drift – while a staged rollout is in progress, parts of the network run with old timers and parts with new timers; if the new timers are not backward‑compatible (e.g., hello interval too low for some older hardware), transient adjacency loss can appear at the boundary.
  4. Lack of atomicity – OSPF does not provide a transaction that rolls back timer changes automatically; reliance on manual revert increases risk of human error.
  5. Propagation delay – In large hierarchical designs, a change made in a backbone area may take several LSA refresh cycles to propagate to stub areas, extending the window where mismatched timers exist.

Best Practices for Scaling Timer Changes

Example: Automated Script with Ansible

---
- name: Stage OSPF timer change on area 0 links
  hosts: routers
  gather_facts: false
  vars:
    new_hello: 5
    new_dead: 20
  tasks:
    - name: Apply hello/dead timers on GigabitEthernet interfaces in area 0
      ios_config:
        lines:
          - ip ospf hello-interval {{ new_hello }}
          - ip ospf dead-interval {{ new_dead }}
        parents: interface GigabitEthernet0/0/1
      notify: Verify OSPF adjacency

  handlers:
    - name: Verify OSPF adjacency
      ios_command:
        commands:
          - show ip ospf neighbor
          - show ip ospf interface GigabitEthernet0/0/1
      register: result
      failed_when: "'FULL' not in result.stdout[0]"

This playbook sets the hello and dead timers on the specified interface, then triggers a handler that checks for FULL adjacency. If the check fails, the handler marks the task as failed, allowing the operator to intervene or an automated rollback to proceed.


By following the staged approach—pre‑check, isolated change, verification gate, and explicit operator approval—you can safely validate OSPF hello and dead timer adjustments before they affect the broader network. Automation and clear rollback procedures further reduce risk when scaling the change across larger failure domains.


Share this post on:

Previous Post
Why route refresh made the policy look applied
Next Post
AI workbenches for SoT normalization