OSPF LSA throttling is a feature that delays the generation of LSAs during network instability. Before LSA throttling, LSA generation was rate-limited to 5 seconds because of the default LSA-wait timer interval. This meant that an LSA could not be propagated in milliseconds and thus OSPF sub-second convergence was impossible.
This feature is very similar to OSPF SPF throttling. The mechanism behind it is exactly the same. It uses three values:
- lsa-start: the initial wait interval for LSA generation. It is 0 milliseconds which means that the first LSA will be generated immediately.
- lsa-hold: the minimum hold time interval between two LSA generations. The default value is 5000 milliseconds and it doubles every time the same LSA has to be re-generated.
- lsa-max: the maximum wait time interval between two LSA generations. The default value is 5000 milliseconds. It is also used to limit the maximum value of the lsa-hold value.
The first LSA that is generated uses the lsa-start timer, so it is generated immediately. If the same LSA has to be re-generated, it will use the lsa-hold value instead. When the LSA has to be generated the third time, the lsa-hold value will double. Each time the LSA is re-generated, the lsa-hold value will double until it reaches the lsa-max value.
An LSA is considered the same if the following three values are the same:
- LSA ID number
- LSA type
- advertising router ID
Let’s look at an example where I use the following values:
- lsa-start: 5000 milliseconds
- lsa-hold: 10000 milliseconds
- lsa-max: 60000 milliseconds
It starts with an event where an LSA should be generated, as indicated by the red arrow. Instead of generating and flooding it right away, we delay the LSA generation with the lsa-start value which is 5000 milliseconds (5 seconds):
During this time, another event happens and the LSA should be generated again. Once 5000 milliseconds have expired, we finally generate and flood the LSA, as indicated by the purple arrow:
The router now sets the wait interval to the lsa-hold value which is 10000 milliseconds (10 seconds). During this time, another LSA should be generated which is postponed until the timer expires. When 10 seconds have elapsed, the LSA is finally generated and flooded:
The router now doubles the value of the lsa-hold so now it’s 2x 10000 = 20000 milliseconds (20 seconds). During this time, the network is stable and no LSAs have to be generated:
When another event occurs and an LSA should be generated, the router will now use the lsa-start value again:
During this time, another interface flaps which means another LSA has to be generated. Once the lsa-start wait interval has expired, the LSA is generated and flooded:
The lsa-hold value doubles again, so now the LSA generation and flooding is delayed for 40 seconds. During this time, the network is stable:
When the same LSA doesn’t have to be generated again, we have to wait for the lsa-max value (60000 milliseconds) to expire:
Once the lsa-max wait interval has expired, the lsa-hold value is reset to its default value of 10000 milliseconds. If the same LSA has to be generated again, it will be dealt with like the beginning of this example.
Let’s see this in action. Here is the topology I will use:
We only need two routers. R2 has a loopback interface that I will use to simulate a flapping interface.
Want to take a look for yourself? Here you will find the startup configuration of each device.
hostname R1 ! ip cef ! interface GigabitEthernet0/1 ip address 192.168.12.1 255.255.255.0 ! router ospf 1 network 192.168.12.0 0.0.0.255 area 0 ! end
hostname R2 ! ip cef ! interface Loopback0 ip address 18.104.22.168 255.255.255.255 ! interface GigabitEthernet0/1 ip address 192.168.12.2 255.255.255.0 ! router ospf 1 network 22.214.171.124 0.0.0.0 area 0 network 192.168.12.0 0.0.0.255 area 0 ! end
To change the LSA throttling timers, we have to use the timers throttle lsa command. First, you need to configure the start-lsa value: