OSPF Convergence Timers (SPF / LSA Throttling)
When a link goes down or a cost changes, an OSPF router rebuilds its LSA and every router that receives it recalculates its routes with SPF. For a single change, rebuilding and recalculating immediately converges fastest. But when a link flaps, repeating that work on every change overloads the CPU and the network settles more slowly, not faster.
That is why OSPF implementations deliberately delay rebuilding LSAs and running SPF, and stretch that delay as changes keep coming. This article works through how that delay is defined by the RFCs and by Cisco, then confirms it on IOS XR with millisecond timestamps.
Periodic LSA refresh (1800 seconds) and LSA aging are covered in OSPF LSAs and the LSA header.
What RFC 2328 defines
RFC 2328 sets fixed lower bounds on generating and receiving LSAs. Section 12.4 says this about generation.
… two instances of the same LSA may not be originated within MinLSInterval of each other. It may be necessary to delay the origination of the next LSA instance by up to MinLSInterval.
The same section states that a new LSA is originated only when its contents change. If a change is made and then reverted while the router is waiting, so that the contents match the LSA already sent, no new LSA is built.
The bound on the receiving side is in Section 13, step (5)(a).
If there is already a database copy, and if the database copy was received via flooding and installed less than MinLSArrival seconds ago, discard the new LSA (without acknowledging it).
Because no acknowledgement comes back, the sender retransmits the LSA. This check applies only to LSAs received via flooding, not to LSAs the router originates itself (Appendix G.2).
By contrast, RFC 2328 defines no timer for when SPF runs. Delaying SPF is left to implementations and to RFC 8405.
The RFC values and the IOS XR defaults line up as follows. The IOS XR values are visible in show ospf.
| Item | RFC 2328 | IOS XR default | Configuration command |
|---|---|---|---|
| Minimum interval between rebuilding the same LSA | MinLSInterval 5 s | 200 ms | timers throttle lsa all |
| Minimum interval for accepting the same LSA | MinLSArrival 1 s | 100 ms | timers lsa min-arrival |
| How LSA generation is delayed | Not defined | initial 50 / min 200 / max 5000 ms | timers throttle lsa all |
| How SPF is delayed | Not defined | initial 50 / min 200 / max 5000 ms | timers throttle spf |
The Minimum LSA interval line in show ospf reports the same value as the second number (hold) of the LSA throttle. In this lab, setting hold to 2000 ms changes that line to Minimum LSA interval 2000 msecs.
Cisco’s exponential backoff
On IOS XR, timers throttle spf (SPF) and timers throttle lsa all (LSA generation) take three values.
| Value | Meaning |
|---|---|
| start | Delay from an event in a quiet network until SPF runs or the LSA is built |
| hold | Base delay once events keep arriving. It doubles on each successive run |
| max-wait | Upper bound on the delay |
Cisco’s OSPF Shortest Path First Throttling guide describes when it doubles and what happens at the maximum.
Notice that the wait interval between SPF calculations doubles when at least one topology change event is received during the previous wait interval.
Once the maximum wait time is reached, the wait interval remains the same until the topology stabilizes and no event is received in that interval.
With timers throttle spf 1000 2000 16000, for example, the delay grows 1, 2, 4, 8 and 16 seconds while events keep coming, then stops at 16 seconds. Three points matter here.
- The delay is measured from the previous SPF run (or LSA build), not from the event. The actual run therefore happens at whichever is later: the previous run plus the delay, or the event plus start
- Events that arrive during the delay are folded into the next single run. Ten changes collapsing into three SPF runs is perfectly normal
- Once at the maximum, the delay returns to start if no event arrives for that same amount of time. That is the “stabilizes” condition
Because both the sender and the receiver hold back, the interval you observe is set by whichever is longer: LSA generation on the sender or SPF on the receiver. With the defaults on both, the sender is what you see first.
The defaults of 50 / 200 / 5000 ms and the 100 ms acceptance interval are the values Cisco’s notice about the default change aligned IOS with, stating that they match the IOS XR defaults.
How RFC 8405 delays SPF
Doubling behaves differently from one implementation to another. RFC 8405 was written to make it uniform. Instead of doubling, it switches the delay based on the time elapsed since the first change.
| Parameter | Recommended default | Meaning |
|---|---|---|
| INITIAL_SPF_DELAY | 50 ms | Delay for the first change in a quiet network |
| SHORT_SPF_DELAY | 200 ms | Delay shortly after the first change |
| LONG_SPF_DELAY | 5000 ms | Delay while changes keep coming |
| TIME_TO_LEARN | 500 ms | Expected time for all information about one failure to arrive |
| HOLDDOWN | 10000 ms | Time before the network is considered quiet again |
IOS XR has no option to select the RFC 8405 algorithm for OSPF. timers throttle spf accepts only three numbers, and there is no matching keyword under spf either (checked with ? in configuration mode). IS-IS has spf-interval ietf; OSPF does not. The lab below therefore measures Cisco’s exponential backoff.
Lab verification
Lab setup
Three IOS XR routers (XRd 26.1.1) in a line, all in area 0. The router-to-router links use network type point-to-point with a cost of 10.
| Router | Router ID | Role |
|---|---|---|
| R1 | 1.1.1.1 | Observation point. Watches the SPF delay and MinLSArrival. Only R1 gets timers throttle spf and timers lsa min-arrival |
| R2 | 2.2.2.2 | Event source. Changes the cost of its link toward R3 so its Router-LSA is rebuilt. Only R2 gets timers throttle lsa all |
| R3 | 3.3.3.3 | Beyond R2. The cost of 3.3.3.3/32 as seen from R1 changes on every event |
One event means logging in to R2 over SSH, changing cost and committing. Staying in configuration mode and repeating only cost and commit produces a change roughly every 1.8 seconds. All timestamps come from router-side traces and syslog in milliseconds, and the capture is taken between R1 and R2.
Lab STEPs
| STEP | Operation | What it shows |
|---|---|---|
| 0 | Defaults, nothing changed | The default values in show ospf and reachability from R1 to R3 |
| 1 | Twelve events about 1.8 seconds apart with the defaults | Even at 50 / 200 / 5000 ms the delay doubles and stops at 5000 ms |
| 2 | timers throttle spf 1000 2000 16000 on R1; ten events 1.8 s apart, three 24 s apart, two 40 s apart |
The SPF delay grows 1 → 2 → 4 → 8 → 16 s, holds there, and returns to start once quiet |
| 3 | Revert R1, set timers throttle lsa all 1000 2000 16000 on R2, same event pattern |
LSA generation is delayed the same way and returns to start once quiet |
| 4 | Keep R2 as is; alternate the cost between 20 and 10 ten times about 1.8 s apart | No new LSA is built when the contents revert during the delay |
| 5 | Revert R2, set timers lsa min-arrival 3000 on R1; ten events 1.8 s apart |
New LSAs arriving within 3 seconds are discarded without an acknowledgement |
| 6 | Keep R1 as is; generate only two events, then stay quiet | The discarded LSA is retransmitted by the sender and then accepted |
| 7 | Set the SPF delay on R1 and LSA generation delay on R2 at the same time; 30 events 1.8 s apart | The two delays add up, and LSA generation stays at its maximum |
| 8 | Revert everything (final state) | show ospf and router ospf match STEP 0 |
STEP 0: Confirming the defaults
Here is show ospf on R1. SPF and LSA throttling are both 50 / 200 / 5000 ms and Minimum LSA arrival is 100 ms — orders of magnitude shorter than the 5 seconds and 1 second in RFC 2328.
Initial SPF schedule delay 50 msecs
Minimum hold time between two consecutive SPFs 200 msecs
Maximum wait time between two consecutive SPFs 5000 msecs
Initial LSA throttle delay 50 msecs
Minimum hold time for LSA throttle 200 msecs
Maximum wait time for LSA throttle 5000 msecs
Minimum LSA interval 200 msecs. Minimum LSA arrival 100 msecs
LSA refresh interval 1800 seconds
Flood pacing interval 33 msecs. Retransmission pacing interval 66 msecsSTEP 1: Twelve events about 1.8 seconds apart with the defaults
Twelve events with the defaults untouched. These are the SPF runs on R1.
238 Sep 16 11:33:21.575 ospf_run_spf: Begin SPF
269 Sep 16 11:33:23.576 ospf_run_spf: Begin SPF
300 Sep 16 11:33:25.377 ospf_run_spf: Begin SPF
331 Sep 16 11:33:27.178 ospf_run_spf: Begin SPF
362 Sep 16 11:33:28.951 ospf_run_spf: Begin SPF
393 Sep 16 11:33:32.153 ospf_run_spf: Begin SPF
424 Sep 16 11:33:37.154 ospf_run_spf: Begin SPF
455 Sep 16 11:33:42.155 ospf_run_spf: Begin SPFListing the intervals shows the delay stretching.
| SPF on R1 (UTC) | Since the previous SPF |
|---|---|
| 11:33:21.575 | — |
| 11:33:23.576 | 2000 ms |
| 11:33:25.377 | 1801 ms |
| 11:33:27.178 | 1801 ms |
| 11:33:28.951 | 1773 ms |
| 11:33:32.153 | 3202 ms |
| 11:33:37.154 | 5001 ms |
| 11:33:42.155 | 5001 ms |
While the delay grows 200 → 400 → 800 → 1600 ms it stays shorter than the event spacing of about 1.8 seconds, so the events set the pace. Once the delay reaches 3200 ms it overtakes the events, the delay itself becomes the interval, and it tops out at 5000 ms. Twelve changes collapsed into eight SPF runs.
Looking at the same window on R2, the times at which LSAs were built line up with the SPF runs on R1.
72 Sep 16 11:33:21.497 ospf_build_rtr_lsa: area 0.0.0.0 rtrid 2.2.2.2 seq 0x80000005 vrfid 0x60000000
73 Sep 16 11:33:23.476 ospf_build_rtr_lsa: area 0.0.0.0 rtrid 2.2.2.2 seq 0x80000006 vrfid 0x60000000
74 Sep 16 11:33:25.321 ospf_build_rtr_lsa: area 0.0.0.0 rtrid 2.2.2.2 seq 0x80000007 vrfid 0x60000000
75 Sep 16 11:33:27.122 ospf_build_rtr_lsa: area 0.0.0.0 rtrid 2.2.2.2 seq 0x80000008 vrfid 0x60000000
76 Sep 16 11:33:28.894 ospf_build_rtr_lsa: area 0.0.0.0 rtrid 2.2.2.2 seq 0x80000009 vrfid 0x60000000
77 Sep 16 11:33:32.095 ospf_build_rtr_lsa: area 0.0.0.0 rtrid 2.2.2.2 seq 0x8000000a vrfid 0x60000000
78 Sep 16 11:33:37.096 ospf_build_rtr_lsa: area 0.0.0.0 rtrid 2.2.2.2 seq 0x8000000b vrfid 0x60000000
79 Sep 16 11:33:42.095 ospf_build_rtr_lsa: area 0.0.0.0 rtrid 2.2.2.2 seq 0x8000000c vrfid 0x60000000Each SPF on R1 runs 50 to 78 ms after the LSA arrives, so the interval visible here is the sender’s LSA generation delay, not the receiver’s. To watch the receiver’s SPF delay, R1 has to be made slower, which is the next STEP.
STEP 2: Setting the SPF delay to 1000 / 2000 / 16000 ms
Only R1 changes.
RP/0/RP0/CPU0:R1#show configuration commit changes last 1
Wed Sep 16 11:39:59.786 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
router ospf 1
timers throttle spf 1000 2000 16000
!
end Initial SPF schedule delay 1000 msecs
Minimum hold time between two consecutive SPFs 2000 msecs
Maximum wait time between two consecutive SPFs 16000 msecsWith that in place, the event spacing widens: ten events about 1.8 seconds apart, then three 24 seconds apart, then two 40 seconds apart.
486 Sep 16 11:40:47.626 ospf_run_spf: Begin SPF
517 Sep 16 11:40:49.626 ospf_run_spf: Begin SPF
548 Sep 16 11:40:53.627 ospf_run_spf: Begin SPF
579 Sep 16 11:41:01.628 ospf_run_spf: Begin SPF
610 Sep 16 11:41:17.629 ospf_run_spf: Begin SPF
641 Sep 16 11:41:33.630 ospf_run_spf: Begin SPF
672 Sep 16 11:41:58.225 ospf_run_spf: Begin SPF
703 Sep 16 11:42:22.926 ospf_run_spf: Begin SPF
734 Sep 16 11:43:10.426 ospf_run_spf: Begin SPF
765 Sep 16 11:43:51.227 ospf_run_spf: Begin SPFMatching those against the times R1 installed each LSA in its database:
| LSA installed on R1 | SPF on R1 | Since the previous SPF | Reading |
|---|---|---|---|
| 11:40:46.625 | 11:40:47.626 | — | start 1000 (1001 ms after the install) |
| 48.427 | 11:40:49.626 | 2000 ms | hold 2000 |
| 50.125 / 51.726 / 53.526 | 11:40:53.627 | 4001 ms | Three arrivals during the delay folded into one run |
| 56.725 | 11:41:01.628 | 8001 ms | — |
| 11:41:01.725 | 11:41:17.629 | 16001 ms | Maximum reached |
| 06.725 / 32.586 | 11:41:33.630 | 16001 ms | The second one arrived 14.96 s after the previous SPF, so it stays at the maximum |
| 11:41:57.224 | 11:41:58.225 | 24595 ms | Arrived 23.59 s after the previous SPF, so it is back to start and runs 1001 ms later |
| 11:42:21.926 | 11:42:22.926 | 24701 ms | start |
| 11:43:09.426 | 11:43:10.426 | 47500 ms | start |
| 11:43:50.226 | 11:43:51.227 | 40801 ms | start |
One table shows all three behaviours: doubling 1 → 2 → 4 → 8 → 16 seconds and stopping, holding at the maximum as long as the next arrival lands within the delay, and returning to start when nothing arrives for that long. The boundary is the 16 second maximum: an arrival 14.96 seconds after the SPF did not reset it, one 23.59 seconds after did.
STEP 3: Setting the LSA generation delay to 1000 / 2000 / 16000 ms
R1 goes back to the defaults and R2 is slowed down instead.
RP/0/RP0/CPU0:R2#show configuration commit changes last 1
Wed Sep 16 11:51:24.226 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
router ospf 1
timers throttle lsa all 1000 2000 16000
!
end Initial LSA throttle delay 1000 msecs
Minimum hold time for LSA throttle 2000 msecs
Maximum wait time for LSA throttle 16000 msecs
Minimum LSA interval 2000 msecs. Minimum LSA arrival 100 msecsMinimum LSA interval now reports 2000 ms, the same as hold. With the same event pattern, the interval between LSA builds stretches.
93 Sep 16 11:52:12.249 ospf_build_rtr_lsa: area 0.0.0.0 rtrid 2.2.2.2 seq 0x8000001a vrfid 0x60000000
94 Sep 16 11:52:14.249 ospf_build_rtr_lsa: area 0.0.0.0 rtrid 2.2.2.2 seq 0x8000001b vrfid 0x60000000
95 Sep 16 11:52:18.250 ospf_build_rtr_lsa: area 0.0.0.0 rtrid 2.2.2.2 seq 0x8000001c vrfid 0x60000000
96 Sep 16 11:52:26.250 ospf_build_rtr_lsa: area 0.0.0.0 rtrid 2.2.2.2 seq 0x8000001d vrfid 0x60000000
97 Sep 16 11:52:42.250 ospf_build_rtr_lsa: area 0.0.0.0 rtrid 2.2.2.2 seq 0x8000001e vrfid 0x60000000
98 Sep 16 11:53:01.952 ospf_build_rtr_lsa: area 0.0.0.0 rtrid 2.2.2.2 seq 0x8000001f vrfid 0x60000000
99 Sep 16 11:53:26.738 ospf_build_rtr_lsa: area 0.0.0.0 rtrid 2.2.2.2 seq 0x80000020 vrfid 0x60000000
100 Sep 16 11:54:14.345 ospf_build_rtr_lsa: area 0.0.0.0 rtrid 2.2.2.2 seq 0x80000021 vrfid 0x60000000
101 Sep 16 11:54:55.222 ospf_build_rtr_lsa: area 0.0.0.0 rtrid 2.2.2.2 seq 0x80000022 vrfid 0x60000000| Event on R2 | LSA built | After the event | Since the previous build |
|---|---|---|---|
| 11:52:11.246 | 11:52:12.249 | 1003 ms | — |
| 12.939 | 11:52:14.249 | 1310 ms | 2000 ms |
| 14.625 | 11:52:18.250 | 3625 ms | 4001 ms |
| 18.460 | 11:52:26.250 | 7790 ms | 8000 ms |
| Six events from 20.439 to 29.949 | 11:52:42.250 | 14114 ms | 16000 ms |
| 11:53:00.949 | 11:53:01.952 | 1003 ms | 19702 ms |
It stretches exactly like SPF and reaches the maximum. The second row is 1310 ms after its event but 2000 ms after the previous build, which is the delay being measured from the previous build. In the last row, no event had arrived for 18.7 seconds, so the delay was back to start and the LSA was built 1003 ms after the event. Fifteen changes collapsed into nine LSAs.
STEP 4: No LSA is built when the contents revert during the delay
R2 keeps its configuration and the cost alternates between 20 and 10. Because the change is reverted while the router waits, the contents at build time match the LSA already sent.
102 Sep 16 12:01:25.953 ospf_build_rtr_lsa: area 0.0.0.0 rtrid 2.2.2.2 seq 0x80000023 vrfid 0x60000000
103 Sep 16 12:01:28.141 ospf_build_rtr_lsa: area 0.0.0.0 rtrid 2.2.2.2 seq 0x80000024 vrfid 0x60000000
104 Sep 16 12:01:36.142 ospf_build_rtr_lsa: area 0.0.0.0 rtrid 2.2.2.2 seq 0x80000025 vrfid 0x60000000
105 Sep 16 12:01:52.142 ospf_build_rtr_lsa: area 0.0.0.0 rtrid 2.2.2.2 seq 0x80000026 vrfid 0x60000000Ten events produced only four LSAs. The builds that produced nothing are recorded in the trace as well.
137 Sep 16 12:01:32.141 ospf_build_rtr_lsa: no change in router LSA, area 0.0.0.0 rtrid 2.2.2.2 instance 0x60000000 db_nsf_active 0After 0x80000024 was built at 12:01:28.141, the build at 12:01:32.141 ended in no change in router LSA and no LSA was flooded. That is exactly what RFC 2328 Section 12.4 requires: a new LSA only when the contents change. The capture has no LS Update at that time either.
STEP 5: Setting MinLSArrival to 3000 ms
R2 returns to the defaults and the receive-side bound on R1 is widened to 3000 ms. The default is 100 ms, but the sender’s own bound (200 ms by default) prevents LSAs from ever arriving that fast, so the receive side has to be widened to watch anything actually being discarded.
RP/0/RP0/CPU0:R1#show configuration commit changes last 1
Wed Sep 16 12:08:57.065 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
router ospf 1
timers lsa min-arrival 3000
!
end Minimum LSA interval 200 msecs. Minimum LSA arrival 3000 msecsR2 built eight LSAs about 1.8 seconds apart.
106 Sep 16 12:09:43.201 ospf_build_rtr_lsa: area 0.0.0.0 rtrid 2.2.2.2 seq 0x80000027 vrfid 0x60000000
107 Sep 16 12:09:44.976 ospf_build_rtr_lsa: area 0.0.0.0 rtrid 2.2.2.2 seq 0x80000028 vrfid 0x60000000
108 Sep 16 12:09:46.711 ospf_build_rtr_lsa: area 0.0.0.0 rtrid 2.2.2.2 seq 0x80000029 vrfid 0x60000000
109 Sep 16 12:09:48.501 ospf_build_rtr_lsa: area 0.0.0.0 rtrid 2.2.2.2 seq 0x8000002a vrfid 0x60000000
110 Sep 16 12:09:50.388 ospf_build_rtr_lsa: area 0.0.0.0 rtrid 2.2.2.2 seq 0x8000002b vrfid 0x60000000
111 Sep 16 12:09:53.589 ospf_build_rtr_lsa: area 0.0.0.0 rtrid 2.2.2.2 seq 0x8000002c vrfid 0x60000000
112 Sep 16 12:09:58.589 ospf_build_rtr_lsa: area 0.0.0.0 rtrid 2.2.2.2 seq 0x8000002d vrfid 0x60000000
113 Sep 16 12:10:03.589 ospf_build_rtr_lsa: area 0.0.0.0 rtrid 2.2.2.2 seq 0x8000002e vrfid 0x60000000R1 installed only six of them.
258 Sep 16 12:09:46.725 db_install: FC: LSA_CHG: Changed Rtr LSA: ar 0.0.0.0 lsid 2.2.2.2 advrtr 2.2.2.2 seq 0x80000029
259 Sep 16 12:09:46.725 db_install: FC: SCHED_SPF: ar 0.0.0.0 type 1 lsid 2.2.2.2 advrtr 2.2.2.2
264 Sep 16 12:09:50.393 db_install: FC: LSA_CHG: Changed Rtr LSA: ar 0.0.0.0 lsid 2.2.2.2 advrtr 2.2.2.2 seq 0x8000002b
265 Sep 16 12:09:50.393 db_install: FC: SCHED_SPF: ar 0.0.0.0 type 1 lsid 2.2.2.2 advrtr 2.2.2.2
270 Sep 16 12:09:53.592 db_install: FC: LSA_CHG: Changed Rtr LSA: ar 0.0.0.0 lsid 2.2.2.2 advrtr 2.2.2.2 seq 0x8000002c
271 Sep 16 12:09:53.592 db_install: FC: SCHED_SPF: ar 0.0.0.0 type 1 lsid 2.2.2.2 advrtr 2.2.2.2
276 Sep 16 12:09:58.594 db_install: FC: LSA_CHG: Changed Rtr LSA: ar 0.0.0.0 lsid 2.2.2.2 advrtr 2.2.2.2 seq 0x8000002d
277 Sep 16 12:09:58.594 db_install: FC: SCHED_SPF: ar 0.0.0.0 type 1 lsid 2.2.2.2 advrtr 2.2.2.2
282 Sep 16 12:10:03.593 db_install: FC: LSA_CHG: Changed Rtr LSA: ar 0.0.0.0 lsid 2.2.2.2 advrtr 2.2.2.2 seq 0x8000002e
283 Sep 16 12:10:03.593 db_install: FC: SCHED_SPF: ar 0.0.0.0 type 1 lsid 2.2.2.2 advrtr 2.2.2.2| LSA built by R2 | Arrived at R1 | What R1 did | Since the previous install |
|---|---|---|---|
| 0x80000027 | 21:09:43.223 | Installed, SPF, acknowledged | — |
| 0x28 | 45.023 | Discarded | 1.80 s |
| 0x29 | 46.722 | Installed, SPF, acknowledged | 3.499 s |
| 0x2a | 48.522 | Discarded | 1.80 s |
| 0x2b | 50.390 | Installed, SPF, acknowledged | 3.668 s |
| 0x2c | 53.590 | Installed, SPF, acknowledged | 3.199 s |
| 0x2d | 58.591 | Installed, SPF, acknowledged | 5.002 s |
| 0x2e | 21:10:03.591 | Installed, SPF, acknowledged | 4.999 s |
0x28 and 0x2a arrived within 3 seconds of the previous install: not added to the database, no SPF, and no acknowledgement. In the capture there are eight LS Updates but only six LS Acknowledges.
13 56.147212 10.0.12.2 → 224.0.0.5 OSPF 146 LS Update
16 57.946875 10.0.12.2 → 224.0.0.5 OSPF 146 LS Update
17 58.152029 10.0.12.1 → 224.0.0.5 OSPF 78 LS Acknowledge
18 59.646385 10.0.12.2 → 224.0.0.5 OSPF 146 LS Update
19 61.446002 10.0.12.2 → 224.0.0.5 OSPF 146 LS Update
20 61.651004 10.0.12.1 → 224.0.0.5 OSPF 78 LS Acknowledge
21 63.314147 10.0.12.2 → 224.0.0.5 OSPF 146 LS Update
22 65.319472 10.0.12.1 → 224.0.0.5 OSPF 78 LS Acknowledge
25 66.514402 10.0.12.2 → 224.0.0.5 OSPF 146 LS Update
26 68.518464 10.0.12.1 → 224.0.0.5 OSPF 78 LS Acknowledge
27 71.515036 10.0.12.2 → 224.0.0.5 OSPF 146 LS Update
28 73.520027 10.0.12.1 → 224.0.0.5 OSPF 78 LS Acknowledge
31 76.514801 10.0.12.2 → 224.0.0.5 OSPF 146 LS Update
32 78.518679 10.0.12.1 → 224.0.0.5 OSPF 78 LS AcknowledgeEach acknowledgement comes about 2005 ms after the install (delayed acknowledgement).
STEP 6: A discarded LSA is retransmitted
No retransmission appeared in STEP 5. With a new instance built every 1.8 seconds, a discarded instance is superseded before the 5 second retransmission timer expires. So R1 keeps its configuration and only two events are generated, followed by silence.
2 4.086032 10.0.12.2 → 224.0.0.5 OSPF 146 LS Update
4 5.984502 10.0.12.2 → 224.0.0.5 OSPF 146 LS Update
5 6.090964 10.0.12.1 → 224.0.0.5 OSPF 78 LS Acknowledge
7 10.856835 10.0.12.2 → 10.0.12.1 OSPF 146 LS Update
8 12.861767 10.0.12.1 → 224.0.0.5 OSPF 78 LS AcknowledgeNo.2 and No.4 are the two LSAs R2 built. No.4 arrived 1.9 seconds later and was discarded, so no acknowledgement follows it. No.7 is the retransmission, sent to R1 as a unicast (10.0.12.1) rather than to the multicast address 224.0.0.5. It is 4.872 seconds after the original, matching the 5 second RxmtInterval.
Download the pcap of the packet in the capture above (No.7, retransmitted LS Update)Here is the same event from R1. After installing 0x80000031 at 12:21:37.227, it installed 0x80000032 only when the retransmission arrived at 12:21:43.998, 6.771 seconds after the first install.
308 Sep 16 12:21:37.227 db_install: FC: LSA_CHG: Changed Rtr LSA: ar 0.0.0.0 lsid 2.2.2.2 advrtr 2.2.2.2 seq 0x80000031
309 Sep 16 12:21:37.227 db_install: FC: SCHED_SPF: ar 0.0.0.0 type 1 lsid 2.2.2.2 advrtr 2.2.2.2
314 Sep 16 12:21:43.998 db_install: FC: LSA_CHG: Changed Rtr LSA: ar 0.0.0.0 lsid 2.2.2.2 advrtr 2.2.2.2 seq 0x80000032
315 Sep 16 12:21:43.998 db_install: FC: SCHED_SPF: ar 0.0.0.0 type 1 lsid 2.2.2.2 advrtr 2.2.2.2A single capture holds the whole sequence: discard without acknowledging, and the sender resending.
STEP 7: Delaying both SPF and LSA generation
Production networks set both. The SPF delay on R1 and the LSA generation delay on R2 were configured at the same time, followed by 30 events about 1.8 seconds apart.
RP/0/RP0/CPU0:R1#show configuration commit changes last 1
Wed Sep 16 12:27:23.959 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
router ospf 1
timers throttle spf 1000 2000 16000
no timers lsa min-arrival 3000
!
end118 Sep 16 12:28:17.923 ospf_build_rtr_lsa: area 0.0.0.0 rtrid 2.2.2.2 seq 0x80000033 vrfid 0x60000000
119 Sep 16 12:28:19.923 ospf_build_rtr_lsa: area 0.0.0.0 rtrid 2.2.2.2 seq 0x80000034 vrfid 0x60000000
120 Sep 16 12:28:23.923 ospf_build_rtr_lsa: area 0.0.0.0 rtrid 2.2.2.2 seq 0x80000035 vrfid 0x60000000
121 Sep 16 12:28:31.923 ospf_build_rtr_lsa: area 0.0.0.0 rtrid 2.2.2.2 seq 0x80000036 vrfid 0x60000000
122 Sep 16 12:28:47.924 ospf_build_rtr_lsa: area 0.0.0.0 rtrid 2.2.2.2 seq 0x80000037 vrfid 0x60000000
123 Sep 16 12:29:03.924 ospf_build_rtr_lsa: area 0.0.0.0 rtrid 2.2.2.2 seq 0x80000038 vrfid 0x60000000
124 Sep 16 12:29:19.925 ospf_build_rtr_lsa: area 0.0.0.0 rtrid 2.2.2.2 seq 0x80000039 vrfid 0x600000001511 Sep 16 12:28:18.927 ospf_run_spf: Begin SPF
1542 Sep 16 12:28:20.930 ospf_run_spf: Begin SPF
1573 Sep 16 12:28:24.930 ospf_run_spf: Begin SPF
1604 Sep 16 12:28:32.931 ospf_run_spf: Begin SPF
1637 Sep 16 12:28:48.932 ospf_run_spf: Begin SPF
1668 Sep 16 12:29:04.934 ospf_run_spf: Begin SPF
1699 Sep 16 12:29:20.934 ospf_run_spf: Begin SPF| LSA built on R2 | Since the previous build | SPF on R1 | Install to SPF |
|---|---|---|---|
| 12:28:17.923 | — | 12:28:18.927 | 1000 ms |
| 19.923 | 2000 ms | 20.930 | 1000 ms |
| 23.923 | 4000 ms | 24.930 | 1002 ms |
| 31.923 | 8000 ms | 32.931 | 1003 ms |
| 47.924 | 16001 ms | 48.932 | 1004 ms |
| 12:29:03.924 | 16000 ms | 12:29:04.934 | 1006 ms |
| 19.925 | 16001 ms | 20.934 | 1006 ms |
From the first event (12:28:16.856) to the SPF run on R1 (12:28:18.927) is 2071 ms: start 1000 ms on R2, a few milliseconds of propagation, and start 1000 ms on R1. The delays add up. Once at the maximum, the pattern settles into R2 building an LSA every 16 seconds and R1 recalculating about a second later. Thirty changes collapsed into seven LSAs and seven SPF runs.
STEP 8: Reverting everything (final state)
The timers are removed from R1 and R2.
RP/0/RP0/CPU0:R1#show configuration commit changes last 1
Wed Sep 16 12:36:14.495 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
router ospf 1
no timers throttle spf 1000 2000 16000
!
end Initial SPF schedule delay 50 msecs
Minimum hold time between two consecutive SPFs 200 msecs
Maximum wait time between two consecutive SPFs 5000 msecs
Initial LSA throttle delay 50 msecs
Minimum hold time for LSA throttle 200 msecs
Maximum wait time for LSA throttle 5000 msecs
Minimum LSA interval 200 msecs. Minimum LSA arrival 100 msecsAll three routers end with router ospf 1 identical to STEP 0, and reachability from R1 to R3 was 100 percent in every STEP.
Verification configs and show output
Each STEP was captured from all three routers as separate files per router. The verification config is the ..._run.txt (the final state is the one from the last STEP).
| File | Contents |
|---|---|
..._show.txt |
show version, show interface description, show route, show route ospf, the show ospf set (interface, neighbor, neighbor detail, database, database router, database network, database router self-originate, database database-summary, statistics spf, statistics spf detail, statistics prot), show route 3.3.3.3/32 and show configuration commit list |
..._log.txt |
show logging narrowed to that STEP. A logmsg marker is placed at the start of each STEP and its timestamp passed to show logging start. R2 commit times (%MGBL-CONFIG-6-DB_COMMIT) are here too |
..._run.txt |
show running-config at that STEP (the verification config for that STEP) |
..._trace.txt |
show ospf trace spf, adj_cycle, events and errors, plus show ospf trace all filtered on rtr, db_install and arriv |
..._ping.txt |
From R1: ping 3.3.3.3 and traceroute 3.3.3.3 (source 1.1.1.1, 50 packets). None for R2 and R3 |
..._trigger.txt |
The SSH session on R2 that generated the events. Only in STEPs that generated events (STEP 2 and 3 have b and c for the wider spacings) |
..._commit.cfg |
What was committed in that STEP (show configuration commit changes last 1). Absent for STEPs and routers that changed nothing |
STEP 0: Defaults, nothing changed
| Router | show output | syslog | running-config | trace | ping | commit | events |
|---|---|---|---|---|---|---|---|
| R1 | show | log | run | trace | ping | — | — |
| R2 | show | log | run | trace | — | — | — |
| R3 | show | log | run | trace | — | — | — |
STEP 1: Twelve events about 1.8 seconds apart with the defaults
| Router | show output | syslog | running-config | trace | ping | commit | events |
|---|---|---|---|---|---|---|---|
| R1 | show | log | run | trace | ping | — | — |
| R2 | show | log | run | trace | — | — | trigger |
| R3 | show | log | run | trace | — | — | — |
STEP 2: timers throttle spf 1000 2000 16000 on R1
| Router | show output | syslog | running-config | trace | ping | commit | events |
|---|---|---|---|---|---|---|---|
| R1 | show | log | run | trace | ping | commit | — |
| R2 | show | log | run | trace | — | — | trigger / triggerb / triggerc |
| R3 | show | log | run | trace | — | — | — |
STEP 3: Revert R1, timers throttle lsa all 1000 2000 16000 on R2
| Router | show output | syslog | running-config | trace | ping | commit | events |
|---|---|---|---|---|---|---|---|
| R1 | show | log | run | trace | ping | commit | — |
| R2 | show | log | run | trace | — | commit | trigger / triggerb / triggerc |
| R3 | show | log | run | trace | — | — | — |
STEP 4: Keep R2 as is; alternate the cost between 20 and 10
| Router | show output | syslog | running-config | trace | ping | commit | events |
|---|---|---|---|---|---|---|---|
| R1 | show | log | run | trace | ping | — | — |
| R2 | show | log | run | trace | — | — | trigger |
| R3 | show | log | run | trace | — | — | — |
STEP 5: Revert R2, timers lsa min-arrival 3000 on R1
| Router | show output | syslog | running-config | trace | ping | commit | events |
|---|---|---|---|---|---|---|---|
| R1 | show | log | run | trace | ping | commit | — |
| R2 | show | log | run | trace | — | commit | trigger |
| R3 | show | log | run | trace | — | — | — |
STEP 6: Keep R1 as is; only two events, then silence
| Router | show output | syslog | running-config | trace | ping | commit | events |
|---|---|---|---|---|---|---|---|
| R1 | show | log | run | trace | ping | — | — |
| R2 | show | log | run | trace | — | — | trigger |
| R3 | show | log | run | trace | — | — | — |
STEP 7: SPF on R1 and LSA generation on R2 delayed at the same time, 30 events
| Router | show output | syslog | running-config | trace | ping | commit | events |
|---|---|---|---|---|---|---|---|
| R1 | show | log | run | trace | ping | commit | — |
| R2 | show | log | run | trace | — | commit | trigger |
| R3 | show | log | run | trace | — | — | — |
STEP 8: Revert everything (final state)
| Router | show output | syslog | running-config | trace | ping | commit | events |
|---|---|---|---|---|---|---|---|
| R1 | show | log | run | trace | ping | commit | — |
| R2 | show | log | run | trace | — | commit | — |
| R3 | show | log | run | trace | — | — | — |
Packet captures were taken per STEP between R1 and R2.
| STEP | R1-R2 |
|---|---|
| 0 | pcap |
| 1 | pcap |
| 2 | pcap |
| 3 | pcap |
| 4 | pcap |
| 5 | pcap |
| 6 | pcap |
| 7 | pcap |
| 8 | pcap |
References
| Standard / document | Title | Summary |
|---|---|---|
| RFC 2328 | OSPF Version 2 | Section 12.4 sets the minimum interval between rebuilding the same LSA (MinLSInterval, 5 s) and requires a new LSA only when the contents change. Section 13 step (5)(a) sets the receive-side minimum (MinLSArrival, 1 s) and requires discarding without acknowledging. Appendix G.2 limits that check to LSAs received via flooding. No SPF timer is defined. |
| RFC 8405 | Shortest Path First (SPF) Back-Off Delay Algorithm for Link-State IGPs | Section 3 defines the five parameters, Section 5 the QUIET / SHORT_WAIT / LONG_WAIT state machine and Section 6 the recommended defaults. IOS XR has no option to select it for OSPF. |
| Cisco IP Routing: OSPF Configuration Guide, IOS XE Gibraltar 16.10.x | OSPF Shortest Path First Throttling | Explains that the SPF wait interval doubles when an event is received during the previous wait, and that at the maximum it stays there until the topology stabilizes (written for IOS XE). |
| Cisco: Change of Default OSPF and IS-IS SPF and Flooding Timers | Document ID 211432 | Explains that the IOS defaults for OSPF SPF throttling, LSA throttling and LSA arrival were changed to 50 / 200 / 5000 ms and 100 ms to match the IOS XR defaults. |
Related articles
- What Is OSPF
- OSPF Router ID
- OSPF Packet Types and Header Format
- OSPF Authentication
- OSPF Neighbor States
- OSPF Options Field
- OSPF DR and BDR
- OSPF Network Types
- OSPF Cost (Metric)
- OSPF External Routes (Redistributing Static Routes)
- OSPF Multiple Areas and the ABR
- OSPF Virtual Links
- OSPF Stub and Totally Stubby Areas
- OSPF NSSA and Totally NSSA
- OSPF Default Route
- OSPF Route Summarization
- OSPF LSAs and the LSA Header
- OSPF Convergence Timers (SPF / LSA Throttling)
- OSPF router-LSA (type 1)
- OSPF network-LSA (type 2)
- OSPF summary-LSA (type 3)
- OSPF ASBR summary-LSA (type 4)
- OSPF AS external-LSA (type 5)
- OSPF NSSA External-LSA (Type 7)