The IS-IS Overload Bit
An IS-IS router can declare that its own database is not to be trusted. Setting a single bit in the LSP header is enough for every other router to stop using it as a transit. It stays alive as a destination, though: networks attached to it remain reachable.
This article works through what the bit was created for and how it changes route computation, checking each against ISO/IEC 10589:2002 and against IOS XR.
It began as a way to report an accident
Clause 7.3.19 of ISO/IEC 10589:2002 (second edition) introduces the bit as a memory problem:
As a result of network mis-configuration, or certain transitory conditions, it is possible that there may be insufficient memory resources available to store a received Link State PDU. When this occurs, an IS needs to take certain steps to ensure that if its LSP database becomes inconsistent with the other ISs’, that these ISs do not rely on forwarding paths through the overloaded IS.
Clause 7.3.19.1 then defines what happens:
When an LSP cannot be stored, the LSP shall be ignored and Waiting State shall be entered. […] the Intermediate System shall generate and flood its own LSP with zero LSP number with the LSP Database Overload Bit set. This prevents this Intermediate system from being considered as a forwarding path by other Intermediate Systems.
A router with an incomplete database that still takes part in route computation produces a different answer from everyone else, and that builds loops. This bit lets the broken router say “do not route through me”.
Where the bit sits
Clause 9.8 divides one byte of the LSP header into four fields.
| Bits | Name | Meaning |
|---|---|---|
| 8 | P | Whether partition repair is supported |
| 7-4 | ATT | Whether attached to other areas (one bit per metric type) |
| 3 | LSPDBOL | Whether the LSP database is overloaded |
| 2-1 | IS Type | Level 1, or Level 1 and 2 |
LSPDBOL – Bit 3 – A value of 0 indicates no LSP Database Overload, and a value of 1 indicates that the LSP […]
Because the byte belongs to the LSP header, the bit exists per level. A router running both levels originates two kinds of LSP, each with its own overload bit, so transit can be refused at one level while it continues at the other — which is what the level argument in IOS XR selects.
IOS XR prints this byte as the three-digit ATT/P/OL column of show isis database, and the third digit is this bit. The ATT bit itself is covered in The IS-IS ATT Bit and the Level 1 Default Route.
What setting it does
Clause 7.2.8.1 governs the computation, and the treatment is deliberately asymmetric.
The Decision Process shall not utilise a link to an Intermediate system neighbour from an IS whose LSPs have the LSP Database Overload indication set. Such paths may introduce loops since the overloaded IS does not have a complete routeing information base. The Decision Process shall, however utilise the link to reach End system neighbours since these paths are guaranteed to be non-looping.
| Kind of link | Treatment | In IP terms |
|---|---|---|
| To an IS (router) neighbour | Not used | Paths through that router disappear |
| To an End system neighbour | Used | Destinations hanging off that router stay reachable |
So the router is no longer somewhere to pass through, but it is still somewhere to arrive at. Its loopbacks and connected networks remain reachable from everywhere else.
Links to End system neighbours are safe because the path ends there. A packet that reaches the overloaded router and is handed to a directly attached destination is never forwarded onwards on the strength of a database that may be wrong. Loops are made of packets going round, and a dead end cannot produce one.
The overloaded router’s own computation does not change. The bit acts on how other routers compute; the router that set it still works out every path as usual.
From reporting an accident to a tool of operations
Setting the bit deliberately is now the more common use.
Taking a router out for maintenance. Set the bit on a router you are about to work on, and the traffic that was passing through it moves away first. Unlike shutting down links, management traffic to that router keeps working.
Avoiding a blackhole right after a reboot. This is the problem RFC 3277 (IS-IS Transient Blackhole Avoidance) addresses. A rebooted router brings its IS-IS adjacencies straight back up while its BGP routes are not there yet. If IS-IS picks it as the shortest path, the packets that arrive are discarded.
If RtrB were to temporarily set its LSP Overload bit while synchronizing BGP tables with its neighbors, RtrA would continue to use the working RtrA->RtrC->RtrD path.
The same RFC leaves the clearing condition to implementations:
Triggers for setting the Overload bit as described are left to the implementer. Some potential triggers could perhaps include “N seconds after booting”, or “N number of BGP prefixes in the BGP Loc-RIB”.
IOS XR offers both through set-overload-bit on-startup: a number of seconds, or wait-for-bgp.
What stays and what goes
Setting the bit does not drop adjacencies. Hellos keep flowing and LSPs keep being exchanged; the only thing that changes is how other routers compute. That is why, unlike shutting links down, the router itself stays reachable and manageable.
On the other hand, destinations with no alternative path do disappear. Clause 7.2.8.1 only says the link shall not be used; it does not conjure up a replacement. Anything reachable solely through the overloaded router drops out of the routing table, so before setting the bit for maintenance, check that the traffic crossing that router has somewhere else to go.
IOS XR offers arguments that narrow what goes away.
| Argument | Meaning |
|---|---|
advertise external |
Keep advertising IP prefixes learned from other protocols while the bit is set |
advertise interlevel |
Keep advertising IP prefixes learned from another IS-IS level while the bit is set |
level <1-2> |
Apply the bit to one level only |
These matter when redistributed routes, or routes carried across levels, must not disappear along with everything else. The test below uses plain set-overload-bit with no arguments.
Verification on real devices
The test setup
Four routers in a single area, 49.0001, all level-2-only, wired into a square. Keeping levels out of it leaves only the bit itself to look at.
| Router | Lo0 | Links |
|---|---|---|
| R1 | 1.1.1.1/32 | Gi0/0/0/0 10.1.2.1 (to R2, metric 10), Gi0/0/0/1 10.1.3.1 (to R3, metric 20) |
| R2 | 2.2.2.2/32 | Gi0/0/0/0 10.1.2.2, Gi0/0/0/1 10.2.4.2 (to R4, metric 10) |
| R3 | 3.3.3.3/32 | Gi0/0/0/0 10.1.3.3, Gi0/0/0/1 10.3.4.3 (to R4, metric 10) |
| R4 | 4.4.4.4/32 | Gi0/0/0/0 10.2.4.4, Gi0/0/0/1 10.3.4.4 |
From R4 there are two ways to 1.1.1.1/32: 20 through R2 and 30 through R3. With the bit set on R2, what matters is what happens to that path and to the path to R2’s own 2.2.2.2/32.
The STEPs
| STEP | Operation | What it confirms |
|---|---|---|
| 0 | Defaults | 1.1.1.1/32 on R4 is 20 through R2; every router shows 0/0/0 |
| 1 | set-overload-bit on R2 |
R2 turns to 0/0/1, 1.1.1.1/32 moves to 30 through R3, and 2.2.2.2/32 stays through R2 |
| 2 | Remove it from R2 | Back to STEP 0 |
| 3 | Add set-overload-bit on-startup 300 and process restart isis |
R2 comes back up as 0/0/1 |
| 4 | Wait for the timer, changing nothing | Back to 0/0/0 with the configuration still in place |
| 5 | Revert everything (final state) | Matches STEP 0 |
STEP 3 restarts the IS-IS process, so the adjacencies drop once. That is deliberate; no other STEP touches them.
STEP 0: every bit is zero
The database as R4 sees it:
RP/0/RP0/CPU0:R4#show isis database
Sat Sep 12 08:21:19.605 UTC
IS-IS 1 (Level-2) Link State Database
LSPID LSP Seq Num LSP Checksum LSP Holdtime/Rcvd ATT/P/OL
R1.00-00 0x00000007 0x2361 860 /1200 0/0/0
R2.00-00 0x00000008 0x3238 1066 /1200 0/0/0
R3.00-00 0x00000007 0xbc6d 1101 /1200 0/0/0
R4.00-00 * 0x00000006 0xaf62 973 /* 0/0/0
Total Level-2 LSP count: 4 Local Level-2 LSP count: 1All four rows read 0/0/0 in the ATT/P/OL column, whose third digit is the overload bit.
STEP 1: set the bit on R2
One line on R2 — this is what was actually committed:
RP/0/RP0/CPU0:R2#show configuration commit changes last 1
Sat Sep 12 08:21:37.379 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
router isis 1
set-overload-bit
!
endRP/0/RP0/CPU0:R4#show isis database
Sat Sep 12 08:23:55.774 UTC
IS-IS 1 (Level-2) Link State Database
LSPID LSP Seq Num LSP Checksum LSP Holdtime/Rcvd ATT/P/OL
R1.00-00 0x00000007 0x2361 704 /1200 0/0/0
R2.00-00 0x00000009 0x3431 1062 /1200 0/0/1
R3.00-00 0x00000007 0xbc6d 945 /1200 0/0/0
R4.00-00 * 0x00000006 0xaf62 817 /* 0/0/0
Total Level-2 LSP count: 4 Local Level-2 LSP count: 1Only R2’s row has become 0/0/1. R2 rebuilt its LSP — the sequence number is now 0x00000009 — and flooding carried it to everyone.
Now the routes. First a destination through R2:
RP/0/RP0/CPU0:R4#show route 1.1.1.1
Sat Sep 12 08:23:54.996 UTC
Routing entry for 1.1.1.1/32
Known via "isis 1", distance 115, metric 30, type level-2
Installed Sep 12 08:21:38.922 for 00:02:16
Routing Descriptor Blocks
10.3.4.3, from 1.1.1.1, via GigabitEthernet0/0/0/1
Route metric is 30
No advertising protos. Metric 30, next hop 10.3.4.3, which is R3. It was 20 through R2 at STEP 0, so the path moved to the longer one because paths through R2 left the computation.
Then R2’s own address:
RP/0/RP0/CPU0:R4#show route 2.2.2.2
Sat Sep 12 08:23:55.134 UTC
Routing entry for 2.2.2.2/32
Known via "isis 1", distance 115, metric 10, type level-2
Installed Sep 12 08:05:49.223 for 00:18:05
Routing Descriptor Blocks
10.2.4.2, from 2.2.2.2, via GigabitEthernet0/0/0/0
Route metric is 10
No advertising protos. This one is still metric 10 with 10.2.4.2 — R2 — as the next hop, exactly as 7.2.8.1 requires when it says the links to End system neighbours are still used. R2 remains a destination. That is why management traffic to a router taken out this way keeps working.
It is worth looking at what the LSP still carries.
R2.00-00 0x00000009 0x3431 1062 /1200 0/0/1
Area Address: 49.0001
LSP MTU: 1492
NLPID: 0xcc
IP Address: 2.2.2.2
Hostname: R2
Metric: 10 IS-Extended R1.00
Metric: 10 IS-Extended R4.00
Metric: 0 IP-Extended 2.2.2.2/32
Metric: 10 IP-Extended 10.1.2.0/24
Metric: 10 IP-Extended 10.2.4.0/24Nothing has been removed — not a link, not a prefix. R2 goes on saying “I have a link to R1” and “I have a link to R4”. The only difference is the 0/0/1 on the first line, and the routers reading it are the ones deciding not to use those links. The bit does not trim the advertisement; it changes how the advertisement is read.
The same thing in a packet
No.32 of the R1 - R2 capture is the LSP R2 sent right after the bit was set. tshark expands the byte as the standard defines it.
ISO 10589 ISIS Link State Protocol Data Unit
PDU length: 113
Remaining lifetime: 1200
LSP-ID: 0020.0200.2002.00-00
Sequence number: 0x00000009
Checksum: 0x3431 [correct]
[Checksum Status: Good]
Type block(0x07): Partition Repair:0, Attached bits:0, Overload bit:1, IS type:3
0... .... = Partition Repair: Not supported
.000 0... = Attachment: 0
.0.. .... = Error metric: Not set
..0. .... = Expense metric: Not set
...0 .... = Delay metric: Not set
0... .... = Default metric: Not set
.... .1.. = Overload bit: Set
.... ..11 = Type of Intermediate System: Level 2 (3)The breakdown of Type block(0x07) is the layout from clause 9.8: 0... .... is P, .000 0... is ATT (four bits, one per metric type), .... .1.. is the overload bit, and .... ..11 is the IS Type. The three digits 0/0/1 in show isis database are that one byte, rounded into three.
What the receiving router did
R4’s SPF log:
RP/0/RP0/CPU0:R4#show isis spf-log
Sat Sep 12 08:23:56.835 UTC
IS-IS 1 Level 2 IPv4 Unicast Route Calculation Log
Capacity: 210, Size: 8
Time Total Trig.
Timestamp Type (ms) Nodes Count First Trigger LSP Triggers
------------ ----- ----- ----- ----- -------------------- ----------------------
--- Sat Sep 12 2026 ---
08:05:29.972 FSPF 0 0 2 CONFIG
08:05:40.778 FSPF 0 1 7 R4.00-00 CONFIG NEWNODE NEWLSP OVLSET PREFIXGOOD AREAADDR IPADDR
08:05:42.935 FSPF 0 1 1 R4.00-00 OVLCLR
08:05:44.421 PRC 0 1 1 R4.00-00 PREFIXGOOD
08:05:46.021 FSPF 0 4 19 R1.00-00 NEWNODE NEWLSP LINKGOOD PREFIXGOOD AREAADDR IPADDR
08:05:49.223 FSPF 3 4 2 R2.00-00 LINKGOOD
08:20:49.277 FSPF 0 4 1 PERIODIC
08:21:38.921 FSPF 2 4 1 R2.00-00 OVLSETThe trigger on the last line, OVLSET, is the bit going up in R2’s LSP. R4 reran SPF because of it — four nodes, two milliseconds — and swapped the path over. A change of this bit drives a recomputation exactly as a link appearing or disappearing would.
The lines from startup show OVLSET and OVLCLR as well: R4’s own bit went up at 08:05:40 and came down two seconds later at 08:05:42. This implementation briefly sets the bit on itself while it is coming up.
STEP 2: removing it puts everything back
no set-overload-bit took it away again.
RP/0/RP0/CPU0:R4#show isis database
Sat Sep 12 08:26:38.997 UTC
IS-IS 1 (Level-2) Link State Database
LSPID LSP Seq Num LSP Checksum LSP Holdtime/Rcvd ATT/P/OL
R1.00-00 0x00000007 0x2361 541 /1200 0/0/0
R2.00-00 0x0000000a 0x2e3a 1057 /1200 0/0/0
R3.00-00 0x00000007 0xbc6d 782 /1200 0/0/0
R4.00-00 * 0x00000006 0xaf62 654 /* 0/0/0
Total Level-2 LSP count: 4 Local Level-2 LSP count: 1R2’s row is back to 0/0/0 with the sequence number up at 0x0000000a, and 1.1.1.1/32 on R4 is once more 20 through R2. Raising and lowering the bit is available at any time and costs exactly one LSP regeneration.
STEP 3: set it only right after startup
set-overload-bit on-startup 300 went in, and then the IS-IS process was restarted.
RP/0/RP0/CPU0:R2#show configuration commit changes last 1
Sat Sep 12 08:26:57.353 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
router isis 1
set-overload-bit on-startup 300
!
endThe restart itself:
RP/0/RP0/CPU0:Sep 12 08:27:01.011 UTC: sysmgr_control[66082]: %OS-SYSMGR-4-PROC_RESTART_NAME : User cisco (vty0) requested a restart of process isis at 0/RP0/CPU0
RP/0/RP0/CPU0:Sep 12 08:27:01.856 UTC: ssh_syslog_proxy[1188]: %SECURITY-SSHD_SYSLOG_PRX-6-INFO_GENERAL : sshd[8692]: Received disconnect from 10.100.3.1 port 54833:11: disconnected by user
RP/0/RP0/CPU0:Sep 12 08:27:01.856 UTC: ssh_syslog_proxy[1188]: %SECURITY-SSHD_SYSLOG_PRX-6-INFO_GENERAL : sshd[8692]: Disconnected from user cisco 10.100.3.1 port 54833
RP/0/RP0/CPU0:Sep 12 08:27:02.348 UTC: isis[1003]: %ROUTING-ISIS-5-PM_HA_ROLE_CHG : ISIS (1): ISIS HA role change: Active
RP/0/RP0/CPU0:Sep 12 08:27:02.348 UTC: isis[1003]: %ROUTING-ISIS-5-PM_ISSU_ROLE_CHG : ISIS (1): ISIS ISSU role change: Primary
RP/0/RP0/CPU0:Sep 12 08:27:02.990 UTC: isis[1003]: %ROUTING-ISIS-6-INFO_STARTUP_START : ISIS (1): Cold controlled start beginning
RP/0/RP0/CPU0:Sep 12 08:27:04.356 UTC: isis[1003]: %ROUTING-ISIS-5-ADJCHANGE : ISIS (1): Adjacency to 49.0001.0040.0400.4004 (GigabitEthernet0/0/0/1) (L2) Up, New adjacency
RP/0/RP0/CPU0:Sep 12 08:27:04.361 UTC: isis[1003]: %ROUTING-ISIS-5-ADJCHANGE : ISIS (1): Adjacency to 49.0001.0010.0100.1001 (GigabitEthernet0/0/0/0) (L2) Up, New adjacency
RP/0/RP0/CPU0:Sep 12 08:27:13.095 UTC: isis[1003]: %ROUTING-ISIS-6-INFO_STARTUP_FINISH : ISIS (1): Cold controlled start completed The process came back and the adjacencies returned about a second later. The database at that moment:
RP/0/RP0/CPU0:R4#show isis database
Sat Sep 12 08:29:11.749 UTC
IS-IS 1 (Level-2) Link State Database
LSPID LSP Seq Num LSP Checksum LSP Holdtime/Rcvd ATT/P/OL
R1.00-00 0x00000009 0x1f63 1076 /1200 0/0/0
R2.00-00 0x0000000b 0x3033 1073 /1200 0/0/1
R3.00-00 0x00000007 0xbc6d 629 /1200 0/0/0
R4.00-00 * 0x00000008 0xab64 1076 /* 0/0/0
Total Level-2 LSP count: 4 Local Level-2 LSP count: 1R2 came back as 0/0/1. For the 300 seconds in the configuration it keeps saying “do not route through me”, and 1.1.1.1/32 on R4 stays at 30 through R3 throughout.
STEP 4: the timer drops it
Nothing was changed; the 300 seconds simply passed.
RP/0/RP0/CPU0:R4#show isis database
Sat Sep 12 08:34:00.884 UTC
IS-IS 1 (Level-2) Link State Database
LSPID LSP Seq Num LSP Checksum LSP Holdtime/Rcvd ATT/P/OL
R1.00-00 0x00000009 0x1f63 786 /1200 0/0/0
R2.00-00 0x0000000c 0x2a3c 1084 /1200 0/0/0
R3.00-00 0x00000008 0xba6e 1081 /1200 0/0/0
R4.00-00 * 0x00000008 0xab64 786 /* 0/0/0
Total Level-2 LSP count: 4 Local Level-2 LSP count: 10/0/1 has become 0/0/0 while set-overload-bit on-startup 300 is still configured. R2 cleared the bit by itself and rebuilt its LSP, as the rising sequence number shows.
The capture caught that moment too.
ISO 10589 ISIS Link State Protocol Data Unit
PDU length: 113
Remaining lifetime: 1200
LSP-ID: 0020.0200.2002.00-00
Sequence number: 0x0000000c
Checksum: 0x2a3c [correct]
[Checksum Status: Good]
Type block(0x03): Partition Repair:0, Attached bits:0, Overload bit:0, IS type:3
0... .... = Partition Repair: Not supported
.000 0... = Attachment: 0
.0.. .... = Error metric: Not set
..0. .... = Expense metric: Not set
...0 .... = Delay metric: Not set
0... .... = Default metric: Not set
.... .0.. = Overload bit: Not set
.... ..11 = Type of Intermediate System: Level 2 (3)Same LSP from R2, with Type block down from 0x07 to 0x03 and .... .0.. = Overload bit: Not set. 1.1.1.1/32 on R4 goes back to 20 through R2.
STEP 5: revert
no set-overload-bit on-startup 300 removed the configuration. The running-config of all four routers matches STEP 0.
Verification configs and show output
The whole test was captured on the R1 - R2 link. The LSPs quoted above are No.32 and No.201 in that file.
Download the capture of the whole test (R1 - R2, about 18 minutes)Each STEP was captured from all four routers as three files per router. The verification config is the ..._run.txt (the final state is the one from the last STEP). STEPs that changed the configuration also carry a ..._commit.cfg holding only what that STEP committed.
| File | Contents |
|---|---|
..._show.txt |
show version, show interface description, show route, the show isis set (interface brief, neighbors, database detail, topology, route, adjacency-log, spf-log, lsp-log, statistics), and show route 1.1.1.1 / show route 2.2.2.2 |
..._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 |
..._run.txt |
show running-config at that STEP (the verification config for that STEP) |
..._commit.cfg |
What that STEP committed (show configuration commit changes last 1). Absent from STEPs that changed nothing |
STEP 0: Initial state (no overload)
| Router | show | syslog | running-config | commit |
|---|---|---|---|---|
| R1 | show | log | run | - |
| R2 | show | log | run | - |
| R3 | show | log | run | - |
| R4 | show | log | run | - |
STEP 1: set-overload-bit on R2
| Router | show | syslog | running-config | commit |
|---|---|---|---|---|
| R1 | show | log | run | - |
| R2 | show | log | run | commit |
| R3 | show | log | run | - |
| R4 | show | log | run | - |
STEP 2: Remove it from R2
| Router | show | syslog | running-config | commit |
|---|---|---|---|---|
| R1 | show | log | run | - |
| R2 | show | log | run | commit |
| R3 | show | log | run | - |
| R4 | show | log | run | - |
STEP 3: set-overload-bit on-startup 300 and process restart isis
| Router | show | syslog | running-config | commit |
|---|---|---|---|---|
| R1 | show | log | run | - |
| R2 | show | log | run | commit |
| R3 | show | log | run | - |
| R4 | show | log | run | - |
STEP 4: Wait for the timer (no configuration change)
| Router | show | syslog | running-config | commit |
|---|---|---|---|---|
| R1 | show | log | run | - |
| R2 | show | log | run | - |
| R3 | show | log | run | - |
| R4 | show | log | run | - |
STEP 5: Revert everything (final state)
| Router | show | syslog | running-config | commit |
|---|---|---|---|---|
| R1 | show | log | run | - |
| R2 | show | log | run | commit |
| R3 | show | log | run | - |
| R4 | show | log | run | - |
References
| Standard | Title | Summary |
|---|---|---|
| ISO/IEC 10589:2002 (second edition) | Intermediate System to Intermediate System intra-domain routeing information exchange protocol | The IS-IS specification itself. This article draws on 7.2.8.1 for computing routes through an overloaded IS, 7.3.19 / 7.3.19.1 for the memory exhaustion and Waiting State the bit came from, and 9.8 for the layout of the LSP header byte. |
| RFC 3277 | Intermediate System to Intermediate System (IS-IS) Transient Blackhole Avoidance | The problem of a just-rebooted router being chosen as the IS-IS shortest path before it holds any BGP routes, and the use of a temporary overload bit to avoid it (Informational, April 2002). |
| RFC 1195 | Use of OSI IS-IS for Routing in TCP/IP and Dual Environments | The extension that carries IP routes over IS-IS. |
| Cisco ASR 9000 Routing Command Reference | IS-IS Commands | The IOS XR set-overload-bit command, which takes advertise, level and on-startup. |
Related articles
- What Is IS-IS
- IS-IS NSAP Addresses and the NET (System ID)
- IS-IS Level 1 and Level 2 (the hierarchy)
- IS-IS Packet Types and Header Format
- IS-IS Adjacency Formation and States
- IS-IS DIS and the Pseudonode
- IS-IS Network Types (broadcast / point-to-point)
- IS-IS Metrics (narrow and wide)
- IS-IS Authentication (hello-password and lsp-password)
- IS-IS LSPs and the Link-State Database
- The Main IS-IS TLVs
- IS-IS Flooding and LSDB Synchronisation
- IS-IS SPF Computation and Route Selection
- The IS-IS ATT Bit and the Level 1 Default Route
- IS-IS Route Leaking and the Up/Down Bit
- IS-IS Route Summarization
- The IS-IS Overload Bit